Exemple #1
0
def login_status():
    refresh()
    if current_user.is_anonymous:
        resp = {
            'logged_in': False,
            'user': None,
            'user_info': None,
            'language': get_locale().language
        }
    else:
        resp = {
            'logged_in':
            True,
            'user': {
                'id':
                current_user.id,
                'email':
                current_user.email,
                'roles': [{
                    'id': x.name,
                    'label': x.description
                } for x in current_user.roles]
            },
            'user_info':
            session.get('user_info', None).to_dict() if session.get(
                'user_info', None) else None,
            'language':
            get_locale().language
        }

    return jsonify(resp)
Exemple #2
0
def state():
    """
    State view.

    :return: json with serialized information about the current user
    """
    refresh()
    if current_user.is_anonymous:
        resp = {
            'loggedIn': False,
            'user': None,
            'userInfo': None,
            'language': get_locale().language
        }
    else:
        ui = session.get('user_info', None)
        if ui and not isinstance(ui, dict):
            ui = ui.to_dict()
        resp = {
            'loggedIn': True,
            'user': {
                'id':
                current_user.id,
                'email':
                current_user.email,
                'roles': [{
                    'id': x.name,
                    'label': x.description
                } for x in current_user.roles]
            },
            'userInfo': humps.camelize(ui) if ui else {},
            'language': get_locale().language
        }
    prepare_state_view_data.send(current_user, state=resp)
    return jsonify(resp)
Exemple #3
0
def test_set_locale(app):
    """Test get translations for language with existing/missing *.mo files."""
    Babel(app)
    with app.test_request_context():
        with set_locale("en"):
            assert str(get_locale()) == "en"
        with set_locale("da"):
            assert str(get_locale()) == "da"
def test_locale_selector(app):
    """Test locale selector."""
    app.config['I18N_LANGUAGES'] = [('da', 'Danish')]
    InvenioI18N(app)

    with app.test_request_context(headers=[('Accept-Language', 'da')]):
        assert str(get_locale()) == 'da'
        assert format_number(10.1) == '10,1'
        assert gettext('Translate') == u'Oversætte'
    with app.test_request_context(headers=[('Accept-Language', 'en')]):
        assert str(get_locale()) == 'en'
        assert format_number(10.1) == '10.1'
        assert gettext('Translate') == 'Translate'
def test_locale_selector(app):
    """Test locale selector."""
    app.config["I18N_LANGUAGES"] = [("da", "Danish")]
    InvenioI18N(app)

    with app.test_request_context(headers=[("Accept-Language", "da")]):
        assert str(get_locale()) == "da"
        assert format_number(10.1) == "10,1"
        assert gettext("Translate") == u"Oversætte"
    with app.test_request_context(headers=[("Accept-Language", "en")]):
        assert str(get_locale()) == "en"
        assert format_number(10.1) == "10.1"
        assert gettext("Translate") == "Translate"
def test_locale_selector(app):
    """Test locale selector."""
    app.config['I18N_LANGUAGES'] = ['da']
    InvenioI18N(app)

    with app.test_request_context(headers=[('Accept-Language', 'da')]):
        assert str(get_locale()) == 'da'
        assert format_number(10.1) == '10,1'
        assert gettext('Translate') == u'Oversætte'
    with app.test_request_context(headers=[('Accept-Language', 'en')]):
        assert str(get_locale()) == 'en'
        assert format_number(10.1) == '10.1'
        assert gettext('Translate') == 'Translate'
def test_set_locale(app):
    """Test get translations for language with existing/missing *.mo files."""
    # Wokring outside request context
    try:
        with set_locale('en'):
            assert False
    except RuntimeError:
        pass

    with app.test_request_context():
        with set_locale('en'):
            assert get_locale() == 'en'
        with set_locale('da'):
            assert get_locale() == 'da'
Exemple #8
0
def test_set_locale(app):
    """Test get translations for language with existing/missing *.mo files."""
    # Wokring outside request context
    try:
        with set_locale('en'):
            assert False
    except RuntimeError:
        pass

    with app.test_request_context():
        with set_locale('en'):
            assert get_locale() == 'en'
        with set_locale('da'):
            assert get_locale() == 'da'
