Esempio n. 1
0
def test_accept_mixin():
    request = wrappers.Request(
        {
            "HTTP_ACCEPT": "text/xml,application/xml,application/xhtml+xml,"
            "text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5",
            "HTTP_ACCEPT_CHARSET": "ISO-8859-1,utf-8;q=0.7,*;q=0.7",
            "HTTP_ACCEPT_ENCODING": "gzip,deflate",
            "HTTP_ACCEPT_LANGUAGE": "en-us,en;q=0.5",
        }
    )
    assert request.accept_mimetypes == MIMEAccept(
        [
            ("text/xml", 1),
            ("image/png", 1),
            ("application/xml", 1),
            ("application/xhtml+xml", 1),
            ("text/html", 0.9),
            ("text/plain", 0.8),
            ("*/*", 0.5),
        ]
    )
    strict_eq(
        request.accept_charsets,
        CharsetAccept([("ISO-8859-1", 1), ("utf-8", 0.7), ("*", 0.7)]),
    )
    strict_eq(request.accept_encodings, Accept([("gzip", 1), ("deflate", 1)]))
    strict_eq(request.accept_languages, LanguageAccept([("en-us", 1), ("en", 0.5)]))

    request = wrappers.Request({"HTTP_ACCEPT": ""})
    strict_eq(request.accept_mimetypes, MIMEAccept())
Esempio n. 2
0
def test_accept_mixin():
    request = wrappers.Request({
        'HTTP_ACCEPT':
        'text/xml,application/xml,application/xhtml+xml,'
        'text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5',
        'HTTP_ACCEPT_CHARSET':
        'ISO-8859-1,utf-8;q=0.7,*;q=0.7',
        'HTTP_ACCEPT_ENCODING':
        'gzip,deflate',
        'HTTP_ACCEPT_LANGUAGE':
        'en-us,en;q=0.5'
    })
    assert request.accept_mimetypes == MIMEAccept([('text/xml', 1),
                                                   ('image/png', 1),
                                                   ('application/xml', 1),
                                                   ('application/xhtml+xml',
                                                    1), ('text/html', 0.9),
                                                   ('text/plain', 0.8),
                                                   ('*/*', 0.5)])
    strict_eq(request.accept_charsets,
              CharsetAccept([('ISO-8859-1', 1), ('utf-8', 0.7), ('*', 0.7)]))
    strict_eq(request.accept_encodings, Accept([('gzip', 1), ('deflate', 1)]))
    strict_eq(request.accept_languages,
              LanguageAccept([('en-us', 1), ('en', 0.5)]))

    request = wrappers.Request({'HTTP_ACCEPT': ''})
    strict_eq(request.accept_mimetypes, MIMEAccept())
Esempio n. 3
0
def test_accept():
    request = wrappers.Request(
        {
            "HTTP_ACCEPT": "text/xml,application/xml,application/xhtml+xml,"
            "text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5",
            "HTTP_ACCEPT_CHARSET": "ISO-8859-1,utf-8;q=0.7,*;q=0.7",
            "HTTP_ACCEPT_ENCODING": "gzip,deflate",
            "HTTP_ACCEPT_LANGUAGE": "en-us,en;q=0.5",
            "SERVER_NAME": "eggs",
            "SERVER_PORT": "80",
        }
    )
    assert request.accept_mimetypes == MIMEAccept(
        [
            ("text/xml", 1),
            ("application/xml", 1),
            ("application/xhtml+xml", 1),
            ("image/png", 1),
            ("text/html", 0.9),
            ("text/plain", 0.8),
            ("*/*", 0.5),
        ]
    )
    assert request.accept_charsets == CharsetAccept(
        [("ISO-8859-1", 1), ("utf-8", 0.7), ("*", 0.7)]
    )
    assert request.accept_encodings == Accept([("gzip", 1), ("deflate", 1)])
    assert request.accept_languages == LanguageAccept([("en-us", 1), ("en", 0.5)])

    request = wrappers.Request(
        {"HTTP_ACCEPT": "", "SERVER_NAME": "example.org", "SERVER_PORT": "80"}
    )
    assert request.accept_mimetypes == MIMEAccept()
Esempio n. 4
0
def inject_lang_from_header():
    """Inject the language defined in the 'lang' into the accepted languages of the request if present."""
    if 'lang' in request.headers:
        # inject language from custom header as first choice into request
        lang: str = request.headers.get('lang')
        values = (lang, 10), *request.accept_languages
        request.accept_languages = LanguageAccept(values)
        # Force refresh to make sure that the change is applied
        flask_babel_refresh()
Esempio n. 5
0
def default_route(lang):
    if lang:
        # inject language from url as first choice into request
        values = (lang, 10), *request.accept_languages
        request.accept_languages = LanguageAccept(values)
        flask_babel_refresh()
    email_regex = APP.config.get('EMAIL_ADDRESS_FILTER', '.*')
    support_email = APP.config.get('SUPPORT_EMAIL', "")
    url_email_verification = url_for("api-v1.EmailVerification")
    url_account_creation = url_for("api-v1.AccountCreation")
    lang_used = "en"
    locale = get_locale()
    if locale is not None:
        lang_used = locale.language
    return render_template('index.html', email_regex=email_regex, lang = lang_used, support_email=support_email,
        url_api_endpoint_email_verification=url_email_verification, url_api_endpoint_account_creation=url_account_creation)
Esempio n. 6
0
def inject_lang_from_header():
    """Inject the language defined in the custom 'lang' Hader into the g context.

    This method can be used in a before request callback to read the custom
    header and use that to set the language for example for API requests.
    """
    lang: Optional[str] = request.headers.get("lang")
    if lang:
        old_accepts: LanguageAccept = request.accept_languages
        if "lang" in g:
            # check LanguageAccept option in g context
            accepted_languages = g.get("lang")
            if accepted_languages and isinstance(accepted_languages,
                                                 LanguageAccept):
                old_accepts = accepted_languages
        # inject language from custom header as first choice into request
        values = (lang, 10), *old_accepts
        g.lang = LanguageAccept(values)
        # Force refresh to make sure that the change is applied
        flask_babel_refresh()
Esempio n. 7
0
def best_match(requested_langs: LanguageAccept,
               supported_langs: list) -> Optional[str]:
    result = requested_langs.best_match(supported_langs)

    if result is None:
        # Try again with just the language codes (no country/region codes).
        requested = []

        for code, weight in requested_langs:
            code = code.split("-")[0]
            requested.append((code, weight))

        supported_shorted = [code.split("-")[0] for code in supported_langs]
        result = LanguageAccept(requested).best_match(supported_shorted)

        # If match, convert back to the full language code.
        if result:
            idx = supported_shorted.index(result)
            result = supported_langs[idx]

    return result
 def test_best_match_fallback(self, values, matches, default, expect):
     accept = LanguageAccept(values)
     best = accept.best_match(matches, default=default)
     assert best == expect
Esempio n. 9
0
def test_set_best_lang_no_session_lang():
    request.accept_languages = LanguageAccept([('en-PI', 1), ('fr_FR', 0.7)])
    assert babel.locale_selector_func() == 'fr_FR'

    request.accept_languages = LanguageAccept([('fr-FR', 1)])
    assert babel.locale_selector_func() == 'fr_FR'