from datetime import date, datetime from dataclasses import dataclass, field from enum import Enum from typing import Optional, List, Any from marshmallow import validate from api import ma import marshmallow_dataclass from labels.schemas import TeamMemberUserResponse from models.connector import ConnectorPlatforms class FivetranEventTypes(Enum): SYNC_END = "sync_end" SYNC_START = "sync_start" @classmethod def all_values(cls) -> List: """ return all values of Enum """ return list(map(lambda c: c.value, cls)) class FivetranStatuses(Enum): SUCCESSFUL = "SUCCESSFUL" FAILED = "FAILED" FAILURE_WITH_TASK = "FAILURE_WITH_TASK" RESCHEDULED = "RESCHEDULED" @classmethod def all_values(cls) -> List: """ return all values of Enum """ return list(map(lambda c: c.value, cls)) @dataclass class WebhookData: status: str = field(metadata={"validate": validate.OneOf(FivetranStatuses.all_values())}) @dataclass class WebhookEvent: event: str created: str connector_type: str connector_id: str destination_group_id: str data: Optional[WebhookData] webhook_event = marshmallow_dataclass.class_schema(WebhookEvent, base_schema=ma.Schema) @dataclass class CreateConnectorSchema: platform: str = field(metadata={"validate": validate.OneOf(ConnectorPlatforms.all_values())}) create_connector_schema = marshmallow_dataclass.class_schema(CreateConnectorSchema, base_schema=ma.Schema) @dataclass class CreateConnectorResponse: id: int name: str owner: TeamMemberUserResponse status: int platform: str externalId: str connectCardUri: str def __init__(self, id, name, owner: TeamMemberUserResponse, status, platform, external_id, connect_card_uri): self.id = id self.name = name self.owner = owner self.status = status self.platform = platform self.externalId = external_id self.connectCardUri = connect_card_uri create_connector_response = marshmallow_dataclass.class_schema(CreateConnectorResponse, base_schema=ma.Schema) @dataclass class ConnectorResponse: id: int name: str owner: TeamMemberUserResponse status: int platform: str externalId: str = field(metadata={"data_key": "external_id"}) def __init__(self, id, name, owner: TeamMemberUserResponse, status, platform, external_id): self.id = id self.name = name self.owner = owner self.status = status self.platform = platform self.externalId = external_id connector_response = marshmallow_dataclass.class_schema(ConnectorResponse, base_schema=ma.Schema)