import datetime from typing import Any from pydantic import BaseModel, Field from dmp.adapters.fivetran.enums import ( AdsAccountsSyncMode, ColumnReasonCode, ConnectionSetupState, ConnectionSyncState, ConnectionUpdateState, SchemaChangeHandlings, TableReasonCode, TableSyncMode, ) class Response[T](BaseModel): code: str message: str | None = None data: T class SimpleResponse(BaseModel): code: str message: str | None = None class ConnectionStatus(BaseModel): update_state: ConnectionUpdateState setup_state: ConnectionSetupState sync_state: ConnectionSyncState is_historical_sync: bool | None = None class ConnectCard(BaseModel): token: str uri: str class ConnectCardResponse(BaseModel): connect_card: ConnectCard class ShopifyConnectionConfig(BaseModel): shop: str | None = None class ShopifyConnection(BaseModel): id: str service: str status: ConnectionStatus name: str = Field(alias="schema") config: ShopifyConnectionConfig succeeded_at: datetime.datetime | None = None class AdsConnectionConfig(BaseModel): sync_mode: AdsAccountsSyncMode | None = None accounts: list[str] | None = None custom_tables: list[dict[str, Any]] | None = ( None # Facebook field for custom reports ) custom_reports: list[dict[str, Any]] | None = ( None # TikTok field for custom reports ) reports: list[dict[str, Any]] | None = None # Google field for custom reports class AdsConnectionSourceSyncDetails(BaseModel): account_ids: list[str] | None = None class AdsConnection(BaseModel): id: str service: str status: ConnectionStatus name: str = Field(alias="schema") config: AdsConnectionConfig succeeded_at: datetime.datetime | None source_sync_details: AdsConnectionSourceSyncDetails | None = None class AdsConnectionWithConnectCard(AdsConnection): connect_card: ConnectCard class ColumnEnabledPatchSettings(BaseModel): allowed: bool reason: str | None = None reason_code: ColumnReasonCode | None = None class TableEnabledPatchSettings(BaseModel): allowed: bool reason: str | None = None reason_code: TableReasonCode | None = None class ColumnConfig(BaseModel): name_in_destination: str enabled: bool hashed: bool enabled_patch_settings: ColumnEnabledPatchSettings class TableConfig(BaseModel): sync_mode: str | None = None enabled: bool name_in_destination: str enabled_patch_settings: TableEnabledPatchSettings columns: dict[str, ColumnConfig] | None = None class SchemaConfig(BaseModel): enabled: bool name_in_destination: str tables: dict[str, TableConfig] class StandardConfig(BaseModel): enable_new_by_default: bool schemas: dict[str, SchemaConfig] schema_change_handling: str class ColumnUpdate(BaseModel): enabled: bool hashed: bool class TableUpdate(BaseModel): enabled: bool columns: dict[str, ColumnUpdate] | None = None sync_mode: TableSyncMode | None = None class SchemaUpdate(BaseModel): enabled: bool | None = None tables: dict[str, TableUpdate] class StandardConfigUpdate(BaseModel): schemas: dict[str, SchemaUpdate] schema_change_handling: SchemaChangeHandlings | None = None batch_size: int | None = None