"""Internal module models Used to typecast database queries results""" from dataclasses import dataclass from datetime import date from decimal import Decimal from typing import List, Optional from models import ProjectTargetItem from models.user import User @dataclass class ProjectListItemResultModel: id: int name: str targets: List[ProjectTargetItem] budget: float allocation: float total_spend: float start_date: Optional[date] end_date: Optional[date] status: int shared_status: Optional[str] user_roles: List[int] title: str isConfidential: bool currency: str isClaimed: bool @dataclass class RecentProjectListItemResultModel(ProjectListItemResultModel): campaigns_count: int @dataclass class UpcomingProjectListItemResultModel: id: int name: str targets: List[ProjectTargetItem] user_roles: List[int] budget: float allocation: float start_date: date isConfidential: bool currency: str @dataclass class ProjectCalendarItemModel: id: int name: str targets: List[ProjectTargetItem] earliest_start_date: Optional[date] latest_end_date: Optional[date] campaigns_count: int shared_status: Optional[str] userRoles: List[int] @dataclass class ProjectExportItemModel: name: str targets: List[ProjectTargetItem] earliest_start_date: Optional[date] latest_end_date: Optional[date] planned_budget: int total_spend: int status: int @dataclass class ProjectSpendByDayModel: date: str amount: Decimal @dataclass class LabelModel: id: int name: str @dataclass class UsersSearchModel: id: int email: str name: str labels: List[LabelModel] def __init__(self, model): self.id = model.id self.email = model.email self.name = model.name self.labels = [LabelModel(id=label["id"], name=label["name"]) for label in model.labels if label]