def guide():
    """TUGraz_Repository_Guide."""
    locale = get_locale()
    return redirect(
        url_for('static',
                filename=f'documents/TUGraz_Repository_Guide_01_{locale}.pdf',
                _external=True))
Exemple #10
0
    def get_translations(self):
        """Returns the correct gettext translations that should be used for
        this request.  This will never fail and return a dummy translation
        object if used outside of the request or if a translation cannot be
        found.
        """
        locale = get_locale()
        cache = self.get_translations_cache()

        translations = cache.get(str(locale))
        if translations is None:
            # load flaskbb translations
            translations = babel.support.Translations.load(
                dirname=self.flaskbb_translations,
                locales=locale,
                domain="messages")

            # If no compiled translations are found, return the
            # NullTranslations object.
            if not isinstance(translations, babel.support.Translations):
                return translations

            # now load and add the plugin translations
            for plugin in self.plugin_translations:
                plugin_translation = babel.support.Translations.load(
                    dirname=plugin, locales=locale, domain="messages")
                translations.add(plugin_translation)

            cache[str(locale)] = translations

        return translations
def test_locale_selector(app):
    """Test locale selector."""
    app.config.update(
        I18N_LANGUAGES=[("da", "Danish")],
        I18N_TRANSLATIONS_PATHS=[join(dirname(__file__), "translations")],
    )
    i18n = InvenioI18N(app)

    with app.test_request_context(headers=[("Accept-Language", "da")]):
        assert str(get_locale()) == "da"
        assert format_number(10.1) == "10,1"
        assert gettext("Translate") == "Oversætte"
    with app.test_request_context(headers=[("Accept-Language", "en")]):
        assert str(get_locale()) == "en"
        assert format_number(10.1) == "10.1"
        assert gettext("Translate") == "From test catalog"
Exemple #12
0
    def build(self, results, criteria):
        tree = Tree()
        for value, count in results:
            if value or self.missing_label:
                value, label = self.decode(value, default_value=value, default_label=value)
                remove_url = criteria.build_remove_filter_url(self, value)
                add_url = None if remove_url else criteria.build_add_filter_url(self, value)
                if remove_url or add_url:  # Only items with an URL get displayed.
                    if value:
                        path = value.split(sep=self.path_separator)
                    else:
                        path = [value]

                    # Build the tree path. Part of the path may or may not already
                    # exist as the facet values are not ordered.
                    node = tree  # Start at tree root.
                    for component in path:
                        node = node['children'][component]
                    # Add data at the leaf.
                    node['node'] = {
                        'label': label,
                        'count': count,
                        'count_formatted': format_number(count, locale=get_locale()),
                        'remove_url': remove_url,
                        'add_url': add_url,
                    }
        return self.sort_tree(tree)
def test_locale_selector(app):
    """Test locale selector."""
    app.config.update(
        I18N_LANGUAGES=[('da', 'Danish')],
        I18N_TRANSLATIONS_PATHS=[join(dirname(__file__), 'translations')],
    )
    i18n = InvenioI18N(app)

    with app.test_request_context(headers=[('Accept-Language', 'da')]):
        assert str(get_locale()) == 'da'
        assert format_number(10.1) == '10,1'
        assert gettext('Translate') == u'Oversætte'
    with app.test_request_context(headers=[('Accept-Language', 'en')]):
        assert str(get_locale()) == 'en'
        assert format_number(10.1) == '10.1'
        assert gettext('Translate') == 'From test catalog'
Exemple #14
0
        def get_translations(self):
            ''' Override to merge wtforms translations with flask-admin
            '''
            ctx = _request_ctx_stack.top
            if ctx is None:
                return NullTranslations()

            locale = get_locale()

            cache = self.get_translations_cache(ctx)

            translations = cache.get(str(locale))
            if translations is None:
                dirname = self.get_translations_path(ctx)
                translations = support.Translations.load(dirname,
                                                         locale,
                                                         domain=self.domain)

                # start of overridden section - merging wtforms translations
                wtf_translations = support.Translations.load(messages_path(),
                                                             locale,
                                                             domain='wtforms')
                translations.merge(wtf_translations)

                cache[str(locale)] = translations

            return translations
