def __call__(self, environ, start_response): """Called by WSGI when a request comes in. Args: environ: A dict holding environment variables. start_response: A WSGI callable (PEP333). Returns: Application response data as an iterable. It just returns the return value of the inner WSGI app. """ accept_language = AcceptLanguage( environ.get("HTTP_ACCEPT_LANGUAGE", self.default_language)) preferred_languages = accept_language.best_matches() if not self.default_language in preferred_languages: preferred_languages.append(self.default_language) translation = gettext.translation('messages', self.locale_path, fallback=True, languages=preferred_languages, codeset='utf-8') translation.install(unicode=True, names=['gettext', 'ngettext']) environ['i18n_utils.active_translation'] = translation environ['i18n_utils.preferred_languages'] = preferred_languages return self.app(environ, start_response)
def jinja2_env(self): """Cached property for a Jinja2 environment. Returns: Jinja2 Environment object. """ jinja2_env = jinja2.Environment( loader=jinja2.FileSystemLoader( os.path.join(os.path.dirname(__file__), '../static/templates')), extensions=['jinja2.ext.i18n']) accept_language = AcceptLanguage( self.request.environ.get("HTTP_ACCEPT_LANGUAGE", 'en')) preferred_languages = [] try: preferred_languages = accept_language.best_matches() except AttributeError: pass if not 'en' in preferred_languages: preferred_languages.append('en') locale_path = os.path.join( os.path.abspath(os.path.dirname(__file__)), '../locale') translation = gettext.translation( 'messages', locale_path, fallback=True, languages=preferred_languages, codeset='utf-8') translation.install(unicode=True, names=['gettext', 'ngettext']) jinja2_env.install_gettext_translations(translation) jinja2_env.globals['get_i18n_js_tag'] = self.get_i18n_js_tag return jinja2_env
def test_accept_match_lang(): for mask, lang in [ ('*', 'da'), ('da', 'DA'), ('en', 'en-gb'), ('en-gb', 'en-gb'), ('en-gb', 'en'), ('en-gb', 'en_GB'), ]: assert lang in AcceptLanguage(mask) for mask, lang in [ ('en-gb', 'en-us'), ('en-gb', 'fr-fr'), ('en-gb', 'fr'), ('en', 'fr-fr'), ]: assert lang not in AcceptLanguage(mask)
def canHandle(self, environ): accept = MIMEAccept(environ.get('HTTP_ACCEPT', 'application/json')) accept_charset = AcceptCharset( environ.get('HTTP_ACCEPT_CHARSET', 'utf-8')) accept_language = AcceptLanguage( environ.get('HTTP_ACCEPT_LANGUAGE', 'de-DE')) # Write a real rule here. # This one doesn't handle OPTIONS or GET return 'application/json' in accept
def __call__(self, environ, start_response): """Called by WSGI when a request comes in. Args: environ: A dict holding environment variables. start_response: A WSGI callable (PEP333). Returns: Application response data as an iterable. It just returns the return value of the inner WSGI app. """ accept_language = AcceptLanguage( environ.get("HTTP_ACCEPT_LANGUAGE", self.default_language)) preferred_languages = accept_language.best_matches() if not self.default_language in preferred_languages: preferred_languages.append(self.default_language) translation = gettext.translation( 'messages', self.locale_path, fallback=True, languages=preferred_languages, codeset='utf-8') translation.install(unicode=True, names=['gettext', 'ngettext']) environ['i18n_utils.active_translation'] = translation environ['i18n_utils.preferred_languages'] = preferred_languages return self.app(environ, start_response)
def test_init_accept_invalid_q_value(): accept = AcceptLanguage('da, en-gb;q=foo') # I can't get to cover line 40-41 (webob.acceptparse) as the regex # will prevent from hitting these lines (aconrad) assert accept._parsed == [('da', 1), ('en-gb', 1)]
def test_init_accept_invalid_value(): accept = AcceptLanguage('da, q, en-gb;q=0.8') # The "q" value should not be there. assert accept._parsed == [('da', 1), ('en-gb', 0.80000000000000004)]
def test_init_accept_accept_language(): accept = AcceptLanguage('da, en-gb;q=0.8, en;q=0.7') assert accept._parsed == [('da', 1), ('en-gb', 0.80000000000000004), ('en', 0.69999999999999996)]
def accept_language(self): from webob.acceptparse import AcceptLanguage #def best_match(self): # return 'bar' return AcceptLanguage('foo')