Source code for datamasque.client.models.files

from abc import abstractmethod
from datetime import datetime
from typing import NewType, Optional

from pydantic import BaseModel, ConfigDict, model_validator

FileId = NewType("FileId", str)


[docs] class DataMasqueFile(BaseModel): """Base class for the concrete file types (`SeedFile`, `OracleWalletFile`, `SslZipFile`, `SnowflakeKeyFile`).""" model_config = ConfigDict(extra="allow") name: str created_date: datetime modified_date: Optional[datetime] = None id: Optional[FileId] = None @model_validator(mode="before") @classmethod def _promote_filename(cls, data: dict) -> dict: """The API sometimes returns `filename` instead of `name`.""" if isinstance(data, dict): if "filename" in data and "name" not in data: data["name"] = data["filename"] return data
[docs] @classmethod @abstractmethod def get_url(cls) -> str: """Returns the API URL path for files of this type.""" raise NotImplementedError # pragma: no cover
[docs] @classmethod @abstractmethod def get_content_param_name(cls) -> str: """Returns the multipart form field name used when uploading files of this type.""" raise NotImplementedError # pragma: no cover
[docs] class SeedFile(DataMasqueFile): """Represents a seed file (CSV file)."""
[docs] @classmethod def get_url(cls) -> str: return "api/seeds/"
[docs] @classmethod def get_content_param_name(cls) -> str: return "seed_file"
[docs] class OracleWalletFile(DataMasqueFile): """Represents an Oracle wallet file (ZIP file)."""
[docs] @classmethod def get_url(cls) -> str: return "api/oracle-wallets/"
[docs] @classmethod def get_content_param_name(cls) -> str: return "zip_archive"
[docs] class SslZipFile(DataMasqueFile): """Represents a ZIP file of SSL certificates used to establish secure database connections."""
[docs] @classmethod def get_url(cls) -> str: return "api/connection-filesets/"
[docs] @classmethod def get_content_param_name(cls) -> str: return "zip_archive"
[docs] class SnowflakeKeyFile(DataMasqueFile): """Represents a private SSH key file for Snowflake connections."""
[docs] @classmethod def get_url(cls) -> str: return "api/files/snowflake-keys/"
[docs] @classmethod def get_content_param_name(cls) -> str: return "key_file"