Initial clean commit of the project

This commit is contained in:
2025-08-23 21:47:21 +01:00
commit 0ef448008a
31 changed files with 1455 additions and 0 deletions

0
app/core/__init__.py Normal file
View File

18
app/core/config.py Normal file
View File

@@ -0,0 +1,18 @@
from pydantic_settings import BaseSettings, SettingsConfigDict
class Settings(BaseSettings):
# Учетные данные приложения Яндекс.OAuth
YANDEX_CLIENT_ID: str
YANDEX_CLIENT_SECRET: str
# URL API Яндекс.Метрики
YANDEX_METRIKA_API_URL: str = "https://api-metrika.yandex.net"
# Уровень логирования
LOG_LEVEL: str = "INFO"
# Указываем, что нужно читать переменные из файла .env
model_config = SettingsConfigDict(env_file=".env")
# Создаем единый объект настроек для всего приложения
settings = Settings()

29
app/core/logging.py Normal file
View File

@@ -0,0 +1,29 @@
import sys
from loguru import logger
from .config import settings
def setup_logging():
"""
Настраивает Loguru для вывода в консоль и в файл с ротацией.
"""
logger.remove() # Сначала удаляем стандартный обработчик
# Настраиваем логирование в консоль (stderr) с цветом
logger.add(
sys.stderr,
level=settings.LOG_LEVEL.upper(),
format="<green>{time:YYYY-MM-DD HH:mm:ss}</green> | <level>{level: <8}</level> | <level>{message}</level>",
colorize=True
)
# Настраиваем логирование в файл
logger.add(
"metrics.log", # Имя файла
level=settings.LOG_LEVEL.upper(),
format="{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {name}:{function} - {message}",
rotation="1 MB", # Ротация, когда файл достигнет 1 MB
compression="zip", # Сжимать старые файлы логов в zip
enqueue=True, # Делает запись безопасной для многопоточности
backtrace=True, # Показывает полный стектрейс при ошибках
diagnose=True # Добавляет полезную информацию для отладки ошибок
)