Source code for assets_guardian.core.domain.models.asset

from dataclasses import dataclass
from datetime import datetime
from typing import Any

from assets_guardian.core.domain.models.validator import validate_field


[docs] @dataclass(frozen=True, slots=True, kw_only=True) class Asset: """Normalized representation of an asset (resource) from an external source. Attributes: source: Source name (e.g., gitlab, microsoft365, dolibarr, etc.). external_id: Unique identifier of the asset within the source. asset_type: Type of asset (e.g., repository, group, mailbox, etc.). name: Name of the asset in the source. description: Description of the asset in the source. state: State of the asset in the source (e.g., active, archived, etc.). created_at: Creation date of the asset in the source. created_by: Identifier of the asset's creator in the source. comments: Internal comments or notes for Assets Guardian. metadata: Custom arbitrary metadata dict. """ # Global source: str external_id: str asset_type: str # Infos name: str description: str | None = None # Status state: str | None = None # Dates and origin created_at: datetime | None = None created_by: str | None = None # Miscellaneous comments: str | None = None metadata: dict[str, Any] | None = None def __post_init__(self) -> None: validate_field(self, "source", str) validate_field(self, "external_id", str) validate_field(self, "asset_type", str) validate_field(self, "name", str) validate_field(self, "description", str, optional=True, empty=True) validate_field(self, "state", str, optional=True) validate_field(self, "created_at", datetime, optional=True) validate_field(self, "created_by", str, optional=True) validate_field(self, "comments", str, optional=True, empty=True) validate_field(self, "metadata", dict, optional=True)