Source code for ppc_robot_lib.utils.regional

from __future__ import annotations

import pytz
from django.contrib.auth import models
from django.utils import timezone, translation

from ppc_robot_lib.stores import UserSettingsStore


[docs] def activate_regional_settings( user: models.AbstractBaseUser | None, force_language: str | None = None ) -> tuple[bool, bool]: """ Activates regional settings for the given user. The regional settings are stored in the database (:py:class:``ppc_robot_lib.models.user_settings.UserSettings`` model) under the following keys: * ``timezone`` * ``language`` If no user is given, the regional settings will be deactivated. :param user: User instance. :param force_language: When set, the language will not be loaded from user settings and this value will be used instead. Can be used to override language from a cookie on a per-browser basis. :return: Tuple (timezone_activated, language_activated) indicating if timezone/language was activated. """ if user and user.is_authenticated: timezone_activated = False language_activated = False settings_store = UserSettingsStore(user.id) tz = settings_store.get('timezone') if tz is not None: timezone.activate(pytz.timezone(tz)) timezone_activated = True else: timezone.deactivate() if force_language is None: language = settings_store.get('language') else: language = force_language if language: translation.activate(language) language_activated = True else: translation.deactivate() return timezone_activated, language_activated else: timezone.deactivate() translation.deactivate() return False, False