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