Beispiel #1
0
    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)
Beispiel #2
0
    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
Beispiel #3
0
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)
Beispiel #4
0
    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
Beispiel #5
0
    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)
Beispiel #6
0
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)]
Beispiel #7
0
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)]
Beispiel #8
0
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)]
Beispiel #9
0
 def accept_language(self):
     from webob.acceptparse import AcceptLanguage
     #def best_match(self):
     #    return 'bar'
     return AcceptLanguage('foo')