Exemple #15
0
def filter_language_name(lang_code):
    """Convert language code into display name in current locale.

    Installed on application as ``language_name``.
    """
    return current_app.extensions['babel'].load_locale(
        lang_code).get_display_name(get_locale().language)
def test_locale_selector(app):
    """Test locale selector."""
    app.config.update(
        I18N_LANGUAGES=[('da', 'Danish')],
        I18N_TRANSLATIONS_PATHS=[join(dirname(__file__), 'translations')],
    )
    i18n = InvenioI18N(app)

    with app.test_request_context(headers=[('Accept-Language', 'da')]):
        assert str(get_locale()) == 'da'
        assert format_number(10.1) == '10,1'
        assert gettext('Translate') == u'Oversætte'
    with app.test_request_context(headers=[('Accept-Language', 'en')]):
        assert str(get_locale()) == 'en'
        assert format_number(10.1) == '10.1'
        assert gettext('Translate') == 'From test catalog'
 def __getattribute__(self, item):
     """Get translated value automatically."""
     try:
         language = str(get_locale())
         return self.get_translation(item, language)
     except AttributeError:
         return super().__getattribute__(item)
Exemple #18
0
def entry():
    ''' Home page needing autentication.

        1. a guest user (from login page or home button) or anonymous user (home)
        2. authenticated user

        When not autenticated, should show a login page first!
    '''
    if current_user.has_role("guest"):
#        print("Authenticated guest user at entry") 
        logger.info(f'-> routes.entry/guest')
        logout_user()

    if current_user.is_authenticated:
        # Home page for logged in user
        logger.info(f'-> routes.entry/user')
        return redirect(url_for('start_logged'))

    logger.info(f'-> routes.entry/-')
    lang = get_locale().language
    demo_site = f"{app.config['DEMO_URL']}"
    logger.debug(f'-> routes.entry auth={current_user.is_authenticated} demo={demo_site}')

    # If not logged in, a login page is shown here first
    return render_template('/index_entry.html', demo_site=demo_site, lang=lang)
Exemple #19
0
 def build(self, results, criteria, active_only=False):
     items = []
     for value, count in results:
         if value or self.missing_label:
             value, label = self.decode(value,
                                        default_value=value,
                                        default_label=value)
             remove_url = criteria.build_remove_filter_url(self, value)
             if remove_url or active_only:
                 add_url = None
             else:
                 add_url = criteria.build_add_filter_url(self, value)
             if remove_url or add_url:  # Only items with an URL get displayed.
                 items.append({
                     'label':
                     label,
                     'count':
                     count,
                     'count_formatted':
                     format_number(count, locale=get_locale()),
                     'remove_url':
                     remove_url,
                     'add_url':
                     add_url,
                 })
     return self.sort_items(items)
Exemple #20
0
def item_view(item_id):
    """View a full bibliographic record."""
    start_time = time.process_time()

    if current_app.config['KERKO_USE_TRANSLATIONS']:
        babel_domain.as_default()

    item, fellback = run_query_unique_with_fallback(['id', 'alternateId'], item_id)
    if not item:
        return abort(404)
    item_url = url_for('.item_view', item_id=item['id'], _external=True)
    if fellback:
        return redirect(item_url, 301)

    build_creators_display(item)
    build_item_facet_results(item)
    build_relations(
        item,
        get_search_return_fields(page_len=None, exclude=['coins']),
        sort=current_app.config['KERKO_RELATIONS_SORT']
    )
    return render_template(
        current_app.config['KERKO_TEMPLATE_ITEM'],
        item=item,
        title=item.get('data', {}).get('title', ''),
        item_url=item_url,
        time=time.process_time() - start_time,
        locale=get_locale(),
    )
Exemple #21
0
def filter_language_name(lang_code):
    """Convert language code into display name in current locale.

    Installed on application as ``language_name``.
    """
    return current_app.extensions['babel'].load_locale(
        lang_code).get_display_name(get_locale().language)
