All checks were successful
CI / lint-and-test (push) Successful in 21s
- Introduced a new `normalize_lang` function to standardize language codes across the application, ensuring consistent handling of user language preferences. - Refactored date handling utilities by adding `parse_utc_iso` and `parse_utc_iso_naive` functions for better parsing of ISO 8601 date strings, enhancing timezone awareness. - Updated various modules to utilize the new language normalization and date parsing functions, improving code clarity and maintainability. - Enhanced error handling in date validation to raise specific `DateRangeValidationError` exceptions, providing clearer feedback on validation issues. - Improved test coverage for date range validation and language normalization functionalities, ensuring robustness and reliability.
27 lines
865 B
Python
27 lines
865 B
Python
"""Single source of truth for normalizing language codes to 'ru' or 'en'.
|
|
|
|
Use for: env DEFAULT_LANGUAGE, Accept-Language header, Telegram user.language_code,
|
|
and initData user object in Miniapp auth.
|
|
"""
|
|
|
|
from typing import Literal
|
|
|
|
|
|
def normalize_lang(code: str | None) -> Literal["ru", "en"]:
|
|
"""Normalize a language code to 'ru' or 'en'.
|
|
|
|
Suitable for: env DEFAULT_LANGUAGE, Accept-Language header,
|
|
Telegram user.language_code, and initData user in Miniapp auth.
|
|
|
|
Args:
|
|
code: Raw language code (e.g. 'ru', 'ru-RU', 'en', 'en-US') or None.
|
|
|
|
Returns:
|
|
'ru' if code starts with 'ru' (after strip/lower), else 'en'.
|
|
Returns 'en' when code is empty or not a string.
|
|
"""
|
|
if not code or not isinstance(code, str):
|
|
return "en"
|
|
code = code.strip().lower()
|
|
return "ru" if code.startswith("ru") else "en"
|