Source code for pyatlan.model.assets.core.asset

# SPDX-License-Identifier: Apache-2.0
# Copyright 2025 Atlan Pte. Ltd.


from __future__ import annotations

import sys
from datetime import datetime
from typing import TYPE_CHECKING, ClassVar, Dict, List, Optional, Set, Type, TypeVar
from warnings import warn

from pydantic.v1 import Field, validator

from pyatlan.errors import ErrorCode
from pyatlan.model.core import Announcement
from pyatlan.model.enums import (
    AnnouncementType,
    CertificateStatus,
    SaveSemantic,
    SourceCostUnitType,
)
from pyatlan.model.fields.atlan_fields import (
    BooleanField,
    KeywordField,
    KeywordTextField,
    KeywordTextStemmedField,
    NumericField,
    NumericRankField,
    RelationField,
    TextField,
)
from pyatlan.model.structs import PopularityInsights, StarredDetails
from pyatlan.utils import init_guid, validate_required_fields

from .referenceable import Referenceable

SelfAsset = TypeVar("SelfAsset", bound="Asset")


[docs] class Asset(Referenceable): """Description""" _subtypes_: Dict[str, type] = dict() def __init_subclass__(cls, type_name=None): cls._subtypes_[type_name or cls.__name__.lower()] = cls def trim_to_required(self: SelfAsset) -> SelfAsset: return self.create_for_modification( qualified_name=self.qualified_name or "", name=self.name or "" ) def trim_to_reference(self: SelfAsset) -> SelfAsset: if self.guid and self.guid.strip(): return self.ref_by_guid(self.guid) if self.qualified_name and self.qualified_name.strip(): return self.ref_by_qualified_name(self.qualified_name) if ( self.unique_attributes and (qualified_name := self.unique_attributes.get("qualified_name")) and qualified_name.strip() ): return self.ref_by_qualified_name(qualified_name) raise ErrorCode.MISSING_REQUIRED_RELATIONSHIP_PARAM.exception_with_parameters( self.type_name, "guid, qualifiedName" ) @classmethod @init_guid def creator(cls: Type[SelfAsset], *args, **kwargs) -> SelfAsset: raise NotImplementedError( "Creator has not been implemented for this class. " "Please submit an enhancement request if you need it implemented." ) @classmethod @init_guid def create(cls: Type[SelfAsset], *args, **kwargs) -> SelfAsset: warn( ( "This method is deprecated, please use 'creator' " "instead, which offers identical functionality." ), DeprecationWarning, stacklevel=2, ) return cls.creator(*args, **kwargs) @classmethod @init_guid def updater( cls: type[SelfAsset], qualified_name: str = "", name: str = "" ) -> SelfAsset: if cls.__name__ == "Asset": raise ErrorCode.METHOD_CAN_NOT_BE_INVOKED_ON_ASSET.exception_with_parameters() validate_required_fields( ["name", "qualified_name"], [name, qualified_name], ) return cls(attributes=cls.Attributes(qualified_name=qualified_name, name=name)) @classmethod def create_for_modification( cls: type[SelfAsset], qualified_name: str = "", name: str = "" ) -> SelfAsset: warn( ( "This method is deprecated, please use 'updater' " "instead, which offers identical functionality." ), DeprecationWarning, stacklevel=2, ) return cls.updater(qualified_name=qualified_name, name=name) @classmethod def _prune_unused_attributes(cls, asset): if "attributes" in asset.__fields_set__ and not asset.attributes.dict( exclude_unset=True ): asset.__fields_set__.remove("attributes") @classmethod def _create_ref(cls: type[SelfAsset], **kwargs) -> SelfAsset: asset: SelfAsset = cls(**kwargs) cls._prune_unused_attributes(asset) return asset @classmethod def ref_by_guid( cls: type[SelfAsset], guid: str, semantic: SaveSemantic = SaveSemantic.REPLACE ) -> SelfAsset: return cls._create_ref(guid=guid, semantic=semantic) @classmethod def ref_by_qualified_name( cls: type[SelfAsset], qualified_name: str, semantic: SaveSemantic = SaveSemantic.REPLACE, ) -> SelfAsset: return cls._create_ref( unique_attributes={"qualifiedName": qualified_name}, semantic=semantic ) @classmethod def __get_validators__(cls): yield cls._convert_to_real_type_ @classmethod def _convert_to_real_type_(cls, data): from .indistinct_asset import IndistinctAsset """Convert raw asset data into the appropriate asset type.""" if isinstance(data, Asset): return data if isinstance(data, list): # Recursively process lists return [cls._convert_to_real_type_(item) for item in data] data_type = ( data.get("type_name") if "type_name" in data else data.get("typeName") ) if not data_type: if issubclass(cls, Asset): return cls(**data) raise ValueError("Missing 'type_name' in asset data") sub_type = cls._subtypes_.get(data_type) or getattr( sys.modules.get("pyatlan.model.assets", {}), data_type, None ) return ( sub_type(**data) if sub_type else IndistinctAsset(**data) ) # If no subtype found, return IndistinctAsset if TYPE_CHECKING: from pyatlan.model.lineage import FluentLineage
[docs] @classmethod def lineage(cls, guid: str, include_archived: bool = False) -> "FluentLineage": """ Start a FluentLineage that can be used to get a LineageListRequest that can be used to retrieve all downstream assets. Additional conditions can be chained onto the returned FluentLineage before any asset retrieval is attempted, ensuring all conditions are pushed-down for optimal retrieval. (To change the default direction of downstream chain a .direction() call :param guid: unique identifier (GUID) for the starting point of lineage :param include_archived: when True, archived (soft-deleted) assets in lineage will be included :returns: a FluentLineage that can be used to get a LineageListRequest that can be used to retrieve all downstream assets """ from pyatlan.model.lineage import FluentLineage if not include_archived: return FluentLineage( starting_guid=guid, where_assets=FluentLineage.ACTIVE, where_relationships=FluentLineage.ACTIVE, includes_in_results=FluentLineage.ACTIVE, ) return FluentLineage(starting_guid=guid)
def has_announcement(self) -> bool: return bool( self.attributes and ( self.attributes.announcement_title or self.attributes.announcement_type ) ) def set_announcement(self, announcement: Announcement) -> None: self.attributes.announcement_type = announcement.announcement_type.value self.attributes.announcement_title = announcement.announcement_title self.attributes.announcement_message = announcement.announcement_message def get_announcment(self) -> Optional[Announcement]: if self.attributes.announcement_type and self.attributes.announcement_title: return Announcement( announcement_type=AnnouncementType[ self.attributes.announcement_type.upper() ], announcement_title=self.attributes.announcement_title, announcement_message=self.attributes.announcement_message, ) return None def remove_announcement(self): self.attributes.remove_announcement() def remove_description(self): self.attributes.remove_description() def remove_user_description(self): self.attributes.remove_user_description() def remove_owners(self): self.attributes.remove_owners() def remove_certificate(self): self.attributes.remove_certificate() type_name: str = Field(default="Asset", allow_mutation=False) @validator("type_name") def validate_type_name(cls, v): if v != "Asset": raise ValueError("must be Asset") return v def __setattr__(self, name, value): if name in Asset._convenience_properties: return object.__setattr__(self, name, value) super().__setattr__(name, value) NAME: ClassVar[KeywordTextStemmedField] = KeywordTextStemmedField( "name", "name.keyword", "name", "name.stemmed" ) """ Name of this asset. Fallback for display purposes, if displayName is empty. """ DISPLAY_NAME: ClassVar[KeywordTextField] = KeywordTextField( "displayName", "displayName.keyword", "displayName" ) """ Human-readable name of this asset used for display purposes (in user interface). """ DESCRIPTION: ClassVar[KeywordTextField] = KeywordTextField( "description", "description.keyword", "description" ) """ Description of this asset, for example as crawled from a source. Fallback for display purposes, if userDescription is empty. """ # noqa: E501 USER_DESCRIPTION: ClassVar[KeywordTextField] = KeywordTextField( "userDescription", "userDescription.keyword", "userDescription" ) """ Description of this asset, as provided by a user. If present, this will be used for the description in user interface. """ # noqa: E501 TENANT_ID: ClassVar[TextField] = TextField("tenantId", "tenantId") """ Name of the Atlan workspace in which this asset exists. """ CERTIFICATE_STATUS: ClassVar[KeywordTextField] = KeywordTextField( "certificateStatus", "certificateStatus", "certificateStatus.text" ) """ Status of this asset's certification. """ CERTIFICATE_STATUS_MESSAGE: ClassVar[TextField] = TextField( "certificateStatusMessage", "certificateStatusMessage" ) """ Human-readable descriptive message used to provide further detail to certificateStatus. """ CERTIFICATE_UPDATED_BY: ClassVar[KeywordField] = KeywordField( "certificateUpdatedBy", "certificateUpdatedBy" ) """ Name of the user who last updated the certification of this asset. """ CERTIFICATE_UPDATED_AT: ClassVar[NumericField] = NumericField( "certificateUpdatedAt", "certificateUpdatedAt" ) """ Time (epoch) at which the certification was last updated, in milliseconds. """ ANNOUNCEMENT_TITLE: ClassVar[TextField] = TextField( "announcementTitle", "announcementTitle" ) """ Brief title for the announcement on this asset. Required when announcementType is specified. """ ANNOUNCEMENT_MESSAGE: ClassVar[TextField] = TextField( "announcementMessage", "announcementMessage" ) """ Detailed message to include in the announcement on this asset. """ ANNOUNCEMENT_TYPE: ClassVar[KeywordField] = KeywordField( "announcementType", "announcementType" ) """ Type of announcement on this asset. """ ANNOUNCEMENT_UPDATED_AT: ClassVar[NumericField] = NumericField( "announcementUpdatedAt", "announcementUpdatedAt" ) """ Time (epoch) at which the announcement was last updated, in milliseconds. """ ANNOUNCEMENT_UPDATED_BY: ClassVar[KeywordField] = KeywordField( "announcementUpdatedBy", "announcementUpdatedBy" ) """ Name of the user who last updated the announcement. """ OWNER_USERS: ClassVar[KeywordField] = KeywordField("ownerUsers", "ownerUsers") """ List of users who own this asset. """ OWNER_GROUPS: ClassVar[KeywordField] = KeywordField("ownerGroups", "ownerGroups") """ List of groups who own this asset. """ ADMIN_USERS: ClassVar[KeywordField] = KeywordField("adminUsers", "adminUsers") """ List of users who administer this asset. (This is only used for certain asset types.) """ ADMIN_GROUPS: ClassVar[KeywordField] = KeywordField("adminGroups", "adminGroups") """ List of groups who administer this asset. (This is only used for certain asset types.) """ VIEWER_USERS: ClassVar[KeywordField] = KeywordField("viewerUsers", "viewerUsers") """ List of users who can view assets contained in a collection. (This is only used for certain asset types.) """ VIEWER_GROUPS: ClassVar[KeywordField] = KeywordField("viewerGroups", "viewerGroups") """ List of groups who can view assets contained in a collection. (This is only used for certain asset types.) """ CONNECTOR_NAME: ClassVar[KeywordField] = KeywordField( "connectorName", "connectorName" ) """ Type of the connector through which this asset is accessible. """ CONNECTION_NAME: ClassVar[KeywordTextField] = KeywordTextField( "connectionName", "connectionName", "connectionName.text" ) """ Simple name of the connection through which this asset is accessible. """ CONNECTION_QUALIFIED_NAME: ClassVar[KeywordTextField] = KeywordTextField( "connectionQualifiedName", "connectionQualifiedName", "connectionQualifiedName.text", ) """ Unique name of the connection through which this asset is accessible. """ HAS_LINEAGE: ClassVar[BooleanField] = BooleanField("__hasLineage", "__hasLineage") """ Whether this asset has lineage (true) or not (false). """ IS_DISCOVERABLE: ClassVar[BooleanField] = BooleanField( "isDiscoverable", "isDiscoverable" ) """ Whether this asset is discoverable through the UI (true) or not (false). """ IS_EDITABLE: ClassVar[BooleanField] = BooleanField("isEditable", "isEditable") """ Whether this asset can be edited in the UI (true) or not (false). """ SUB_TYPE: ClassVar[KeywordField] = KeywordField("subType", "subType") """ Subtype of this asset. """ VIEW_SCORE: ClassVar[NumericRankField] = NumericRankField( "viewScore", "viewScore", "viewScore.rank_feature" ) """ View score for this asset. """ POPULARITY_SCORE: ClassVar[NumericRankField] = NumericRankField( "popularityScore", "popularityScore", "popularityScore.rank_feature" ) """ Popularity score for this asset. """ SOURCE_OWNERS: ClassVar[TextField] = TextField("sourceOwners", "sourceOwners") """ List of owners of this asset, in the source system. """ SOURCE_CREATED_BY: ClassVar[KeywordField] = KeywordField( "sourceCreatedBy", "sourceCreatedBy" ) """ Name of the user who created this asset, in the source system. """ SOURCE_CREATED_AT: ClassVar[NumericField] = NumericField( "sourceCreatedAt", "sourceCreatedAt" ) """ Time (epoch) at which this asset was created in the source system, in milliseconds. """ SOURCE_UPDATED_AT: ClassVar[NumericField] = NumericField( "sourceUpdatedAt", "sourceUpdatedAt" ) """ Time (epoch) at which this asset was last updated in the source system, in milliseconds. """ SOURCE_UPDATED_BY: ClassVar[KeywordField] = KeywordField( "sourceUpdatedBy", "sourceUpdatedBy" ) """ Name of the user who last updated this asset, in the source system. """ SOURCE_URL: ClassVar[KeywordField] = KeywordField("sourceURL", "sourceURL") """ URL to the resource within the source application, used to create a button to view this asset in the source application. """ # noqa: E501 SOURCE_EMBED_URL: ClassVar[KeywordField] = KeywordField( "sourceEmbedURL", "sourceEmbedURL" ) """ URL to create an embed for a resource (for example, an image of a dashboard) within Atlan. """ LAST_SYNC_WORKFLOW_NAME: ClassVar[KeywordField] = KeywordField( "lastSyncWorkflowName", "lastSyncWorkflowName" ) """ Name of the crawler that last synchronized this asset. """ LAST_SYNC_RUN_AT: ClassVar[NumericField] = NumericField( "lastSyncRunAt", "lastSyncRunAt" ) """ Time (epoch) at which this asset was last crawled, in milliseconds. """ LAST_SYNC_RUN: ClassVar[KeywordField] = KeywordField("lastSyncRun", "lastSyncRun") """ Name of the last run of the crawler that last synchronized this asset. """ ADMIN_ROLES: ClassVar[KeywordField] = KeywordField("adminRoles", "adminRoles") """ List of roles who administer this asset. (This is only used for Connection assets.) """ SOURCE_READ_COUNT: ClassVar[NumericField] = NumericField( "sourceReadCount", "sourceReadCount" ) """ Total count of all read operations at source. """ SOURCE_READ_USER_COUNT: ClassVar[NumericField] = NumericField( "sourceReadUserCount", "sourceReadUserCount" ) """ Total number of unique users that read data from asset. """ SOURCE_LAST_READ_AT: ClassVar[NumericField] = NumericField( "sourceLastReadAt", "sourceLastReadAt" ) """ Timestamp of most recent read operation. """ LAST_ROW_CHANGED_AT: ClassVar[NumericField] = NumericField( "lastRowChangedAt", "lastRowChangedAt" ) """ Time (epoch) of the last operation that inserted, updated, or deleted rows, in milliseconds. """ SOURCE_TOTAL_COST: ClassVar[NumericField] = NumericField( "sourceTotalCost", "sourceTotalCost" ) """ Total cost of all operations at source. """ SOURCE_COST_UNIT: ClassVar[KeywordField] = KeywordField( "sourceCostUnit", "sourceCostUnit" ) """ The unit of measure for sourceTotalCost. """ SOURCE_READ_QUERY_COST: ClassVar[NumericField] = NumericField( "sourceReadQueryCost", "sourceReadQueryCost" ) """ Total cost of read queries at source. """ SOURCE_READ_RECENT_USER_LIST: ClassVar[KeywordField] = KeywordField( "sourceReadRecentUserList", "sourceReadRecentUserList" ) """ List of usernames of the most recent users who read this asset. """ SOURCE_READ_RECENT_USER_RECORD_LIST: ClassVar[KeywordField] = KeywordField( "sourceReadRecentUserRecordList", "sourceReadRecentUserRecordList" ) """ List of usernames with extra insights for the most recent users who read this asset. """ SOURCE_READ_TOP_USER_LIST: ClassVar[KeywordField] = KeywordField( "sourceReadTopUserList", "sourceReadTopUserList" ) """ List of usernames of the users who read this asset the most. """ SOURCE_READ_TOP_USER_RECORD_LIST: ClassVar[KeywordField] = KeywordField( "sourceReadTopUserRecordList", "sourceReadTopUserRecordList" ) """ List of usernames with extra insights for the users who read this asset the most. """ SOURCE_READ_POPULAR_QUERY_RECORD_LIST: ClassVar[KeywordField] = KeywordField( "sourceReadPopularQueryRecordList", "sourceReadPopularQueryRecordList" ) """ List of the most popular queries that accessed this asset. """ SOURCE_READ_EXPENSIVE_QUERY_RECORD_LIST: ClassVar[KeywordField] = KeywordField( "sourceReadExpensiveQueryRecordList", "sourceReadExpensiveQueryRecordList" ) """ List of the most expensive queries that accessed this asset. """ SOURCE_READ_SLOW_QUERY_RECORD_LIST: ClassVar[KeywordField] = KeywordField( "sourceReadSlowQueryRecordList", "sourceReadSlowQueryRecordList" ) """ List of the slowest queries that accessed this asset. """ SOURCE_QUERY_COMPUTE_COST_LIST: ClassVar[KeywordField] = KeywordField( "sourceQueryComputeCostList", "sourceQueryComputeCostList" ) """ List of most expensive warehouse names. """ SOURCE_QUERY_COMPUTE_COST_RECORD_LIST: ClassVar[KeywordField] = KeywordField( "sourceQueryComputeCostRecordList", "sourceQueryComputeCostRecordList" ) """ List of most expensive warehouses with extra insights. """ DBT_QUALIFIED_NAME: ClassVar[KeywordTextField] = KeywordTextField( "dbtQualifiedName", "dbtQualifiedName", "dbtQualifiedName.text" ) """ Unique name of this asset in dbt. """ ASSET_DBT_WORKFLOW_LAST_UPDATED: ClassVar[KeywordField] = KeywordField( "assetDbtWorkflowLastUpdated", "assetDbtWorkflowLastUpdated" ) """ Name of the DBT workflow in Atlan that last updated the asset. """ ASSET_DBT_ALIAS: ClassVar[KeywordTextField] = KeywordTextField( "assetDbtAlias", "assetDbtAlias.keyword", "assetDbtAlias" ) """ Alias of this asset in dbt. """ ASSET_DBT_META: ClassVar[TextField] = TextField("assetDbtMeta", "assetDbtMeta") """ Metadata for this asset in dbt, specifically everything under the 'meta' key in the dbt object. """ ASSET_DBT_UNIQUE_ID: ClassVar[KeywordTextField] = KeywordTextField( "assetDbtUniqueId", "assetDbtUniqueId.keyword", "assetDbtUniqueId" ) """ Unique identifier of this asset in dbt. """ ASSET_DBT_ACCOUNT_NAME: ClassVar[KeywordTextField] = KeywordTextField( "assetDbtAccountName", "assetDbtAccountName.keyword", "assetDbtAccountName" ) """ Name of the account in which this asset exists in dbt. """ ASSET_DBT_PROJECT_NAME: ClassVar[KeywordTextField] = KeywordTextField( "assetDbtProjectName", "assetDbtProjectName.keyword", "assetDbtProjectName" ) """ Name of the project in which this asset exists in dbt. """ ASSET_DBT_PACKAGE_NAME: ClassVar[KeywordTextField] = KeywordTextField( "assetDbtPackageName", "assetDbtPackageName.keyword", "assetDbtPackageName" ) """ Name of the package in which this asset exists in dbt. """ ASSET_DBT_JOB_NAME: ClassVar[KeywordTextField] = KeywordTextField( "assetDbtJobName", "assetDbtJobName.keyword", "assetDbtJobName" ) """ Name of the job that materialized this asset in dbt. """ ASSET_DBT_JOB_SCHEDULE: ClassVar[KeywordField] = KeywordField( "assetDbtJobSchedule", "assetDbtJobSchedule" ) """ Schedule of the job that materialized this asset in dbt. """ ASSET_DBT_JOB_STATUS: ClassVar[KeywordField] = KeywordField( "assetDbtJobStatus", "assetDbtJobStatus" ) """ Status of the job that materialized this asset in dbt. """ ASSET_DBT_TEST_STATUS: ClassVar[KeywordField] = KeywordField( "assetDbtTestStatus", "assetDbtTestStatus" ) """ All associated dbt test statuses. """ ASSET_DBT_JOB_SCHEDULE_CRON_HUMANIZED: ClassVar[TextField] = TextField( "assetDbtJobScheduleCronHumanized", "assetDbtJobScheduleCronHumanized" ) """ Human-readable cron schedule of the job that materialized this asset in dbt. """ ASSET_DBT_JOB_LAST_RUN: ClassVar[NumericField] = NumericField( "assetDbtJobLastRun", "assetDbtJobLastRun" ) """ Time (epoch) at which the job that materialized this asset in dbt last ran, in milliseconds. """ ASSET_DBT_JOB_LAST_RUN_URL: ClassVar[KeywordField] = KeywordField( "assetDbtJobLastRunUrl", "assetDbtJobLastRunUrl" ) """ URL of the last run of the job that materialized this asset in dbt. """ ASSET_DBT_JOB_LAST_RUN_CREATED_AT: ClassVar[NumericField] = NumericField( "assetDbtJobLastRunCreatedAt", "assetDbtJobLastRunCreatedAt" ) """ Time (epoch) at which the job that materialized this asset in dbt was last created, in milliseconds. """ ASSET_DBT_JOB_LAST_RUN_UPDATED_AT: ClassVar[NumericField] = NumericField( "assetDbtJobLastRunUpdatedAt", "assetDbtJobLastRunUpdatedAt" ) """ Time (epoch) at which the job that materialized this asset in dbt was last updated, in milliseconds. """ ASSET_DBT_JOB_LAST_RUN_DEQUED_AT: ClassVar[NumericField] = NumericField( "assetDbtJobLastRunDequedAt", "assetDbtJobLastRunDequedAt" ) """ Time (epoch) at which the job that materialized this asset in dbt was dequeued, in milliseconds. """ ASSET_DBT_JOB_LAST_RUN_STARTED_AT: ClassVar[NumericField] = NumericField( "assetDbtJobLastRunStartedAt", "assetDbtJobLastRunStartedAt" ) """ Time (epoch) at which the job that materialized this asset in dbt was started running, in milliseconds. """ ASSET_DBT_JOB_LAST_RUN_TOTAL_DURATION: ClassVar[KeywordField] = KeywordField( "assetDbtJobLastRunTotalDuration", "assetDbtJobLastRunTotalDuration" ) """ Total duration of the last run of the job that materialized this asset in dbt. """ ASSET_DBT_JOB_LAST_RUN_TOTAL_DURATION_HUMANIZED: ClassVar[TextField] = TextField( "assetDbtJobLastRunTotalDurationHumanized", "assetDbtJobLastRunTotalDurationHumanized", ) """ Human-readable total duration of the last run of the job that materialized this asset in dbt. """ ASSET_DBT_JOB_LAST_RUN_QUEUED_DURATION: ClassVar[KeywordField] = KeywordField( "assetDbtJobLastRunQueuedDuration", "assetDbtJobLastRunQueuedDuration" ) """ Total duration the job that materialized this asset in dbt spent being queued. """ ASSET_DBT_JOB_LAST_RUN_QUEUED_DURATION_HUMANIZED: ClassVar[KeywordField] = ( KeywordField( "assetDbtJobLastRunQueuedDurationHumanized", "assetDbtJobLastRunQueuedDurationHumanized", ) ) """ Human-readable total duration of the last run of the job that materialized this asset in dbt spend being queued. """ ASSET_DBT_JOB_LAST_RUN_RUN_DURATION: ClassVar[KeywordField] = KeywordField( "assetDbtJobLastRunRunDuration", "assetDbtJobLastRunRunDuration" ) """ Run duration of the last run of the job that materialized this asset in dbt. """ ASSET_DBT_JOB_LAST_RUN_RUN_DURATION_HUMANIZED: ClassVar[KeywordField] = ( KeywordField( "assetDbtJobLastRunRunDurationHumanized", "assetDbtJobLastRunRunDurationHumanized", ) ) """ Human-readable run duration of the last run of the job that materialized this asset in dbt. """ ASSET_DBT_JOB_LAST_RUN_GIT_BRANCH: ClassVar[KeywordTextField] = KeywordTextField( "assetDbtJobLastRunGitBranch", "assetDbtJobLastRunGitBranch", "assetDbtJobLastRunGitBranch.text", ) """ Branch in git from which the last run of the job that materialized this asset in dbt ran. """ ASSET_DBT_JOB_LAST_RUN_GIT_SHA: ClassVar[KeywordField] = KeywordField( "assetDbtJobLastRunGitSha", "assetDbtJobLastRunGitSha" ) """ SHA hash in git for the last run of the job that materialized this asset in dbt. """ ASSET_DBT_JOB_LAST_RUN_STATUS_MESSAGE: ClassVar[KeywordTextField] = ( KeywordTextField( "assetDbtJobLastRunStatusMessage", "assetDbtJobLastRunStatusMessage.keyword", "assetDbtJobLastRunStatusMessage", ) ) """ Status message of the last run of the job that materialized this asset in dbt. """ ASSET_DBT_JOB_LAST_RUN_OWNER_THREAD_ID: ClassVar[KeywordField] = KeywordField( "assetDbtJobLastRunOwnerThreadId", "assetDbtJobLastRunOwnerThreadId" ) """ Thread ID of the owner of the last run of the job that materialized this asset in dbt. """ ASSET_DBT_JOB_LAST_RUN_EXECUTED_BY_THREAD_ID: ClassVar[KeywordField] = KeywordField( "assetDbtJobLastRunExecutedByThreadId", "assetDbtJobLastRunExecutedByThreadId" ) """ Thread ID of the user who executed the last run of the job that materialized this asset in dbt. """ ASSET_DBT_JOB_LAST_RUN_ARTIFACTS_SAVED: ClassVar[BooleanField] = BooleanField( "assetDbtJobLastRunArtifactsSaved", "assetDbtJobLastRunArtifactsSaved" ) """ Whether artifacts were saved from the last run of the job that materialized this asset in dbt (true) or not (false). """ ASSET_DBT_JOB_LAST_RUN_ARTIFACT_S3PATH: ClassVar[KeywordField] = KeywordField( "assetDbtJobLastRunArtifactS3Path", "assetDbtJobLastRunArtifactS3Path" ) """ Path in S3 to the artifacts saved from the last run of the job that materialized this asset in dbt. """ ASSET_DBT_JOB_LAST_RUN_HAS_DOCS_GENERATED: ClassVar[BooleanField] = BooleanField( "assetDbtJobLastRunHasDocsGenerated", "assetDbtJobLastRunHasDocsGenerated" ) """ Whether docs were generated from the last run of the job that materialized this asset in dbt (true) or not (false). """ ASSET_DBT_JOB_LAST_RUN_HAS_SOURCES_GENERATED: ClassVar[BooleanField] = BooleanField( "assetDbtJobLastRunHasSourcesGenerated", "assetDbtJobLastRunHasSourcesGenerated" ) """ Whether sources were generated from the last run of the job that materialized this asset in dbt (true) or not (false). """ # noqa: E501 ASSET_DBT_JOB_LAST_RUN_NOTIFICATIONS_SENT: ClassVar[BooleanField] = BooleanField( "assetDbtJobLastRunNotificationsSent", "assetDbtJobLastRunNotificationsSent" ) """ Whether notifications were sent from the last run of the job that materialized this asset in dbt (true) or not (false). """ # noqa: E501 ASSET_DBT_JOB_NEXT_RUN: ClassVar[NumericField] = NumericField( "assetDbtJobNextRun", "assetDbtJobNextRun" ) """ Time (epoch) when the next run of the job that materializes this asset in dbt is scheduled. """ ASSET_DBT_JOB_NEXT_RUN_HUMANIZED: ClassVar[KeywordTextField] = KeywordTextField( "assetDbtJobNextRunHumanized", "assetDbtJobNextRunHumanized.keyword", "assetDbtJobNextRunHumanized", ) """ Human-readable time when the next run of the job that materializes this asset in dbt is scheduled. """ ASSET_DBT_ENVIRONMENT_NAME: ClassVar[KeywordTextField] = KeywordTextField( "assetDbtEnvironmentName", "assetDbtEnvironmentName.keyword", "assetDbtEnvironmentName", ) """ Name of the environment in which this asset is materialized in dbt. """ ASSET_DBT_ENVIRONMENT_DBT_VERSION: ClassVar[KeywordField] = KeywordField( "assetDbtEnvironmentDbtVersion", "assetDbtEnvironmentDbtVersion" ) """ Version of the environment in which this asset is materialized in dbt. """ ASSET_DBT_TAGS: ClassVar[KeywordTextField] = KeywordTextField( "assetDbtTags", "assetDbtTags", "assetDbtTags.text" ) """ List of tags attached to this asset in dbt. """ ASSET_DBT_SEMANTIC_LAYER_PROXY_URL: ClassVar[KeywordField] = KeywordField( "assetDbtSemanticLayerProxyUrl", "assetDbtSemanticLayerProxyUrl" ) """ URL of the semantic layer proxy for this asset in dbt. """ ASSET_DBT_SOURCE_FRESHNESS_CRITERIA: ClassVar[TextField] = TextField( "assetDbtSourceFreshnessCriteria", "assetDbtSourceFreshnessCriteria" ) """ Freshness criteria for the source of this asset in dbt. """ SAMPLE_DATA_URL: ClassVar[KeywordTextField] = KeywordTextField( "sampleDataUrl", "sampleDataUrl", "sampleDataUrl.text" ) """ URL for sample data for this asset. """ ASSET_TAGS: ClassVar[KeywordTextField] = KeywordTextField( "assetTags", "assetTags", "assetTags.text" ) """ List of tags attached to this asset. """ ASSET_MC_INCIDENT_NAMES: ClassVar[KeywordTextField] = KeywordTextField( "assetMcIncidentNames", "assetMcIncidentNames.keyword", "assetMcIncidentNames" ) """ List of Monte Carlo incident names attached to this asset. """ ASSET_MC_INCIDENT_QUALIFIED_NAMES: ClassVar[KeywordTextField] = KeywordTextField( "assetMcIncidentQualifiedNames", "assetMcIncidentQualifiedNames", "assetMcIncidentQualifiedNames.text", ) """ List of unique Monte Carlo incident names attached to this asset. """ ASSET_MC_ALERT_QUALIFIED_NAMES: ClassVar[KeywordTextField] = KeywordTextField( "assetMcAlertQualifiedNames", "assetMcAlertQualifiedNames", "assetMcAlertQualifiedNames.text", ) """ List of unique Monte Carlo alert names attached to this asset. """ ASSET_MC_MONITOR_NAMES: ClassVar[KeywordTextField] = KeywordTextField( "assetMcMonitorNames", "assetMcMonitorNames.keyword", "assetMcMonitorNames" ) """ List of Monte Carlo monitor names attached to this asset. """ ASSET_MC_MONITOR_QUALIFIED_NAMES: ClassVar[KeywordTextField] = KeywordTextField( "assetMcMonitorQualifiedNames", "assetMcMonitorQualifiedNames", "assetMcMonitorQualifiedNames.text", ) """ List of unique Monte Carlo monitor names attached to this asset. """ ASSET_MC_MONITOR_STATUSES: ClassVar[KeywordField] = KeywordField( "assetMcMonitorStatuses", "assetMcMonitorStatuses" ) """ Statuses of all associated Monte Carlo monitors. """ ASSET_MC_MONITOR_TYPES: ClassVar[KeywordField] = KeywordField( "assetMcMonitorTypes", "assetMcMonitorTypes" ) """ Types of all associated Monte Carlo monitors. """ ASSET_MC_MONITOR_SCHEDULE_TYPES: ClassVar[KeywordField] = KeywordField( "assetMcMonitorScheduleTypes", "assetMcMonitorScheduleTypes" ) """ Schedules of all associated Monte Carlo monitors. """ ASSET_MC_INCIDENT_TYPES: ClassVar[KeywordField] = KeywordField( "assetMcIncidentTypes", "assetMcIncidentTypes" ) """ List of Monte Carlo incident types associated with this asset. """ ASSET_MC_INCIDENT_SUB_TYPES: ClassVar[KeywordField] = KeywordField( "assetMcIncidentSubTypes", "assetMcIncidentSubTypes" ) """ List of Monte Carlo incident sub-types associated with this asset. """ ASSET_MC_INCIDENT_SEVERITIES: ClassVar[KeywordField] = KeywordField( "assetMcIncidentSeverities", "assetMcIncidentSeverities" ) """ List of Monte Carlo incident severities associated with this asset. """ ASSET_MC_INCIDENT_PRIORITIES: ClassVar[KeywordField] = KeywordField( "assetMcIncidentPriorities", "assetMcIncidentPriorities" ) """ List of Monte Carlo incident priorities associated with this asset. """ ASSET_MC_INCIDENT_STATES: ClassVar[KeywordField] = KeywordField( "assetMcIncidentStates", "assetMcIncidentStates" ) """ List of Monte Carlo incident states associated with this asset. """ ASSET_MC_IS_MONITORED: ClassVar[BooleanField] = BooleanField( "assetMcIsMonitored", "assetMcIsMonitored" ) """ Tracks whether this asset is monitored by MC or not """ ASSET_MC_LAST_SYNC_RUN_AT: ClassVar[NumericField] = NumericField( "assetMcLastSyncRunAt", "assetMcLastSyncRunAt" ) """ Time (epoch) at which this asset was last synced from Monte Carlo. """ STARRED_BY: ClassVar[KeywordField] = KeywordField("starredBy", "starredBy") """ Users who have starred this asset. """ STARRED_DETAILS_LIST: ClassVar[KeywordField] = KeywordField( "starredDetailsList", "starredDetailsList" ) """ List of usernames with extra information of the users who have starred an asset. """ STARRED_COUNT: ClassVar[NumericField] = NumericField("starredCount", "starredCount") """ Number of users who have starred this asset. """ ASSET_ANOMALO_DQ_STATUS: ClassVar[KeywordField] = KeywordField( "assetAnomaloDQStatus", "assetAnomaloDQStatus" ) """ Status of data quality from Anomalo. """ ASSET_ANOMALO_CHECK_COUNT: ClassVar[NumericField] = NumericField( "assetAnomaloCheckCount", "assetAnomaloCheckCount" ) """ Total number of checks present in Anomalo for this asset. """ ASSET_ANOMALO_FAILED_CHECK_COUNT: ClassVar[NumericField] = NumericField( "assetAnomaloFailedCheckCount", "assetAnomaloFailedCheckCount" ) """ Total number of checks failed in Anomalo for this asset. """ ASSET_ANOMALO_CHECK_STATUSES: ClassVar[TextField] = TextField( "assetAnomaloCheckStatuses", "assetAnomaloCheckStatuses" ) """ Stringified JSON object containing status of all Anomalo checks associated to this asset. """ ASSET_ANOMALO_LAST_CHECK_RUN_AT: ClassVar[NumericField] = NumericField( "assetAnomaloLastCheckRunAt", "assetAnomaloLastCheckRunAt" ) """ Time (epoch) at which the last check was run via Anomalo. """ ASSET_ANOMALO_APPLIED_CHECK_TYPES: ClassVar[KeywordField] = KeywordField( "assetAnomaloAppliedCheckTypes", "assetAnomaloAppliedCheckTypes" ) """ All associated Anomalo check types. """ ASSET_ANOMALO_FAILED_CHECK_TYPES: ClassVar[KeywordField] = KeywordField( "assetAnomaloFailedCheckTypes", "assetAnomaloFailedCheckTypes" ) """ All associated Anomalo failed check types. """ ASSET_ANOMALO_SOURCE_URL: ClassVar[TextField] = TextField( "assetAnomaloSourceUrl", "assetAnomaloSourceUrl" ) """ URL of the source in Anomalo. """ ASSET_SODA_DQ_STATUS: ClassVar[KeywordField] = KeywordField( "assetSodaDQStatus", "assetSodaDQStatus" ) """ Status of data quality from Soda. """ ASSET_SODA_CHECK_COUNT: ClassVar[NumericField] = NumericField( "assetSodaCheckCount", "assetSodaCheckCount" ) """ Number of checks done via Soda. """ ASSET_SODA_LAST_SYNC_RUN_AT: ClassVar[NumericField] = NumericField( "assetSodaLastSyncRunAt", "assetSodaLastSyncRunAt" ) """ """ ASSET_SODA_LAST_SCAN_AT: ClassVar[NumericField] = NumericField( "assetSodaLastScanAt", "assetSodaLastScanAt" ) """ """ ASSET_SODA_CHECK_STATUSES: ClassVar[TextField] = TextField( "assetSodaCheckStatuses", "assetSodaCheckStatuses" ) """ All associated Soda check statuses. """ ASSET_SODA_SOURCE_URL: ClassVar[KeywordField] = KeywordField( "assetSodaSourceURL", "assetSodaSourceURL" ) """ """ ASSET_ICON: ClassVar[TextField] = TextField("assetIcon", "assetIcon") """ Name of the icon to use for this asset. (Only applies to glossaries, currently.) """ IS_PARTIAL: ClassVar[BooleanField] = BooleanField("isPartial", "isPartial") """ Indicates this asset is not fully-known, if true. """ IS_AI_GENERATED: ClassVar[BooleanField] = BooleanField( "isAIGenerated", "isAIGenerated" ) """ """ ASSET_COVER_IMAGE: ClassVar[TextField] = TextField( "assetCoverImage", "assetCoverImage" ) """ Cover image to use for this asset in the UI (applicable to only a few asset types). """ ASSET_THEME_HEX: ClassVar[TextField] = TextField("assetThemeHex", "assetThemeHex") """ Color (in hexadecimal RGB) to use to represent this asset. """ LEXICOGRAPHICAL_SORT_ORDER: ClassVar[KeywordField] = KeywordField( "lexicographicalSortOrder", "lexicographicalSortOrder" ) """ Custom order for sorting purpose, managed by client """ HAS_CONTRACT: ClassVar[BooleanField] = BooleanField("hasContract", "hasContract") """ Whether this asset has contract (true) or not (false). """ ASSET_REDIRECT_GUIDS: ClassVar[KeywordField] = KeywordField( "assetRedirectGUIDs", "assetRedirectGUIDs" ) """ Array of asset ids that equivalent to this asset. """ ASSET_POLICY_GUIDS: ClassVar[KeywordField] = KeywordField( "assetPolicyGUIDs", "assetPolicyGUIDs" ) """ Array of policy ids governing this asset """ ASSET_POLICIES_COUNT: ClassVar[NumericField] = NumericField( "assetPoliciesCount", "assetPoliciesCount" ) """ Count of policies inside the asset """ DOMAIN_GUIDS: ClassVar[KeywordField] = KeywordField("domainGUIDs", "domainGUIDs") """ Array of domain guids linked to this asset """ NON_COMPLIANT_ASSET_POLICY_GUIDS: ClassVar[KeywordField] = KeywordField( "nonCompliantAssetPolicyGUIDs", "nonCompliantAssetPolicyGUIDs" ) """ Array of policy ids non-compliant to this asset """ PRODUCT_GUIDS: ClassVar[KeywordField] = KeywordField("productGUIDs", "productGUIDs") """ Array of product guids linked to this asset """ OUTPUT_PRODUCT_GUIDS: ClassVar[KeywordField] = KeywordField( "outputProductGUIDs", "outputProductGUIDs" ) """ Array of product guids which have this asset as outputPort """ APPLICATION_QUALIFIED_NAME: ClassVar[KeywordField] = KeywordField( "applicationQualifiedName", "applicationQualifiedName" ) """ Qualified name of the Application that contains this asset. """ APPLICATION_FIELD_QUALIFIED_NAME: ClassVar[KeywordField] = KeywordField( "applicationFieldQualifiedName", "applicationFieldQualifiedName" ) """ Qualified name of the ApplicationField that contains this asset. """ ASSET_USER_DEFINED_TYPE: ClassVar[KeywordField] = KeywordField( "assetUserDefinedType", "assetUserDefinedType" ) """ Name to use for this type of asset, as a subtype of the actual typeName. """ SCHEMA_REGISTRY_SUBJECTS: ClassVar[RelationField] = RelationField( "schemaRegistrySubjects" ) """ TBC """ DATA_CONTRACT_LATEST_CERTIFIED: ClassVar[RelationField] = RelationField( "dataContractLatestCertified" ) """ TBC """ ANOMALO_CHECKS: ClassVar[RelationField] = RelationField("anomaloChecks") """ TBC """ USER_DEF_RELATIONSHIP_TO: ClassVar[RelationField] = RelationField( "userDefRelationshipTo" ) """ TBC """ OUTPUT_PORT_DATA_PRODUCTS: ClassVar[RelationField] = RelationField( "outputPortDataProducts" ) """ TBC """ USER_DEF_RELATIONSHIP_FROM: ClassVar[RelationField] = RelationField( "userDefRelationshipFrom" ) """ TBC """ README: ClassVar[RelationField] = RelationField("readme") """ TBC """ APPLICATION_FIELD: ClassVar[RelationField] = RelationField("applicationField") """ TBC """ DATA_CONTRACT_LATEST: ClassVar[RelationField] = RelationField("dataContractLatest") """ TBC """ MC_MONITORS: ClassVar[RelationField] = RelationField("mcMonitors") """ TBC """ APPLICATION: ClassVar[RelationField] = RelationField("application") """ TBC """ FILES: ClassVar[RelationField] = RelationField("files") """ TBC """ MC_INCIDENTS: ClassVar[RelationField] = RelationField("mcIncidents") """ TBC """ LINKS: ClassVar[RelationField] = RelationField("links") """ TBC """ METRICS: ClassVar[RelationField] = RelationField("metrics") """ TBC """ INPUT_PORT_DATA_PRODUCTS: ClassVar[RelationField] = RelationField( "inputPortDataProducts" ) """ TBC """ SODA_CHECKS: ClassVar[RelationField] = RelationField("sodaChecks") """ TBC """ _convenience_properties: ClassVar[List[str]] = [ "name", "display_name", "description", "user_description", "tenant_id", "certificate_status", "certificate_status_message", "certificate_updated_by", "certificate_updated_at", "announcement_title", "announcement_message", "announcement_type", "announcement_updated_at", "announcement_updated_by", "owner_users", "owner_groups", "admin_users", "admin_groups", "viewer_users", "viewer_groups", "connector_name", "connection_name", "connection_qualified_name", "has_lineage", "is_discoverable", "is_editable", "sub_type", "view_score", "popularity_score", "source_owners", "source_created_by", "source_created_at", "source_updated_at", "source_updated_by", "source_url", "source_embed_url", "last_sync_workflow_name", "last_sync_run_at", "last_sync_run", "admin_roles", "source_read_count", "source_read_user_count", "source_last_read_at", "last_row_changed_at", "source_total_cost", "source_cost_unit", "source_read_query_cost", "source_read_recent_user_list", "source_read_recent_user_record_list", "source_read_top_user_list", "source_read_top_user_record_list", "source_read_popular_query_record_list", "source_read_expensive_query_record_list", "source_read_slow_query_record_list", "source_query_compute_cost_list", "source_query_compute_cost_record_list", "dbt_qualified_name", "asset_dbt_workflow_last_updated", "asset_dbt_alias", "asset_dbt_meta", "asset_dbt_unique_id", "asset_dbt_account_name", "asset_dbt_project_name", "asset_dbt_package_name", "asset_dbt_job_name", "asset_dbt_job_schedule", "asset_dbt_job_status", "asset_dbt_test_status", "asset_dbt_job_schedule_cron_humanized", "asset_dbt_job_last_run", "asset_dbt_job_last_run_url", "asset_dbt_job_last_run_created_at", "asset_dbt_job_last_run_updated_at", "asset_dbt_job_last_run_dequed_at", "asset_dbt_job_last_run_started_at", "asset_dbt_job_last_run_total_duration", "asset_dbt_job_last_run_total_duration_humanized", "asset_dbt_job_last_run_queued_duration", "asset_dbt_job_last_run_queued_duration_humanized", "asset_dbt_job_last_run_run_duration", "asset_dbt_job_last_run_run_duration_humanized", "asset_dbt_job_last_run_git_branch", "asset_dbt_job_last_run_git_sha", "asset_dbt_job_last_run_status_message", "asset_dbt_job_last_run_owner_thread_id", "asset_dbt_job_last_run_executed_by_thread_id", "asset_dbt_job_last_run_artifacts_saved", "asset_dbt_job_last_run_artifact_s3_path", "asset_dbt_job_last_run_has_docs_generated", "asset_dbt_job_last_run_has_sources_generated", "asset_dbt_job_last_run_notifications_sent", "asset_dbt_job_next_run", "asset_dbt_job_next_run_humanized", "asset_dbt_environment_name", "asset_dbt_environment_dbt_version", "asset_dbt_tags", "asset_dbt_semantic_layer_proxy_url", "asset_dbt_source_freshness_criteria", "sample_data_url", "asset_tags", "asset_mc_incident_names", "asset_mc_incident_qualified_names", "asset_mc_alert_qualified_names", "asset_mc_monitor_names", "asset_mc_monitor_qualified_names", "asset_mc_monitor_statuses", "asset_mc_monitor_types", "asset_mc_monitor_schedule_types", "asset_mc_incident_types", "asset_mc_incident_sub_types", "asset_mc_incident_severities", "asset_mc_incident_priorities", "asset_mc_incident_states", "asset_mc_is_monitored", "asset_mc_last_sync_run_at", "starred_by", "starred_details_list", "starred_count", "asset_anomalo_d_q_status", "asset_anomalo_check_count", "asset_anomalo_failed_check_count", "asset_anomalo_check_statuses", "asset_anomalo_last_check_run_at", "asset_anomalo_applied_check_types", "asset_anomalo_failed_check_types", "asset_anomalo_source_url", "asset_soda_d_q_status", "asset_soda_check_count", "asset_soda_last_sync_run_at", "asset_soda_last_scan_at", "asset_soda_check_statuses", "asset_soda_source_url", "asset_icon", "is_partial", "is_a_i_generated", "asset_cover_image", "asset_theme_hex", "lexicographical_sort_order", "has_contract", "asset_redirect_g_u_i_ds", "asset_policy_g_u_i_ds", "asset_policies_count", "domain_g_u_i_ds", "non_compliant_asset_policy_g_u_i_ds", "product_g_u_i_ds", "output_product_g_u_i_ds", "application_qualified_name", "application_field_qualified_name", "asset_user_defined_type", "schema_registry_subjects", "data_contract_latest_certified", "anomalo_checks", "user_def_relationship_to", "output_port_data_products", "user_def_relationship_from", "readme", "application_field", "data_contract_latest", "assigned_terms", "mc_monitors", "application", "files", "mc_incidents", "links", "metrics", "input_port_data_products", "soda_checks", ] @property def name(self) -> Optional[str]: return None if self.attributes is None else self.attributes.name @name.setter def name(self, name: Optional[str]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.name = name @property def display_name(self) -> Optional[str]: return None if self.attributes is None else self.attributes.display_name @display_name.setter def display_name(self, display_name: Optional[str]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.display_name = display_name @property def description(self) -> Optional[str]: return None if self.attributes is None else self.attributes.description @description.setter def description(self, description: Optional[str]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.description = description @property def user_description(self) -> Optional[str]: return None if self.attributes is None else self.attributes.user_description @user_description.setter def user_description(self, user_description: Optional[str]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.user_description = user_description @property def tenant_id(self) -> Optional[str]: return None if self.attributes is None else self.attributes.tenant_id @tenant_id.setter def tenant_id(self, tenant_id: Optional[str]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.tenant_id = tenant_id @property def certificate_status(self) -> Optional[CertificateStatus]: return None if self.attributes is None else self.attributes.certificate_status @certificate_status.setter def certificate_status(self, certificate_status: Optional[CertificateStatus]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.certificate_status = certificate_status @property def certificate_status_message(self) -> Optional[str]: return ( None if self.attributes is None else self.attributes.certificate_status_message ) @certificate_status_message.setter def certificate_status_message(self, certificate_status_message: Optional[str]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.certificate_status_message = certificate_status_message @property def certificate_updated_by(self) -> Optional[str]: return ( None if self.attributes is None else self.attributes.certificate_updated_by ) @certificate_updated_by.setter def certificate_updated_by(self, certificate_updated_by: Optional[str]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.certificate_updated_by = certificate_updated_by @property def certificate_updated_at(self) -> Optional[datetime]: return ( None if self.attributes is None else self.attributes.certificate_updated_at ) @certificate_updated_at.setter def certificate_updated_at(self, certificate_updated_at: Optional[datetime]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.certificate_updated_at = certificate_updated_at @property def announcement_title(self) -> Optional[str]: return None if self.attributes is None else self.attributes.announcement_title @announcement_title.setter def announcement_title(self, announcement_title: Optional[str]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.announcement_title = announcement_title @property def announcement_message(self) -> Optional[str]: return None if self.attributes is None else self.attributes.announcement_message @announcement_message.setter def announcement_message(self, announcement_message: Optional[str]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.announcement_message = announcement_message @property def announcement_type(self) -> Optional[str]: return None if self.attributes is None else self.attributes.announcement_type @announcement_type.setter def announcement_type(self, announcement_type: Optional[str]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.announcement_type = announcement_type @property def announcement_updated_at(self) -> Optional[datetime]: return ( None if self.attributes is None else self.attributes.announcement_updated_at ) @announcement_updated_at.setter def announcement_updated_at(self, announcement_updated_at: Optional[datetime]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.announcement_updated_at = announcement_updated_at @property def announcement_updated_by(self) -> Optional[str]: return ( None if self.attributes is None else self.attributes.announcement_updated_by ) @announcement_updated_by.setter def announcement_updated_by(self, announcement_updated_by: Optional[str]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.announcement_updated_by = announcement_updated_by @property def owner_users(self) -> Optional[Set[str]]: return None if self.attributes is None else self.attributes.owner_users @owner_users.setter def owner_users(self, owner_users: Optional[Set[str]]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.owner_users = owner_users @property def owner_groups(self) -> Optional[Set[str]]: return None if self.attributes is None else self.attributes.owner_groups @owner_groups.setter def owner_groups(self, owner_groups: Optional[Set[str]]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.owner_groups = owner_groups @property def admin_users(self) -> Optional[Set[str]]: return None if self.attributes is None else self.attributes.admin_users @admin_users.setter def admin_users(self, admin_users: Optional[Set[str]]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.admin_users = admin_users @property def admin_groups(self) -> Optional[Set[str]]: return None if self.attributes is None else self.attributes.admin_groups @admin_groups.setter def admin_groups(self, admin_groups: Optional[Set[str]]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.admin_groups = admin_groups @property def viewer_users(self) -> Optional[Set[str]]: return None if self.attributes is None else self.attributes.viewer_users @viewer_users.setter def viewer_users(self, viewer_users: Optional[Set[str]]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.viewer_users = viewer_users @property def viewer_groups(self) -> Optional[Set[str]]: return None if self.attributes is None else self.attributes.viewer_groups @viewer_groups.setter def viewer_groups(self, viewer_groups: Optional[Set[str]]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.viewer_groups = viewer_groups @property def connector_name(self) -> Optional[str]: return None if self.attributes is None else self.attributes.connector_name @connector_name.setter def connector_name(self, connector_name: Optional[str]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.connector_name = connector_name @property def connection_name(self) -> Optional[str]: return None if self.attributes is None else self.attributes.connection_name @connection_name.setter def connection_name(self, connection_name: Optional[str]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.connection_name = connection_name @property def connection_qualified_name(self) -> Optional[str]: return ( None if self.attributes is None else self.attributes.connection_qualified_name ) @connection_qualified_name.setter def connection_qualified_name(self, connection_qualified_name: Optional[str]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.connection_qualified_name = connection_qualified_name @property def has_lineage(self) -> Optional[bool]: return None if self.attributes is None else self.attributes.has_lineage @has_lineage.setter def has_lineage(self, has_lineage: Optional[bool]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.has_lineage = has_lineage @property def is_discoverable(self) -> Optional[bool]: return None if self.attributes is None else self.attributes.is_discoverable @is_discoverable.setter def is_discoverable(self, is_discoverable: Optional[bool]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.is_discoverable = is_discoverable @property def is_editable(self) -> Optional[bool]: return None if self.attributes is None else self.attributes.is_editable @is_editable.setter def is_editable(self, is_editable: Optional[bool]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.is_editable = is_editable @property def sub_type(self) -> Optional[str]: return None if self.attributes is None else self.attributes.sub_type @sub_type.setter def sub_type(self, sub_type: Optional[str]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.sub_type = sub_type @property def view_score(self) -> Optional[float]: return None if self.attributes is None else self.attributes.view_score @view_score.setter def view_score(self, view_score: Optional[float]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.view_score = view_score @property def popularity_score(self) -> Optional[float]: return None if self.attributes is None else self.attributes.popularity_score @popularity_score.setter def popularity_score(self, popularity_score: Optional[float]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.popularity_score = popularity_score @property def source_owners(self) -> Optional[str]: return None if self.attributes is None else self.attributes.source_owners @source_owners.setter def source_owners(self, source_owners: Optional[str]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.source_owners = source_owners @property def source_created_by(self) -> Optional[str]: return None if self.attributes is None else self.attributes.source_created_by @source_created_by.setter def source_created_by(self, source_created_by: Optional[str]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.source_created_by = source_created_by @property def source_created_at(self) -> Optional[datetime]: return None if self.attributes is None else self.attributes.source_created_at @source_created_at.setter def source_created_at(self, source_created_at: Optional[datetime]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.source_created_at = source_created_at @property def source_updated_at(self) -> Optional[datetime]: return None if self.attributes is None else self.attributes.source_updated_at @source_updated_at.setter def source_updated_at(self, source_updated_at: Optional[datetime]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.source_updated_at = source_updated_at @property def source_updated_by(self) -> Optional[str]: return None if self.attributes is None else self.attributes.source_updated_by @source_updated_by.setter def source_updated_by(self, source_updated_by: Optional[str]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.source_updated_by = source_updated_by @property def source_url(self) -> Optional[str]: return None if self.attributes is None else self.attributes.source_url @source_url.setter def source_url(self, source_url: Optional[str]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.source_url = source_url @property def source_embed_url(self) -> Optional[str]: return None if self.attributes is None else self.attributes.source_embed_url @source_embed_url.setter def source_embed_url(self, source_embed_url: Optional[str]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.source_embed_url = source_embed_url @property def last_sync_workflow_name(self) -> Optional[str]: return ( None if self.attributes is None else self.attributes.last_sync_workflow_name ) @last_sync_workflow_name.setter def last_sync_workflow_name(self, last_sync_workflow_name: Optional[str]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.last_sync_workflow_name = last_sync_workflow_name @property def last_sync_run_at(self) -> Optional[datetime]: return None if self.attributes is None else self.attributes.last_sync_run_at @last_sync_run_at.setter def last_sync_run_at(self, last_sync_run_at: Optional[datetime]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.last_sync_run_at = last_sync_run_at @property def last_sync_run(self) -> Optional[str]: return None if self.attributes is None else self.attributes.last_sync_run @last_sync_run.setter def last_sync_run(self, last_sync_run: Optional[str]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.last_sync_run = last_sync_run @property def admin_roles(self) -> Optional[Set[str]]: return None if self.attributes is None else self.attributes.admin_roles @admin_roles.setter def admin_roles(self, admin_roles: Optional[Set[str]]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.admin_roles = admin_roles @property def source_read_count(self) -> Optional[int]: return None if self.attributes is None else self.attributes.source_read_count @source_read_count.setter def source_read_count(self, source_read_count: Optional[int]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.source_read_count = source_read_count @property def source_read_user_count(self) -> Optional[int]: return ( None if self.attributes is None else self.attributes.source_read_user_count ) @source_read_user_count.setter def source_read_user_count(self, source_read_user_count: Optional[int]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.source_read_user_count = source_read_user_count @property def source_last_read_at(self) -> Optional[datetime]: return None if self.attributes is None else self.attributes.source_last_read_at @source_last_read_at.setter def source_last_read_at(self, source_last_read_at: Optional[datetime]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.source_last_read_at = source_last_read_at @property def last_row_changed_at(self) -> Optional[datetime]: return None if self.attributes is None else self.attributes.last_row_changed_at @last_row_changed_at.setter def last_row_changed_at(self, last_row_changed_at: Optional[datetime]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.last_row_changed_at = last_row_changed_at @property def source_total_cost(self) -> Optional[float]: return None if self.attributes is None else self.attributes.source_total_cost @source_total_cost.setter def source_total_cost(self, source_total_cost: Optional[float]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.source_total_cost = source_total_cost @property def source_cost_unit(self) -> Optional[SourceCostUnitType]: return None if self.attributes is None else self.attributes.source_cost_unit @source_cost_unit.setter def source_cost_unit(self, source_cost_unit: Optional[SourceCostUnitType]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.source_cost_unit = source_cost_unit @property def source_read_query_cost(self) -> Optional[float]: return ( None if self.attributes is None else self.attributes.source_read_query_cost ) @source_read_query_cost.setter def source_read_query_cost(self, source_read_query_cost: Optional[float]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.source_read_query_cost = source_read_query_cost @property def source_read_recent_user_list(self) -> Optional[Set[str]]: return ( None if self.attributes is None else self.attributes.source_read_recent_user_list ) @source_read_recent_user_list.setter def source_read_recent_user_list( self, source_read_recent_user_list: Optional[Set[str]] ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.source_read_recent_user_list = source_read_recent_user_list @property def source_read_recent_user_record_list(self) -> Optional[List[PopularityInsights]]: return ( None if self.attributes is None else self.attributes.source_read_recent_user_record_list ) @source_read_recent_user_record_list.setter def source_read_recent_user_record_list( self, source_read_recent_user_record_list: Optional[List[PopularityInsights]] ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.source_read_recent_user_record_list = ( source_read_recent_user_record_list ) @property def source_read_top_user_list(self) -> Optional[Set[str]]: return ( None if self.attributes is None else self.attributes.source_read_top_user_list ) @source_read_top_user_list.setter def source_read_top_user_list(self, source_read_top_user_list: Optional[Set[str]]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.source_read_top_user_list = source_read_top_user_list @property def source_read_top_user_record_list(self) -> Optional[List[PopularityInsights]]: return ( None if self.attributes is None else self.attributes.source_read_top_user_record_list ) @source_read_top_user_record_list.setter def source_read_top_user_record_list( self, source_read_top_user_record_list: Optional[List[PopularityInsights]] ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.source_read_top_user_record_list = ( source_read_top_user_record_list ) @property def source_read_popular_query_record_list( self, ) -> Optional[List[PopularityInsights]]: return ( None if self.attributes is None else self.attributes.source_read_popular_query_record_list ) @source_read_popular_query_record_list.setter def source_read_popular_query_record_list( self, source_read_popular_query_record_list: Optional[List[PopularityInsights]] ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.source_read_popular_query_record_list = ( source_read_popular_query_record_list ) @property def source_read_expensive_query_record_list( self, ) -> Optional[List[PopularityInsights]]: return ( None if self.attributes is None else self.attributes.source_read_expensive_query_record_list ) @source_read_expensive_query_record_list.setter def source_read_expensive_query_record_list( self, source_read_expensive_query_record_list: Optional[List[PopularityInsights]], ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.source_read_expensive_query_record_list = ( source_read_expensive_query_record_list ) @property def source_read_slow_query_record_list(self) -> Optional[List[PopularityInsights]]: return ( None if self.attributes is None else self.attributes.source_read_slow_query_record_list ) @source_read_slow_query_record_list.setter def source_read_slow_query_record_list( self, source_read_slow_query_record_list: Optional[List[PopularityInsights]] ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.source_read_slow_query_record_list = ( source_read_slow_query_record_list ) @property def source_query_compute_cost_list(self) -> Optional[Set[str]]: return ( None if self.attributes is None else self.attributes.source_query_compute_cost_list ) @source_query_compute_cost_list.setter def source_query_compute_cost_list( self, source_query_compute_cost_list: Optional[Set[str]] ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.source_query_compute_cost_list = source_query_compute_cost_list @property def source_query_compute_cost_record_list( self, ) -> Optional[List[PopularityInsights]]: return ( None if self.attributes is None else self.attributes.source_query_compute_cost_record_list ) @source_query_compute_cost_record_list.setter def source_query_compute_cost_record_list( self, source_query_compute_cost_record_list: Optional[List[PopularityInsights]] ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.source_query_compute_cost_record_list = ( source_query_compute_cost_record_list ) @property def dbt_qualified_name(self) -> Optional[str]: return None if self.attributes is None else self.attributes.dbt_qualified_name @dbt_qualified_name.setter def dbt_qualified_name(self, dbt_qualified_name: Optional[str]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.dbt_qualified_name = dbt_qualified_name @property def asset_dbt_workflow_last_updated(self) -> Optional[str]: return ( None if self.attributes is None else self.attributes.asset_dbt_workflow_last_updated ) @asset_dbt_workflow_last_updated.setter def asset_dbt_workflow_last_updated( self, asset_dbt_workflow_last_updated: Optional[str] ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_dbt_workflow_last_updated = ( asset_dbt_workflow_last_updated ) @property def asset_dbt_alias(self) -> Optional[str]: return None if self.attributes is None else self.attributes.asset_dbt_alias @asset_dbt_alias.setter def asset_dbt_alias(self, asset_dbt_alias: Optional[str]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_dbt_alias = asset_dbt_alias @property def asset_dbt_meta(self) -> Optional[str]: return None if self.attributes is None else self.attributes.asset_dbt_meta @asset_dbt_meta.setter def asset_dbt_meta(self, asset_dbt_meta: Optional[str]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_dbt_meta = asset_dbt_meta @property def asset_dbt_unique_id(self) -> Optional[str]: return None if self.attributes is None else self.attributes.asset_dbt_unique_id @asset_dbt_unique_id.setter def asset_dbt_unique_id(self, asset_dbt_unique_id: Optional[str]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_dbt_unique_id = asset_dbt_unique_id @property def asset_dbt_account_name(self) -> Optional[str]: return ( None if self.attributes is None else self.attributes.asset_dbt_account_name ) @asset_dbt_account_name.setter def asset_dbt_account_name(self, asset_dbt_account_name: Optional[str]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_dbt_account_name = asset_dbt_account_name @property def asset_dbt_project_name(self) -> Optional[str]: return ( None if self.attributes is None else self.attributes.asset_dbt_project_name ) @asset_dbt_project_name.setter def asset_dbt_project_name(self, asset_dbt_project_name: Optional[str]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_dbt_project_name = asset_dbt_project_name @property def asset_dbt_package_name(self) -> Optional[str]: return ( None if self.attributes is None else self.attributes.asset_dbt_package_name ) @asset_dbt_package_name.setter def asset_dbt_package_name(self, asset_dbt_package_name: Optional[str]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_dbt_package_name = asset_dbt_package_name @property def asset_dbt_job_name(self) -> Optional[str]: return None if self.attributes is None else self.attributes.asset_dbt_job_name @asset_dbt_job_name.setter def asset_dbt_job_name(self, asset_dbt_job_name: Optional[str]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_dbt_job_name = asset_dbt_job_name @property def asset_dbt_job_schedule(self) -> Optional[str]: return ( None if self.attributes is None else self.attributes.asset_dbt_job_schedule ) @asset_dbt_job_schedule.setter def asset_dbt_job_schedule(self, asset_dbt_job_schedule: Optional[str]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_dbt_job_schedule = asset_dbt_job_schedule @property def asset_dbt_job_status(self) -> Optional[str]: return None if self.attributes is None else self.attributes.asset_dbt_job_status @asset_dbt_job_status.setter def asset_dbt_job_status(self, asset_dbt_job_status: Optional[str]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_dbt_job_status = asset_dbt_job_status @property def asset_dbt_test_status(self) -> Optional[str]: return ( None if self.attributes is None else self.attributes.asset_dbt_test_status ) @asset_dbt_test_status.setter def asset_dbt_test_status(self, asset_dbt_test_status: Optional[str]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_dbt_test_status = asset_dbt_test_status @property def asset_dbt_job_schedule_cron_humanized(self) -> Optional[str]: return ( None if self.attributes is None else self.attributes.asset_dbt_job_schedule_cron_humanized ) @asset_dbt_job_schedule_cron_humanized.setter def asset_dbt_job_schedule_cron_humanized( self, asset_dbt_job_schedule_cron_humanized: Optional[str] ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_dbt_job_schedule_cron_humanized = ( asset_dbt_job_schedule_cron_humanized ) @property def asset_dbt_job_last_run(self) -> Optional[datetime]: return ( None if self.attributes is None else self.attributes.asset_dbt_job_last_run ) @asset_dbt_job_last_run.setter def asset_dbt_job_last_run(self, asset_dbt_job_last_run: Optional[datetime]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_dbt_job_last_run = asset_dbt_job_last_run @property def asset_dbt_job_last_run_url(self) -> Optional[str]: return ( None if self.attributes is None else self.attributes.asset_dbt_job_last_run_url ) @asset_dbt_job_last_run_url.setter def asset_dbt_job_last_run_url(self, asset_dbt_job_last_run_url: Optional[str]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_dbt_job_last_run_url = asset_dbt_job_last_run_url @property def asset_dbt_job_last_run_created_at(self) -> Optional[datetime]: return ( None if self.attributes is None else self.attributes.asset_dbt_job_last_run_created_at ) @asset_dbt_job_last_run_created_at.setter def asset_dbt_job_last_run_created_at( self, asset_dbt_job_last_run_created_at: Optional[datetime] ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_dbt_job_last_run_created_at = ( asset_dbt_job_last_run_created_at ) @property def asset_dbt_job_last_run_updated_at(self) -> Optional[datetime]: return ( None if self.attributes is None else self.attributes.asset_dbt_job_last_run_updated_at ) @asset_dbt_job_last_run_updated_at.setter def asset_dbt_job_last_run_updated_at( self, asset_dbt_job_last_run_updated_at: Optional[datetime] ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_dbt_job_last_run_updated_at = ( asset_dbt_job_last_run_updated_at ) @property def asset_dbt_job_last_run_dequed_at(self) -> Optional[datetime]: return ( None if self.attributes is None else self.attributes.asset_dbt_job_last_run_dequed_at ) @asset_dbt_job_last_run_dequed_at.setter def asset_dbt_job_last_run_dequed_at( self, asset_dbt_job_last_run_dequed_at: Optional[datetime] ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_dbt_job_last_run_dequed_at = ( asset_dbt_job_last_run_dequed_at ) @property def asset_dbt_job_last_run_started_at(self) -> Optional[datetime]: return ( None if self.attributes is None else self.attributes.asset_dbt_job_last_run_started_at ) @asset_dbt_job_last_run_started_at.setter def asset_dbt_job_last_run_started_at( self, asset_dbt_job_last_run_started_at: Optional[datetime] ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_dbt_job_last_run_started_at = ( asset_dbt_job_last_run_started_at ) @property def asset_dbt_job_last_run_total_duration(self) -> Optional[str]: return ( None if self.attributes is None else self.attributes.asset_dbt_job_last_run_total_duration ) @asset_dbt_job_last_run_total_duration.setter def asset_dbt_job_last_run_total_duration( self, asset_dbt_job_last_run_total_duration: Optional[str] ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_dbt_job_last_run_total_duration = ( asset_dbt_job_last_run_total_duration ) @property def asset_dbt_job_last_run_total_duration_humanized(self) -> Optional[str]: return ( None if self.attributes is None else self.attributes.asset_dbt_job_last_run_total_duration_humanized ) @asset_dbt_job_last_run_total_duration_humanized.setter def asset_dbt_job_last_run_total_duration_humanized( self, asset_dbt_job_last_run_total_duration_humanized: Optional[str] ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_dbt_job_last_run_total_duration_humanized = ( asset_dbt_job_last_run_total_duration_humanized ) @property def asset_dbt_job_last_run_queued_duration(self) -> Optional[str]: return ( None if self.attributes is None else self.attributes.asset_dbt_job_last_run_queued_duration ) @asset_dbt_job_last_run_queued_duration.setter def asset_dbt_job_last_run_queued_duration( self, asset_dbt_job_last_run_queued_duration: Optional[str] ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_dbt_job_last_run_queued_duration = ( asset_dbt_job_last_run_queued_duration ) @property def asset_dbt_job_last_run_queued_duration_humanized(self) -> Optional[str]: return ( None if self.attributes is None else self.attributes.asset_dbt_job_last_run_queued_duration_humanized ) @asset_dbt_job_last_run_queued_duration_humanized.setter def asset_dbt_job_last_run_queued_duration_humanized( self, asset_dbt_job_last_run_queued_duration_humanized: Optional[str] ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_dbt_job_last_run_queued_duration_humanized = ( asset_dbt_job_last_run_queued_duration_humanized ) @property def asset_dbt_job_last_run_run_duration(self) -> Optional[str]: return ( None if self.attributes is None else self.attributes.asset_dbt_job_last_run_run_duration ) @asset_dbt_job_last_run_run_duration.setter def asset_dbt_job_last_run_run_duration( self, asset_dbt_job_last_run_run_duration: Optional[str] ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_dbt_job_last_run_run_duration = ( asset_dbt_job_last_run_run_duration ) @property def asset_dbt_job_last_run_run_duration_humanized(self) -> Optional[str]: return ( None if self.attributes is None else self.attributes.asset_dbt_job_last_run_run_duration_humanized ) @asset_dbt_job_last_run_run_duration_humanized.setter def asset_dbt_job_last_run_run_duration_humanized( self, asset_dbt_job_last_run_run_duration_humanized: Optional[str] ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_dbt_job_last_run_run_duration_humanized = ( asset_dbt_job_last_run_run_duration_humanized ) @property def asset_dbt_job_last_run_git_branch(self) -> Optional[str]: return ( None if self.attributes is None else self.attributes.asset_dbt_job_last_run_git_branch ) @asset_dbt_job_last_run_git_branch.setter def asset_dbt_job_last_run_git_branch( self, asset_dbt_job_last_run_git_branch: Optional[str] ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_dbt_job_last_run_git_branch = ( asset_dbt_job_last_run_git_branch ) @property def asset_dbt_job_last_run_git_sha(self) -> Optional[str]: return ( None if self.attributes is None else self.attributes.asset_dbt_job_last_run_git_sha ) @asset_dbt_job_last_run_git_sha.setter def asset_dbt_job_last_run_git_sha( self, asset_dbt_job_last_run_git_sha: Optional[str] ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_dbt_job_last_run_git_sha = asset_dbt_job_last_run_git_sha @property def asset_dbt_job_last_run_status_message(self) -> Optional[str]: return ( None if self.attributes is None else self.attributes.asset_dbt_job_last_run_status_message ) @asset_dbt_job_last_run_status_message.setter def asset_dbt_job_last_run_status_message( self, asset_dbt_job_last_run_status_message: Optional[str] ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_dbt_job_last_run_status_message = ( asset_dbt_job_last_run_status_message ) @property def asset_dbt_job_last_run_owner_thread_id(self) -> Optional[str]: return ( None if self.attributes is None else self.attributes.asset_dbt_job_last_run_owner_thread_id ) @asset_dbt_job_last_run_owner_thread_id.setter def asset_dbt_job_last_run_owner_thread_id( self, asset_dbt_job_last_run_owner_thread_id: Optional[str] ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_dbt_job_last_run_owner_thread_id = ( asset_dbt_job_last_run_owner_thread_id ) @property def asset_dbt_job_last_run_executed_by_thread_id(self) -> Optional[str]: return ( None if self.attributes is None else self.attributes.asset_dbt_job_last_run_executed_by_thread_id ) @asset_dbt_job_last_run_executed_by_thread_id.setter def asset_dbt_job_last_run_executed_by_thread_id( self, asset_dbt_job_last_run_executed_by_thread_id: Optional[str] ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_dbt_job_last_run_executed_by_thread_id = ( asset_dbt_job_last_run_executed_by_thread_id ) @property def asset_dbt_job_last_run_artifacts_saved(self) -> Optional[bool]: return ( None if self.attributes is None else self.attributes.asset_dbt_job_last_run_artifacts_saved ) @asset_dbt_job_last_run_artifacts_saved.setter def asset_dbt_job_last_run_artifacts_saved( self, asset_dbt_job_last_run_artifacts_saved: Optional[bool] ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_dbt_job_last_run_artifacts_saved = ( asset_dbt_job_last_run_artifacts_saved ) @property def asset_dbt_job_last_run_artifact_s3_path(self) -> Optional[str]: return ( None if self.attributes is None else self.attributes.asset_dbt_job_last_run_artifact_s3_path ) @asset_dbt_job_last_run_artifact_s3_path.setter def asset_dbt_job_last_run_artifact_s3_path( self, asset_dbt_job_last_run_artifact_s3_path: Optional[str] ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_dbt_job_last_run_artifact_s3_path = ( asset_dbt_job_last_run_artifact_s3_path ) @property def asset_dbt_job_last_run_has_docs_generated(self) -> Optional[bool]: return ( None if self.attributes is None else self.attributes.asset_dbt_job_last_run_has_docs_generated ) @asset_dbt_job_last_run_has_docs_generated.setter def asset_dbt_job_last_run_has_docs_generated( self, asset_dbt_job_last_run_has_docs_generated: Optional[bool] ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_dbt_job_last_run_has_docs_generated = ( asset_dbt_job_last_run_has_docs_generated ) @property def asset_dbt_job_last_run_has_sources_generated(self) -> Optional[bool]: return ( None if self.attributes is None else self.attributes.asset_dbt_job_last_run_has_sources_generated ) @asset_dbt_job_last_run_has_sources_generated.setter def asset_dbt_job_last_run_has_sources_generated( self, asset_dbt_job_last_run_has_sources_generated: Optional[bool] ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_dbt_job_last_run_has_sources_generated = ( asset_dbt_job_last_run_has_sources_generated ) @property def asset_dbt_job_last_run_notifications_sent(self) -> Optional[bool]: return ( None if self.attributes is None else self.attributes.asset_dbt_job_last_run_notifications_sent ) @asset_dbt_job_last_run_notifications_sent.setter def asset_dbt_job_last_run_notifications_sent( self, asset_dbt_job_last_run_notifications_sent: Optional[bool] ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_dbt_job_last_run_notifications_sent = ( asset_dbt_job_last_run_notifications_sent ) @property def asset_dbt_job_next_run(self) -> Optional[datetime]: return ( None if self.attributes is None else self.attributes.asset_dbt_job_next_run ) @asset_dbt_job_next_run.setter def asset_dbt_job_next_run(self, asset_dbt_job_next_run: Optional[datetime]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_dbt_job_next_run = asset_dbt_job_next_run @property def asset_dbt_job_next_run_humanized(self) -> Optional[str]: return ( None if self.attributes is None else self.attributes.asset_dbt_job_next_run_humanized ) @asset_dbt_job_next_run_humanized.setter def asset_dbt_job_next_run_humanized( self, asset_dbt_job_next_run_humanized: Optional[str] ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_dbt_job_next_run_humanized = ( asset_dbt_job_next_run_humanized ) @property def asset_dbt_environment_name(self) -> Optional[str]: return ( None if self.attributes is None else self.attributes.asset_dbt_environment_name ) @asset_dbt_environment_name.setter def asset_dbt_environment_name(self, asset_dbt_environment_name: Optional[str]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_dbt_environment_name = asset_dbt_environment_name @property def asset_dbt_environment_dbt_version(self) -> Optional[str]: return ( None if self.attributes is None else self.attributes.asset_dbt_environment_dbt_version ) @asset_dbt_environment_dbt_version.setter def asset_dbt_environment_dbt_version( self, asset_dbt_environment_dbt_version: Optional[str] ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_dbt_environment_dbt_version = ( asset_dbt_environment_dbt_version ) @property def asset_dbt_tags(self) -> Optional[Set[str]]: return None if self.attributes is None else self.attributes.asset_dbt_tags @asset_dbt_tags.setter def asset_dbt_tags(self, asset_dbt_tags: Optional[Set[str]]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_dbt_tags = asset_dbt_tags @property def asset_dbt_semantic_layer_proxy_url(self) -> Optional[str]: return ( None if self.attributes is None else self.attributes.asset_dbt_semantic_layer_proxy_url ) @asset_dbt_semantic_layer_proxy_url.setter def asset_dbt_semantic_layer_proxy_url( self, asset_dbt_semantic_layer_proxy_url: Optional[str] ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_dbt_semantic_layer_proxy_url = ( asset_dbt_semantic_layer_proxy_url ) @property def asset_dbt_source_freshness_criteria(self) -> Optional[str]: return ( None if self.attributes is None else self.attributes.asset_dbt_source_freshness_criteria ) @asset_dbt_source_freshness_criteria.setter def asset_dbt_source_freshness_criteria( self, asset_dbt_source_freshness_criteria: Optional[str] ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_dbt_source_freshness_criteria = ( asset_dbt_source_freshness_criteria ) @property def sample_data_url(self) -> Optional[str]: return None if self.attributes is None else self.attributes.sample_data_url @sample_data_url.setter def sample_data_url(self, sample_data_url: Optional[str]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.sample_data_url = sample_data_url @property def asset_tags(self) -> Optional[Set[str]]: return None if self.attributes is None else self.attributes.asset_tags @asset_tags.setter def asset_tags(self, asset_tags: Optional[Set[str]]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_tags = asset_tags @property def asset_mc_incident_names(self) -> Optional[Set[str]]: return ( None if self.attributes is None else self.attributes.asset_mc_incident_names ) @asset_mc_incident_names.setter def asset_mc_incident_names(self, asset_mc_incident_names: Optional[Set[str]]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_mc_incident_names = asset_mc_incident_names @property def asset_mc_incident_qualified_names(self) -> Optional[Set[str]]: return ( None if self.attributes is None else self.attributes.asset_mc_incident_qualified_names ) @asset_mc_incident_qualified_names.setter def asset_mc_incident_qualified_names( self, asset_mc_incident_qualified_names: Optional[Set[str]] ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_mc_incident_qualified_names = ( asset_mc_incident_qualified_names ) @property def asset_mc_alert_qualified_names(self) -> Optional[Set[str]]: return ( None if self.attributes is None else self.attributes.asset_mc_alert_qualified_names ) @asset_mc_alert_qualified_names.setter def asset_mc_alert_qualified_names( self, asset_mc_alert_qualified_names: Optional[Set[str]] ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_mc_alert_qualified_names = asset_mc_alert_qualified_names @property def asset_mc_monitor_names(self) -> Optional[Set[str]]: return ( None if self.attributes is None else self.attributes.asset_mc_monitor_names ) @asset_mc_monitor_names.setter def asset_mc_monitor_names(self, asset_mc_monitor_names: Optional[Set[str]]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_mc_monitor_names = asset_mc_monitor_names @property def asset_mc_monitor_qualified_names(self) -> Optional[Set[str]]: return ( None if self.attributes is None else self.attributes.asset_mc_monitor_qualified_names ) @asset_mc_monitor_qualified_names.setter def asset_mc_monitor_qualified_names( self, asset_mc_monitor_qualified_names: Optional[Set[str]] ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_mc_monitor_qualified_names = ( asset_mc_monitor_qualified_names ) @property def asset_mc_monitor_statuses(self) -> Optional[Set[str]]: return ( None if self.attributes is None else self.attributes.asset_mc_monitor_statuses ) @asset_mc_monitor_statuses.setter def asset_mc_monitor_statuses(self, asset_mc_monitor_statuses: Optional[Set[str]]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_mc_monitor_statuses = asset_mc_monitor_statuses @property def asset_mc_monitor_types(self) -> Optional[Set[str]]: return ( None if self.attributes is None else self.attributes.asset_mc_monitor_types ) @asset_mc_monitor_types.setter def asset_mc_monitor_types(self, asset_mc_monitor_types: Optional[Set[str]]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_mc_monitor_types = asset_mc_monitor_types @property def asset_mc_monitor_schedule_types(self) -> Optional[Set[str]]: return ( None if self.attributes is None else self.attributes.asset_mc_monitor_schedule_types ) @asset_mc_monitor_schedule_types.setter def asset_mc_monitor_schedule_types( self, asset_mc_monitor_schedule_types: Optional[Set[str]] ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_mc_monitor_schedule_types = ( asset_mc_monitor_schedule_types ) @property def asset_mc_incident_types(self) -> Optional[Set[str]]: return ( None if self.attributes is None else self.attributes.asset_mc_incident_types ) @asset_mc_incident_types.setter def asset_mc_incident_types(self, asset_mc_incident_types: Optional[Set[str]]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_mc_incident_types = asset_mc_incident_types @property def asset_mc_incident_sub_types(self) -> Optional[Set[str]]: return ( None if self.attributes is None else self.attributes.asset_mc_incident_sub_types ) @asset_mc_incident_sub_types.setter def asset_mc_incident_sub_types( self, asset_mc_incident_sub_types: Optional[Set[str]] ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_mc_incident_sub_types = asset_mc_incident_sub_types @property def asset_mc_incident_severities(self) -> Optional[Set[str]]: return ( None if self.attributes is None else self.attributes.asset_mc_incident_severities ) @asset_mc_incident_severities.setter def asset_mc_incident_severities( self, asset_mc_incident_severities: Optional[Set[str]] ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_mc_incident_severities = asset_mc_incident_severities @property def asset_mc_incident_priorities(self) -> Optional[Set[str]]: return ( None if self.attributes is None else self.attributes.asset_mc_incident_priorities ) @asset_mc_incident_priorities.setter def asset_mc_incident_priorities( self, asset_mc_incident_priorities: Optional[Set[str]] ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_mc_incident_priorities = asset_mc_incident_priorities @property def asset_mc_incident_states(self) -> Optional[Set[str]]: return ( None if self.attributes is None else self.attributes.asset_mc_incident_states ) @asset_mc_incident_states.setter def asset_mc_incident_states(self, asset_mc_incident_states: Optional[Set[str]]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_mc_incident_states = asset_mc_incident_states @property def asset_mc_is_monitored(self) -> Optional[bool]: return ( None if self.attributes is None else self.attributes.asset_mc_is_monitored ) @asset_mc_is_monitored.setter def asset_mc_is_monitored(self, asset_mc_is_monitored: Optional[bool]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_mc_is_monitored = asset_mc_is_monitored @property def asset_mc_last_sync_run_at(self) -> Optional[datetime]: return ( None if self.attributes is None else self.attributes.asset_mc_last_sync_run_at ) @asset_mc_last_sync_run_at.setter def asset_mc_last_sync_run_at(self, asset_mc_last_sync_run_at: Optional[datetime]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_mc_last_sync_run_at = asset_mc_last_sync_run_at @property def starred_by(self) -> Optional[Set[str]]: return None if self.attributes is None else self.attributes.starred_by @starred_by.setter def starred_by(self, starred_by: Optional[Set[str]]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.starred_by = starred_by @property def starred_details_list(self) -> Optional[List[StarredDetails]]: return None if self.attributes is None else self.attributes.starred_details_list @starred_details_list.setter def starred_details_list( self, starred_details_list: Optional[List[StarredDetails]] ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.starred_details_list = starred_details_list @property def starred_count(self) -> Optional[int]: return None if self.attributes is None else self.attributes.starred_count @starred_count.setter def starred_count(self, starred_count: Optional[int]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.starred_count = starred_count @property def asset_anomalo_d_q_status(self) -> Optional[str]: return ( None if self.attributes is None else self.attributes.asset_anomalo_d_q_status ) @asset_anomalo_d_q_status.setter def asset_anomalo_d_q_status(self, asset_anomalo_d_q_status: Optional[str]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_anomalo_d_q_status = asset_anomalo_d_q_status @property def asset_anomalo_check_count(self) -> Optional[int]: return ( None if self.attributes is None else self.attributes.asset_anomalo_check_count ) @asset_anomalo_check_count.setter def asset_anomalo_check_count(self, asset_anomalo_check_count: Optional[int]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_anomalo_check_count = asset_anomalo_check_count @property def asset_anomalo_failed_check_count(self) -> Optional[int]: return ( None if self.attributes is None else self.attributes.asset_anomalo_failed_check_count ) @asset_anomalo_failed_check_count.setter def asset_anomalo_failed_check_count( self, asset_anomalo_failed_check_count: Optional[int] ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_anomalo_failed_check_count = ( asset_anomalo_failed_check_count ) @property def asset_anomalo_check_statuses(self) -> Optional[str]: return ( None if self.attributes is None else self.attributes.asset_anomalo_check_statuses ) @asset_anomalo_check_statuses.setter def asset_anomalo_check_statuses(self, asset_anomalo_check_statuses: Optional[str]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_anomalo_check_statuses = asset_anomalo_check_statuses @property def asset_anomalo_last_check_run_at(self) -> Optional[datetime]: return ( None if self.attributes is None else self.attributes.asset_anomalo_last_check_run_at ) @asset_anomalo_last_check_run_at.setter def asset_anomalo_last_check_run_at( self, asset_anomalo_last_check_run_at: Optional[datetime] ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_anomalo_last_check_run_at = ( asset_anomalo_last_check_run_at ) @property def asset_anomalo_applied_check_types(self) -> Optional[Set[str]]: return ( None if self.attributes is None else self.attributes.asset_anomalo_applied_check_types ) @asset_anomalo_applied_check_types.setter def asset_anomalo_applied_check_types( self, asset_anomalo_applied_check_types: Optional[Set[str]] ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_anomalo_applied_check_types = ( asset_anomalo_applied_check_types ) @property def asset_anomalo_failed_check_types(self) -> Optional[Set[str]]: return ( None if self.attributes is None else self.attributes.asset_anomalo_failed_check_types ) @asset_anomalo_failed_check_types.setter def asset_anomalo_failed_check_types( self, asset_anomalo_failed_check_types: Optional[Set[str]] ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_anomalo_failed_check_types = ( asset_anomalo_failed_check_types ) @property def asset_anomalo_source_url(self) -> Optional[str]: return ( None if self.attributes is None else self.attributes.asset_anomalo_source_url ) @asset_anomalo_source_url.setter def asset_anomalo_source_url(self, asset_anomalo_source_url: Optional[str]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_anomalo_source_url = asset_anomalo_source_url @property def asset_soda_d_q_status(self) -> Optional[str]: return ( None if self.attributes is None else self.attributes.asset_soda_d_q_status ) @asset_soda_d_q_status.setter def asset_soda_d_q_status(self, asset_soda_d_q_status: Optional[str]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_soda_d_q_status = asset_soda_d_q_status @property def asset_soda_check_count(self) -> Optional[int]: return ( None if self.attributes is None else self.attributes.asset_soda_check_count ) @asset_soda_check_count.setter def asset_soda_check_count(self, asset_soda_check_count: Optional[int]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_soda_check_count = asset_soda_check_count @property def asset_soda_last_sync_run_at(self) -> Optional[datetime]: return ( None if self.attributes is None else self.attributes.asset_soda_last_sync_run_at ) @asset_soda_last_sync_run_at.setter def asset_soda_last_sync_run_at( self, asset_soda_last_sync_run_at: Optional[datetime] ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_soda_last_sync_run_at = asset_soda_last_sync_run_at @property def asset_soda_last_scan_at(self) -> Optional[datetime]: return ( None if self.attributes is None else self.attributes.asset_soda_last_scan_at ) @asset_soda_last_scan_at.setter def asset_soda_last_scan_at(self, asset_soda_last_scan_at: Optional[datetime]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_soda_last_scan_at = asset_soda_last_scan_at @property def asset_soda_check_statuses(self) -> Optional[str]: return ( None if self.attributes is None else self.attributes.asset_soda_check_statuses ) @asset_soda_check_statuses.setter def asset_soda_check_statuses(self, asset_soda_check_statuses: Optional[str]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_soda_check_statuses = asset_soda_check_statuses @property def asset_soda_source_url(self) -> Optional[str]: return ( None if self.attributes is None else self.attributes.asset_soda_source_url ) @asset_soda_source_url.setter def asset_soda_source_url(self, asset_soda_source_url: Optional[str]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_soda_source_url = asset_soda_source_url @property def asset_icon(self) -> Optional[str]: return None if self.attributes is None else self.attributes.asset_icon @asset_icon.setter def asset_icon(self, asset_icon: Optional[str]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_icon = asset_icon @property def is_partial(self) -> Optional[bool]: return None if self.attributes is None else self.attributes.is_partial @is_partial.setter def is_partial(self, is_partial: Optional[bool]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.is_partial = is_partial @property def is_a_i_generated(self) -> Optional[bool]: return None if self.attributes is None else self.attributes.is_a_i_generated @is_a_i_generated.setter def is_a_i_generated(self, is_a_i_generated: Optional[bool]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.is_a_i_generated = is_a_i_generated @property def asset_cover_image(self) -> Optional[str]: return None if self.attributes is None else self.attributes.asset_cover_image @asset_cover_image.setter def asset_cover_image(self, asset_cover_image: Optional[str]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_cover_image = asset_cover_image @property def asset_theme_hex(self) -> Optional[str]: return None if self.attributes is None else self.attributes.asset_theme_hex @asset_theme_hex.setter def asset_theme_hex(self, asset_theme_hex: Optional[str]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_theme_hex = asset_theme_hex @property def lexicographical_sort_order(self) -> Optional[str]: return ( None if self.attributes is None else self.attributes.lexicographical_sort_order ) @lexicographical_sort_order.setter def lexicographical_sort_order(self, lexicographical_sort_order: Optional[str]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.lexicographical_sort_order = lexicographical_sort_order @property def has_contract(self) -> Optional[bool]: return None if self.attributes is None else self.attributes.has_contract @has_contract.setter def has_contract(self, has_contract: Optional[bool]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.has_contract = has_contract @property def asset_redirect_g_u_i_ds(self) -> Optional[Set[str]]: return ( None if self.attributes is None else self.attributes.asset_redirect_g_u_i_ds ) @asset_redirect_g_u_i_ds.setter def asset_redirect_g_u_i_ds(self, asset_redirect_g_u_i_ds: Optional[Set[str]]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_redirect_g_u_i_ds = asset_redirect_g_u_i_ds @property def asset_policy_g_u_i_ds(self) -> Optional[Set[str]]: return ( None if self.attributes is None else self.attributes.asset_policy_g_u_i_ds ) @asset_policy_g_u_i_ds.setter def asset_policy_g_u_i_ds(self, asset_policy_g_u_i_ds: Optional[Set[str]]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_policy_g_u_i_ds = asset_policy_g_u_i_ds @property def asset_policies_count(self) -> Optional[int]: return None if self.attributes is None else self.attributes.asset_policies_count @asset_policies_count.setter def asset_policies_count(self, asset_policies_count: Optional[int]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_policies_count = asset_policies_count @property def domain_g_u_i_ds(self) -> Optional[Set[str]]: return None if self.attributes is None else self.attributes.domain_g_u_i_ds @domain_g_u_i_ds.setter def domain_g_u_i_ds(self, domain_g_u_i_ds: Optional[Set[str]]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.domain_g_u_i_ds = domain_g_u_i_ds @property def non_compliant_asset_policy_g_u_i_ds(self) -> Optional[Set[str]]: return ( None if self.attributes is None else self.attributes.non_compliant_asset_policy_g_u_i_ds ) @non_compliant_asset_policy_g_u_i_ds.setter def non_compliant_asset_policy_g_u_i_ds( self, non_compliant_asset_policy_g_u_i_ds: Optional[Set[str]] ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.non_compliant_asset_policy_g_u_i_ds = ( non_compliant_asset_policy_g_u_i_ds ) @property def product_g_u_i_ds(self) -> Optional[Set[str]]: return None if self.attributes is None else self.attributes.product_g_u_i_ds @product_g_u_i_ds.setter def product_g_u_i_ds(self, product_g_u_i_ds: Optional[Set[str]]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.product_g_u_i_ds = product_g_u_i_ds @property def output_product_g_u_i_ds(self) -> Optional[Set[str]]: return ( None if self.attributes is None else self.attributes.output_product_g_u_i_ds ) @output_product_g_u_i_ds.setter def output_product_g_u_i_ds(self, output_product_g_u_i_ds: Optional[Set[str]]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.output_product_g_u_i_ds = output_product_g_u_i_ds @property def application_qualified_name(self) -> Optional[str]: return ( None if self.attributes is None else self.attributes.application_qualified_name ) @application_qualified_name.setter def application_qualified_name(self, application_qualified_name: Optional[str]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.application_qualified_name = application_qualified_name @property def application_field_qualified_name(self) -> Optional[str]: return ( None if self.attributes is None else self.attributes.application_field_qualified_name ) @application_field_qualified_name.setter def application_field_qualified_name( self, application_field_qualified_name: Optional[str] ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.application_field_qualified_name = ( application_field_qualified_name ) @property def asset_user_defined_type(self) -> Optional[str]: return ( None if self.attributes is None else self.attributes.asset_user_defined_type ) @asset_user_defined_type.setter def asset_user_defined_type(self, asset_user_defined_type: Optional[str]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.asset_user_defined_type = asset_user_defined_type @property def schema_registry_subjects(self) -> Optional[List[SchemaRegistrySubject]]: return ( None if self.attributes is None else self.attributes.schema_registry_subjects ) @schema_registry_subjects.setter def schema_registry_subjects( self, schema_registry_subjects: Optional[List[SchemaRegistrySubject]] ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.schema_registry_subjects = schema_registry_subjects @property def data_contract_latest_certified(self) -> Optional[DataContract]: return ( None if self.attributes is None else self.attributes.data_contract_latest_certified ) @data_contract_latest_certified.setter def data_contract_latest_certified( self, data_contract_latest_certified: Optional[DataContract] ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.data_contract_latest_certified = data_contract_latest_certified @property def anomalo_checks(self) -> Optional[List[AnomaloCheck]]: return None if self.attributes is None else self.attributes.anomalo_checks @anomalo_checks.setter def anomalo_checks(self, anomalo_checks: Optional[List[AnomaloCheck]]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.anomalo_checks = anomalo_checks @property def user_def_relationship_to(self) -> Optional[List[Referenceable]]: return ( None if self.attributes is None else self.attributes.user_def_relationship_to ) @user_def_relationship_to.setter def user_def_relationship_to( self, user_def_relationship_to: Optional[List[Referenceable]] ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.user_def_relationship_to = user_def_relationship_to @property def output_port_data_products(self) -> Optional[List[DataProduct]]: return ( None if self.attributes is None else self.attributes.output_port_data_products ) @output_port_data_products.setter def output_port_data_products( self, output_port_data_products: Optional[List[DataProduct]] ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.output_port_data_products = output_port_data_products @property def user_def_relationship_from(self) -> Optional[List[Referenceable]]: return ( None if self.attributes is None else self.attributes.user_def_relationship_from ) @user_def_relationship_from.setter def user_def_relationship_from( self, user_def_relationship_from: Optional[List[Referenceable]] ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.user_def_relationship_from = user_def_relationship_from @property def readme(self) -> Optional[Readme]: return None if self.attributes is None else self.attributes.readme @readme.setter def readme(self, readme: Optional[Readme]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.readme = readme @property def application_field(self) -> Optional[ApplicationField]: return None if self.attributes is None else self.attributes.application_field @application_field.setter def application_field(self, application_field: Optional[ApplicationField]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.application_field = application_field @property def data_contract_latest(self) -> Optional[DataContract]: return None if self.attributes is None else self.attributes.data_contract_latest @data_contract_latest.setter def data_contract_latest(self, data_contract_latest: Optional[DataContract]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.data_contract_latest = data_contract_latest @property def assigned_terms(self) -> Optional[List[AtlasGlossaryTerm]]: return None if self.attributes is None else self.attributes.meanings @assigned_terms.setter def assigned_terms(self, assigned_terms: Optional[List[AtlasGlossaryTerm]]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.meanings = assigned_terms @property def mc_monitors(self) -> Optional[List[MCMonitor]]: return None if self.attributes is None else self.attributes.mc_monitors @mc_monitors.setter def mc_monitors(self, mc_monitors: Optional[List[MCMonitor]]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.mc_monitors = mc_monitors @property def application(self) -> Optional[Application]: return None if self.attributes is None else self.attributes.application @application.setter def application(self, application: Optional[Application]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.application = application @property def files(self) -> Optional[List[File]]: return None if self.attributes is None else self.attributes.files @files.setter def files(self, files: Optional[List[File]]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.files = files @property def mc_incidents(self) -> Optional[List[MCIncident]]: return None if self.attributes is None else self.attributes.mc_incidents @mc_incidents.setter def mc_incidents(self, mc_incidents: Optional[List[MCIncident]]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.mc_incidents = mc_incidents @property def links(self) -> Optional[List[Link]]: return None if self.attributes is None else self.attributes.links @links.setter def links(self, links: Optional[List[Link]]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.links = links @property def metrics(self) -> Optional[List[Metric]]: return None if self.attributes is None else self.attributes.metrics @metrics.setter def metrics(self, metrics: Optional[List[Metric]]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.metrics = metrics @property def input_port_data_products(self) -> Optional[List[DataProduct]]: return ( None if self.attributes is None else self.attributes.input_port_data_products ) @input_port_data_products.setter def input_port_data_products( self, input_port_data_products: Optional[List[DataProduct]] ): if self.attributes is None: self.attributes = self.Attributes() self.attributes.input_port_data_products = input_port_data_products @property def soda_checks(self) -> Optional[List[SodaCheck]]: return None if self.attributes is None else self.attributes.soda_checks @soda_checks.setter def soda_checks(self, soda_checks: Optional[List[SodaCheck]]): if self.attributes is None: self.attributes = self.Attributes() self.attributes.soda_checks = soda_checks class Attributes(Referenceable.Attributes): name: Optional[str] = Field(default=None, description="") display_name: Optional[str] = Field(default=None, description="") description: Optional[str] = Field(default=None, description="") user_description: Optional[str] = Field(default=None, description="") tenant_id: Optional[str] = Field(default=None, description="") certificate_status: Optional[CertificateStatus] = Field( default=None, description="" ) certificate_status_message: Optional[str] = Field(default=None, description="") certificate_updated_by: Optional[str] = Field(default=None, description="") certificate_updated_at: Optional[datetime] = Field(default=None, description="") announcement_title: Optional[str] = Field(default=None, description="") announcement_message: Optional[str] = Field(default=None, description="") announcement_type: Optional[str] = Field(default=None, description="") announcement_updated_at: Optional[datetime] = Field( default=None, description="" ) announcement_updated_by: Optional[str] = Field(default=None, description="") owner_users: Optional[Set[str]] = Field(default=None, description="") owner_groups: Optional[Set[str]] = Field(default=None, description="") admin_users: Optional[Set[str]] = Field(default=None, description="") admin_groups: Optional[Set[str]] = Field(default=None, description="") viewer_users: Optional[Set[str]] = Field(default=None, description="") viewer_groups: Optional[Set[str]] = Field(default=None, description="") connector_name: Optional[str] = Field(default=None, description="") connection_name: Optional[str] = Field(default=None, description="") connection_qualified_name: Optional[str] = Field(default=None, description="") has_lineage: Optional[bool] = Field(default=None, description="") is_discoverable: Optional[bool] = Field(default=None, description="") is_editable: Optional[bool] = Field(default=None, description="") sub_type: Optional[str] = Field(default=None, description="") view_score: Optional[float] = Field(default=None, description="") popularity_score: Optional[float] = Field(default=None, description="") source_owners: Optional[str] = Field(default=None, description="") source_created_by: Optional[str] = Field(default=None, description="") source_created_at: Optional[datetime] = Field(default=None, description="") source_updated_at: Optional[datetime] = Field(default=None, description="") source_updated_by: Optional[str] = Field(default=None, description="") source_url: Optional[str] = Field(default=None, description="") source_embed_url: Optional[str] = Field(default=None, description="") last_sync_workflow_name: Optional[str] = Field(default=None, description="") last_sync_run_at: Optional[datetime] = Field(default=None, description="") last_sync_run: Optional[str] = Field(default=None, description="") admin_roles: Optional[Set[str]] = Field(default=None, description="") source_read_count: Optional[int] = Field(default=None, description="") source_read_user_count: Optional[int] = Field(default=None, description="") source_last_read_at: Optional[datetime] = Field(default=None, description="") last_row_changed_at: Optional[datetime] = Field(default=None, description="") source_total_cost: Optional[float] = Field(default=None, description="") source_cost_unit: Optional[SourceCostUnitType] = Field( default=None, description="" ) source_read_query_cost: Optional[float] = Field(default=None, description="") source_read_recent_user_list: Optional[Set[str]] = Field( default=None, description="" ) source_read_recent_user_record_list: Optional[List[PopularityInsights]] = Field( default=None, description="" ) source_read_top_user_list: Optional[Set[str]] = Field( default=None, description="" ) source_read_top_user_record_list: Optional[List[PopularityInsights]] = Field( default=None, description="" ) source_read_popular_query_record_list: Optional[List[PopularityInsights]] = ( Field(default=None, description="") ) source_read_expensive_query_record_list: Optional[List[PopularityInsights]] = ( Field(default=None, description="") ) source_read_slow_query_record_list: Optional[List[PopularityInsights]] = Field( default=None, description="" ) source_query_compute_cost_list: Optional[Set[str]] = Field( default=None, description="" ) source_query_compute_cost_record_list: Optional[List[PopularityInsights]] = ( Field(default=None, description="") ) dbt_qualified_name: Optional[str] = Field(default=None, description="") asset_dbt_workflow_last_updated: Optional[str] = Field( default=None, description="" ) asset_dbt_alias: Optional[str] = Field(default=None, description="") asset_dbt_meta: Optional[str] = Field(default=None, description="") asset_dbt_unique_id: Optional[str] = Field(default=None, description="") asset_dbt_account_name: Optional[str] = Field(default=None, description="") asset_dbt_project_name: Optional[str] = Field(default=None, description="") asset_dbt_package_name: Optional[str] = Field(default=None, description="") asset_dbt_job_name: Optional[str] = Field(default=None, description="") asset_dbt_job_schedule: Optional[str] = Field(default=None, description="") asset_dbt_job_status: Optional[str] = Field(default=None, description="") asset_dbt_test_status: Optional[str] = Field(default=None, description="") asset_dbt_job_schedule_cron_humanized: Optional[str] = Field( default=None, description="" ) asset_dbt_job_last_run: Optional[datetime] = Field(default=None, description="") asset_dbt_job_last_run_url: Optional[str] = Field(default=None, description="") asset_dbt_job_last_run_created_at: Optional[datetime] = Field( default=None, description="" ) asset_dbt_job_last_run_updated_at: Optional[datetime] = Field( default=None, description="" ) asset_dbt_job_last_run_dequed_at: Optional[datetime] = Field( default=None, description="" ) asset_dbt_job_last_run_started_at: Optional[datetime] = Field( default=None, description="" ) asset_dbt_job_last_run_total_duration: Optional[str] = Field( default=None, description="" ) asset_dbt_job_last_run_total_duration_humanized: Optional[str] = Field( default=None, description="" ) asset_dbt_job_last_run_queued_duration: Optional[str] = Field( default=None, description="" ) asset_dbt_job_last_run_queued_duration_humanized: Optional[str] = Field( default=None, description="" ) asset_dbt_job_last_run_run_duration: Optional[str] = Field( default=None, description="" ) asset_dbt_job_last_run_run_duration_humanized: Optional[str] = Field( default=None, description="" ) asset_dbt_job_last_run_git_branch: Optional[str] = Field( default=None, description="" ) asset_dbt_job_last_run_git_sha: Optional[str] = Field( default=None, description="" ) asset_dbt_job_last_run_status_message: Optional[str] = Field( default=None, description="" ) asset_dbt_job_last_run_owner_thread_id: Optional[str] = Field( default=None, description="" ) asset_dbt_job_last_run_executed_by_thread_id: Optional[str] = Field( default=None, description="" ) asset_dbt_job_last_run_artifacts_saved: Optional[bool] = Field( default=None, description="" ) asset_dbt_job_last_run_artifact_s3_path: Optional[str] = Field( default=None, description="" ) asset_dbt_job_last_run_has_docs_generated: Optional[bool] = Field( default=None, description="" ) asset_dbt_job_last_run_has_sources_generated: Optional[bool] = Field( default=None, description="" ) asset_dbt_job_last_run_notifications_sent: Optional[bool] = Field( default=None, description="" ) asset_dbt_job_next_run: Optional[datetime] = Field(default=None, description="") asset_dbt_job_next_run_humanized: Optional[str] = Field( default=None, description="" ) asset_dbt_environment_name: Optional[str] = Field(default=None, description="") asset_dbt_environment_dbt_version: Optional[str] = Field( default=None, description="" ) asset_dbt_tags: Optional[Set[str]] = Field(default=None, description="") asset_dbt_semantic_layer_proxy_url: Optional[str] = Field( default=None, description="" ) asset_dbt_source_freshness_criteria: Optional[str] = Field( default=None, description="" ) sample_data_url: Optional[str] = Field(default=None, description="") asset_tags: Optional[Set[str]] = Field(default=None, description="") asset_mc_incident_names: Optional[Set[str]] = Field( default=None, description="" ) asset_mc_incident_qualified_names: Optional[Set[str]] = Field( default=None, description="" ) asset_mc_alert_qualified_names: Optional[Set[str]] = Field( default=None, description="" ) asset_mc_monitor_names: Optional[Set[str]] = Field(default=None, description="") asset_mc_monitor_qualified_names: Optional[Set[str]] = Field( default=None, description="" ) asset_mc_monitor_statuses: Optional[Set[str]] = Field( default=None, description="" ) asset_mc_monitor_types: Optional[Set[str]] = Field(default=None, description="") asset_mc_monitor_schedule_types: Optional[Set[str]] = Field( default=None, description="" ) asset_mc_incident_types: Optional[Set[str]] = Field( default=None, description="" ) asset_mc_incident_sub_types: Optional[Set[str]] = Field( default=None, description="" ) asset_mc_incident_severities: Optional[Set[str]] = Field( default=None, description="" ) asset_mc_incident_priorities: Optional[Set[str]] = Field( default=None, description="" ) asset_mc_incident_states: Optional[Set[str]] = Field( default=None, description="" ) asset_mc_is_monitored: Optional[bool] = Field(default=None, description="") asset_mc_last_sync_run_at: Optional[datetime] = Field( default=None, description="" ) starred_by: Optional[Set[str]] = Field(default=None, description="") starred_details_list: Optional[List[StarredDetails]] = Field( default=None, description="" ) starred_count: Optional[int] = Field(default=None, description="") asset_anomalo_d_q_status: Optional[str] = Field(default=None, description="") asset_anomalo_check_count: Optional[int] = Field(default=None, description="") asset_anomalo_failed_check_count: Optional[int] = Field( default=None, description="" ) asset_anomalo_check_statuses: Optional[str] = Field( default=None, description="" ) asset_anomalo_last_check_run_at: Optional[datetime] = Field( default=None, description="" ) asset_anomalo_applied_check_types: Optional[Set[str]] = Field( default=None, description="" ) asset_anomalo_failed_check_types: Optional[Set[str]] = Field( default=None, description="" ) asset_anomalo_source_url: Optional[str] = Field(default=None, description="") asset_soda_d_q_status: Optional[str] = Field(default=None, description="") asset_soda_check_count: Optional[int] = Field(default=None, description="") asset_soda_last_sync_run_at: Optional[datetime] = Field( default=None, description="" ) asset_soda_last_scan_at: Optional[datetime] = Field( default=None, description="" ) asset_soda_check_statuses: Optional[str] = Field(default=None, description="") asset_soda_source_url: Optional[str] = Field(default=None, description="") asset_icon: Optional[str] = Field(default=None, description="") is_partial: Optional[bool] = Field(default=None, description="") is_a_i_generated: Optional[bool] = Field(default=None, description="") asset_cover_image: Optional[str] = Field(default=None, description="") asset_theme_hex: Optional[str] = Field(default=None, description="") lexicographical_sort_order: Optional[str] = Field(default=None, description="") has_contract: Optional[bool] = Field(default=None, description="") asset_redirect_g_u_i_ds: Optional[Set[str]] = Field( default=None, description="" ) asset_policy_g_u_i_ds: Optional[Set[str]] = Field(default=None, description="") asset_policies_count: Optional[int] = Field(default=None, description="") domain_g_u_i_ds: Optional[Set[str]] = Field(default=None, description="") non_compliant_asset_policy_g_u_i_ds: Optional[Set[str]] = Field( default=None, description="" ) product_g_u_i_ds: Optional[Set[str]] = Field(default=None, description="") output_product_g_u_i_ds: Optional[Set[str]] = Field( default=None, description="" ) application_qualified_name: Optional[str] = Field(default=None, description="") application_field_qualified_name: Optional[str] = Field( default=None, description="" ) asset_user_defined_type: Optional[str] = Field(default=None, description="") schema_registry_subjects: Optional[List[SchemaRegistrySubject]] = Field( default=None, description="" ) # relationship data_contract_latest_certified: Optional[DataContract] = Field( default=None, description="" ) # relationship anomalo_checks: Optional[List[AnomaloCheck]] = Field( default=None, description="" ) # relationship user_def_relationship_to: Optional[List[Referenceable]] = Field( default=None, description="" ) # relationship output_port_data_products: Optional[List[DataProduct]] = Field( default=None, description="" ) # relationship user_def_relationship_from: Optional[List[Referenceable]] = Field( default=None, description="" ) # relationship readme: Optional[Readme] = Field(default=None, description="") # relationship application_field: Optional[ApplicationField] = Field( default=None, description="" ) # relationship data_contract_latest: Optional[DataContract] = Field( default=None, description="" ) # relationship meanings: Optional[List[AtlasGlossaryTerm]] = Field( default=None, description="" ) # relationship mc_monitors: Optional[List[MCMonitor]] = Field( default=None, description="" ) # relationship application: Optional[Application] = Field( default=None, description="" ) # relationship files: Optional[List[File]] = Field( default=None, description="" ) # relationship mc_incidents: Optional[List[MCIncident]] = Field( default=None, description="" ) # relationship links: Optional[List[Link]] = Field( default=None, description="" ) # relationship metrics: Optional[List[Metric]] = Field( default=None, description="" ) # relationship input_port_data_products: Optional[List[DataProduct]] = Field( default=None, description="" ) # relationship soda_checks: Optional[List[SodaCheck]] = Field( default=None, description="" ) # relationship def remove_description(self): self.description = None def remove_user_description(self): self.user_description = None def remove_owners(self): self.owner_groups = None self.owner_users = None def remove_certificate(self): self.certificate_status = None self.certificate_status_message = None def remove_announcement(self): self.announcement_message = None self.announcement_title = None self.announcement_type = None attributes: Asset.Attributes = Field( default_factory=lambda: Asset.Attributes(), description=( "Map of attributes in the instance and their values. " "The specific keys of this map will vary by type, " "so are described in the sub-types of this schema." ), )
from .anomalo_check import AnomaloCheck # noqa: E402, F401 from .application import Application # noqa: E402, F401 from .application_field import ApplicationField # noqa: E402, F401 from .atlas_glossary_term import AtlasGlossaryTerm # noqa: E402, F401 from .data_contract import DataContract # noqa: E402, F401 from .data_product import DataProduct # noqa: E402, F401 from .file import File # noqa: E402, F401 from .link import Link # noqa: E402, F401 from .m_c_incident import MCIncident # noqa: E402, F401 from .m_c_monitor import MCMonitor # noqa: E402, F401 from .metric import Metric # noqa: E402, F401 from .readme import Readme # noqa: E402, F401 from .referenceable import Referenceable # noqa: E402, F401 from .schema_registry_subject import SchemaRegistrySubject # noqa: E402, F401 from .soda_check import SodaCheck # noqa: E402, F401