from typing import Any from pydantic import BaseModel, ConfigDict from dmp.core.types import PlainToken class Empty(BaseModel): model_config = ConfigDict(extra="forbid") class BaseResponse(BaseModel): code: int message: str | None = None request_id: str class ErrorResponse(BaseResponse): data: Any = None class Response[T](BaseResponse): data: T class PageInfo(BaseModel): page: int page_size: int total_number: int total_page: int class ListData[T](BaseModel): list: list[T] page_info: PageInfo | None = None class AccessToken(BaseModel): access_token: PlainToken advertiser_ids: list[str] scope: list[int] def scopes_sufficient(self, scopes: list[int], /) -> bool: return set(self.scope).issuperset(scopes) class User(BaseModel): display_name: str | None email: str core_user_id: str create_time: int avatar_url: str class AdAccount(BaseModel): advertiser_id: str name: str company: str owner_bc_id: str | None = None class Campaign(BaseModel): advertiser_id: str campaign_id: str class BusinessCenterInfo(BaseModel): bc_id: str name: str company: str | None = None class BusinessCenter(BaseModel): bc_info: BusinessCenterInfo