Exemple #22
0
    def get_translations(self):
        """Returns the correct gettext translations that should be used for
        this request.  This will never fail and return a dummy translation
        object if used outside of the request or if a translation cannot be
        found.
        """
        locale = get_locale()
        cache = self.get_translations_cache()

        translations = cache.get(str(locale))
        if translations is None:
            # load flaskbb translations
            translations = babel.support.Translations.load(
                dirname=self.flaskbb_translations,
                locales=locale,
                domain="messages"
            )

            # If no compiled translations are found, return the
            # NullTranslations object.
            if not isinstance(translations, babel.support.Translations):
                return translations

            # now load and add the plugin translations
            for plugin in self.plugin_translations:
                plugin_translation = babel.support.Translations.load(
                    dirname=plugin,
                    locales=locale,
                    domain="messages"
                )
                translations.add(plugin_translation)

            cache[str(locale)] = translations

        return translations
 def __setattr__(self, key, value):
     """Save translated value automatically."""
     if key in self.translatable_columns:
         try:
             language = str(get_locale())
             self.set_translation(key, language, value)
         except AttributeError:
             return super().__setattr__(key, value)
Exemple #24
0
def help_search():
    """Search help guide."""
    # Default to rendering english page if locale page not found.
    locale = get_locale()
    return render_template([
        f"invenio_app_rdm/help/search.{locale}.html",
        "invenio_app_rdm/help/search.en.html",
    ])
Exemple #25
0
def guide():
    """TUGraz_Repository_Guide."""
    locale = get_locale()
    return redirect(
        url_for(
            "static",
            filename=f"documents/TUGraz_Repository_Guide_02_{locale}.pdf",
            _external=True,
        ))
def terms():
    """Terms_And_Conditions."""
    locale = get_locale()
    return redirect(
        url_for(
            'static',
            filename=
            f'documents/TUGraz_Repository_Terms_And_Conditions_{locale}.pdf',
            _external=True))
Exemple #27
0
def get_set_lang():
    refresh()
    current_locale = get_locale()
    resp = jsonify({
        'language': current_locale.language,
        'variant': current_locale.variant,
    })
    resp.set_cookie('language', current_locale.language)
    return resp
Exemple #28
0
 def render_error(error):
     # If a HTTPException, pull the `code` attribute; default to 500.
     error_code = getattr(error, 'code', 500)
     babel_domain.as_default()
     context = {
         'locale': get_locale(),
     }
     return render_template(f'kerkoapp/{error_code}.html.jinja2',
                            **context), error_code
def gdpr():
    """General_Data_Protection_Rights."""
    locale = get_locale()
    return redirect(
        url_for(
            'static',
            filename=
            f'documents/TUGraz_Repository_General_Data_Protection_Rights_{locale}.pdf',
            _external=True))
Exemple #30
0
 def get_language_aware_title(extra_data, fallback_language="en"):
     lang = get_locale()
     title = extra_data["title"]
     local_title = title.get(lang)
     fallback_title = title.get(fallback_language)
     if local_title:
         return local_title
     if fallback_title:
         return fallback_title
     return list(title.values())[0]
Exemple #31
0
def register_context_processors():
    lang = get_locale().language
    rtl = lang in ("ar", "az", "fa", "he", "ur")
    return dict(
        lang=lang,
        rtl=rtl,
        _trans=gettext,
        _ntrans=ngettext,
        settings_profile=current_settings_profile,
        settings=current_settings,
    )
Exemple #32
0
def set_request_presets():
    """
    Sets preset values for variables like deployment and event
    globally so they can be reused by other components for restricting
    filter results by deployment and/or event, for instance.
    """
    session.permanent = True
    hostname = urlparse(request.url).hostname

    g.deployment = get_deployment(hostname)
    g.event = get_event()
    g.locale = get_locale()
    current_user.event = g.event
Exemple #33
0
    def set_label(self, label: str, value: str, language: str = None):
        """Save label translation in database.

        :param label: Label name ('attribute' field in table)
        :param value: Translated label text.
        :param language: Language of translation
        """
        if language is None:
            language = str(get_locale())

        translation = self.model(attribute=label,
                                 language=language,
                                 value=value)
        self.db.session.add(translation)
        self.db.session.commit()
