import os from re import TEMPLATE from pydantic import BaseModel from typing import Any, List, Optional, Union class FromToHeader(BaseModel): display_name: Optional[str] username: Optional[str] domain: Optional[str] mail: Optional[str] class MailReader(BaseModel): id: str subject: str from_: FromToHeader to: List[FromToHeader] date: str body_text: str class MailParser(BaseModel): filename: str content_type: str charset: str data: str class FinderIban(BaseModel): filename: str iban: str bank_date: str channel_branch: str currency_value: float balance: float additional_balance: float process_name: str process_type: str process_comment: str bank_reference_code: str class FinderComment(FinderIban): build_id: Optional[int] = None build_uu_id: Optional[str] = None decision_book_id: Optional[int] = None decision_book_uu_id: Optional[str] = None class RedisData(BaseModel): MailReader: MailReader MailParser: List[MailParser] FinderIban: List[FinderIban] FinderComment: List[FinderComment] class Status: PENDING: str = "PENDING" IN_PROGRESS: str = "IN_PROGRESS" COMPLETED: str = "COMPLETED" FAILED: str = "FAILED" class RedisTaskObject(BaseModel): task: str data: RedisData completed: bool service: str status: str created_at: str is_completed: bool class MailSendModel(BaseModel): receivers: List[str] subject: str template_name: str data: dict class RedisMailSender(BaseModel): task: RedisTaskObject data: MailSendModel completed: bool service: str status: str created_at: str completed: bool class EmailConfig: HOST: str = os.getenv("EMAIL_HOST", "10.10.2.34") USERNAME: str = os.getenv("EMAIL_USERNAME", "isbank@mehmetkaratay.com.tr") PASSWORD: str = os.getenv("EMAIL_PASSWORD", "system") PORT: int = int(os.getenv("EMAIL_PORT", 993)) @classmethod def as_dict(cls): return dict(host=EmailConfig.HOST, port=EmailConfig.PORT, username=EmailConfig.USERNAME, password=EmailConfig.PASSWORD) class RedisConfig: HOST: str = os.getenv("REDIS_HOST", "10.10.2.15") PASSWORD: str = os.getenv("REDIS_PASSWORD", "your_strong_password_here") PORT: int = int(os.getenv("REDIS_PORT", 6379)) DB: int = int(os.getenv("REDIS_DB", 0)) @classmethod def as_dict(cls): return dict(host=RedisConfig.HOST, port=int(RedisConfig.PORT), password=RedisConfig.PASSWORD, db=int(RedisConfig.DB)) class MailReaderMainConfig: MAILBOX: str AUTHORIZE_IBAN: str NO_ATTACHMENT_FOLDER: str COMPLETED_FOLDER: str TASK_DATA_PREFIX: str TASK_MAILID_INDEX_PREFIX: str TASK_UUID_INDEX_PREFIX: str TASK_SEEN_PREFIX: str SERVICE_PREFIX: str NEXT_SERVICE_PREFIX: str class ConfigServices: MAIN_TASK_PREFIX: str = "BANK:SERVICES:TASK:DATA" TASK_MAILID_INDEX_PREFIX: str = "BANK:SERVICES:TASK:MAILID" TASK_UUID_INDEX_PREFIX: str = "BANK:SERVICES:TASK:UUID" TASK_SEEN_PREFIX: str = "BANK:SERVICES:TASK:SEEN" TASK_DELETED_PREFIX: str = "BANK:SERVICES:TASK:DELETED" SERVICE_PREFIX_MAIL_READER: str = "MailReader" SERVICE_PREFIX_MAIL_PARSER: str = "MailParser" SERVICE_PREFIX_FINDER_IBAN: str = "FinderIban" SERVICE_PREFIX_FINDER_COMMENT: str = "FinderComment" SERVICE_PREFIX_MAIL_SENDER: str = "MailSender" TEMPLATE_ACCOUNT_RECORDS: str = "template_accounts.html" paramsRedisData = Union[MailReader, MailParser, FinderIban, FinderComment]