Files
tgex-backend/shared/config_helper.py
2025-11-10 15:14:19 +03:00

37 lines
1.3 KiB
Python

import sys
from pydantic import ValidationError
from pydantic_settings import BaseSettings
RED = '\033[91m'
YELLOW = '\033[33m'
RESET = '\033[0m'
BOLD = '\033[1m'
def load_settings[T: BaseSettings](settings_class: type[T]) -> T:
try:
return settings_class()
except ValidationError as e:
print(f'{RED}{BOLD}Missing environment variables:{RESET}')
missing: set[str] = set()
for err in e.errors():
if err['type'] == 'missing' and len(err['loc']) == 1:
field_info = settings_class.model_fields.get(str(err['loc'][0]))
if field_info and field_info.annotation is not None and hasattr(field_info.annotation, 'model_fields'):
annotation_fields = getattr(field_info.annotation, 'model_fields', {})
for name, info in annotation_fields.items():
if info.is_required():
missing.add(f'{err["loc"][0]}__{name}'.upper())
else:
missing.add('__'.join(str(loc).upper() for loc in err['loc']))
else:
missing.add('__'.join(str(loc).upper() for loc in err['loc']))
for field_name in sorted(missing):
print(f' {YELLOW}{field_name}{RESET}')
print(f'\n{RED}Check .env file or set required variables{RESET}')
sys.exit(1)