def test_timezone_selector(app):
    """Test format_datetime."""
    app.config["I18N_LANGUAGES"] = [("da", "Danish")]
    InvenioI18N(app)
    with app.test_request_context():
        assert format_datetime(datetime(1987, 3, 5, 17, 12)) == "Mar 5, 1987, 5:12:00 PM"
        assert (
            format_datetime(datetime(1987, 3, 5, 17, 12), "full") == "Thursday, March 5, 1987 at 5:12:00 PM GMT+00:00"
        )
        assert format_datetime(datetime(1987, 3, 5, 17, 12), "short") == "3/5/87, 5:12 PM"
        assert format_datetime(datetime(1987, 3, 5, 17, 12), "dd mm yyy") == "05 12 1987"
        assert format_datetime(datetime(1987, 3, 5, 17, 12), "dd mm yyyy") == "05 12 1987"
    with app.test_request_context(headers=[("Accept-Language", "da")]):
        assert str(get_locale()) == "da"
        assert format_datetime(datetime(1987, 3, 5, 17, 12)) == "05/03/1987 17.12.00"
Exemple #35
0
    def get_translations(self):
        """Returns the correct gettext translations that should be used for
        this request.  This will never fail and return a dummy translation
        object if used outside of the request or if a translation cannot be
        found.
        """
        locale = get_locale()
        cache = self.get_translations_cache()

        translations = cache.get(str(locale))
        if translations is None:
            # load flaskbb translations
            translations = babel.support.Translations.load(
                dirname=self.flaskbb_translations,
                locales=locale,
                domain="messages"
            )

            # If no compiled translations are found, return the
            # NullTranslations object.
            if not isinstance(translations, babel.support.Translations):
                return translations

            # Plugin translations are at the moment not supported under
            # Python 3. There is currently a bug in Babel where it is
            # not possible to merge two message catalogs.
            # https://github.com/mitsuhiko/babel/pull/92
            # So instead of adding/merging them, we are just skipping them
            # Better then no python3 support though..
            if not PY2:
                return translations

            # now load and add the plugin translations
            for plugin in self.plugin_translations:
                plugin_translation = babel.support.Translations.load(
                    dirname=plugin,
                    locales=locale,
                    domain="messages"
                )
                translations.add(plugin_translation)

            cache[str(locale)] = translations

        return translations
def test_timezone_selector(app):
    """Test format_datetime."""
    app.config['I18N_LANGUAGES'] = ['da']
    InvenioI18N(app)
    with app.test_request_context():
        assert format_datetime(datetime(1987, 3, 5, 17, 12)) == \
            'Mar 5, 1987, 5:12:00 PM'
        assert format_datetime(datetime(1987, 3, 5, 17, 12), 'full') == \
            'Thursday, March 5, 1987 at 5:12:00 PM GMT+00:00'
        assert format_datetime(datetime(1987, 3, 5, 17, 12), 'short') == \
            '3/5/87, 5:12 PM'
        assert format_datetime(datetime(1987, 3, 5, 17, 12), 'dd mm yyy') == \
            '05 12 1987'
        assert format_datetime(datetime(1987, 3, 5, 17, 12), 'dd mm yyyy') \
            == '05 12 1987'
    with app.test_request_context(headers=[('Accept-Language', 'da')]):
        assert str(get_locale()) == 'da'
        assert format_datetime(datetime(1987, 3, 5, 17, 12)) == \
            '05/03/1987 17.12.00'
