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.
25 lines
765 B
Python
25 lines
765 B
Python
"""Shared handler helpers (e.g. async admin check)."""
|
|
|
|
import asyncio
|
|
|
|
import duty_teller.config as config
|
|
from duty_teller.db.repository import is_admin_for_telegram_user
|
|
from duty_teller.db.session import session_scope
|
|
|
|
|
|
async def is_admin_async(telegram_user_id: int) -> bool:
|
|
"""Check if Telegram user is admin (username or phone). Runs DB check in executor.
|
|
|
|
Args:
|
|
telegram_user_id: Telegram user id.
|
|
|
|
Returns:
|
|
True if user is in ADMIN_USERNAMES or their stored phone is in ADMIN_PHONES.
|
|
"""
|
|
|
|
def _check() -> bool:
|
|
with session_scope(config.DATABASE_URL) as session:
|
|
return is_admin_for_telegram_user(session, telegram_user_id)
|
|
|
|
return await asyncio.get_running_loop().run_in_executor(None, _check)
|