Edgewall Software

Ticket #9439: 9439-log-activate-r10144.patch

File 9439-log-activate-r10144.patch, 6.8 KB (added by rblank, 20 months ago)

Log activation errors.

  • trac/admin/console.py

    diff --git a/trac/admin/console.py b/trac/admin/console.py
    a b Type: '?' or 'help' for help on command 
    169169        # fixup language according to env settings 
    170170        if has_babel: 
    171171            default = env.config.get('trac', 'default_language', '') 
    172             negotiated = get_negotiated_locale([LANG, default]) 
     172            negotiated = get_negotiated_locale([LANG, default], env.log) 
    173173            if negotiated: 
    174                 translation.activate(negotiated) 
     174                translation.activate(negotiated, env.path, env.log) 
    175175         
    176176    ## 
    177177    ## Utility methods 
  • trac/prefs/web_ui.py

    diff --git a/trac/prefs/web_ui.py b/trac/prefs/web_ui.py
    a b class PreferencesModule(Component): 
    106106        } 
    107107 
    108108        if Locale: 
    109             locales = map(Locale.parse, get_available_locales()) 
     109            locales = map(Locale.parse, get_available_locales(self.log)) 
    110110            languages = sorted([(str(locale).replace('_','-'), 
    111111                                 locale.display_name) for locale in locales]) 
    112112            data['locales'] = locales 
  • trac/util/translation.py

    diff --git a/trac/util/translation.py b/trac/util/translation.py
    a b try: 
    135135            finally: 
    136136                self._plugin_domains_lock.release() 
    137137 
    138         def make_activable(self, get_locale, env_path=None): 
    139             self._current.args = (get_locale, env_path) 
     138        def make_activable(self, get_locale, env_path=None, log=None): 
     139            self._current.args = (get_locale, env_path, log) 
    140140 
    141         def activate(self, locale, env_path=None): 
     141        def activate(self, locale, env_path=None, log=None): 
    142142            try: 
    143143                locale_dir = pkg_resources.resource_filename('trac', 'locale') 
    144144            except pkg_resources.ExtractionError: 
    145145                return # delay extraction 
    146             except KeyError: 
    147                 return # No locale data in egg 
     146            except Exception, e: 
     147                if log is not None: 
     148                    from trac.util.text import exception_to_unicode 
     149                    log.error("Unable to find locales: %s", 
     150                              exception_to_unicode(e)) 
     151                return 
    148152            t = Translations.load(locale_dir, locale or 'en_US') 
    149153            if not t or t.__class__ is NullTranslations: 
    150154                t = self._null_translations 
    try: 
    174178        @property 
    175179        def isactive(self): 
    176180            if self._current.args is not None: 
    177                 get_locale, env_path = self._current.args 
     181                get_locale, env_path, log = self._current.args 
    178182                self._current.args = None 
    179                 self.activate(get_locale(), env_path) 
     183                self.activate(get_locale(), env_path, log) 
    180184            return self._current.translations is not None 
    181185 
    182186        # Delegated methods 
    try: 
    309313        """ 
    310314        return translations.reactivate(t) 
    311315 
    312     def make_activable(get_locale, env_path=None): 
     316    def make_activable(get_locale, env_path=None, log=None): 
    313317        """Defer activation of translations. 
    314318        :param get_locale: a callable returning a Babel Locale object 
    315319        :param env_path: the environment to use for looking up catalogs 
    316320        """ 
    317         translations.make_activable(get_locale, env_path) 
     321        translations.make_activable(get_locale, env_path, log) 
    318322 
    319     def activate(locale, env_path=None): 
    320         translations.activate(locale, env_path) 
     323    def activate(locale, env_path=None, log=None): 
     324        translations.activate(locale, env_path, log) 
    321325 
    322326    def add_domain(domain, env_path, locale_dir): 
    323327        translations.add_domain(domain, env_path, locale_dir) 
    try: 
    325329    def get_translations(): 
    326330        return translations 
    327331 
    328     def get_available_locales(): 
     332    def get_available_locales(log=None): 
    329333        """Return a list of locale identifiers of the locales for which 
    330334        translations are available. 
    331335        """ 
    332         return [dirname for dirname 
    333                 in pkg_resources.resource_listdir('trac', 'locale') 
    334                 if '.' not in dirname] 
     336        try: 
     337            return [dirname for dirname 
     338                    in pkg_resources.resource_listdir('trac', 'locale') 
     339                    if '.' not in dirname] 
     340        except Exception, e: 
     341            if log is not None: 
     342                from trac.util.text import exception_to_unicode 
     343                log.error("Unable to find locales: %s", 
     344                          exception_to_unicode(e)) 
     345            return [] 
    335346 
    336     def get_negotiated_locale(preferred_locales): 
     347    def get_negotiated_locale(preferred_locales, log=None): 
    337348        def normalize(locale_ids): 
    338349            return [id.replace('_', '-') for id in locale_ids if id] 
    339350        return Locale.negotiate(normalize(preferred_locales), 
    340                                 normalize(get_available_locales()), sep='-') 
     351                                normalize(get_available_locales(log)), sep='-') 
    341352         
    342353    has_babel = True 
    343354 
    except ImportError: # fall back on 0.11  
    353364 
    354365    translations = NullTranslationsBabel() 
    355366     
    356     def activate(locale, env_path=None): 
     367    def activate(locale, env_path=None, log=None): 
    357368        pass 
    358369 
    359370    def deactivate(): 
    except ImportError: # fall back on 0.11  
    362373    def reactivate(t): 
    363374        pass 
    364375 
    365     def make_activable(get_locale, env_path=None): 
     376    def make_activable(get_locale, env_path=None, log=None): 
    366377        pass 
    367378 
    368379    def get_translations(): 
    369380        return translations 
    370381 
    371     def get_available_locales(): 
     382    def get_available_locales(log=None): 
    372383        return [] 
    373384 
    374     def get_negotiated_locale(preferred=None, default=None): 
     385    def get_negotiated_locale(preferred=None, log=None): 
    375386        return None 
  • trac/web/main.py

    diff --git a/trac/web/main.py b/trac/web/main.py
    a b class RequestDispatcher(Component): 
    308308            preferred = req.session.get('language') 
    309309            default = self.env.config.get('trac', 'default_language', '') 
    310310            negotiated = get_negotiated_locale([preferred, default] + 
    311                                                req.languages) 
     311                                               req.languages, self.log) 
    312312            self.log.debug("Negotiated locale: %s -> %s", preferred, negotiated) 
    313313            return negotiated 
    314314 
    def dispatch_request(environ, start_resp 
    474474        env_error = e 
    475475 
    476476    req = Request(environ, start_response) 
    477     translation.make_activable(lambda: req.locale, env and env.path or None) 
     477    translation.make_activable(lambda: req.locale, env and env.path or None, 
     478                               env and env.log or None) 
    478479    try: 
    479480        return _dispatch_request(req, env, env_error) 
    480481    finally: