Skip to content

Models

All models are importable directly from pycomad:

from pycomad import Asset, AssetWithCategories, Category, AccessLevel, FieldType

Enumerations

pycomad.models.AccessLevel

Bases: str, Enum

Visibility level of a category.

pycomad.models.FieldType

Bases: str, Enum

Data type of a custom field schema.


Auth

pycomad.models.LoginInfo dataclass

LoginInfo(token: str, user_id: str, email: str, username: str, roles: List[str], permissions: List[str])

Session information returned by a successful :meth:ComadClient.login call.


Assets

pycomad.models.Asset dataclass

Asset(id: UUID, owner_id: str, name: str, asset_type: str, size: int, storage_key: str, bucket: str, available: bool, is_locked: bool, is_private: bool, public_read: bool, public_download: bool, public_write: bool, created_at: datetime, updated_at: datetime, description: Optional[str] = None, caption: Optional[str] = None, keywords: Optional[str] = None, creator: Optional[str] = None, copyright_notice: Optional[str] = None, available_until: Optional[datetime] = None, team_id: Optional[str] = None, custom_fields: Optional[Any] = None)

A digital asset record.

size instance-attribute

size: int

File size in bytes.

pycomad.models.AssetWithCategories dataclass

AssetWithCategories(asset: Asset, categories: List[Category] = list())

An asset with its associated categories.

pycomad.models.AssetMetadata dataclass

AssetMetadata(asset_id: UUID, extracted_at: datetime, exif: Optional[Dict[str, Any]] = None, iptc: Optional[Dict[str, Any]] = None, xmp: Optional[Dict[str, Any]] = None)

Extracted EXIF, IPTC, and XMP metadata for an asset.

exif class-attribute instance-attribute

exif: Optional[Dict[str, Any]] = None

Raw EXIF tags plus normalised fields (camera_make, camera_model, datetime, gps_lat, …).

iptc class-attribute instance-attribute

iptc: Optional[Dict[str, Any]] = None

Raw IPTC tags plus normalised fields (creator, copyright, caption, keywords, city, …).

xmp class-attribute instance-attribute

xmp: Optional[Dict[str, Any]] = None

Raw XMP tags.

pycomad.models.AssetMetadataSummary dataclass

AssetMetadataSummary(extracted_at: datetime, exif: Optional[Dict[str, Any]] = None, iptc: Optional[Dict[str, Any]] = None, xmp: Optional[Dict[str, Any]] = None)

Subset of metadata returned inline with search results.

pycomad.models.AssetSearchResult dataclass

AssetSearchResult(asset: Asset, metadata: Optional[AssetMetadataSummary] = None)

A single search hit: the asset record plus its extracted metadata (if any).


Categories

pycomad.models.Category dataclass

Category(id: UUID, name: str, access_level: AccessLevel, created_at: datetime, updated_at: datetime, description: Optional[str] = None, parent_id: Optional[UUID] = None, creator: Optional[str] = None)

A category used to organise assets.

pycomad.models.CategoryWithChildren dataclass

CategoryWithChildren(category: Category, sub_categories: List[Category] = list())

A category with its direct sub-categories.


Custom Fields

pycomad.models.CustomFieldSchema dataclass

CustomFieldSchema(id: UUID, team_id: str, key: str, name: str, field_type: FieldType, required: bool, created_at: datetime, updated_at: datetime)

A custom field schema defined for a team.

The key is an immutable slug used as the JSONB property key on assets. The name is the editable human-readable display label.


Usage & ZIP

pycomad.models.UsageSummary dataclass

UsageSummary(used_bytes: int, asset_count: int, category_count: int, storage_limit_bytes: Optional[int] = None, asset_limit: Optional[int] = None, category_limit: Optional[int] = None)

Current storage usage and plan limits for the authenticated user.

storage_limit_bytes class-attribute instance-attribute

storage_limit_bytes: Optional[int] = None

None means unlimited.

asset_limit class-attribute instance-attribute

asset_limit: Optional[int] = None

None means unlimited.

category_limit class-attribute instance-attribute

category_limit: Optional[int] = None

None means unlimited.

pycomad.models.ZipUploadResult dataclass

ZipUploadResult(categories: List[Category], assets: List[Asset], asset_category_ids: Dict[str, List[str]], errors: List[str])

Result of a ZIP batch import.

The archive's directory tree is mirrored as a category hierarchy. Every file in the archive becomes an asset linked to its directory's category.

categories instance-attribute

categories: List[Category]

All categories created from the archive's directory structure.

assets instance-attribute

assets: List[Asset]

All assets successfully uploaded from the archive.

asset_category_ids instance-attribute

asset_category_ids: Dict[str, List[str]]

Mapping of asset_id → [category_id, …] for every uploaded asset.

errors instance-attribute

errors: List[str]

Per-entry errors (non-fatal; other entries are still processed).