Exemple #37
0
def test_timezone_selector(app):
    """Test format_datetime."""
    app.config['I18N_LANGUAGES'] = [('da', 'Danish')]
    InvenioI18N(app)
    with app.test_request_context():
        assert format_datetime(datetime(1987, 3, 5, 17, 12)) == \
            'Mar 5, 1987, 5:12:00 PM'
        assert format_datetime(datetime(1987, 3, 5, 17, 12), 'full') == \
            'Thursday, March 5, 1987 at 5:12:00 PM GMT+00:00'
        assert format_datetime(datetime(1987, 3, 5, 17, 12), 'short') == \
            '3/5/87, 5:12 PM'
        assert format_datetime(datetime(1987, 3, 5, 17, 12), 'dd mm yyy') == \
            '05 12 1987'
        assert format_datetime(datetime(1987, 3, 5, 17, 12), 'dd mm yyyy') \
            == '05 12 1987'
    with app.test_request_context(headers=[('Accept-Language', 'da')]):
        assert str(get_locale()) == 'da'
        assert format_datetime(datetime(1987, 3, 5, 17, 12), 'short') == \
            '05/03/1987 17.12'
Exemple #38
0
    def get_translations(self):
        """Return the correct gettext translations for a request.

        This will never fail and return a dummy translation object if used
        outside of the request or if a translation cannot be found.
        """
        ctx = _request_ctx_stack.top
        if ctx is None:
            return NullTranslations()

        locale = get_locale()

        cache = self.get_translations_cache(ctx)

        translations = cache.get(str(locale))

        if translations is None:
            translations = self._get_translation_for_locale(locale)
            cache[str(locale)] = translations

        return translations
Exemple #39
0
def build_pager(sections, criteria, page_kwargs=None):
    """
    Build pager links for use in a search view.

    :param dict page_kwargs: A dict keyed by page number, where each value is a
        dict of extra params to pass along when building that page's URL.
    """
    pager = {}
    if sections:
        for section, pages in sections.items():
            pager[section] = [{
                'page_num':
                p,
                'page_num_formatted':
                format_number(p, locale=get_locale()),
                'url':
                criteria.build_url(page_num=p,
                                   page_len=criteria.page_len,
                                   **page_kwargs.get(p) if page_kwargs else {})
            } for p in pages]
    return pager
Exemple #40
0
    def get_translations(self):
        """Return the correct gettext translations for a request.

        This will never fail and return a dummy translation object if used
        outside of the request or if a translation cannot be found.
        """
        ctx = _request_ctx_stack.top
        if ctx is None:
            return NullTranslations()

        locale = get_locale()

        cache = self.get_translations_cache(ctx)

        translations = cache.get(str(locale))

        if translations is None:
            translations = self._get_translation_for_locale(locale)
            cache[str(locale)] = translations

        return translations
def test_timezone_selector(app):
    """Test format_datetime."""
    app.config['I18N_LANGUAGES'] = [('da', 'Danish')]
    InvenioI18N(app)
    with app.test_request_context():
        assert format_datetime(datetime(1987, 3, 5, 17, 12)) == \
            'Mar 5, 1987, 5:12:00 PM'
        # Adds the new date format due to a library update 2
        assert format_datetime(datetime(1987, 3, 5, 17, 12), 'full') in [
            'Thursday, March 5, 1987 at 5:12:00 PM GMT+00:00',
            'Thursday, March 5, 1987 at 5:12:00 PM Coordinated Universal Time']
        assert format_datetime(datetime(1987, 3, 5, 17, 12), 'short') == \
            '3/5/87, 5:12 PM'
        assert format_datetime(datetime(1987, 3, 5, 17, 12), 'dd mm yyy') == \
            '05 12 1987'
        assert format_datetime(datetime(1987, 3, 5, 17, 12), 'dd mm yyyy') \
            == '05 12 1987'
    with app.test_request_context(headers=[('Accept-Language', 'da')]):
        assert str(get_locale()) == 'da'
        assert format_datetime(datetime(1987, 3, 5, 17, 12), 'short') == \
            '05.03.1987 17.12'
Exemple #42
0
def filter_language_name(lang_code):
    """Convert language code into display name in current locale."""
    return current_app.extensions["babel"].load_locale(lang_code).get_display_name(get_locale().language)
Exemple #43
0
 def page():
     return get_locale().language
Exemple #44
0
 def index():
     return get_locale().language
Exemple #45
0
 def locale(self) -> Locale:
     locale = get_locale()
     if locale is None:
         return self._locale
     return locale