yt-dlp-bot/bot/core/config/schema.py
2022-11-02 20:40:56 +02:00

63 lines
1.4 KiB
Python

from pydantic import (
StrictBool,
StrictInt,
StrictStr,
constr,
validator,
)
from yt_shared.schemas.base import RealBaseModel
_LANG_CODE_LEN = 2
_LANG_CODE_REGEX = rf'^[a-z]{{{_LANG_CODE_LEN}}}$'
class BaseUserSchema(RealBaseModel):
id: StrictInt
@property
def is_base_user(self):
return True
class UserUploadSchema(RealBaseModel):
upload_vide_file: StrictBool
upload_video_max_file_size: StrictInt
forward_to_group: StrictBool
forward_group_id: StrictInt | None
silent: StrictBool
class UserSchema(BaseUserSchema):
upload: UserUploadSchema
@property
def is_base_user(self):
return False
def change_type(values: list[int]) -> list[BaseUserSchema]:
return [BaseUserSchema(id=id_) for id_ in values]
class ApiSchema(RealBaseModel):
upload_vide_file: StrictBool
upload_video_max_file_size: StrictInt
upload_to_chat_ids: list[BaseUserSchema]
silent: StrictBool
_transform_chat_ids = validator('upload_to_chat_ids', pre=True)(change_type)
class TelegramSchema(RealBaseModel):
api_id: StrictInt
api_hash: StrictStr
token: StrictStr
lang_code: constr(regex=_LANG_CODE_REGEX, to_lower=True)
allowed_users: list[UserSchema]
api: ApiSchema
class ConfigSchema(RealBaseModel):
telegram: TelegramSchema
ytdlp_version_check_interval: StrictInt