From 22e57cf06b7a5748cc9bafa6f3cb1153621eae37 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 17 Sep 2026 09:21:03 +0000 Subject: [PATCH] Sync Python SDK models from atlanhq/models Source commit: bcb05c4a85f3df18bc7acb3eb92b97f2eabea2ce Source ref: refs/heads/master Co-Authored-By: github-actions[bot] --- pyatlan/__init__.py | 4 +- pyatlan/client/aio/app.py | 7 +- pyatlan/client/aio/approval_workflow.py | 2 +- pyatlan/client/aio/client.py | 6 +- pyatlan/client/app.py | 9 +- pyatlan/client/approval_workflow.py | 2 +- pyatlan/client/atlan.py | 4 +- pyatlan/client/common/__init__.py | 12 +- pyatlan/client/common/app.py | 5 +- pyatlan/model/assets/__init__.pyi | 1420 ++++------- pyatlan/model/assets/azure_event_hub.py | 2 +- pyatlan/model/assets/bigquery_tag.py | 8 +- pyatlan/model/assets/connection.py | 6 +- pyatlan/model/assets/core/asset.py | 8 +- pyatlan/model/assets/core/atlas_glossary.py | 2 +- .../assets/core/atlas_glossary_category.py | 2 +- .../model/assets/core/atlas_glossary_term.py | 2 +- .../core/cosmos_mongo_d_b_collection.py | 8 +- .../assets/core/cosmos_mongo_d_b_database.py | 8 +- .../core/databricks_a_i_model_context.py | 8 +- .../core/databricks_a_i_model_version.py | 8 +- .../assets/core/databricks_genie_agent.py | 8 +- .../core/databricks_unity_catalog_tag.py | 8 +- .../model/assets/core/dbt_column_process.py | 2 +- pyatlan/model/assets/core/dbt_process.py | 2 +- .../assets/core/document_d_b_database.py | 8 +- pyatlan/model/assets/core/fabric_dataflow.py | 4 +- .../core/fabric_semantic_model_table.py | 4 +- .../assets/core/flow_dataset_operation.py | 2 +- .../model/assets/core/flow_field_operation.py | 2 +- .../model/assets/core/power_b_i_dataflow.py | 4 +- pyatlan/model/assets/core/process.py | 2 +- pyatlan/model/assets/core/query.py | 2 +- pyatlan/model/assets/core/s_q_l.py | 8 +- pyatlan/model/assets/core/schema.py | 4 +- .../core/snowflake_a_i_model_context.py | 8 +- .../core/snowflake_a_i_model_version.py | 8 +- .../core/snowflake_semantic_dimension.py | 8 +- .../assets/core/snowflake_semantic_fact.py | 4 +- .../core/snowflake_semantic_logical_table.py | 4 +- .../assets/core/snowflake_semantic_metric.py | 4 +- pyatlan/model/assets/core/snowflake_tag.py | 8 +- pyatlan/model/assets/core/soda_check.py | 4 +- pyatlan/model/assets/core/stakeholder.py | 4 +- pyatlan/model/assets/databricks_dashboard.py | 8 +- .../assets/databricks_external_location.py | 4 +- pyatlan/model/assets/databricks_notebook.py | 8 +- pyatlan/model/assets/dynamo_dbtable.py | 8 +- pyatlan/model/assets/iceberg_namespace.py | 12 +- pyatlan/model/assets/metabase_collection.py | 8 +- pyatlan/model/assets/metabase_dashboard.py | 2 +- pyatlan/model/assets/metabase_question.py | 6 +- pyatlan/model/assets/preset_chart.py | 4 +- pyatlan/model/assets/preset_dashboard.py | 12 +- pyatlan/model/assets/preset_dataset.py | 6 +- pyatlan/model/assets/preset_workspace.py | 18 +- pyatlan/model/assets/relations/__init__.pyi | 18 +- pyatlan/model/assets/s3.py | 2 +- .../assets/s_a_p_b_w_composite_provider.py | 4 +- pyatlan/model/assets/s_a_p_b_w_info_object.py | 4 +- pyatlan/model/assets/s_a_p_column_process.py | 4 +- pyatlan/model/assets/s_a_p_process.py | 4 +- .../assets/sage_maker_unified_studio_asset.py | 4 +- .../sage_maker_unified_studio_asset_schema.py | 4 +- .../sage_maker_unified_studio_project.py | 2 - ...ge_maker_unified_studio_published_asset.py | 5 +- ...e_maker_unified_studio_subscribed_asset.py | 5 +- pyatlan/model/assets/sap_erp_column.py | 10 +- pyatlan/model/assets/thoughtspot.py | 4 +- pyatlan/model/structs.py | 11 +- pyatlan/version.txt | 2 +- pyatlan_v9/model/assets/__init__.py | 1229 +--------- .../model/assets/_init_sap_analytics_cloud.py | 35 + .../model/assets/asset_grouping_related.py | 1 + pyatlan_v9/model/assets/atlas_glossary.py | 11 + .../model/assets/atlas_glossary_category.py | 30 +- .../model/assets/atlas_glossary_term.py | 30 +- pyatlan_v9/model/assets/cognite_related.py | 1 + pyatlan_v9/model/assets/data_quality_rule.py | 11 + pyatlan_v9/model/assets/entity.py | 33 +- pyatlan_v9/model/assets/notebook_related.py | 1 + .../model/assets/orchestration_related.py | 1 - .../model/assets/quick_sight_dataset.py | 39 +- .../model/assets/quick_sight_dataset_field.py | 25 +- pyatlan_v9/model/assets/quick_sight_folder.py | 25 +- pyatlan_v9/model/assets/referenceable.py | 108 +- .../model/assets/sap_analytics_cloud.py | 758 ++++++ .../assets/sap_analytics_cloud_column.py | 2165 +++++++++++++++++ .../assets/sap_analytics_cloud_folder.py | 807 ++++++ .../model/assets/sap_analytics_cloud_model.py | 911 +++++++ .../assets/sap_analytics_cloud_related.py | 173 ++ .../model/assets/sap_analytics_cloud_story.py | 803 ++++++ requirements.txt | 304 --- tests/integration/aio/test_client.py | 2 +- tests/integration/test_app_client.py | 6 +- tests/unit/test_app_client.py | 5 +- tests/unit/test_core.py | 1 - 97 files changed, 6609 insertions(+), 2730 deletions(-) create mode 100644 pyatlan_v9/model/assets/_init_sap_analytics_cloud.py create mode 100644 pyatlan_v9/model/assets/sap_analytics_cloud.py create mode 100644 pyatlan_v9/model/assets/sap_analytics_cloud_column.py create mode 100644 pyatlan_v9/model/assets/sap_analytics_cloud_folder.py create mode 100644 pyatlan_v9/model/assets/sap_analytics_cloud_model.py create mode 100644 pyatlan_v9/model/assets/sap_analytics_cloud_related.py create mode 100644 pyatlan_v9/model/assets/sap_analytics_cloud_story.py diff --git a/pyatlan/__init__.py b/pyatlan/__init__.py index 9c5d9422d..8e1d2b89f 100644 --- a/pyatlan/__init__.py +++ b/pyatlan/__init__.py @@ -10,7 +10,9 @@ _install_pydantic_v1_perf() -from pyatlan.utils import REQUEST_ID_FILTER # noqa: E402 (perf patch must install first) +from pyatlan.utils import ( + REQUEST_ID_FILTER, # noqa: E402 (perf patch must install first) +) # Version information try: diff --git a/pyatlan/client/aio/app.py b/pyatlan/client/aio/app.py index abbb189b3..26751e6b9 100644 --- a/pyatlan/client/aio/app.py +++ b/pyatlan/client/aio/app.py @@ -43,9 +43,6 @@ is_duplicate_name_conflict, ) from pyatlan.errors import AtlanError, ErrorCode -from pyatlan.model.apps import AppInput -from pyatlan.model.assets import AppWorkflowRun -from pyatlan.model.fluent_search import CompoundQuery, FluentSearch from pyatlan.model.app import ( AppDeleteResponse, AppInfo, @@ -61,7 +58,9 @@ CreateApp, UpdateApp, ) - +from pyatlan.model.apps import AppInput +from pyatlan.model.assets import AppWorkflowRun +from pyatlan.model.fluent_search import CompoundQuery, FluentSearch LOGGER = logging.getLogger(__name__) diff --git a/pyatlan/client/aio/approval_workflow.py b/pyatlan/client/aio/approval_workflow.py index 80203f3d1..196379ec6 100644 --- a/pyatlan/client/aio/approval_workflow.py +++ b/pyatlan/client/aio/approval_workflow.py @@ -13,11 +13,11 @@ AsyncApiCaller, ) from pyatlan.errors import ErrorCode, InvalidRequestError -from pyatlan.model.enums import ApprovalWorkflowRequestType from pyatlan.model.approval_workflow import ( ApprovalWorkflowBulkActionResponse, ApprovalWorkflowRequest, ) +from pyatlan.model.enums import ApprovalWorkflowRequestType def _raise_if_recipient_scoped(err: InvalidRequestError, group_key: str): diff --git a/pyatlan/client/aio/client.py b/pyatlan/client/aio/client.py index 2a9385a85..080064b02 100644 --- a/pyatlan/client/aio/client.py +++ b/pyatlan/client/aio/client.py @@ -34,6 +34,8 @@ AsyncUserCache, ) from pyatlan.client.aio.admin import AsyncAdminClient +from pyatlan.client.aio.app import AsyncAppClient +from pyatlan.client.aio.approval_workflow import AsyncApprovalWorkflowClient from pyatlan.client.aio.asset import AsyncAssetClient from pyatlan.client.aio.audit import AsyncAuditClient from pyatlan.client.aio.contract import AsyncContractClient @@ -45,15 +47,13 @@ from pyatlan.client.aio.oauth_client import AsyncOAuthClient from pyatlan.client.aio.open_lineage import AsyncOpenLineageClient from pyatlan.client.aio.query import AsyncQueryClient +from pyatlan.client.aio.requests import AsyncRequestsClient from pyatlan.client.aio.role import AsyncRoleClient from pyatlan.client.aio.search_log import AsyncSearchLogClient from pyatlan.client.aio.sso import AsyncSSOClient from pyatlan.client.aio.task import AsyncTaskClient -from pyatlan.client.aio.approval_workflow import AsyncApprovalWorkflowClient -from pyatlan.client.aio.requests import AsyncRequestsClient from pyatlan.client.aio.token import AsyncTokenClient from pyatlan.client.aio.typedef import AsyncTypeDefClient -from pyatlan.client.aio.app import AsyncAppClient from pyatlan.client.aio.user import AsyncUserClient from pyatlan.client.atlan import ( CONNECTION_RETRY, diff --git a/pyatlan/client/app.py b/pyatlan/client/app.py index 772b9f56b..629abb9c5 100644 --- a/pyatlan/client/app.py +++ b/pyatlan/client/app.py @@ -37,10 +37,6 @@ is_duplicate_name_conflict, ) from pyatlan.errors import AtlanError, ErrorCode -from pyatlan.model.apps import AppInput -from pyatlan.model.assets import AppWorkflowRun -from pyatlan.model.enums import AppWorkflowRunStatus -from pyatlan.model.fluent_search import CompoundQuery, FluentSearch from pyatlan.model.app import ( AppDeleteResponse, AppInfo, @@ -56,7 +52,10 @@ CreateApp, UpdateApp, ) - +from pyatlan.model.apps import AppInput +from pyatlan.model.assets import AppWorkflowRun +from pyatlan.model.enums import AppWorkflowRunStatus +from pyatlan.model.fluent_search import CompoundQuery, FluentSearch LOGGER = logging.getLogger(__name__) diff --git a/pyatlan/client/approval_workflow.py b/pyatlan/client/approval_workflow.py index c7894cc6f..a3209a72b 100644 --- a/pyatlan/client/approval_workflow.py +++ b/pyatlan/client/approval_workflow.py @@ -13,11 +13,11 @@ ApprovalWorkflowGetRequest, ) from pyatlan.errors import ErrorCode, InvalidRequestError -from pyatlan.model.enums import ApprovalWorkflowRequestType from pyatlan.model.approval_workflow import ( ApprovalWorkflowBulkActionResponse, ApprovalWorkflowRequest, ) +from pyatlan.model.enums import ApprovalWorkflowRequestType def _raise_if_recipient_scoped(err: InvalidRequestError, group_key: str): diff --git a/pyatlan/client/atlan.py b/pyatlan/client/atlan.py index cfd8bf60f..0afcb43fb 100644 --- a/pyatlan/client/atlan.py +++ b/pyatlan/client/atlan.py @@ -39,6 +39,8 @@ from pyatlan.cache.source_tag_cache import SourceTagCache from pyatlan.cache.user_cache import UserCache from pyatlan.client.admin import AdminClient +from pyatlan.client.app import AppClient +from pyatlan.client.approval_workflow import ApprovalWorkflowClient from pyatlan.client.asset import A, AssetClient, IndexSearchResults, LineageListResults from pyatlan.client.audit import AuditClient from pyatlan.client.common import CONNECTION_RETRY, ImpersonateUser @@ -52,7 +54,6 @@ from pyatlan.client.oauth_client import OAuthClient from pyatlan.client.open_lineage import OpenLineageClient from pyatlan.client.query import QueryClient -from pyatlan.client.approval_workflow import ApprovalWorkflowClient from pyatlan.client.requests import RequestsClient from pyatlan.client.role import RoleClient from pyatlan.client.search_log import SearchLogClient @@ -61,7 +62,6 @@ from pyatlan.client.token import TokenClient from pyatlan.client.transport import PyatlanSyncTransport # type: ignore from pyatlan.client.typedef import TypeDefClient -from pyatlan.client.app import AppClient from pyatlan.client.user import UserClient from pyatlan.errors import ERROR_CODE_FOR_HTTP_STATUS, AtlanError, ErrorCode from pyatlan.model.api_tokens import ApiToken, ApiTokenResponse diff --git a/pyatlan/client/common/__init__.py b/pyatlan/client/common/__init__.py index dc36777d2..a9169a794 100644 --- a/pyatlan/client/common/__init__.py +++ b/pyatlan/client/common/__init__.py @@ -24,6 +24,12 @@ # Admin shared logic classes from .admin import AdminGetAdminEvents, AdminGetKeycloakEvents +# Role shared logic classes +from .approval_workflow import ( + ApprovalWorkflowBulkActionRequests, + ApprovalWorkflowGetRequest, +) + # Asset shared logic classes from .asset import ( DeleteByGuid, @@ -116,12 +122,6 @@ # Query shared logic classes from .query import QueryStream - -# Role shared logic classes -from .approval_workflow import ( - ApprovalWorkflowBulkActionRequests, - ApprovalWorkflowGetRequest, -) from .requests import ( RequestsAction, RequestsCreate, diff --git a/pyatlan/client/common/app.py b/pyatlan/client/common/app.py index df5102f79..0a76fa203 100644 --- a/pyatlan/client/common/app.py +++ b/pyatlan/client/common/app.py @@ -13,10 +13,9 @@ import json from typing import Any, Dict, Optional, Tuple -from pyatlan.errors import AtlanError - from pyatlan.client.constants import ( ADD_APP_SCHEDULE, + API, CANCEL_APP_RUN, CREATE_APP_WORKFLOW, DELETE_APP_WORKFLOW, @@ -29,7 +28,7 @@ SUBMIT_APP_WORKFLOW, UPDATE_APP_WORKFLOW, ) -from pyatlan.client.constants import API +from pyatlan.errors import AtlanError from pyatlan.model.app import ( AppDeleteResponse, AppInfo, diff --git a/pyatlan/model/assets/__init__.pyi b/pyatlan/model/assets/__init__.pyi index b4e6d21c5..5c77f0df9 100644 --- a/pyatlan/model/assets/__init__.pyi +++ b/pyatlan/model/assets/__init__.pyi @@ -498,996 +498,502 @@ __all__ = [ "IndistinctAsset", ] -from .core.referenceable import Referenceable - -from .core.asset import Asset - -from .task import Task - -from .form import Form - -from .data_set import DataSet - -from .core.process import Process - -from .core.atlas_glossary_category import AtlasGlossaryCategory - -from .badge import Badge - -from .core.access_control import AccessControl - -from .process_execution import ProcessExecution - -from .core.auth_policy import AuthPolicy - +from .a_d_l_s import ADLS +from .a_d_l_s_account import ADLSAccount +from .a_d_l_s_container import ADLSContainer +from .a_d_l_s_object import ADLSObject +from .a_p_i import API +from .a_p_i_field import APIField +from .a_p_i_object import APIObject +from .a_p_i_path import APIPath +from .a_p_i_query import APIQuery +from .a_p_i_spec import APISpec +from .a_w_s import AWS +from .anaplan import Anaplan +from .anaplan_app import AnaplanApp +from .anaplan_dimension import AnaplanDimension +from .anaplan_line_item import AnaplanLineItem +from .anaplan_list import AnaplanList +from .anaplan_model import AnaplanModel +from .anaplan_module import AnaplanModule +from .anaplan_page import AnaplanPage +from .anaplan_system_dimension import AnaplanSystemDimension +from .anaplan_view import AnaplanView +from .anaplan_workspace import AnaplanWorkspace +from .asset_grouping import AssetGrouping +from .asset_grouping_collection import AssetGroupingCollection +from .asset_grouping_strategy import AssetGroupingStrategy +from .atlan_app_deployment import AtlanAppDeployment +from .atlan_app_installed import AtlanAppInstalled from .auth_service import AuthService - -from .infrastructure import Infrastructure - +from .azure import Azure +from .azure_event_hub import AzureEventHub +from .azure_event_hub_consumer_group import AzureEventHubConsumerGroup +from .azure_service_bus import AzureServiceBus +from .azure_service_bus_namespace import AzureServiceBusNamespace +from .azure_service_bus_schema import AzureServiceBusSchema +from .azure_service_bus_topic import AzureServiceBusTopic +from .badge import Badge +from .bigquery_tag import BigqueryTag +from .business_policy import BusinessPolicy from .business_policy_exception import BusinessPolicyException - -from .tag_attachment import TagAttachment - -from .connection import Connection - -from .workflow import Workflow - +from .business_policy_incident import BusinessPolicyIncident from .business_policy_log import BusinessPolicyLog - -from .core.stakeholder_title import StakeholderTitle - -from .business_policy import BusinessPolicy - -from .core.catalog import Catalog - -from .core.namespace import Namespace - -from .workflow_run import WorkflowRun - -from .core.flow import Flow - -from .core.atlas_glossary import AtlasGlossary - -from .response import Response - +from .cassandra import Cassandra +from .cassandra_column import CassandraColumn +from .cassandra_index import CassandraIndex +from .cassandra_keyspace import CassandraKeyspace +from .cassandra_table import CassandraTable +from .cassandra_view import CassandraView +from .cognite import Cognite +from .cognite3_d_model import Cognite3DModel +from .cognite_asset import CogniteAsset +from .cognite_event import CogniteEvent +from .cognite_file import CogniteFile +from .cognite_sequence import CogniteSequence +from .cognite_time_series import CogniteTimeSeries +from .cognos import Cognos +from .cognos_column import CognosColumn +from .cognos_dashboard import CognosDashboard +from .cognos_dataset import CognosDataset +from .cognos_datasource import CognosDatasource +from .cognos_exploration import CognosExploration +from .cognos_file import CognosFile +from .cognos_folder import CognosFolder +from .cognos_module import CognosModule +from .cognos_package import CognosPackage +from .cognos_report import CognosReport +from .collection import Collection +from .connection import Connection from .connection_process import ConnectionProcess - -from .core.atlas_glossary_term import AtlasGlossaryTerm - -from .core.cloud import Cloud - -from .incident import Incident - -from .core.flow_dataset_operation import FlowDatasetOperation - -from .core.b_i_process import BIProcess - -from .core.dbt_process import DbtProcess - -from .s_a_p_process import SAPProcess - -from .core.column_process import ColumnProcess - -from .core.persona import Persona - -from .purpose import Purpose - -from .core.app import App - -from .core.airflow import Airflow - -from .unstructured import Unstructured - from .core.a_d_f import ADF - -from .core.s_a_p import SAP - -from .core.agentic import Agentic - -from .core.b_i import BI - -from .core.semantic import Semantic - -from .core.flow_dataset import FlowDataset - -from .event_store import EventStore - -from .core.no_s_q_l import NoSQL - -from .core.partial import Partial - -from .core.app_workflow_run import AppWorkflowRun - -from .core.dbt import Dbt - -from .insight import Insight - -from .core.fivetran import Fivetran - -from .core.data_contract import DataContract - -from .asset_grouping import AssetGrouping - -from .object_store import ObjectStore - -from .notebook import Notebook - -from .core.data_quality import DataQuality - -from .saa_s import SaaS - from .core.a_i import AI - -from .core.resource import Resource - -from .core.flow_field import FlowField - -from .multi_dimensional_dataset import MultiDimensionalDataset - -from .custom import Custom - -from .core.data_mesh import DataMesh - -from .core.s_q_l import SQL - -from .core.sql_insight import SqlInsight - -from .core.matillion import Matillion - -from .core.model import Model - -from .a_p_i import API - -from .core.spark import Spark - -from .core.tag import Tag - -from .core.schema_registry import SchemaRegistry - -from .collection import Collection - -from .core.folder import Folder - -from .core.flow_reusable_unit import FlowReusableUnit - -from .flow_folder import FlowFolder - -from .core.flow_field_operation import FlowFieldOperation - -from .core.flow_control_operation import FlowControlOperation - -from .flow_project import FlowProject - -from .core.google import Google - -from .azure import Azure - -from .a_w_s import AWS - -from .business_policy_incident import BusinessPolicyIncident - -from .s_a_p_column_process import SAPColumnProcess - -from .core.dbt_column_process import DbtColumnProcess - -from .core.stakeholder import Stakeholder - -from .core.application_field import ApplicationField - -from .core.application import Application - -from .core.atlan_app import AtlanApp - -from .core.airflow_dag import AirflowDag - -from .core.airflow_task import AirflowTask - -from .unstructured_folder import UnstructuredFolder - -from .unstructured_object import UnstructuredObject - -from .unstructured_container import UnstructuredContainer - +from .core.a_i_application import AIApplication +from .core.a_i_model import AIModel +from .core.a_i_model_version import AIModelVersion +from .core.access_control import AccessControl +from .core.adf_activity import AdfActivity from .core.adf_dataflow import AdfDataflow - from .core.adf_dataset import AdfDataset - +from .core.adf_linkedservice import AdfLinkedservice from .core.adf_pipeline import AdfPipeline - -from .core.adf_linkedservice import AdfLinkedservice - -from .core.adf_activity import AdfActivity - -from .sap_erp_table import SapErpTable - -from .sap_erp_column import SapErpColumn - -from .sap_erp_abap_program import SapErpAbapProgram - -from .sap_erp_transaction_code import SapErpTransactionCode - -from .sap_erp_component import SapErpComponent - -from .s_a_p_b_w import SAPBW - -from .sap_erp_view import SapErpView - -from .sap_erp_fiori_app import SapErpFioriApp - -from .sap_erp_cds_view import SapErpCdsView - -from .sap_erp_function_module import SapErpFunctionModule - -from .core.sap_datasphere_replication_flow import SapDatasphereReplicationFlow - -from .core.context import Context - from .core.agent import Agent - -from .core.skill import Skill - -from .core.knowledge import Knowledge - +from .core.agentic import Agentic +from .core.airflow import Airflow +from .core.airflow_dag import AirflowDag +from .core.airflow_task import AirflowTask +from .core.anomalo import Anomalo +from .core.anomalo_check import AnomaloCheck +from .core.app import App +from .core.app_workflow_run import AppWorkflowRun +from .core.application import Application +from .core.application_field import ApplicationField from .core.artifact import Artifact - -from .preset import Preset - -from .s_s_r_s import SSRS - -from .mode import Mode - -from .sigma import Sigma - -from .anaplan import Anaplan - -from .tableau import Tableau - -from .looker import Looker - -from .domo import Domo - -from .redash import Redash - -from .sisense import Sisense - -from .core.data_studio import DataStudio - -from .metabase import Metabase - -from .quick_sight import QuickSight - -from .databricks_dashboard import DatabricksDashboard - -from .thoughtspot import Thoughtspot - -from .core.power_b_i import PowerBI - -from .micro_strategy import MicroStrategy - -from .cognos import Cognos - -from .superset import Superset - -from .qlik import Qlik - -from .core.fabric import Fabric - -from .core.semantic_dimension import SemanticDimension - -from .core.semantic_entity import SemanticEntity - -from .core.semantic_model import SemanticModel - -from .semantic_field import SemanticField - -from .core.semantic_measure import SemanticMeasure - -from .kafka import Kafka - -from .azure_service_bus import AzureServiceBus - +from .core.asset import Asset +from .core.atlan_app import AtlanApp +from .core.atlan_app_tool import AtlanAppTool +from .core.atlan_app_workflow import AtlanAppWorkflow +from .core.atlas_glossary import AtlasGlossary +from .core.atlas_glossary_category import AtlasGlossaryCategory +from .core.atlas_glossary_term import AtlasGlossaryTerm +from .core.auth_policy import AuthPolicy +from .core.b_i import BI +from .core.b_i_process import BIProcess +from .core.bigquery_routine import BigqueryRoutine +from .core.calculation_view import CalculationView +from .core.catalog import Catalog +from .core.cloud import Cloud +from .core.column import Column +from .core.column_process import ColumnProcess +from .core.context import Context +from .core.context_artifact import ContextArtifact +from .core.context_repository import ContextRepository from .core.cosmos_mongo_d_b import CosmosMongoDB - -from .core.document_d_b import DocumentDB - -from .cassandra import Cassandra - -from .dynamo_d_b import DynamoDB - -from .mongo_d_b import MongoDB - -from .core.partial_field import PartialField - -from .core.partial_object import PartialObject - -from .core.dbt_model_column import DbtModelColumn - -from .dbt_tag import DbtTag - -from .dbt_dimension import DbtDimension - -from .core.dbt_test import DbtTest - +from .core.cosmos_mongo_d_b_account import CosmosMongoDBAccount +from .core.cosmos_mongo_d_b_collection import CosmosMongoDBCollection +from .core.cosmos_mongo_d_b_database import CosmosMongoDBDatabase +from .core.data_contract import DataContract +from .core.data_domain import DataDomain +from .core.data_mesh import DataMesh +from .core.data_mesh_dataset import DataMeshDataset +from .core.data_product import DataProduct +from .core.data_quality import DataQuality +from .core.data_quality_rule import DataQualityRule +from .core.data_quality_rule_template import DataQualityRuleTemplate +from .core.data_studio import DataStudio +from .core.database import Database +from .core.databricks import Databricks +from .core.databricks_a_i_model_context import DatabricksAIModelContext +from .core.databricks_a_i_model_version import DatabricksAIModelVersion +from .core.databricks_genie_agent import DatabricksGenieAgent +from .core.databricks_metric_view import DatabricksMetricView +from .core.databricks_unity_catalog_tag import DatabricksUnityCatalogTag +from .core.databricks_volume import DatabricksVolume +from .core.databricks_volume_path import DatabricksVolumePath +from .core.dbt import Dbt +from .core.dbt_column_process import DbtColumnProcess +from .core.dbt_metric import DbtMetric from .core.dbt_model import DbtModel - +from .core.dbt_model_column import DbtModelColumn +from .core.dbt_process import DbtProcess from .core.dbt_seed import DbtSeed - -from .dbt_measure import DbtMeasure - -from .dbt_semantic_model import DbtSemanticModel - -from .dbt_entity import DbtEntity - -from .core.dbt_metric import DbtMetric - from .core.dbt_source import DbtSource - -from .core.fivetran_connector import FivetranConnector - -from .asset_grouping_strategy import AssetGroupingStrategy - -from .asset_grouping_collection import AssetGroupingCollection - -from .s3 import S3 - -from .a_d_l_s import ADLS - -from .core.g_c_s import GCS - -from .databricks_notebook import DatabricksNotebook - -from .core.anomalo import Anomalo - -from .core.monte_carlo import MonteCarlo - -from .core.data_quality_rule_template import DataQualityRuleTemplate - -from .core.metric import Metric - -from .core.data_quality_rule import DataQualityRule - -from .core.soda import Soda - -from .sage_maker_unified_studio import SageMakerUnifiedStudio - -from .dataverse import Dataverse - -from .cognite import Cognite - -from .salesforce import Salesforce - -from .sage_maker import SageMaker - -from .core.a_i_application import AIApplication - -from .core.a_i_model_version import AIModelVersion - -from .core.a_i_model import AIModel - -from .readme_template import ReadmeTemplate - -from .core.readme import Readme - -from .core.file import File - -from .core.link import Link - -from .cube import Cube - -from .cube_hierarchy import CubeHierarchy - -from .cube_dimension import CubeDimension - -from .cube_field import CubeField - -from .custom_entity import CustomEntity - -from .core.data_domain import DataDomain - -from .core.data_product import DataProduct - -from .core.data_mesh_dataset import DataMeshDataset - +from .core.dbt_test import DbtTest +from .core.document_d_b import DocumentDB +from .core.document_d_b_collection import DocumentDBCollection +from .core.document_d_b_database import DocumentDBDatabase from .core.dremio import Dremio - -from .core.query import Query - -from .bigquery_tag import BigqueryTag - -from .core.schema import Schema - -from .snowflake_listing import SnowflakeListing - -from .core.materialised_view import MaterialisedView - -from .core.function import Function - -from .core.table_partition import TablePartition - -from .core.column import Column - -from .core.snowflake import Snowflake - -from .snowflake_share import SnowflakeShare - -from .core.databricks_unity_catalog_tag import DatabricksUnityCatalogTag - -from .core.snowflake_stream import SnowflakeStream - -from .core.calculation_view import CalculationView - -from .core.database import Database - -from .core.procedure import Procedure - -from .core.table import Table - -from .core.snowflake_pipe import SnowflakePipe - -from .core.view import View - -from .core.snowflake_stage import SnowflakeStage - -from .starburst import Starburst - -from .iceberg import Iceberg - -from .core.databricks import Databricks - -from .core.snowflake_tag import SnowflakeTag - -from .core.sql_insight_filter import SqlInsightFilter - -from .core.sql_insight_business_question import SqlInsightBusinessQuestion - -from .core.sql_insight_join import SqlInsightJoin - -from .core.matillion_group import MatillionGroup - -from .core.matillion_job import MatillionJob - -from .core.matillion_project import MatillionProject - -from .core.matillion_component import MatillionComponent - -from .core.model_attribute import ModelAttribute - -from .core.model_entity import ModelEntity - -from .core.model_version import ModelVersion - -from .core.model_entity_association import ModelEntityAssociation - -from .core.model_attribute_association import ModelAttributeAssociation - -from .core.model_data_model import ModelDataModel - -from .a_p_i_spec import APISpec - -from .a_p_i_query import APIQuery - -from .a_p_i_object import APIObject - -from .a_p_i_path import APIPath - -from .a_p_i_field import APIField - -from .core.spark_job import SparkJob - -from .source_tag import SourceTag - -from .core.schema_registry_subject import SchemaRegistrySubject - -from .core.schema_registry_version import SchemaRegistryVersion - -from .data_studio_asset import DataStudioAsset - -from .core.g_c_p_dataplex import GCPDataplex - -from .core.atlan_app_workflow import AtlanAppWorkflow - -from .atlan_app_deployment import AtlanAppDeployment - -from .atlan_app_installed import AtlanAppInstalled - -from .core.atlan_app_tool import AtlanAppTool - -from .s_a_p_b_w_a_d_s_o import SAPBWADSO - -from .s_a_p_b_w_info_source import SAPBWInfoSource - -from .s_a_p_b_w_a_d_s_o_field import SAPBWADSOField - -from .s_a_p_b_w_data_source import SAPBWDataSource - -from .s_a_p_b_w_d_t_p import SAPBWDTP - -from .s_a_p_b_w_composite_provider_field import SAPBWCompositeProviderField - -from .s_a_p_b_w_info_object import SAPBWInfoObject - -from .s_a_p_b_w_query_element import SAPBWQueryElement - -from .s_a_p_b_w_transformation import SAPBWTransformation - -from .s_a_p_b_w_data_source_field import SAPBWDataSourceField - -from .s_a_p_b_w_info_area import SAPBWInfoArea - -from .s_a_p_b_w_info_source_field import SAPBWInfoSourceField - -from .s_a_p_b_w_query import SAPBWQuery - -from .s_a_p_b_w_composite_provider import SAPBWCompositeProvider - -from .core.context_repository import ContextRepository - -from .core.context_artifact import ContextArtifact - -from .core.databricks_genie_agent import DatabricksGenieAgent - -from .core.knowledge_folder import KnowledgeFolder - -from .core.knowledge_file import KnowledgeFile - -from .core.skill_artifact import SkillArtifact - -from .preset_chart import PresetChart - -from .preset_dataset import PresetDataset - -from .preset_dashboard import PresetDashboard - -from .preset_workspace import PresetWorkspace - -from .s_s_r_s_report import SSRSReport - -from .s_s_r_s_field import SSRSField - -from .s_s_r_s_data_set import SSRSDataSet - -from .s_s_r_s_folder import SSRSFolder - -from .mode_report import ModeReport - -from .mode_query import ModeQuery - -from .mode_chart import ModeChart - -from .mode_workspace import ModeWorkspace - -from .mode_collection import ModeCollection - -from .sigma_dataset_column import SigmaDatasetColumn - -from .sigma_dataset import SigmaDataset - -from .sigma_data_model import SigmaDataModel - -from .sigma_workbook import SigmaWorkbook - -from .sigma_page import SigmaPage - -from .sigma_data_model_column import SigmaDataModelColumn - -from .sigma_data_element_field import SigmaDataElementField - -from .sigma_data_element import SigmaDataElement - -from .anaplan_page import AnaplanPage - -from .anaplan_list import AnaplanList - -from .anaplan_line_item import AnaplanLineItem - -from .anaplan_workspace import AnaplanWorkspace - -from .anaplan_module import AnaplanModule - -from .anaplan_model import AnaplanModel - -from .anaplan_app import AnaplanApp - -from .anaplan_system_dimension import AnaplanSystemDimension - -from .anaplan_dimension import AnaplanDimension - -from .anaplan_view import AnaplanView - -from .tableau_workbook import TableauWorkbook - -from .tableau_worksheet_field import TableauWorksheetField - -from .tableau_datasource_field import TableauDatasourceField - -from .tableau_calculated_field import TableauCalculatedField - -from .tableau_project import TableauProject - -from .tableau_dashboard_field import TableauDashboardField - -from .tableau_metric import TableauMetric - -from .tableau_site import TableauSite - -from .tableau_datasource import TableauDatasource - -from .tableau_dashboard import TableauDashboard - -from .tableau_flow import TableauFlow - -from .tableau_worksheet import TableauWorksheet - -from .looker_look import LookerLook - -from .looker_dashboard import LookerDashboard - -from .looker_folder import LookerFolder - -from .looker_tile import LookerTile - -from .looker_model import LookerModel - -from .looker_explore import LookerExplore - -from .looker_project import LookerProject - -from .looker_query import LookerQuery - -from .looker_field import LookerField - -from .looker_view import LookerView - -from .domo_dataset import DomoDataset - -from .domo_card import DomoCard - -from .domo_dataset_column import DomoDatasetColumn - -from .domo_dashboard import DomoDashboard - -from .redash_dashboard import RedashDashboard - -from .redash_query import RedashQuery - -from .redash_visualization import RedashVisualization - -from .sisense_folder import SisenseFolder - -from .sisense_widget import SisenseWidget - -from .sisense_datamodel import SisenseDatamodel - -from .sisense_datamodel_table import SisenseDatamodelTable - -from .sisense_dashboard import SisenseDashboard - -from .metabase_question import MetabaseQuestion - -from .metabase_collection import MetabaseCollection - -from .metabase_dashboard import MetabaseDashboard - -from .quick_sight_folder import QuickSightFolder - -from .quick_sight_dashboard_visual import QuickSightDashboardVisual - -from .quick_sight_dataset_field import QuickSightDatasetField - -from .quick_sight_analysis_visual import QuickSightAnalysisVisual - -from .quick_sight_analysis import QuickSightAnalysis - -from .quick_sight_dashboard import QuickSightDashboard - -from .quick_sight_dataset import QuickSightDataset - -from .thoughtspot_worksheet import ThoughtspotWorksheet - -from .thoughtspot_liveboard import ThoughtspotLiveboard - -from .thoughtspot_table import ThoughtspotTable - -from .thoughtspot_view import ThoughtspotView - -from .thoughtspot_column import ThoughtspotColumn - -from .thoughtspot_dashlet import ThoughtspotDashlet - -from .thoughtspot_answer import ThoughtspotAnswer - -from .core.power_b_i_report import PowerBIReport - -from .core.power_b_i_datasource import PowerBIDatasource - -from .core.power_b_i_workspace import PowerBIWorkspace - -from .core.power_b_i_dashboard import PowerBIDashboard - -from .core.power_b_i_dataflow import PowerBIDataflow - -from .core.power_b_i_dataflow_entity_column import PowerBIDataflowEntityColumn - -from .core.power_b_i_measure import PowerBIMeasure - -from .core.power_b_i_column import PowerBIColumn - -from .core.power_b_i_table import PowerBITable - -from .core.power_b_i_tile import PowerBITile - -from .core.power_b_i_dataset import PowerBIDataset - -from .core.power_b_i_app import PowerBIApp - -from .core.power_b_i_page import PowerBIPage - -from .micro_strategy_report import MicroStrategyReport - -from .micro_strategy_project import MicroStrategyProject - -from .micro_strategy_metric import MicroStrategyMetric - -from .micro_strategy_dossier import MicroStrategyDossier - -from .micro_strategy_fact import MicroStrategyFact - -from .micro_strategy_cube import MicroStrategyCube - -from .micro_strategy_column import MicroStrategyColumn - -from .micro_strategy_document import MicroStrategyDocument - -from .micro_strategy_attribute import MicroStrategyAttribute - -from .micro_strategy_visualization import MicroStrategyVisualization - -from .cognos_column import CognosColumn - -from .cognos_exploration import CognosExploration - -from .cognos_dataset import CognosDataset - -from .cognos_dashboard import CognosDashboard - -from .cognos_report import CognosReport - -from .cognos_module import CognosModule - -from .cognos_file import CognosFile - -from .cognos_folder import CognosFolder - -from .cognos_package import CognosPackage - -from .cognos_datasource import CognosDatasource - -from .superset_dataset import SupersetDataset - -from .superset_chart import SupersetChart - -from .superset_dashboard import SupersetDashboard - -from .qlik_column import QlikColumn - -from .qlik_space import QlikSpace - -from .qlik_app import QlikApp - -from .qlik_chart import QlikChart - -from .qlik_dataset import QlikDataset - -from .qlik_sheet import QlikSheet - -from .core.fabric_visual import FabricVisual - -from .core.fabric_dashboard import FabricDashboard - -from .core.fabric_dataflow import FabricDataflow - +from .core.dremio_column import DremioColumn +from .core.dremio_folder import DremioFolder +from .core.dremio_physical_dataset import DremioPhysicalDataset +from .core.dremio_source import DremioSource +from .core.dremio_space import DremioSpace +from .core.dremio_virtual_dataset import DremioVirtualDataset +from .core.dynamo_d_b_secondary_index import DynamoDBSecondaryIndex +from .core.fabric import Fabric from .core.fabric_activity import FabricActivity - -from .core.fabric_page import FabricPage - -from .core.fabric_workspace import FabricWorkspace - +from .core.fabric_dashboard import FabricDashboard from .core.fabric_data_pipeline import FabricDataPipeline - -from .core.fabric_semantic_model_table import FabricSemanticModelTable - -from .core.fabric_semantic_model_table_column import FabricSemanticModelTableColumn - +from .core.fabric_dataflow import FabricDataflow from .core.fabric_dataflow_entity_column import FabricDataflowEntityColumn - +from .core.fabric_page import FabricPage from .core.fabric_report import FabricReport - from .core.fabric_semantic_model import FabricSemanticModel - +from .core.fabric_semantic_model_table import FabricSemanticModelTable +from .core.fabric_semantic_model_table_column import FabricSemanticModelTableColumn +from .core.fabric_visual import FabricVisual +from .core.fabric_workspace import FabricWorkspace +from .core.file import File +from .core.fivetran import Fivetran +from .core.fivetran_connector import FivetranConnector +from .core.flow import Flow +from .core.flow_control_operation import FlowControlOperation +from .core.flow_dataset import FlowDataset +from .core.flow_dataset_operation import FlowDatasetOperation +from .core.flow_field import FlowField +from .core.flow_field_operation import FlowFieldOperation +from .core.flow_reusable_unit import FlowReusableUnit +from .core.folder import Folder +from .core.function import Function +from .core.g_c_p_dataplex import GCPDataplex +from .core.g_c_p_dataplex_aspect_type import GCPDataplexAspectType +from .core.g_c_s import GCS +from .core.google import Google +from .core.indistinct_asset import IndistinctAsset +from .core.knowledge import Knowledge +from .core.knowledge_file import KnowledgeFile +from .core.knowledge_folder import KnowledgeFolder +from .core.link import Link +from .core.m_c_incident import MCIncident +from .core.m_c_monitor import MCMonitor +from .core.materialised_view import MaterialisedView +from .core.matillion import Matillion +from .core.matillion_component import MatillionComponent +from .core.matillion_group import MatillionGroup +from .core.matillion_job import MatillionJob +from .core.matillion_project import MatillionProject +from .core.metric import Metric +from .core.model import Model +from .core.model_attribute import ModelAttribute +from .core.model_attribute_association import ModelAttributeAssociation +from .core.model_data_model import ModelDataModel +from .core.model_entity import ModelEntity +from .core.model_entity_association import ModelEntityAssociation +from .core.model_version import ModelVersion +from .core.mongo_d_b_collection import MongoDBCollection +from .core.mongo_d_b_database import MongoDBDatabase +from .core.monte_carlo import MonteCarlo +from .core.namespace import Namespace +from .core.no_s_q_l import NoSQL +from .core.partial import Partial +from .core.partial_field import PartialField +from .core.partial_object import PartialObject +from .core.persona import Persona +from .core.power_b_i import PowerBI +from .core.power_b_i_app import PowerBIApp +from .core.power_b_i_column import PowerBIColumn +from .core.power_b_i_dashboard import PowerBIDashboard +from .core.power_b_i_dataflow import PowerBIDataflow +from .core.power_b_i_dataflow_entity_column import PowerBIDataflowEntityColumn +from .core.power_b_i_dataset import PowerBIDataset +from .core.power_b_i_datasource import PowerBIDatasource +from .core.power_b_i_measure import PowerBIMeasure +from .core.power_b_i_page import PowerBIPage +from .core.power_b_i_report import PowerBIReport +from .core.power_b_i_table import PowerBITable +from .core.power_b_i_tile import PowerBITile +from .core.power_b_i_workspace import PowerBIWorkspace +from .core.procedure import Procedure +from .core.process import Process +from .core.query import Query +from .core.readme import Readme +from .core.referenceable import Referenceable +from .core.resource import Resource +from .core.s_a_p import SAP +from .core.s_q_l import SQL +from .core.sap_datasphere_replication_flow import SapDatasphereReplicationFlow +from .core.schema import Schema +from .core.schema_registry import SchemaRegistry +from .core.schema_registry_subject import SchemaRegistrySubject +from .core.schema_registry_version import SchemaRegistryVersion +from .core.semantic import Semantic +from .core.semantic_dimension import SemanticDimension +from .core.semantic_entity import SemanticEntity +from .core.semantic_measure import SemanticMeasure +from .core.semantic_model import SemanticModel +from .core.skill import Skill +from .core.skill_artifact import SkillArtifact +from .core.snowflake import Snowflake +from .core.snowflake_a_i_model_context import SnowflakeAIModelContext +from .core.snowflake_a_i_model_version import SnowflakeAIModelVersion +from .core.snowflake_dynamic_table import SnowflakeDynamicTable +from .core.snowflake_pipe import SnowflakePipe from .core.snowflake_semantic_dimension import SnowflakeSemanticDimension - +from .core.snowflake_semantic_fact import SnowflakeSemanticFact from .core.snowflake_semantic_logical_table import SnowflakeSemanticLogicalTable - +from .core.snowflake_semantic_metric import SnowflakeSemanticMetric from .core.snowflake_semantic_view import SnowflakeSemanticView - -from .core.snowflake_semantic_fact import SnowflakeSemanticFact - +from .core.snowflake_stage import SnowflakeStage +from .core.snowflake_stream import SnowflakeStream +from .core.snowflake_tag import SnowflakeTag +from .core.soda import Soda +from .core.soda_check import SodaCheck +from .core.spark import Spark +from .core.spark_job import SparkJob +from .core.sql_insight import SqlInsight +from .core.sql_insight_business_question import SqlInsightBusinessQuestion +from .core.sql_insight_filter import SqlInsightFilter +from .core.sql_insight_join import SqlInsightJoin +from .core.stakeholder import Stakeholder +from .core.stakeholder_title import StakeholderTitle +from .core.starburst_dataset import StarburstDataset +from .core.starburst_dataset_column import StarburstDatasetColumn +from .core.table import Table +from .core.table_partition import TablePartition +from .core.tag import Tag +from .core.view import View +from .cube import Cube +from .cube_dimension import CubeDimension +from .cube_field import CubeField +from .cube_hierarchy import CubeHierarchy +from .custom import Custom +from .custom_entity import CustomEntity +from .data_set import DataSet +from .data_studio_asset import DataStudioAsset +from .databricks_dashboard import DatabricksDashboard +from .databricks_external_location import DatabricksExternalLocation +from .databricks_external_location_path import DatabricksExternalLocationPath +from .databricks_notebook import DatabricksNotebook +from .dataverse import Dataverse +from .dataverse_attribute import DataverseAttribute +from .dataverse_entity import DataverseEntity +from .dbt_dimension import DbtDimension +from .dbt_entity import DbtEntity +from .dbt_measure import DbtMeasure +from .dbt_semantic_model import DbtSemanticModel +from .dbt_tag import DbtTag +from .domo import Domo +from .domo_card import DomoCard +from .domo_dashboard import DomoDashboard +from .domo_dataset import DomoDataset +from .domo_dataset_column import DomoDatasetColumn +from .dynamo_d_b import DynamoDB +from .dynamo_d_b_attribute import DynamoDBAttribute +from .dynamo_d_b_global_secondary_index import DynamoDBGlobalSecondaryIndex +from .dynamo_d_b_local_secondary_index import DynamoDBLocalSecondaryIndex +from .dynamo_dbtable import DynamoDBTable +from .event_store import EventStore +from .flow_folder import FlowFolder +from .flow_project import FlowProject +from .form import Form +from .g_c_s_bucket import GCSBucket +from .g_c_s_object import GCSObject +from .iceberg import Iceberg +from .iceberg_catalog import IcebergCatalog +from .iceberg_column import IcebergColumn +from .iceberg_namespace import IcebergNamespace +from .iceberg_table import IcebergTable +from .incident import Incident +from .infrastructure import Infrastructure +from .insight import Insight +from .kafka import Kafka from .kafka_cluster import KafkaCluster - +from .kafka_consumer_group import KafkaConsumerGroup from .kafka_field import KafkaField - from .kafka_topic import KafkaTopic - -from .kafka_consumer_group import KafkaConsumerGroup - -from .azure_service_bus_namespace import AzureServiceBusNamespace - -from .azure_service_bus_schema import AzureServiceBusSchema - -from .azure_service_bus_topic import AzureServiceBusTopic - -from .core.cosmos_mongo_d_b_collection import CosmosMongoDBCollection - -from .core.cosmos_mongo_d_b_account import CosmosMongoDBAccount - -from .core.cosmos_mongo_d_b_database import CosmosMongoDBDatabase - -from .core.document_d_b_collection import DocumentDBCollection - -from .core.document_d_b_database import DocumentDBDatabase - -from .cassandra_table import CassandraTable - -from .cassandra_view import CassandraView - -from .cassandra_column import CassandraColumn - -from .cassandra_index import CassandraIndex - -from .cassandra_keyspace import CassandraKeyspace - -from .core.dynamo_d_b_secondary_index import DynamoDBSecondaryIndex - -from .dynamo_d_b_attribute import DynamoDBAttribute - -from .dynamo_dbtable import DynamoDBTable - -from .core.mongo_d_b_collection import MongoDBCollection - -from .core.mongo_d_b_database import MongoDBDatabase - +from .looker import Looker +from .looker_dashboard import LookerDashboard +from .looker_explore import LookerExplore +from .looker_field import LookerField +from .looker_folder import LookerFolder +from .looker_look import LookerLook +from .looker_model import LookerModel +from .looker_project import LookerProject +from .looker_query import LookerQuery +from .looker_tile import LookerTile +from .looker_view import LookerView +from .metabase import Metabase +from .metabase_collection import MetabaseCollection +from .metabase_dashboard import MetabaseDashboard +from .metabase_question import MetabaseQuestion +from .micro_strategy import MicroStrategy +from .micro_strategy_attribute import MicroStrategyAttribute +from .micro_strategy_column import MicroStrategyColumn +from .micro_strategy_cube import MicroStrategyCube +from .micro_strategy_document import MicroStrategyDocument +from .micro_strategy_dossier import MicroStrategyDossier +from .micro_strategy_fact import MicroStrategyFact +from .micro_strategy_metric import MicroStrategyMetric +from .micro_strategy_project import MicroStrategyProject +from .micro_strategy_report import MicroStrategyReport +from .micro_strategy_visualization import MicroStrategyVisualization +from .mode import Mode +from .mode_chart import ModeChart +from .mode_collection import ModeCollection +from .mode_query import ModeQuery +from .mode_report import ModeReport +from .mode_workspace import ModeWorkspace +from .mongo_d_b import MongoDB +from .multi_dimensional_dataset import MultiDimensionalDataset +from .notebook import Notebook +from .object_store import ObjectStore +from .preset import Preset +from .preset_chart import PresetChart +from .preset_dashboard import PresetDashboard +from .preset_dataset import PresetDataset +from .preset_workspace import PresetWorkspace +from .process_execution import ProcessExecution +from .purpose import Purpose +from .qlik import Qlik +from .qlik_app import QlikApp +from .qlik_chart import QlikChart +from .qlik_column import QlikColumn +from .qlik_dataset import QlikDataset +from .qlik_sheet import QlikSheet +from .qlik_space import QlikSpace +from .qlik_stream import QlikStream +from .quick_sight import QuickSight +from .quick_sight_analysis import QuickSightAnalysis +from .quick_sight_analysis_visual import QuickSightAnalysisVisual +from .quick_sight_dashboard import QuickSightDashboard +from .quick_sight_dashboard_visual import QuickSightDashboardVisual +from .quick_sight_dataset import QuickSightDataset +from .quick_sight_dataset_field import QuickSightDatasetField +from .quick_sight_folder import QuickSightFolder +from .readme_template import ReadmeTemplate +from .redash import Redash +from .redash_dashboard import RedashDashboard +from .redash_query import RedashQuery +from .redash_visualization import RedashVisualization +from .response import Response +from .s3 import S3 from .s3_bucket import S3Bucket - -from .s3_prefix import S3Prefix - from .s3_object import S3Object - -from .a_d_l_s_account import ADLSAccount - -from .a_d_l_s_container import ADLSContainer - -from .a_d_l_s_object import ADLSObject - -from .g_c_s_object import GCSObject - -from .g_c_s_bucket import GCSBucket - -from .core.anomalo_check import AnomaloCheck - -from .core.m_c_incident import MCIncident - -from .core.m_c_monitor import MCMonitor - -from .core.snowflake_semantic_metric import SnowflakeSemanticMetric - -from .core.soda_check import SodaCheck - -from .sage_maker_unified_studio_project import SageMakerUnifiedStudioProject - +from .s3_prefix import S3Prefix +from .s_a_p_b_w import SAPBW +from .s_a_p_b_w_a_d_s_o import SAPBWADSO +from .s_a_p_b_w_a_d_s_o_field import SAPBWADSOField +from .s_a_p_b_w_composite_provider import SAPBWCompositeProvider +from .s_a_p_b_w_composite_provider_field import SAPBWCompositeProviderField +from .s_a_p_b_w_d_t_p import SAPBWDTP +from .s_a_p_b_w_data_source import SAPBWDataSource +from .s_a_p_b_w_data_source_field import SAPBWDataSourceField +from .s_a_p_b_w_info_area import SAPBWInfoArea +from .s_a_p_b_w_info_object import SAPBWInfoObject +from .s_a_p_b_w_info_source import SAPBWInfoSource +from .s_a_p_b_w_info_source_field import SAPBWInfoSourceField +from .s_a_p_b_w_query import SAPBWQuery +from .s_a_p_b_w_query_element import SAPBWQueryElement +from .s_a_p_b_w_transformation import SAPBWTransformation +from .s_a_p_column_process import SAPColumnProcess +from .s_a_p_process import SAPProcess +from .s_s_r_s import SSRS +from .s_s_r_s_data_set import SSRSDataSet +from .s_s_r_s_field import SSRSField +from .s_s_r_s_folder import SSRSFolder +from .s_s_r_s_report import SSRSReport +from .saa_s import SaaS +from .sage_maker import SageMaker +from .sage_maker_feature import SageMakerFeature +from .sage_maker_feature_group import SageMakerFeatureGroup +from .sage_maker_model import SageMakerModel +from .sage_maker_model_deployment import SageMakerModelDeployment +from .sage_maker_model_group import SageMakerModelGroup +from .sage_maker_unified_studio import SageMakerUnifiedStudio from .sage_maker_unified_studio_asset import SageMakerUnifiedStudioAsset - -from .sage_maker_unified_studio_subscribed_asset import ( - SageMakerUnifiedStudioSubscribedAsset, -) - +from .sage_maker_unified_studio_asset_schema import SageMakerUnifiedStudioAssetSchema +from .sage_maker_unified_studio_project import SageMakerUnifiedStudioProject from .sage_maker_unified_studio_published_asset import ( SageMakerUnifiedStudioPublishedAsset, ) - -from .sage_maker_unified_studio_asset_schema import SageMakerUnifiedStudioAssetSchema - -from .dataverse_attribute import DataverseAttribute - -from .dataverse_entity import DataverseEntity - -from .cognite_event import CogniteEvent - -from .cognite_asset import CogniteAsset - -from .cognite3_d_model import Cognite3DModel - -from .cognite_sequence import CogniteSequence - -from .cognite_time_series import CogniteTimeSeries - -from .cognite_file import CogniteFile - -from .salesforce_object import SalesforceObject - +from .sage_maker_unified_studio_subscribed_asset import ( + SageMakerUnifiedStudioSubscribedAsset, +) +from .salesforce import Salesforce +from .salesforce_dashboard import SalesforceDashboard from .salesforce_field import SalesforceField - +from .salesforce_object import SalesforceObject from .salesforce_organization import SalesforceOrganization - -from .salesforce_dashboard import SalesforceDashboard - from .salesforce_report import SalesforceReport - -from .sage_maker_model import SageMakerModel - -from .sage_maker_model_group import SageMakerModelGroup - -from .sage_maker_feature import SageMakerFeature - -from .sage_maker_feature_group import SageMakerFeatureGroup - -from .sage_maker_model_deployment import SageMakerModelDeployment - -from .core.databricks_a_i_model_version import DatabricksAIModelVersion - -from .core.snowflake_a_i_model_version import SnowflakeAIModelVersion - -from .core.snowflake_a_i_model_context import SnowflakeAIModelContext - -from .core.databricks_a_i_model_context import DatabricksAIModelContext - -from .core.dremio_virtual_dataset import DremioVirtualDataset - -from .core.dremio_column import DremioColumn - -from .core.dremio_space import DremioSpace - -from .core.dremio_physical_dataset import DremioPhysicalDataset - -from .core.dremio_folder import DremioFolder - -from .core.dremio_source import DremioSource - -from .iceberg_namespace import IcebergNamespace - -from .core.starburst_dataset_column import StarburstDatasetColumn - -from .iceberg_column import IcebergColumn - -from .iceberg_catalog import IcebergCatalog - -from .core.bigquery_routine import BigqueryRoutine - -from .core.snowflake_dynamic_table import SnowflakeDynamicTable - -from .core.starburst_dataset import StarburstDataset - -from .iceberg_table import IcebergTable - -from .core.databricks_metric_view import DatabricksMetricView - -from .core.databricks_volume import DatabricksVolume - -from .databricks_external_location import DatabricksExternalLocation - -from .databricks_external_location_path import DatabricksExternalLocationPath - -from .core.databricks_volume_path import DatabricksVolumePath - -from .core.g_c_p_dataplex_aspect_type import GCPDataplexAspectType - -from .qlik_stream import QlikStream - -from .azure_event_hub import AzureEventHub - -from .azure_event_hub_consumer_group import AzureEventHubConsumerGroup - -from .dynamo_d_b_local_secondary_index import DynamoDBLocalSecondaryIndex - -from .dynamo_d_b_global_secondary_index import DynamoDBGlobalSecondaryIndex - -from .core.indistinct_asset import IndistinctAsset +from .sap_erp_abap_program import SapErpAbapProgram +from .sap_erp_cds_view import SapErpCdsView +from .sap_erp_column import SapErpColumn +from .sap_erp_component import SapErpComponent +from .sap_erp_fiori_app import SapErpFioriApp +from .sap_erp_function_module import SapErpFunctionModule +from .sap_erp_table import SapErpTable +from .sap_erp_transaction_code import SapErpTransactionCode +from .sap_erp_view import SapErpView +from .semantic_field import SemanticField +from .sigma import Sigma +from .sigma_data_element import SigmaDataElement +from .sigma_data_element_field import SigmaDataElementField +from .sigma_data_model import SigmaDataModel +from .sigma_data_model_column import SigmaDataModelColumn +from .sigma_dataset import SigmaDataset +from .sigma_dataset_column import SigmaDatasetColumn +from .sigma_page import SigmaPage +from .sigma_workbook import SigmaWorkbook +from .sisense import Sisense +from .sisense_dashboard import SisenseDashboard +from .sisense_datamodel import SisenseDatamodel +from .sisense_datamodel_table import SisenseDatamodelTable +from .sisense_folder import SisenseFolder +from .sisense_widget import SisenseWidget +from .snowflake_listing import SnowflakeListing +from .snowflake_share import SnowflakeShare +from .source_tag import SourceTag +from .starburst import Starburst +from .superset import Superset +from .superset_chart import SupersetChart +from .superset_dashboard import SupersetDashboard +from .superset_dataset import SupersetDataset +from .tableau import Tableau +from .tableau_calculated_field import TableauCalculatedField +from .tableau_dashboard import TableauDashboard +from .tableau_dashboard_field import TableauDashboardField +from .tableau_datasource import TableauDatasource +from .tableau_datasource_field import TableauDatasourceField +from .tableau_flow import TableauFlow +from .tableau_metric import TableauMetric +from .tableau_project import TableauProject +from .tableau_site import TableauSite +from .tableau_workbook import TableauWorkbook +from .tableau_worksheet import TableauWorksheet +from .tableau_worksheet_field import TableauWorksheetField +from .tag_attachment import TagAttachment +from .task import Task +from .thoughtspot import Thoughtspot +from .thoughtspot_answer import ThoughtspotAnswer +from .thoughtspot_column import ThoughtspotColumn +from .thoughtspot_dashlet import ThoughtspotDashlet +from .thoughtspot_liveboard import ThoughtspotLiveboard +from .thoughtspot_table import ThoughtspotTable +from .thoughtspot_view import ThoughtspotView +from .thoughtspot_worksheet import ThoughtspotWorksheet +from .unstructured import Unstructured +from .unstructured_container import UnstructuredContainer +from .unstructured_folder import UnstructuredFolder +from .unstructured_object import UnstructuredObject +from .workflow import Workflow +from .workflow_run import WorkflowRun diff --git a/pyatlan/model/assets/azure_event_hub.py b/pyatlan/model/assets/azure_event_hub.py index bcff4c992..03e02923b 100644 --- a/pyatlan/model/assets/azure_event_hub.py +++ b/pyatlan/model/assets/azure_event_hub.py @@ -46,7 +46,7 @@ def __setattr__(self, name, value): "azureEventHubStatus", "azureEventHubStatus" ) """ - + """ _convenience_properties: ClassVar[List[str]] = [ diff --git a/pyatlan/model/assets/bigquery_tag.py b/pyatlan/model/assets/bigquery_tag.py index 4a40b93bc..9bfc9acb1 100644 --- a/pyatlan/model/assets/bigquery_tag.py +++ b/pyatlan/model/assets/bigquery_tag.py @@ -1156,8 +1156,12 @@ class Attributes(Tag.Attributes): from .core.dbt_seed import DbtSeed # noqa: E402, F401 from .core.dbt_source import DbtSource # noqa: E402, F401 from .core.dbt_test import DbtTest # noqa: E402, F401 -from .core.snowflake_semantic_logical_table import SnowflakeSemanticLogicalTable # noqa: E402, F401 -from .core.sql_insight_business_question import SqlInsightBusinessQuestion # noqa: E402, F401 +from .core.snowflake_semantic_logical_table import ( + SnowflakeSemanticLogicalTable, # noqa: E402, F401 +) +from .core.sql_insight_business_question import ( + SqlInsightBusinessQuestion, # noqa: E402, F401 +) from .core.sql_insight_join import SqlInsightJoin # noqa: E402, F401 BigqueryTag.Attributes.update_forward_refs() diff --git a/pyatlan/model/assets/connection.py b/pyatlan/model/assets/connection.py index 0372a12ac..4711da53d 100644 --- a/pyatlan/model/assets/connection.py +++ b/pyatlan/model/assets/connection.py @@ -376,7 +376,7 @@ def __setattr__(self, name, value): "connectionDbtEnvironments", "connectionDbtEnvironments" ) """ - + """ CONNECTION_SSO_CREDENTIAL_GUID: ClassVar[KeywordField] = KeywordField( "connectionSSOCredentialGuid", "connectionSSOCredentialGuid" @@ -406,13 +406,13 @@ def __setattr__(self, name, value): "vectorEmbeddingsEnabled", "vectorEmbeddingsEnabled" ) """ - + """ VECTOR_EMBEDDINGS_UPDATED_AT: ClassVar[NumericField] = NumericField( "vectorEmbeddingsUpdatedAt", "vectorEmbeddingsUpdatedAt" ) """ - + """ CONNECTION_SOURCE_ACCOUNT_IDENTIFIER: ClassVar[KeywordField] = KeywordField( "connectionSourceAccountIdentifier", "connectionSourceAccountIdentifier" diff --git a/pyatlan/model/assets/core/asset.py b/pyatlan/model/assets/core/asset.py index 7e561c0da..ee7d122fd 100644 --- a/pyatlan/model/assets/core/asset.py +++ b/pyatlan/model/assets/core/asset.py @@ -1063,13 +1063,13 @@ def __setattr__(self, name, value): "assetSodaLastSyncRunAt", "assetSodaLastSyncRunAt" ) """ - + """ ASSET_SODA_LAST_SCAN_AT: ClassVar[NumericField] = NumericField( "assetSodaLastScanAt", "assetSodaLastScanAt" ) """ - + """ ASSET_SODA_CHECK_STATUSES: ClassVar[TextField] = TextField( "assetSodaCheckStatuses", "assetSodaCheckStatuses" @@ -1081,7 +1081,7 @@ def __setattr__(self, name, value): "assetSodaSourceURL", "assetSodaSourceURL" ) """ - + """ ASSET_ICON: ClassVar[TextField] = TextField("assetIcon", "assetIcon") """ @@ -1147,7 +1147,7 @@ def __setattr__(self, name, value): "isAIGenerated", "isAIGenerated" ) """ - + """ ASSET_COVER_IMAGE: ClassVar[TextField] = TextField( "assetCoverImage", "assetCoverImage" diff --git a/pyatlan/model/assets/core/atlas_glossary.py b/pyatlan/model/assets/core/atlas_glossary.py index fee4135ad..1a216dd1b 100644 --- a/pyatlan/model/assets/core/atlas_glossary.py +++ b/pyatlan/model/assets/core/atlas_glossary.py @@ -100,7 +100,7 @@ def __setattr__(self, name, value): """ GLOSSARY_TYPE: ClassVar[KeywordField] = KeywordField("glossaryType", "glossaryType") """ - + """ TERMS: ClassVar[RelationField] = RelationField("terms") diff --git a/pyatlan/model/assets/core/atlas_glossary_category.py b/pyatlan/model/assets/core/atlas_glossary_category.py index 33a13b5b1..b914fd855 100644 --- a/pyatlan/model/assets/core/atlas_glossary_category.py +++ b/pyatlan/model/assets/core/atlas_glossary_category.py @@ -178,7 +178,7 @@ def __setattr__(self, name, value): """ CATEGORY_TYPE: ClassVar[KeywordField] = KeywordField("categoryType", "categoryType") """ - + """ TERMS: ClassVar[RelationField] = RelationField("terms") diff --git a/pyatlan/model/assets/core/atlas_glossary_term.py b/pyatlan/model/assets/core/atlas_glossary_term.py index 667d9f110..c12a1c8d2 100644 --- a/pyatlan/model/assets/core/atlas_glossary_term.py +++ b/pyatlan/model/assets/core/atlas_glossary_term.py @@ -187,7 +187,7 @@ def __setattr__(self, name, value): """ TERM_TYPE: ClassVar[KeywordField] = KeywordField("termType", "termType") """ - + """ VALID_VALUES_FOR: ClassVar[RelationField] = RelationField("validValuesFor") diff --git a/pyatlan/model/assets/core/cosmos_mongo_d_b_collection.py b/pyatlan/model/assets/core/cosmos_mongo_d_b_collection.py index dba642085..69dcc987b 100644 --- a/pyatlan/model/assets/core/cosmos_mongo_d_b_collection.py +++ b/pyatlan/model/assets/core/cosmos_mongo_d_b_collection.py @@ -2138,8 +2138,12 @@ class Attributes(CosmosMongoDB.Attributes): from .procedure import Procedure # noqa: E402, F401 from .query import Query # noqa: E402, F401 from .schema import Schema # noqa: E402, F401 -from .snowflake_semantic_logical_table import SnowflakeSemanticLogicalTable # noqa: E402, F401 -from .sql_insight_business_question import SqlInsightBusinessQuestion # noqa: E402, F401 +from .snowflake_semantic_logical_table import ( + SnowflakeSemanticLogicalTable, # noqa: E402, F401 +) +from .sql_insight_business_question import ( + SqlInsightBusinessQuestion, # noqa: E402, F401 +) from .sql_insight_join import SqlInsightJoin # noqa: E402, F401 from .table import Table # noqa: E402, F401 from .table_partition import TablePartition # noqa: E402, F401 diff --git a/pyatlan/model/assets/core/cosmos_mongo_d_b_database.py b/pyatlan/model/assets/core/cosmos_mongo_d_b_database.py index 26976394f..8adc0d05c 100644 --- a/pyatlan/model/assets/core/cosmos_mongo_d_b_database.py +++ b/pyatlan/model/assets/core/cosmos_mongo_d_b_database.py @@ -1289,6 +1289,10 @@ class Attributes(CosmosMongoDB.Attributes): from .fabric_workspace import FabricWorkspace # noqa: E402, F401 from .mongo_d_b_collection import MongoDBCollection # noqa: E402, F401 from .schema import Schema # noqa: E402, F401 -from .snowflake_semantic_logical_table import SnowflakeSemanticLogicalTable # noqa: E402, F401 -from .sql_insight_business_question import SqlInsightBusinessQuestion # noqa: E402, F401 +from .snowflake_semantic_logical_table import ( + SnowflakeSemanticLogicalTable, # noqa: E402, F401 +) +from .sql_insight_business_question import ( + SqlInsightBusinessQuestion, # noqa: E402, F401 +) from .sql_insight_join import SqlInsightJoin # noqa: E402, F401 diff --git a/pyatlan/model/assets/core/databricks_a_i_model_context.py b/pyatlan/model/assets/core/databricks_a_i_model_context.py index 1f7693ba6..41f866a8e 100644 --- a/pyatlan/model/assets/core/databricks_a_i_model_context.py +++ b/pyatlan/model/assets/core/databricks_a_i_model_context.py @@ -1370,6 +1370,10 @@ class Attributes(AIModel.Attributes): from .dbt_source import DbtSource # noqa: E402, F401 from .dbt_test import DbtTest # noqa: E402, F401 from .schema import Schema # noqa: E402, F401 -from .snowflake_semantic_logical_table import SnowflakeSemanticLogicalTable # noqa: E402, F401 -from .sql_insight_business_question import SqlInsightBusinessQuestion # noqa: E402, F401 +from .snowflake_semantic_logical_table import ( + SnowflakeSemanticLogicalTable, # noqa: E402, F401 +) +from .sql_insight_business_question import ( + SqlInsightBusinessQuestion, # noqa: E402, F401 +) from .sql_insight_join import SqlInsightJoin # noqa: E402, F401 diff --git a/pyatlan/model/assets/core/databricks_a_i_model_version.py b/pyatlan/model/assets/core/databricks_a_i_model_version.py index a40eb4f5c..27424b615 100644 --- a/pyatlan/model/assets/core/databricks_a_i_model_version.py +++ b/pyatlan/model/assets/core/databricks_a_i_model_version.py @@ -1670,6 +1670,10 @@ class Attributes(AIModelVersion.Attributes): from .dbt_seed import DbtSeed # noqa: E402, F401 from .dbt_source import DbtSource # noqa: E402, F401 from .dbt_test import DbtTest # noqa: E402, F401 -from .snowflake_semantic_logical_table import SnowflakeSemanticLogicalTable # noqa: E402, F401 -from .sql_insight_business_question import SqlInsightBusinessQuestion # noqa: E402, F401 +from .snowflake_semantic_logical_table import ( + SnowflakeSemanticLogicalTable, # noqa: E402, F401 +) +from .sql_insight_business_question import ( + SqlInsightBusinessQuestion, # noqa: E402, F401 +) from .sql_insight_join import SqlInsightJoin # noqa: E402, F401 diff --git a/pyatlan/model/assets/core/databricks_genie_agent.py b/pyatlan/model/assets/core/databricks_genie_agent.py index 5e8424ae5..c8873f518 100644 --- a/pyatlan/model/assets/core/databricks_genie_agent.py +++ b/pyatlan/model/assets/core/databricks_genie_agent.py @@ -1319,6 +1319,10 @@ class Attributes(Agent.Attributes): from .dbt_seed import DbtSeed # noqa: E402, F401 from .dbt_source import DbtSource # noqa: E402, F401 from .dbt_test import DbtTest # noqa: E402, F401 -from .snowflake_semantic_logical_table import SnowflakeSemanticLogicalTable # noqa: E402, F401 -from .sql_insight_business_question import SqlInsightBusinessQuestion # noqa: E402, F401 +from .snowflake_semantic_logical_table import ( + SnowflakeSemanticLogicalTable, # noqa: E402, F401 +) +from .sql_insight_business_question import ( + SqlInsightBusinessQuestion, # noqa: E402, F401 +) from .sql_insight_join import SqlInsightJoin # noqa: E402, F401 diff --git a/pyatlan/model/assets/core/databricks_unity_catalog_tag.py b/pyatlan/model/assets/core/databricks_unity_catalog_tag.py index a1b20e6b0..f785a5224 100644 --- a/pyatlan/model/assets/core/databricks_unity_catalog_tag.py +++ b/pyatlan/model/assets/core/databricks_unity_catalog_tag.py @@ -1086,6 +1086,10 @@ class Attributes(Tag.Attributes): from .dbt_seed import DbtSeed # noqa: E402, F401 from .dbt_source import DbtSource # noqa: E402, F401 from .dbt_test import DbtTest # noqa: E402, F401 -from .snowflake_semantic_logical_table import SnowflakeSemanticLogicalTable # noqa: E402, F401 -from .sql_insight_business_question import SqlInsightBusinessQuestion # noqa: E402, F401 +from .snowflake_semantic_logical_table import ( + SnowflakeSemanticLogicalTable, # noqa: E402, F401 +) +from .sql_insight_business_question import ( + SqlInsightBusinessQuestion, # noqa: E402, F401 +) from .sql_insight_join import SqlInsightJoin # noqa: E402, F401 diff --git a/pyatlan/model/assets/core/dbt_column_process.py b/pyatlan/model/assets/core/dbt_column_process.py index d477fbccd..55a06372c 100644 --- a/pyatlan/model/assets/core/dbt_column_process.py +++ b/pyatlan/model/assets/core/dbt_column_process.py @@ -177,7 +177,7 @@ def __setattr__(self, name, value): "parentConnectionProcessQualifiedName", "parentConnectionProcessQualifiedName" ) """ - + """ AST: ClassVar[TextField] = TextField("ast", "ast") """ diff --git a/pyatlan/model/assets/core/dbt_process.py b/pyatlan/model/assets/core/dbt_process.py index 64372181a..1e0acc51a 100644 --- a/pyatlan/model/assets/core/dbt_process.py +++ b/pyatlan/model/assets/core/dbt_process.py @@ -183,7 +183,7 @@ def __setattr__(self, name, value): "parentConnectionProcessQualifiedName", "parentConnectionProcessQualifiedName" ) """ - + """ AST: ClassVar[TextField] = TextField("ast", "ast") """ diff --git a/pyatlan/model/assets/core/document_d_b_database.py b/pyatlan/model/assets/core/document_d_b_database.py index b8dacecc0..3ccf3d624 100644 --- a/pyatlan/model/assets/core/document_d_b_database.py +++ b/pyatlan/model/assets/core/document_d_b_database.py @@ -1239,6 +1239,10 @@ def creator( from .document_d_b_collection import DocumentDBCollection # noqa: E402, F401 from .fabric_workspace import FabricWorkspace # noqa: E402, F401 from .schema import Schema # noqa: E402, F401 -from .snowflake_semantic_logical_table import SnowflakeSemanticLogicalTable # noqa: E402, F401 -from .sql_insight_business_question import SqlInsightBusinessQuestion # noqa: E402, F401 +from .snowflake_semantic_logical_table import ( + SnowflakeSemanticLogicalTable, # noqa: E402, F401 +) +from .sql_insight_business_question import ( + SqlInsightBusinessQuestion, # noqa: E402, F401 +) from .sql_insight_join import SqlInsightJoin # noqa: E402, F401 diff --git a/pyatlan/model/assets/core/fabric_dataflow.py b/pyatlan/model/assets/core/fabric_dataflow.py index f2875b088..61366bf35 100644 --- a/pyatlan/model/assets/core/fabric_dataflow.py +++ b/pyatlan/model/assets/core/fabric_dataflow.py @@ -91,5 +91,7 @@ class Attributes(Fabric.Attributes): ) -from .fabric_dataflow_entity_column import FabricDataflowEntityColumn # noqa: E402, F401 +from .fabric_dataflow_entity_column import ( + FabricDataflowEntityColumn, # noqa: E402, F401 +) from .fabric_workspace import FabricWorkspace # noqa: E402, F401 diff --git a/pyatlan/model/assets/core/fabric_semantic_model_table.py b/pyatlan/model/assets/core/fabric_semantic_model_table.py index 07ed8235c..502c73357 100644 --- a/pyatlan/model/assets/core/fabric_semantic_model_table.py +++ b/pyatlan/model/assets/core/fabric_semantic_model_table.py @@ -132,4 +132,6 @@ class Attributes(Fabric.Attributes): from .fabric_semantic_model import FabricSemanticModel # noqa: E402, F401 -from .fabric_semantic_model_table_column import FabricSemanticModelTableColumn # noqa: E402, F401 +from .fabric_semantic_model_table_column import ( + FabricSemanticModelTableColumn, # noqa: E402, F401 +) diff --git a/pyatlan/model/assets/core/flow_dataset_operation.py b/pyatlan/model/assets/core/flow_dataset_operation.py index d5f6a3d21..3dc58d4c1 100644 --- a/pyatlan/model/assets/core/flow_dataset_operation.py +++ b/pyatlan/model/assets/core/flow_dataset_operation.py @@ -50,7 +50,7 @@ def __setattr__(self, name, value): "parentConnectionProcessQualifiedName", "parentConnectionProcessQualifiedName" ) """ - + """ AST: ClassVar[TextField] = TextField("ast", "ast") """ diff --git a/pyatlan/model/assets/core/flow_field_operation.py b/pyatlan/model/assets/core/flow_field_operation.py index 8edb11c0a..59f00832e 100644 --- a/pyatlan/model/assets/core/flow_field_operation.py +++ b/pyatlan/model/assets/core/flow_field_operation.py @@ -49,7 +49,7 @@ def __setattr__(self, name, value): "parentConnectionProcessQualifiedName", "parentConnectionProcessQualifiedName" ) """ - + """ AST: ClassVar[TextField] = TextField("ast", "ast") """ diff --git a/pyatlan/model/assets/core/power_b_i_dataflow.py b/pyatlan/model/assets/core/power_b_i_dataflow.py index 060d743b3..38d2bfc0d 100644 --- a/pyatlan/model/assets/core/power_b_i_dataflow.py +++ b/pyatlan/model/assets/core/power_b_i_dataflow.py @@ -354,7 +354,9 @@ class Attributes(PowerBI.Attributes): ) -from .power_b_i_dataflow_entity_column import PowerBIDataflowEntityColumn # noqa: E402, F401 +from .power_b_i_dataflow_entity_column import ( + PowerBIDataflowEntityColumn, # noqa: E402, F401 +) from .power_b_i_dataset import PowerBIDataset # noqa: E402, F401 from .power_b_i_datasource import PowerBIDatasource # noqa: E402, F401 from .power_b_i_table import PowerBITable # noqa: E402, F401 diff --git a/pyatlan/model/assets/core/process.py b/pyatlan/model/assets/core/process.py index 5ba2863fc..66314c441 100644 --- a/pyatlan/model/assets/core/process.py +++ b/pyatlan/model/assets/core/process.py @@ -113,7 +113,7 @@ def __setattr__(self, name, value): "parentConnectionProcessQualifiedName", "parentConnectionProcessQualifiedName" ) """ - + """ AST: ClassVar[TextField] = TextField("ast", "ast") """ diff --git a/pyatlan/model/assets/core/query.py b/pyatlan/model/assets/core/query.py index e7a26b791..04037aab5 100644 --- a/pyatlan/model/assets/core/query.py +++ b/pyatlan/model/assets/core/query.py @@ -138,7 +138,7 @@ def __setattr__(self, name, value): """ RAW_QUERY_TEXT: ClassVar[RelationField] = RelationField("rawQueryText") """ - + """ DEFAULT_SCHEMA_QUALIFIED_NAME: ClassVar[KeywordTextField] = KeywordTextField( "defaultSchemaQualifiedName", diff --git a/pyatlan/model/assets/core/s_q_l.py b/pyatlan/model/assets/core/s_q_l.py index f50999d5c..bbe691c32 100644 --- a/pyatlan/model/assets/core/s_q_l.py +++ b/pyatlan/model/assets/core/s_q_l.py @@ -995,6 +995,10 @@ class Attributes(Catalog.Attributes): from .dbt_model import DbtModel # noqa: E402, F401 from .dbt_seed import DbtSeed # noqa: E402, F401 from .dbt_source import DbtSource # noqa: E402, F401 -from .snowflake_semantic_logical_table import SnowflakeSemanticLogicalTable # noqa: E402, F401 -from .sql_insight_business_question import SqlInsightBusinessQuestion # noqa: E402, F401 +from .snowflake_semantic_logical_table import ( + SnowflakeSemanticLogicalTable, # noqa: E402, F401 +) +from .sql_insight_business_question import ( + SqlInsightBusinessQuestion, # noqa: E402, F401 +) from .sql_insight_join import SqlInsightJoin # noqa: E402, F401 diff --git a/pyatlan/model/assets/core/schema.py b/pyatlan/model/assets/core/schema.py index 544f1379d..75db31ce4 100644 --- a/pyatlan/model/assets/core/schema.py +++ b/pyatlan/model/assets/core/schema.py @@ -621,7 +621,9 @@ def create( from .function import Function # noqa: E402, F401 from .materialised_view import MaterialisedView # noqa: E402, F401 from .procedure import Procedure # noqa: E402, F401 -from .sap_datasphere_replication_flow import SapDatasphereReplicationFlow # noqa: E402, F401 +from .sap_datasphere_replication_flow import ( + SapDatasphereReplicationFlow, # noqa: E402, F401 +) from .snowflake_a_i_model_context import SnowflakeAIModelContext # noqa: E402, F401 from .snowflake_pipe import SnowflakePipe # noqa: E402, F401 from .snowflake_semantic_view import SnowflakeSemanticView # noqa: E402, F401 diff --git a/pyatlan/model/assets/core/snowflake_a_i_model_context.py b/pyatlan/model/assets/core/snowflake_a_i_model_context.py index dd39c9079..ae1242f75 100644 --- a/pyatlan/model/assets/core/snowflake_a_i_model_context.py +++ b/pyatlan/model/assets/core/snowflake_a_i_model_context.py @@ -1340,6 +1340,10 @@ class Attributes(AIModel.Attributes): from .dbt_test import DbtTest # noqa: E402, F401 from .schema import Schema # noqa: E402, F401 from .snowflake_a_i_model_version import SnowflakeAIModelVersion # noqa: E402, F401 -from .snowflake_semantic_logical_table import SnowflakeSemanticLogicalTable # noqa: E402, F401 -from .sql_insight_business_question import SqlInsightBusinessQuestion # noqa: E402, F401 +from .snowflake_semantic_logical_table import ( + SnowflakeSemanticLogicalTable, # noqa: E402, F401 +) +from .sql_insight_business_question import ( + SqlInsightBusinessQuestion, # noqa: E402, F401 +) from .sql_insight_join import SqlInsightJoin # noqa: E402, F401 diff --git a/pyatlan/model/assets/core/snowflake_a_i_model_version.py b/pyatlan/model/assets/core/snowflake_a_i_model_version.py index 2df16f7da..7769b5bed 100644 --- a/pyatlan/model/assets/core/snowflake_a_i_model_version.py +++ b/pyatlan/model/assets/core/snowflake_a_i_model_version.py @@ -1468,6 +1468,10 @@ class Attributes(AIModelVersion.Attributes): from .dbt_source import DbtSource # noqa: E402, F401 from .dbt_test import DbtTest # noqa: E402, F401 from .snowflake_a_i_model_context import SnowflakeAIModelContext # noqa: E402, F401 -from .snowflake_semantic_logical_table import SnowflakeSemanticLogicalTable # noqa: E402, F401 -from .sql_insight_business_question import SqlInsightBusinessQuestion # noqa: E402, F401 +from .snowflake_semantic_logical_table import ( + SnowflakeSemanticLogicalTable, # noqa: E402, F401 +) +from .sql_insight_business_question import ( + SqlInsightBusinessQuestion, # noqa: E402, F401 +) from .sql_insight_join import SqlInsightJoin # noqa: E402, F401 diff --git a/pyatlan/model/assets/core/snowflake_semantic_dimension.py b/pyatlan/model/assets/core/snowflake_semantic_dimension.py index 09ae786ef..31cc1f68f 100644 --- a/pyatlan/model/assets/core/snowflake_semantic_dimension.py +++ b/pyatlan/model/assets/core/snowflake_semantic_dimension.py @@ -1278,6 +1278,10 @@ class Attributes(SemanticDimension.Attributes): from .dbt_seed import DbtSeed # noqa: E402, F401 from .dbt_source import DbtSource # noqa: E402, F401 from .dbt_test import DbtTest # noqa: E402, F401 -from .snowflake_semantic_logical_table import SnowflakeSemanticLogicalTable # noqa: E402, F401 -from .sql_insight_business_question import SqlInsightBusinessQuestion # noqa: E402, F401 +from .snowflake_semantic_logical_table import ( + SnowflakeSemanticLogicalTable, # noqa: E402, F401 +) +from .sql_insight_business_question import ( + SqlInsightBusinessQuestion, # noqa: E402, F401 +) from .sql_insight_join import SqlInsightJoin # noqa: E402, F401 diff --git a/pyatlan/model/assets/core/snowflake_semantic_fact.py b/pyatlan/model/assets/core/snowflake_semantic_fact.py index 07692fedc..87b07735d 100644 --- a/pyatlan/model/assets/core/snowflake_semantic_fact.py +++ b/pyatlan/model/assets/core/snowflake_semantic_fact.py @@ -1072,4 +1072,6 @@ class Attributes(Snowflake.Attributes): from .semantic_model import SemanticModel # noqa: E402, F401 -from .snowflake_semantic_logical_table import SnowflakeSemanticLogicalTable # noqa: E402, F401 +from .snowflake_semantic_logical_table import ( + SnowflakeSemanticLogicalTable, # noqa: E402, F401 +) diff --git a/pyatlan/model/assets/core/snowflake_semantic_logical_table.py b/pyatlan/model/assets/core/snowflake_semantic_logical_table.py index 56e8e1041..b62b3fcdb 100644 --- a/pyatlan/model/assets/core/snowflake_semantic_logical_table.py +++ b/pyatlan/model/assets/core/snowflake_semantic_logical_table.py @@ -1407,5 +1407,7 @@ class Attributes(SemanticEntity.Attributes): from .snowflake_semantic_fact import SnowflakeSemanticFact # noqa: E402, F401 from .snowflake_semantic_metric import SnowflakeSemanticMetric # noqa: E402, F401 from .snowflake_semantic_view import SnowflakeSemanticView # noqa: E402, F401 -from .sql_insight_business_question import SqlInsightBusinessQuestion # noqa: E402, F401 +from .sql_insight_business_question import ( + SqlInsightBusinessQuestion, # noqa: E402, F401 +) from .sql_insight_join import SqlInsightJoin # noqa: E402, F401 diff --git a/pyatlan/model/assets/core/snowflake_semantic_metric.py b/pyatlan/model/assets/core/snowflake_semantic_metric.py index 1b31a67f0..13d1a0c73 100644 --- a/pyatlan/model/assets/core/snowflake_semantic_metric.py +++ b/pyatlan/model/assets/core/snowflake_semantic_metric.py @@ -1161,4 +1161,6 @@ class Attributes(Snowflake.Attributes): from .asset import Asset # noqa: E402, F401 from .column import Column # noqa: E402, F401 -from .snowflake_semantic_logical_table import SnowflakeSemanticLogicalTable # noqa: E402, F401 +from .snowflake_semantic_logical_table import ( + SnowflakeSemanticLogicalTable, # noqa: E402, F401 +) diff --git a/pyatlan/model/assets/core/snowflake_tag.py b/pyatlan/model/assets/core/snowflake_tag.py index 09a7a4527..4d6276fd5 100644 --- a/pyatlan/model/assets/core/snowflake_tag.py +++ b/pyatlan/model/assets/core/snowflake_tag.py @@ -1105,6 +1105,10 @@ class Attributes(Tag.Attributes): from .dbt_source import DbtSource # noqa: E402, F401 from .dbt_test import DbtTest # noqa: E402, F401 from .schema import Schema # noqa: E402, F401 -from .snowflake_semantic_logical_table import SnowflakeSemanticLogicalTable # noqa: E402, F401 -from .sql_insight_business_question import SqlInsightBusinessQuestion # noqa: E402, F401 +from .snowflake_semantic_logical_table import ( + SnowflakeSemanticLogicalTable, # noqa: E402, F401 +) +from .sql_insight_business_question import ( + SqlInsightBusinessQuestion, # noqa: E402, F401 +) from .sql_insight_join import SqlInsightJoin # noqa: E402, F401 diff --git a/pyatlan/model/assets/core/soda_check.py b/pyatlan/model/assets/core/soda_check.py index a59f8aa60..6e53d9348 100644 --- a/pyatlan/model/assets/core/soda_check.py +++ b/pyatlan/model/assets/core/soda_check.py @@ -55,13 +55,13 @@ def __setattr__(self, name, value): "sodaCheckLastScanAt", "sodaCheckLastScanAt" ) """ - + """ SODA_CHECK_INCIDENT_COUNT: ClassVar[NumericField] = NumericField( "sodaCheckIncidentCount", "sodaCheckIncidentCount" ) """ - + """ SODA_CHECK_LINKED_ASSET_QUALIFIED_NAME: ClassVar[KeywordField] = KeywordField( "sodaCheckLinkedAssetQualifiedName", "sodaCheckLinkedAssetQualifiedName" diff --git a/pyatlan/model/assets/core/stakeholder.py b/pyatlan/model/assets/core/stakeholder.py index 8ca2aebfa..4bfd09ecc 100644 --- a/pyatlan/model/assets/core/stakeholder.py +++ b/pyatlan/model/assets/core/stakeholder.py @@ -33,13 +33,13 @@ def __setattr__(self, name, value): "stakeholderDomainQualifiedName", "stakeholderDomainQualifiedName" ) """ - + """ STAKEHOLDER_TITLE_GUID: ClassVar[KeywordField] = KeywordField( "stakeholderTitleGuid", "stakeholderTitleGuid" ) """ - + """ STAKEHOLDER_TITLE: ClassVar[RelationField] = RelationField("stakeholderTitle") diff --git a/pyatlan/model/assets/databricks_dashboard.py b/pyatlan/model/assets/databricks_dashboard.py index 951be448c..bbe329ae1 100644 --- a/pyatlan/model/assets/databricks_dashboard.py +++ b/pyatlan/model/assets/databricks_dashboard.py @@ -1174,8 +1174,12 @@ class Attributes(BI.Attributes): from .core.dbt_seed import DbtSeed # noqa: E402, F401 from .core.dbt_source import DbtSource # noqa: E402, F401 from .core.dbt_test import DbtTest # noqa: E402, F401 -from .core.snowflake_semantic_logical_table import SnowflakeSemanticLogicalTable # noqa: E402, F401 -from .core.sql_insight_business_question import SqlInsightBusinessQuestion # noqa: E402, F401 +from .core.snowflake_semantic_logical_table import ( + SnowflakeSemanticLogicalTable, # noqa: E402, F401 +) +from .core.sql_insight_business_question import ( + SqlInsightBusinessQuestion, # noqa: E402, F401 +) from .core.sql_insight_join import SqlInsightJoin # noqa: E402, F401 DatabricksDashboard.Attributes.update_forward_refs() diff --git a/pyatlan/model/assets/databricks_external_location.py b/pyatlan/model/assets/databricks_external_location.py index 2dcb9ebe2..d581d3cd6 100644 --- a/pyatlan/model/assets/databricks_external_location.py +++ b/pyatlan/model/assets/databricks_external_location.py @@ -115,6 +115,8 @@ class Attributes(Databricks.Attributes): ) -from .databricks_external_location_path import DatabricksExternalLocationPath # noqa: E402, F401 +from .databricks_external_location_path import ( + DatabricksExternalLocationPath, # noqa: E402, F401 +) DatabricksExternalLocation.Attributes.update_forward_refs() diff --git a/pyatlan/model/assets/databricks_notebook.py b/pyatlan/model/assets/databricks_notebook.py index 4b9aa7310..0fd5df117 100644 --- a/pyatlan/model/assets/databricks_notebook.py +++ b/pyatlan/model/assets/databricks_notebook.py @@ -1061,8 +1061,12 @@ class Attributes(Notebook.Attributes): from .core.dbt_seed import DbtSeed # noqa: E402, F401 from .core.dbt_source import DbtSource # noqa: E402, F401 from .core.dbt_test import DbtTest # noqa: E402, F401 -from .core.snowflake_semantic_logical_table import SnowflakeSemanticLogicalTable # noqa: E402, F401 -from .core.sql_insight_business_question import SqlInsightBusinessQuestion # noqa: E402, F401 +from .core.snowflake_semantic_logical_table import ( + SnowflakeSemanticLogicalTable, # noqa: E402, F401 +) +from .core.sql_insight_business_question import ( + SqlInsightBusinessQuestion, # noqa: E402, F401 +) from .core.sql_insight_join import SqlInsightJoin # noqa: E402, F401 DatabricksNotebook.Attributes.update_forward_refs() diff --git a/pyatlan/model/assets/dynamo_dbtable.py b/pyatlan/model/assets/dynamo_dbtable.py index a1bb1d424..b7396b1b9 100644 --- a/pyatlan/model/assets/dynamo_dbtable.py +++ b/pyatlan/model/assets/dynamo_dbtable.py @@ -1570,7 +1570,11 @@ class Attributes(Table.Attributes): from .dynamo_d_b_attribute import DynamoDBAttribute # noqa: E402, F401 -from .dynamo_d_b_global_secondary_index import DynamoDBGlobalSecondaryIndex # noqa: E402, F401 -from .dynamo_d_b_local_secondary_index import DynamoDBLocalSecondaryIndex # noqa: E402, F401 +from .dynamo_d_b_global_secondary_index import ( + DynamoDBGlobalSecondaryIndex, # noqa: E402, F401 +) +from .dynamo_d_b_local_secondary_index import ( + DynamoDBLocalSecondaryIndex, # noqa: E402, F401 +) DynamoDBTable.Attributes.update_forward_refs() diff --git a/pyatlan/model/assets/iceberg_namespace.py b/pyatlan/model/assets/iceberg_namespace.py index e77955f58..1a9073421 100644 --- a/pyatlan/model/assets/iceberg_namespace.py +++ b/pyatlan/model/assets/iceberg_namespace.py @@ -1358,13 +1358,19 @@ class Attributes(Iceberg.Attributes): from .core.bigquery_routine import BigqueryRoutine # noqa: E402, F401 from .core.calculation_view import CalculationView # noqa: E402, F401 from .core.database import Database # noqa: E402, F401 -from .core.databricks_a_i_model_context import DatabricksAIModelContext # noqa: E402, F401 +from .core.databricks_a_i_model_context import ( + DatabricksAIModelContext, # noqa: E402, F401 +) from .core.databricks_volume import DatabricksVolume # noqa: E402, F401 from .core.function import Function # noqa: E402, F401 from .core.materialised_view import MaterialisedView # noqa: E402, F401 from .core.procedure import Procedure # noqa: E402, F401 -from .core.sap_datasphere_replication_flow import SapDatasphereReplicationFlow # noqa: E402, F401 -from .core.snowflake_a_i_model_context import SnowflakeAIModelContext # noqa: E402, F401 +from .core.sap_datasphere_replication_flow import ( + SapDatasphereReplicationFlow, # noqa: E402, F401 +) +from .core.snowflake_a_i_model_context import ( + SnowflakeAIModelContext, # noqa: E402, F401 +) from .core.snowflake_dynamic_table import SnowflakeDynamicTable # noqa: E402, F401 from .core.snowflake_pipe import SnowflakePipe # noqa: E402, F401 from .core.snowflake_semantic_view import SnowflakeSemanticView # noqa: E402, F401 diff --git a/pyatlan/model/assets/metabase_collection.py b/pyatlan/model/assets/metabase_collection.py index d6b8caa2f..2c7e021ac 100644 --- a/pyatlan/model/assets/metabase_collection.py +++ b/pyatlan/model/assets/metabase_collection.py @@ -76,25 +76,25 @@ def __setattr__(self, name, value): "metabaseSlug", "metabaseSlug", "metabaseSlug.text" ) """ - + """ METABASE_COLOR: ClassVar[KeywordField] = KeywordField( "metabaseColor", "metabaseColor" ) """ - + """ METABASE_NAMESPACE: ClassVar[KeywordTextField] = KeywordTextField( "metabaseNamespace", "metabaseNamespace", "metabaseNamespace.text" ) """ - + """ METABASE_IS_PERSONAL_COLLECTION: ClassVar[BooleanField] = BooleanField( "metabaseIsPersonalCollection", "metabaseIsPersonalCollection" ) """ - + """ METABASE_DASHBOARDS: ClassVar[RelationField] = RelationField("metabaseDashboards") diff --git a/pyatlan/model/assets/metabase_dashboard.py b/pyatlan/model/assets/metabase_dashboard.py index 012305266..dfc5e45b6 100644 --- a/pyatlan/model/assets/metabase_dashboard.py +++ b/pyatlan/model/assets/metabase_dashboard.py @@ -71,7 +71,7 @@ def __setattr__(self, name, value): "metabaseQuestionCount", "metabaseQuestionCount" ) """ - + """ METABASE_QUESTIONS: ClassVar[RelationField] = RelationField("metabaseQuestions") diff --git a/pyatlan/model/assets/metabase_question.py b/pyatlan/model/assets/metabase_question.py index ce347825f..2f7e51eac 100644 --- a/pyatlan/model/assets/metabase_question.py +++ b/pyatlan/model/assets/metabase_question.py @@ -75,19 +75,19 @@ def __setattr__(self, name, value): "metabaseDashboardCount", "metabaseDashboardCount" ) """ - + """ METABASE_QUERY_TYPE: ClassVar[KeywordTextField] = KeywordTextField( "metabaseQueryType", "metabaseQueryType", "metabaseQueryType.text" ) """ - + """ METABASE_QUERY: ClassVar[KeywordTextField] = KeywordTextField( "metabaseQuery", "metabaseQuery.keyword", "metabaseQuery" ) """ - + """ METABASE_DASHBOARDS: ClassVar[RelationField] = RelationField("metabaseDashboards") diff --git a/pyatlan/model/assets/preset_chart.py b/pyatlan/model/assets/preset_chart.py index 0458b6577..c5d7229aa 100644 --- a/pyatlan/model/assets/preset_chart.py +++ b/pyatlan/model/assets/preset_chart.py @@ -90,13 +90,13 @@ def __setattr__(self, name, value): "presetChartDescriptionMarkdown", "presetChartDescriptionMarkdown" ) """ - + """ PRESET_CHART_FORM_DATA: ClassVar[KeywordField] = KeywordField( "presetChartFormData", "presetChartFormData" ) """ - + """ PRESET_DASHBOARD: ClassVar[RelationField] = RelationField("presetDashboard") diff --git a/pyatlan/model/assets/preset_dashboard.py b/pyatlan/model/assets/preset_dashboard.py index b003a5515..fdf6d4eb9 100644 --- a/pyatlan/model/assets/preset_dashboard.py +++ b/pyatlan/model/assets/preset_dashboard.py @@ -103,37 +103,37 @@ def __setattr__(self, name, value): ) ) """ - + """ PRESET_DASHBOARD_CHANGED_BY_URL: ClassVar[KeywordField] = KeywordField( "presetDashboardChangedByURL", "presetDashboardChangedByURL" ) """ - + """ PRESET_DASHBOARD_IS_MANAGED_EXTERNALLY: ClassVar[BooleanField] = BooleanField( "presetDashboardIsManagedExternally", "presetDashboardIsManagedExternally" ) """ - + """ PRESET_DASHBOARD_IS_PUBLISHED: ClassVar[BooleanField] = BooleanField( "presetDashboardIsPublished", "presetDashboardIsPublished" ) """ - + """ PRESET_DASHBOARD_THUMBNAIL_URL: ClassVar[KeywordField] = KeywordField( "presetDashboardThumbnailURL", "presetDashboardThumbnailURL" ) """ - + """ PRESET_DASHBOARD_CHART_COUNT: ClassVar[NumericField] = NumericField( "presetDashboardChartCount", "presetDashboardChartCount" ) """ - + """ PRESET_DATASETS: ClassVar[RelationField] = RelationField("presetDatasets") diff --git a/pyatlan/model/assets/preset_dataset.py b/pyatlan/model/assets/preset_dataset.py index d74ed79a0..107b6cc5b 100644 --- a/pyatlan/model/assets/preset_dataset.py +++ b/pyatlan/model/assets/preset_dataset.py @@ -102,19 +102,19 @@ def __setattr__(self, name, value): ) ) """ - + """ PRESET_DATASET_ID: ClassVar[NumericField] = NumericField( "presetDatasetId", "presetDatasetId" ) """ - + """ PRESET_DATASET_TYPE: ClassVar[KeywordField] = KeywordField( "presetDatasetType", "presetDatasetType" ) """ - + """ PRESET_DASHBOARD: ClassVar[RelationField] = RelationField("presetDashboard") diff --git a/pyatlan/model/assets/preset_workspace.py b/pyatlan/model/assets/preset_workspace.py index b10722b64..6f94fbf39 100644 --- a/pyatlan/model/assets/preset_workspace.py +++ b/pyatlan/model/assets/preset_workspace.py @@ -69,19 +69,19 @@ def __setattr__(self, name, value): "presetWorkspacePublicDashboardsAllowed", ) """ - + """ PRESET_WORKSPACE_CLUSTER_ID: ClassVar[NumericField] = NumericField( "presetWorkspaceClusterId", "presetWorkspaceClusterId" ) """ - + """ PRESET_WORKSPACE_DEPLOYMENT_ID: ClassVar[NumericField] = NumericField( "presetWorkspaceDeploymentId", "presetWorkspaceDeploymentId" ) """ - + """ PRESET_WORKSPACE_HOSTNAME: ClassVar[KeywordTextField] = KeywordTextField( "presetWorkspaceHostname", @@ -89,37 +89,37 @@ def __setattr__(self, name, value): "presetWorkspaceHostname.text", ) """ - + """ PRESET_WORKSPACE_IS_IN_MAINTENANCE_MODE: ClassVar[BooleanField] = BooleanField( "presetWorkspaceIsInMaintenanceMode", "presetWorkspaceIsInMaintenanceMode" ) """ - + """ PRESET_WORKSPACE_REGION: ClassVar[KeywordTextField] = KeywordTextField( "presetWorkspaceRegion", "presetWorkspaceRegion", "presetWorkspaceRegion.text" ) """ - + """ PRESET_WORKSPACE_STATUS: ClassVar[KeywordField] = KeywordField( "presetWorkspaceStatus", "presetWorkspaceStatus" ) """ - + """ PRESET_WORKSPACE_DASHBOARD_COUNT: ClassVar[NumericField] = NumericField( "presetWorkspaceDashboardCount", "presetWorkspaceDashboardCount" ) """ - + """ PRESET_WORKSPACE_DATASET_COUNT: ClassVar[NumericField] = NumericField( "presetWorkspaceDatasetCount", "presetWorkspaceDatasetCount" ) """ - + """ PRESET_DASHBOARDS: ClassVar[RelationField] = RelationField("presetDashboards") diff --git a/pyatlan/model/assets/relations/__init__.pyi b/pyatlan/model/assets/relations/__init__.pyi index e480ec259..17ef48dbf 100644 --- a/pyatlan/model/assets/relations/__init__.pyi +++ b/pyatlan/model/assets/relations/__init__.pyi @@ -18,22 +18,22 @@ __all__ = [ "CustomRelatedFromEntitiesCustomRelatedToEntities", ] -from .relationship_attributes import RelationshipAttributes -from .indistinct_relationship import IndistinctRelationship from .atlas_glossary_antonym import AtlasGlossaryAntonym -from .atlas_glossary_semantic_assignment import AtlasGlossarySemanticAssignment -from .user_def_relationship import UserDefRelationship +from .atlas_glossary_is_a_relationship import AtlasGlossaryIsARelationship +from .atlas_glossary_preferred_term import AtlasGlossaryPreferredTerm from .atlas_glossary_related_term import AtlasGlossaryRelatedTerm +from .atlas_glossary_replacement_term import AtlasGlossaryReplacementTerm +from .atlas_glossary_semantic_assignment import AtlasGlossarySemanticAssignment +from .atlas_glossary_synonym import AtlasGlossarySynonym +from .atlas_glossary_term_categorization import AtlasGlossaryTermCategorization from .atlas_glossary_translation import AtlasGlossaryTranslation from .atlas_glossary_valid_value import AtlasGlossaryValidValue -from .atlas_glossary_is_a_relationship import AtlasGlossaryIsARelationship from .custom_parent_entity_custom_child_entities import ( CustomParentEntityCustomChildEntities, ) -from .atlas_glossary_synonym import AtlasGlossarySynonym -from .atlas_glossary_replacement_term import AtlasGlossaryReplacementTerm -from .atlas_glossary_preferred_term import AtlasGlossaryPreferredTerm -from .atlas_glossary_term_categorization import AtlasGlossaryTermCategorization from .custom_related_from_entities_custom_related_to_entities import ( CustomRelatedFromEntitiesCustomRelatedToEntities, ) +from .indistinct_relationship import IndistinctRelationship +from .relationship_attributes import RelationshipAttributes +from .user_def_relationship import UserDefRelationship diff --git a/pyatlan/model/assets/s3.py b/pyatlan/model/assets/s3.py index d335a6f6d..051950d0d 100644 --- a/pyatlan/model/assets/s3.py +++ b/pyatlan/model/assets/s3.py @@ -38,7 +38,7 @@ def __setattr__(self, name, value): """ # noqa: E501 S3ENCRYPTION: ClassVar[KeywordField] = KeywordField("s3Encryption", "s3Encryption") """ - + """ S3PARENT_PREFIX_QUALIFIED_NAME: ClassVar[KeywordField] = KeywordField( "s3ParentPrefixQualifiedName", "s3ParentPrefixQualifiedName" diff --git a/pyatlan/model/assets/s_a_p_b_w_composite_provider.py b/pyatlan/model/assets/s_a_p_b_w_composite_provider.py index 072cadc97..86278a48f 100644 --- a/pyatlan/model/assets/s_a_p_b_w_composite_provider.py +++ b/pyatlan/model/assets/s_a_p_b_w_composite_provider.py @@ -132,7 +132,9 @@ class Attributes(SAPBW.Attributes): from .s_a_p_b_w_a_d_s_o import SAPBWADSO # noqa: E402, F401 -from .s_a_p_b_w_composite_provider_field import SAPBWCompositeProviderField # noqa: E402, F401 +from .s_a_p_b_w_composite_provider_field import ( + SAPBWCompositeProviderField, # noqa: E402, F401 +) from .s_a_p_b_w_info_area import SAPBWInfoArea # noqa: E402, F401 SAPBWCompositeProvider.Attributes.update_forward_refs() diff --git a/pyatlan/model/assets/s_a_p_b_w_info_object.py b/pyatlan/model/assets/s_a_p_b_w_info_object.py index 89bf4426a..7ffdd3d25 100644 --- a/pyatlan/model/assets/s_a_p_b_w_info_object.py +++ b/pyatlan/model/assets/s_a_p_b_w_info_object.py @@ -268,7 +268,9 @@ class Attributes(SAPBW.Attributes): from .s_a_p_b_w_a_d_s_o_field import SAPBWADSOField # noqa: E402, F401 -from .s_a_p_b_w_composite_provider_field import SAPBWCompositeProviderField # noqa: E402, F401 +from .s_a_p_b_w_composite_provider_field import ( + SAPBWCompositeProviderField, # noqa: E402, F401 +) from .s_a_p_b_w_data_source_field import SAPBWDataSourceField # noqa: E402, F401 from .s_a_p_b_w_info_area import SAPBWInfoArea # noqa: E402, F401 from .s_a_p_b_w_info_source_field import SAPBWInfoSourceField # noqa: E402, F401 diff --git a/pyatlan/model/assets/s_a_p_column_process.py b/pyatlan/model/assets/s_a_p_column_process.py index 6589a92e4..0f3887dbf 100644 --- a/pyatlan/model/assets/s_a_p_column_process.py +++ b/pyatlan/model/assets/s_a_p_column_process.py @@ -94,7 +94,7 @@ def __setattr__(self, name, value): "parentConnectionProcessQualifiedName", "parentConnectionProcessQualifiedName" ) """ - + """ AST: ClassVar[TextField] = TextField("ast", "ast") """ @@ -644,7 +644,7 @@ class Attributes(SAP.Attributes): from .core.power_b_i_dataflow import PowerBIDataflow # noqa: E402, F401 from .core.procedure import Procedure # noqa: E402, F401 from .core.process import Process # noqa: E402, F401 -from .s_a_p_b_w_transformation import SAPBWTransformation # noqa: E402, F401 from .core.spark_job import SparkJob # noqa: E402, F401 +from .s_a_p_b_w_transformation import SAPBWTransformation # noqa: E402, F401 SAPColumnProcess.Attributes.update_forward_refs() diff --git a/pyatlan/model/assets/s_a_p_process.py b/pyatlan/model/assets/s_a_p_process.py index 2fcd4662b..9f0f42128 100644 --- a/pyatlan/model/assets/s_a_p_process.py +++ b/pyatlan/model/assets/s_a_p_process.py @@ -94,7 +94,7 @@ def __setattr__(self, name, value): "parentConnectionProcessQualifiedName", "parentConnectionProcessQualifiedName" ) """ - + """ AST: ClassVar[TextField] = TextField("ast", "ast") """ @@ -621,7 +621,7 @@ class Attributes(SAP.Attributes): from .core.matillion_component import MatillionComponent # noqa: E402, F401 from .core.power_b_i_dataflow import PowerBIDataflow # noqa: E402, F401 from .core.procedure import Procedure # noqa: E402, F401 -from .s_a_p_b_w_d_t_p import SAPBWDTP # noqa: E402, F401 from .core.spark_job import SparkJob # noqa: E402, F401 +from .s_a_p_b_w_d_t_p import SAPBWDTP # noqa: E402, F401 SAPProcess.Attributes.update_forward_refs() diff --git a/pyatlan/model/assets/sage_maker_unified_studio_asset.py b/pyatlan/model/assets/sage_maker_unified_studio_asset.py index 34361ef66..992f98dce 100644 --- a/pyatlan/model/assets/sage_maker_unified_studio_asset.py +++ b/pyatlan/model/assets/sage_maker_unified_studio_asset.py @@ -166,6 +166,8 @@ class Attributes(SageMakerUnifiedStudio.Attributes): ) -from .sage_maker_unified_studio_asset_schema import SageMakerUnifiedStudioAssetSchema # noqa: E402, F401 +from .sage_maker_unified_studio_asset_schema import ( + SageMakerUnifiedStudioAssetSchema, # noqa: E402, F401 +) SageMakerUnifiedStudioAsset.Attributes.update_forward_refs() diff --git a/pyatlan/model/assets/sage_maker_unified_studio_asset_schema.py b/pyatlan/model/assets/sage_maker_unified_studio_asset_schema.py index cc6f06e84..9f44258e6 100644 --- a/pyatlan/model/assets/sage_maker_unified_studio_asset_schema.py +++ b/pyatlan/model/assets/sage_maker_unified_studio_asset_schema.py @@ -124,6 +124,8 @@ class Attributes(SageMakerUnifiedStudio.Attributes): ) -from .sage_maker_unified_studio_asset import SageMakerUnifiedStudioAsset # noqa: E402, F401 +from .sage_maker_unified_studio_asset import ( + SageMakerUnifiedStudioAsset, # noqa: E402, F401 +) SageMakerUnifiedStudioAssetSchema.Attributes.update_forward_refs() diff --git a/pyatlan/model/assets/sage_maker_unified_studio_project.py b/pyatlan/model/assets/sage_maker_unified_studio_project.py index 220a09818..22ce79eb1 100644 --- a/pyatlan/model/assets/sage_maker_unified_studio_project.py +++ b/pyatlan/model/assets/sage_maker_unified_studio_project.py @@ -217,10 +217,8 @@ class Attributes(SageMakerUnifiedStudio.Attributes): from .sage_maker_unified_studio_published_asset import ( SageMakerUnifiedStudioPublishedAsset, ) # noqa: E402, F401 - from .sage_maker_unified_studio_subscribed_asset import ( SageMakerUnifiedStudioSubscribedAsset, ) # noqa: E402, F401 - SageMakerUnifiedStudioProject.Attributes.update_forward_refs() diff --git a/pyatlan/model/assets/sage_maker_unified_studio_published_asset.py b/pyatlan/model/assets/sage_maker_unified_studio_published_asset.py index 48d8e214a..aaaf63b96 100644 --- a/pyatlan/model/assets/sage_maker_unified_studio_published_asset.py +++ b/pyatlan/model/assets/sage_maker_unified_studio_published_asset.py @@ -380,10 +380,11 @@ class Attributes(SageMakerUnifiedStudioAsset.Attributes): ) -from .sage_maker_unified_studio_project import SageMakerUnifiedStudioProject # noqa: E402, F401 +from .sage_maker_unified_studio_project import ( + SageMakerUnifiedStudioProject, # noqa: E402, F401 +) from .sage_maker_unified_studio_subscribed_asset import ( SageMakerUnifiedStudioSubscribedAsset, ) # noqa: E402, F401 - SageMakerUnifiedStudioPublishedAsset.Attributes.update_forward_refs() diff --git a/pyatlan/model/assets/sage_maker_unified_studio_subscribed_asset.py b/pyatlan/model/assets/sage_maker_unified_studio_subscribed_asset.py index 9614703ff..f19c9b067 100644 --- a/pyatlan/model/assets/sage_maker_unified_studio_subscribed_asset.py +++ b/pyatlan/model/assets/sage_maker_unified_studio_subscribed_asset.py @@ -541,10 +541,11 @@ class Attributes(SageMakerUnifiedStudioAsset.Attributes): ) -from .sage_maker_unified_studio_project import SageMakerUnifiedStudioProject # noqa: E402, F401 +from .sage_maker_unified_studio_project import ( + SageMakerUnifiedStudioProject, # noqa: E402, F401 +) from .sage_maker_unified_studio_published_asset import ( SageMakerUnifiedStudioPublishedAsset, ) # noqa: E402, F401 - SageMakerUnifiedStudioSubscribedAsset.Attributes.update_forward_refs() diff --git a/pyatlan/model/assets/sap_erp_column.py b/pyatlan/model/assets/sap_erp_column.py index cf641f008..c576bbcb2 100644 --- a/pyatlan/model/assets/sap_erp_column.py +++ b/pyatlan/model/assets/sap_erp_column.py @@ -1539,11 +1539,15 @@ class Attributes(SAP.Attributes): from .core.dbt_seed import DbtSeed # noqa: E402, F401 from .core.dbt_source import DbtSource # noqa: E402, F401 from .core.dbt_test import DbtTest # noqa: E402, F401 +from .core.snowflake_semantic_logical_table import ( + SnowflakeSemanticLogicalTable, # noqa: E402, F401 +) +from .core.sql_insight_business_question import ( + SqlInsightBusinessQuestion, # noqa: E402, F401 +) +from .core.sql_insight_join import SqlInsightJoin # noqa: E402, F401 from .sap_erp_cds_view import SapErpCdsView # noqa: E402, F401 from .sap_erp_table import SapErpTable # noqa: E402, F401 from .sap_erp_view import SapErpView # noqa: E402, F401 -from .core.snowflake_semantic_logical_table import SnowflakeSemanticLogicalTable # noqa: E402, F401 -from .core.sql_insight_business_question import SqlInsightBusinessQuestion # noqa: E402, F401 -from .core.sql_insight_join import SqlInsightJoin # noqa: E402, F401 SapErpColumn.Attributes.update_forward_refs() diff --git a/pyatlan/model/assets/thoughtspot.py b/pyatlan/model/assets/thoughtspot.py index deb7bbc01..1ed193633 100644 --- a/pyatlan/model/assets/thoughtspot.py +++ b/pyatlan/model/assets/thoughtspot.py @@ -33,13 +33,13 @@ def __setattr__(self, name, value): "thoughtspotChartType", "thoughtspotChartType" ) """ - + """ THOUGHTSPOT_QUESTION_TEXT: ClassVar[TextField] = TextField( "thoughtspotQuestionText", "thoughtspotQuestionText" ) """ - + """ THOUGHTSPOT_JOIN_COUNT: ClassVar[NumericField] = NumericField( "thoughtspotJoinCount", "thoughtspotJoinCount" diff --git a/pyatlan/model/structs.py b/pyatlan/model/structs.py index 1f2a83f41..e9591cd5f 100644 --- a/pyatlan/model/structs.py +++ b/pyatlan/model/structs.py @@ -7,16 +7,17 @@ from typing import TYPE_CHECKING, Any, Dict, List, Optional, Set, Union from pydantic.v1 import BaseModel, Extra, Field, root_validator + from pyatlan.model.enums import ( + AppWorkflowRunStatus, + AssetSmusMetadataFormStatus, AtlanConnectorType, BadgeComparisonOperator, BadgeConditionColor, - SourceCostUnitType, + DataQualityRuleThresholdUnit, FormFieldDimension, FormFieldType, - DataQualityRuleThresholdUnit, - AppWorkflowRunStatus, - AssetSmusMetadataFormStatus, + SourceCostUnitType, ) from pyatlan.model.utils import to_camel_case from pyatlan.utils import select_optional_set_fields, validate_required_fields @@ -24,8 +25,8 @@ if TYPE_CHECKING: from pyatlan.cache.aio.source_tag_cache import AsyncSourceTagName from pyatlan.cache.source_tag_cache import SourceTagName - from pyatlan.client.atlan import AtlanClient from pyatlan.client.aio import AsyncAtlanClient + from pyatlan.client.atlan import AtlanClient class AtlanObject(BaseModel): diff --git a/pyatlan/version.txt b/pyatlan/version.txt index db500e354..b85c6c7b0 100644 --- a/pyatlan/version.txt +++ b/pyatlan/version.txt @@ -1 +1 @@ -11.2.0 \ No newline at end of file +11.2.0 diff --git a/pyatlan_v9/model/assets/__init__.py b/pyatlan_v9/model/assets/__init__.py index 53cd6288d..ed6cb1d02 100644 --- a/pyatlan_v9/model/assets/__init__.py +++ b/pyatlan_v9/model/assets/__init__.py @@ -1,1147 +1,106 @@ -# Auto-generated by PythonMsgspecRenderer.pkl — DO NOT EDIT +# Auto-generated by PythonMsgspecRenderer.pkl - DO NOT EDIT # SPDX-License-Identifier: Apache-2.0 # Copyright 2024 Atlan Pte. Ltd. -# isort: skip_file +# +# NOTE: The lazy-loading logic below (_build_lazy_index / __getattr__) is +# intentionally NOT auto-generated — preserve it when regenerating this file. +# It replaces the previous eager _discover_and_export() call which imported +# all ~80 _init_*.py modules at package import time regardless of which types +# were actually needed, causing unnecessary memory usage in apps that only use +# a handful of models. -import lazy_loader as lazy +""" +PyAtlan Models - Auto-generated asset model classes. -from .entity import AtlasClassification, Entity, TermAssignment -from .related_entity import RelatedEntity, SaveSemantic +This module lazily re-exports all types from _init_*.py modules. +New modules are automatically picked up without needing to regenerate this file. -__PYATLAN_V9_ASSETS__ = { - "_init_access_control": [ - "AccessControl", - "AuthPolicy", - "AuthService", - "Persona", - "Purpose", - "RelatedAccessControl", - "RelatedAuthPolicy", - "RelatedAuthService", - "RelatedPersona", - "RelatedPurpose", - ], - "_init_adf": [ - "ADF", - "AdfActivity", - "AdfDataflow", - "AdfDataset", - "AdfLinkedservice", - "AdfPipeline", - "RelatedADF", - "RelatedAdfActivity", - "RelatedAdfDataflow", - "RelatedAdfDataset", - "RelatedAdfLinkedservice", - "RelatedAdfPipeline", - ], - "_init_adls": [ - "ADLS", - "ADLSAccount", - "ADLSContainer", - "ADLSObject", - "RelatedADLS", - "RelatedADLSAccount", - "RelatedADLSContainer", - "RelatedADLSObject", - ], - "_init_agent": ["Agent", "RelatedAgent"], - "_init_agentic": ["Agentic", "RelatedAgentic"], - "_init_ai": [ - "AI", - "AIApplication", - "AIModel", - "AIModelVersion", - "RelatedAI", - "RelatedAIApplication", - "RelatedAIModel", - "RelatedAIModelVersion", - ], - "_init_airflow": [ - "Airflow", - "AirflowDag", - "AirflowTask", - "RelatedAirflow", - "RelatedAirflowDag", - "RelatedAirflowTask", - ], - "_init_anaplan": [ - "Anaplan", - "AnaplanApp", - "AnaplanDimension", - "AnaplanLineItem", - "AnaplanList", - "AnaplanModel", - "AnaplanModule", - "AnaplanPage", - "AnaplanSystemDimension", - "AnaplanView", - "AnaplanWorkspace", - "RelatedAnaplan", - "RelatedAnaplanApp", - "RelatedAnaplanDimension", - "RelatedAnaplanLineItem", - "RelatedAnaplanList", - "RelatedAnaplanModel", - "RelatedAnaplanModule", - "RelatedAnaplanPage", - "RelatedAnaplanSystemDimension", - "RelatedAnaplanView", - "RelatedAnaplanWorkspace", - ], - "_init_anomalo": [ - "Anomalo", - "AnomaloCheck", - "RelatedAnomalo", - "RelatedAnomaloCheck", - ], - "_init_api": [ - "API", - "APIField", - "APIObject", - "APIPath", - "APIQuery", - "APISpec", - "RelatedAPI", - "RelatedAPIField", - "RelatedAPIObject", - "RelatedAPIPath", - "RelatedAPIQuery", - "RelatedAPISpec", - ], - "_init_app": [ - "App", - "Application", - "ApplicationField", - "RelatedApp", - "RelatedApplication", - "RelatedApplicationField", - ], - "_init_app_workflow_run": ["AppWorkflowRun", "RelatedAppWorkflowRun"], - "_init_artifact": ["Artifact", "RelatedArtifact"], - "_init_asset": [ - "Asset", - "DataSet", - "Incident", - "Infrastructure", - "ProcessExecution", - "RelatedAsset", - "RelatedDataSet", - "RelatedIncident", - "RelatedInfrastructure", - "RelatedProcessExecution", - ], - "_init_asset_grouping": [ - "AssetGrouping", - "AssetGroupingCollection", - "AssetGroupingStrategy", - "RelatedAssetGrouping", - "RelatedAssetGroupingCollection", - "RelatedAssetGroupingStrategy", - ], - "_init_atlan_app": [ - "AtlanApp", - "AtlanAppDeployment", - "AtlanAppInstalled", - "AtlanAppTool", - "AtlanAppWorkflow", - "RelatedAtlanApp", - "RelatedAtlanAppDeployment", - "RelatedAtlanAppInstalled", - "RelatedAtlanAppTool", - "RelatedAtlanAppWorkflow", - ], - "_init_azure_service_bus": [ - "AzureServiceBus", - "AzureServiceBusNamespace", - "AzureServiceBusSchema", - "AzureServiceBusTopic", - "RelatedAzureServiceBus", - "RelatedAzureServiceBusNamespace", - "RelatedAzureServiceBusSchema", - "RelatedAzureServiceBusTopic", - ], - "_init_bigquery": [ - "BigqueryRoutine", - "RelatedBigqueryRoutine", - "RelatedBigqueryTag", - ], - "_init_business_policy": [ - "BusinessPolicy", - "RelatedBusinessPolicy", - "RelatedBusinessPolicyException", - "RelatedBusinessPolicyIncident", - "RelatedBusinessPolicyLog", - ], - "_init_cassandra": [ - "Cassandra", - "CassandraColumn", - "CassandraIndex", - "CassandraKeyspace", - "CassandraTable", - "CassandraView", - "RelatedCassandra", - "RelatedCassandraColumn", - "RelatedCassandraIndex", - "RelatedCassandraKeyspace", - "RelatedCassandraTable", - "RelatedCassandraView", - ], - "_init_catalog": [ - "BI", - "Catalog", - "EventStore", - "Insight", - "NoSQL", - "ObjectStore", - "RelatedBI", - "RelatedCatalog", - "RelatedEventStore", - "RelatedInsight", - "RelatedNoSQL", - "RelatedObjectStore", - "RelatedSaaS", - "SaaS", - ], - "_init_cloud": [ - "AWS", - "Azure", - "Cloud", - "Google", - "RelatedAWS", - "RelatedAzure", - "RelatedCloud", - "RelatedGoogle", - ], - "_init_cognite": [ - "Cognite", - "Cognite3DModel", - "CogniteAsset", - "CogniteEvent", - "CogniteFile", - "CogniteSequence", - "CogniteTimeSeries", - "RelatedCognite", - "RelatedCognite3DModel", - "RelatedCogniteAsset", - "RelatedCogniteEvent", - "RelatedCogniteFile", - "RelatedCogniteSequence", - "RelatedCogniteTimeSeries", - ], - "_init_cognos": [ - "Cognos", - "CognosColumn", - "CognosDashboard", - "CognosDataset", - "CognosDatasource", - "CognosExploration", - "CognosFile", - "CognosFolder", - "CognosModule", - "CognosPackage", - "CognosReport", - "RelatedCognos", - "RelatedCognosColumn", - "RelatedCognosDashboard", - "RelatedCognosDataset", - "RelatedCognosDatasource", - "RelatedCognosExploration", - "RelatedCognosFile", - "RelatedCognosFolder", - "RelatedCognosModule", - "RelatedCognosPackage", - "RelatedCognosReport", - ], - "_init_connection": ["Connection", "RelatedConnection"], - "_init_context": [ - "Context", - "ContextArtifact", - "ContextRepository", - "RelatedContext", - "RelatedContextArtifact", - "RelatedContextRepository", - ], - "_init_cosmos_mongo_db": [ - "CosmosMongoDB", - "CosmosMongoDBAccount", - "CosmosMongoDBCollection", - "CosmosMongoDBDatabase", - "RelatedCosmosMongoDB", - "RelatedCosmosMongoDBAccount", - "RelatedCosmosMongoDBCollection", - "RelatedCosmosMongoDBDatabase", - ], - "_init_cube": [ - "Cube", - "CubeDimension", - "CubeField", - "CubeHierarchy", - "MultiDimensionalDataset", - "RelatedCube", - "RelatedCubeDimension", - "RelatedCubeField", - "RelatedCubeHierarchy", - "RelatedMultiDimensionalDataset", - ], - "_init_custom": [ - "Custom", - "CustomEntity", - "RelatedCustom", - "RelatedCustomEntity", - ], - "_init_data_contract": ["DataContract", "RelatedDataContract"], - "_init_data_mesh": [ - "DataDomain", - "DataMesh", - "DataMeshDataset", - "DataProduct", - "RelatedDataDomain", - "RelatedDataMesh", - "RelatedDataMeshDataset", - "RelatedDataProduct", - "RelatedStakeholder", - "RelatedStakeholderTitle", - ], - "_init_data_quality": [ - "DataQuality", - "DataQualityRule", - "DataQualityRuleTemplate", - "Metric", - "RelatedDataQuality", - "RelatedDataQualityRule", - "RelatedDataQualityRuleTemplate", - "RelatedMetric", - ], - "_init_data_studio": [ - "DataStudio", - "DataStudioAsset", - "RelatedDataStudio", - "RelatedDataStudioAsset", - ], - "_init_databricks": [ - "Databricks", - "DatabricksAIModelContext", - "DatabricksAIModelVersion", - "DatabricksDashboard", - "DatabricksExternalLocation", - "DatabricksExternalLocationPath", - "DatabricksGenieAgent", - "DatabricksMetricView", - "DatabricksNotebook", - "DatabricksVolume", - "DatabricksVolumePath", - "RelatedDatabricks", - "RelatedDatabricksAIModelContext", - "RelatedDatabricksAIModelVersion", - "RelatedDatabricksDashboard", - "RelatedDatabricksExternalLocation", - "RelatedDatabricksExternalLocationPath", - "RelatedDatabricksGenieAgent", - "RelatedDatabricksMetricView", - "RelatedDatabricksNotebook", - "RelatedDatabricksUnityCatalogTag", - "RelatedDatabricksVolume", - "RelatedDatabricksVolumePath", - ], - "_init_dataverse": [ - "Dataverse", - "DataverseAttribute", - "DataverseEntity", - "RelatedDataverse", - "RelatedDataverseAttribute", - "RelatedDataverseEntity", - ], - "_init_dbt": [ - "Dbt", - "DbtColumnProcess", - "DbtDimension", - "DbtEntity", - "DbtMeasure", - "DbtMetric", - "DbtModel", - "DbtModelColumn", - "DbtProcess", - "DbtSeed", - "DbtSemanticModel", - "DbtSource", - "DbtTag", - "DbtTest", - "RelatedDbt", - "RelatedDbtColumnProcess", - "RelatedDbtDimension", - "RelatedDbtEntity", - "RelatedDbtMeasure", - "RelatedDbtMetric", - "RelatedDbtModel", - "RelatedDbtModelColumn", - "RelatedDbtProcess", - "RelatedDbtSeed", - "RelatedDbtSemanticModel", - "RelatedDbtSource", - "RelatedDbtTag", - "RelatedDbtTest", - ], - "_init_document_db": [ - "DocumentDB", - "DocumentDBCollection", - "DocumentDBDatabase", - "RelatedDocumentDB", - "RelatedDocumentDBCollection", - "RelatedDocumentDBDatabase", - ], - "_init_domo": [ - "Domo", - "DomoCard", - "DomoDashboard", - "DomoDataset", - "DomoDatasetColumn", - "RelatedDomo", - "RelatedDomoCard", - "RelatedDomoDashboard", - "RelatedDomoDataset", - "RelatedDomoDatasetColumn", - ], - "_init_dremio": [ - "Dremio", - "DremioColumn", - "DremioFolder", - "DremioPhysicalDataset", - "DremioSource", - "DremioSpace", - "DremioVirtualDataset", - "RelatedDremio", - "RelatedDremioColumn", - "RelatedDremioFolder", - "RelatedDremioPhysicalDataset", - "RelatedDremioSource", - "RelatedDremioSpace", - "RelatedDremioVirtualDataset", - ], - "_init_dynamo_db": [ - "DynamoDB", - "DynamoDBAttribute", - "DynamoDBSecondaryIndex", - "DynamoDBTable", - "RelatedDynamoDB", - "RelatedDynamoDBAttribute", - "RelatedDynamoDBGlobalSecondaryIndex", - "RelatedDynamoDBLocalSecondaryIndex", - "RelatedDynamoDBSecondaryIndex", - "RelatedDynamoDBTable", - ], - "_init_fabric": [ - "Fabric", - "FabricActivity", - "FabricDashboard", - "FabricDataPipeline", - "FabricDataflow", - "FabricDataflowEntityColumn", - "FabricPage", - "FabricReport", - "FabricSemanticModel", - "FabricSemanticModelTable", - "FabricSemanticModelTableColumn", - "FabricVisual", - "FabricWorkspace", - "RelatedFabric", - "RelatedFabricActivity", - "RelatedFabricDashboard", - "RelatedFabricDataPipeline", - "RelatedFabricDataflow", - "RelatedFabricDataflowEntityColumn", - "RelatedFabricPage", - "RelatedFabricReport", - "RelatedFabricSemanticModel", - "RelatedFabricSemanticModelTable", - "RelatedFabricSemanticModelTableColumn", - "RelatedFabricVisual", - "RelatedFabricWorkspace", - ], - "_init_fivetran": [ - "Fivetran", - "FivetranConnector", - "RelatedFivetran", - "RelatedFivetranConnector", - ], - "_init_flow": [ - "Flow", - "FlowControlOperation", - "FlowDataset", - "FlowDatasetOperation", - "FlowField", - "FlowFieldOperation", - "FlowFolder", - "FlowProject", - "FlowReusableUnit", - "RelatedFlow", - "RelatedFlowControlOperation", - "RelatedFlowDataset", - "RelatedFlowDatasetOperation", - "RelatedFlowField", - "RelatedFlowFieldOperation", - "RelatedFlowFolder", - "RelatedFlowProject", - "RelatedFlowReusableUnit", - ], - "_init_form": ["Form", "RelatedForm", "RelatedResponse"], - "_init_gcp_dataplex": [ - "GCPDataplex", - "GCPDataplexAspectType", - "RelatedGCPDataplex", - "RelatedGCPDataplexAspectType", - ], - "_init_gcs": [ - "GCS", - "GCSBucket", - "GCSObject", - "RelatedGCS", - "RelatedGCSBucket", - "RelatedGCSObject", - ], - "_init_gtc": [ - "AtlasGlossary", - "AtlasGlossaryCategory", - "AtlasGlossaryTerm", - "RelatedAtlasGlossary", - "RelatedAtlasGlossaryCategory", - "RelatedAtlasGlossaryTerm", - ], - "_init_iceberg": [ - "Iceberg", - "IcebergCatalog", - "IcebergColumn", - "IcebergNamespace", - "IcebergTable", - "RelatedIceberg", - "RelatedIcebergCatalog", - "RelatedIcebergColumn", - "RelatedIcebergNamespace", - "RelatedIcebergTable", - ], - "_init_kafka": [ - "Kafka", - "KafkaCluster", - "KafkaConsumerGroup", - "KafkaField", - "KafkaTopic", - "RelatedAzureEventHub", - "RelatedAzureEventHubConsumerGroup", - "RelatedKafka", - "RelatedKafkaCluster", - "RelatedKafkaConsumerGroup", - "RelatedKafkaField", - "RelatedKafkaTopic", - ], - "_init_knowledge": [ - "Knowledge", - "KnowledgeFile", - "KnowledgeFolder", - "RelatedKnowledge", - "RelatedKnowledgeFile", - "RelatedKnowledgeFolder", - ], - "_init_looker": [ - "Looker", - "LookerDashboard", - "LookerExplore", - "LookerField", - "LookerFolder", - "LookerLook", - "LookerModel", - "LookerProject", - "LookerQuery", - "LookerTile", - "LookerView", - "RelatedLooker", - "RelatedLookerDashboard", - "RelatedLookerExplore", - "RelatedLookerField", - "RelatedLookerFolder", - "RelatedLookerLook", - "RelatedLookerModel", - "RelatedLookerProject", - "RelatedLookerQuery", - "RelatedLookerTile", - "RelatedLookerView", - ], - "_init_manual": [ - "AzureEventHub", - "AzureEventHubConsumerGroup", - "Badge", - "BadgeCondition", - "SnowflakeDynamicTable", - ], - "_init_matillion": [ - "Matillion", - "MatillionComponent", - "MatillionGroup", - "MatillionJob", - "MatillionProject", - "RelatedMatillion", - "RelatedMatillionComponent", - "RelatedMatillionGroup", - "RelatedMatillionJob", - "RelatedMatillionProject", - ], - "_init_metabase": [ - "Metabase", - "MetabaseCollection", - "MetabaseDashboard", - "MetabaseQuestion", - "RelatedMetabase", - "RelatedMetabaseCollection", - "RelatedMetabaseDashboard", - "RelatedMetabaseQuestion", - ], - "_init_micro_strategy": [ - "MicroStrategy", - "MicroStrategyAttribute", - "MicroStrategyColumn", - "MicroStrategyCube", - "MicroStrategyDocument", - "MicroStrategyDossier", - "MicroStrategyFact", - "MicroStrategyMetric", - "MicroStrategyProject", - "MicroStrategyReport", - "MicroStrategyVisualization", - "RelatedMicroStrategy", - "RelatedMicroStrategyAttribute", - "RelatedMicroStrategyColumn", - "RelatedMicroStrategyCube", - "RelatedMicroStrategyDocument", - "RelatedMicroStrategyDossier", - "RelatedMicroStrategyFact", - "RelatedMicroStrategyMetric", - "RelatedMicroStrategyProject", - "RelatedMicroStrategyReport", - "RelatedMicroStrategyVisualization", - ], - "_init_mode": [ - "Mode", - "ModeChart", - "ModeCollection", - "ModeQuery", - "ModeReport", - "ModeWorkspace", - "RelatedMode", - "RelatedModeChart", - "RelatedModeCollection", - "RelatedModeQuery", - "RelatedModeReport", - "RelatedModeWorkspace", - ], - "_init_model": [ - "Model", - "ModelAttribute", - "ModelAttributeAssociation", - "ModelDataModel", - "ModelEntity", - "ModelEntityAssociation", - "ModelVersion", - "RelatedModel", - "RelatedModelAttribute", - "RelatedModelAttributeAssociation", - "RelatedModelDataModel", - "RelatedModelEntity", - "RelatedModelEntityAssociation", - "RelatedModelVersion", - ], - "_init_mongo_db": [ - "MongoDB", - "MongoDBCollection", - "MongoDBDatabase", - "RelatedMongoDB", - "RelatedMongoDBCollection", - "RelatedMongoDBDatabase", - ], - "_init_monte_carlo": [ - "MCIncident", - "MCMonitor", - "MonteCarlo", - "RelatedMCIncident", - "RelatedMCMonitor", - "RelatedMonteCarlo", - ], - "_init_namespace": [ - "Collection", - "Folder", - "Namespace", - "RelatedCollection", - "RelatedFolder", - "RelatedNamespace", - ], - "_init_notebook": ["Notebook", "RelatedNotebook"], - "_init_partial": [ - "Partial", - "PartialField", - "PartialObject", - "RelatedPartial", - "RelatedPartialField", - "RelatedPartialObject", - ], - "_init_power_bi": [ - "PowerBI", - "PowerBIApp", - "PowerBIColumn", - "PowerBIDashboard", - "PowerBIDataflow", - "PowerBIDataflowEntityColumn", - "PowerBIDataset", - "PowerBIDatasource", - "PowerBIMeasure", - "PowerBIPage", - "PowerBIReport", - "PowerBITable", - "PowerBITile", - "PowerBIWorkspace", - "RelatedPowerBI", - "RelatedPowerBIApp", - "RelatedPowerBIColumn", - "RelatedPowerBIDashboard", - "RelatedPowerBIDataflow", - "RelatedPowerBIDataflowEntityColumn", - "RelatedPowerBIDataset", - "RelatedPowerBIDatasource", - "RelatedPowerBIMeasure", - "RelatedPowerBIPage", - "RelatedPowerBIReport", - "RelatedPowerBITable", - "RelatedPowerBITile", - "RelatedPowerBIWorkspace", - ], - "_init_preset": [ - "Preset", - "PresetChart", - "PresetDashboard", - "PresetDataset", - "PresetWorkspace", - "RelatedPreset", - "RelatedPresetChart", - "RelatedPresetDashboard", - "RelatedPresetDataset", - "RelatedPresetWorkspace", - ], - "_init_process": [ - "BIProcess", - "ColumnProcess", - "Process", - "RelatedBIProcess", - "RelatedColumnProcess", - "RelatedConnectionProcess", - "RelatedProcess", - ], - "_init_qlik": [ - "Qlik", - "QlikApp", - "QlikChart", - "QlikColumn", - "QlikDataset", - "QlikSheet", - "QlikSpace", - "RelatedQlik", - "RelatedQlikApp", - "RelatedQlikChart", - "RelatedQlikColumn", - "RelatedQlikDataset", - "RelatedQlikSheet", - "RelatedQlikSpace", - "RelatedQlikStream", - ], - "_init_quick_sight": [ - "QuickSight", - "QuickSightAnalysis", - "QuickSightAnalysisVisual", - "QuickSightDashboard", - "QuickSightDashboardVisual", - "QuickSightDataset", - "QuickSightDatasetField", - "QuickSightFolder", - "RelatedQuickSight", - "RelatedQuickSightAnalysis", - "RelatedQuickSightAnalysisVisual", - "RelatedQuickSightDashboard", - "RelatedQuickSightDashboardVisual", - "RelatedQuickSightDataset", - "RelatedQuickSightDatasetField", - "RelatedQuickSightFolder", - ], - "_init_redash": [ - "Redash", - "RedashDashboard", - "RedashQuery", - "RedashVisualization", - "RelatedRedash", - "RelatedRedashDashboard", - "RelatedRedashQuery", - "RelatedRedashVisualization", - ], - "_init_referenceable": ["Referenceable", "RelatedReferenceable"], - "_init_resource": [ - "File", - "Link", - "Readme", - "ReadmeTemplate", - "RelatedBadge", - "RelatedFile", - "RelatedLink", - "RelatedReadme", - "RelatedReadmeTemplate", - "RelatedResource", - "Related__internal", - "Resource", - ], - "_init_s3": [ - "RelatedS3", - "RelatedS3Bucket", - "RelatedS3Object", - "RelatedS3Prefix", - "S3", - "S3Bucket", - "S3Object", - "S3Prefix", - ], - "_init_sage_maker": [ - "RelatedSageMaker", - "RelatedSageMakerFeature", - "RelatedSageMakerFeatureGroup", - "RelatedSageMakerModel", - "RelatedSageMakerModelDeployment", - "RelatedSageMakerModelGroup", - "SageMaker", - "SageMakerFeature", - "SageMakerFeatureGroup", - "SageMakerModel", - "SageMakerModelDeployment", - "SageMakerModelGroup", - ], - "_init_sage_maker_unified_studio": [ - "RelatedSageMakerUnifiedStudio", - "RelatedSageMakerUnifiedStudioAsset", - "RelatedSageMakerUnifiedStudioAssetSchema", - "RelatedSageMakerUnifiedStudioProject", - "RelatedSageMakerUnifiedStudioPublishedAsset", - "RelatedSageMakerUnifiedStudioSubscribedAsset", - "SageMakerUnifiedStudio", - "SageMakerUnifiedStudioAsset", - "SageMakerUnifiedStudioAssetSchema", - "SageMakerUnifiedStudioProject", - "SageMakerUnifiedStudioPublishedAsset", - "SageMakerUnifiedStudioSubscribedAsset", - ], - "_init_salesforce": [ - "RelatedSalesforce", - "RelatedSalesforceDashboard", - "RelatedSalesforceField", - "RelatedSalesforceObject", - "RelatedSalesforceOrganization", - "RelatedSalesforceReport", - "Salesforce", - "SalesforceDashboard", - "SalesforceField", - "SalesforceObject", - "SalesforceOrganization", - "SalesforceReport", - ], - "_init_sap": [ - "RelatedSAP", - "RelatedSAPColumnProcess", - "RelatedSAPProcess", - "RelatedSapDatasphereReplicationFlow", - "RelatedSapErpAbapProgram", - "RelatedSapErpCdsView", - "RelatedSapErpColumn", - "RelatedSapErpComponent", - "RelatedSapErpFioriApp", - "RelatedSapErpFunctionModule", - "RelatedSapErpTable", - "RelatedSapErpTransactionCode", - "RelatedSapErpView", - "SAP", - "SAPColumnProcess", - "SAPProcess", - "SapDatasphereReplicationFlow", - "SapErpAbapProgram", - "SapErpCdsView", - "SapErpColumn", - "SapErpComponent", - "SapErpFioriApp", - "SapErpFunctionModule", - "SapErpTable", - "SapErpTransactionCode", - "SapErpView", - ], - "_init_sapbw": [ - "RelatedSAPBW", - "RelatedSAPBWADSO", - "RelatedSAPBWADSOField", - "RelatedSAPBWCompositeProvider", - "RelatedSAPBWCompositeProviderField", - "RelatedSAPBWDTP", - "RelatedSAPBWDataSource", - "RelatedSAPBWDataSourceField", - "RelatedSAPBWInfoArea", - "RelatedSAPBWInfoObject", - "RelatedSAPBWInfoSource", - "RelatedSAPBWInfoSourceField", - "RelatedSAPBWQuery", - "RelatedSAPBWQueryElement", - "RelatedSAPBWTransformation", - "SAPBW", - "SAPBWADSO", - "SAPBWADSOField", - "SAPBWCompositeProvider", - "SAPBWCompositeProviderField", - "SAPBWDTP", - "SAPBWDataSource", - "SAPBWDataSourceField", - "SAPBWInfoArea", - "SAPBWInfoObject", - "SAPBWInfoSource", - "SAPBWInfoSourceField", - "SAPBWQuery", - "SAPBWQueryElement", - "SAPBWTransformation", - ], - "_init_schema_registry": [ - "RelatedSchemaRegistry", - "RelatedSchemaRegistrySubject", - "RelatedSchemaRegistryVersion", - "SchemaRegistry", - "SchemaRegistrySubject", - "SchemaRegistryVersion", - ], - "_init_semantic": [ - "RelatedSemantic", - "RelatedSemanticDimension", - "RelatedSemanticEntity", - "RelatedSemanticField", - "RelatedSemanticMeasure", - "RelatedSemanticModel", - "Semantic", - "SemanticDimension", - "SemanticEntity", - "SemanticField", - "SemanticMeasure", - "SemanticModel", - ], - "_init_sigma": [ - "RelatedSigma", - "RelatedSigmaDataElement", - "RelatedSigmaDataElementField", - "RelatedSigmaDataModel", - "RelatedSigmaDataModelColumn", - "RelatedSigmaDataset", - "RelatedSigmaDatasetColumn", - "RelatedSigmaPage", - "RelatedSigmaWorkbook", - "Sigma", - "SigmaDataElement", - "SigmaDataElementField", - "SigmaDataModel", - "SigmaDataModelColumn", - "SigmaDataset", - "SigmaDatasetColumn", - "SigmaPage", - "SigmaWorkbook", - ], - "_init_sisense": [ - "RelatedSisense", - "RelatedSisenseDashboard", - "RelatedSisenseDatamodel", - "RelatedSisenseDatamodelTable", - "RelatedSisenseFolder", - "RelatedSisenseWidget", - "Sisense", - "SisenseDashboard", - "SisenseDatamodel", - "SisenseDatamodelTable", - "SisenseFolder", - "SisenseWidget", - ], - "_init_skill": ["RelatedSkill", "Skill"], - "_init_skill_artifact": ["RelatedSkillArtifact", "SkillArtifact"], - "_init_snowflake": [ - "RelatedSnowflake", - "RelatedSnowflakeAIModelContext", - "RelatedSnowflakeAIModelVersion", - "RelatedSnowflakeDynamicTable", - "RelatedSnowflakeListing", - "RelatedSnowflakePipe", - "RelatedSnowflakeSemanticDimension", - "RelatedSnowflakeSemanticFact", - "RelatedSnowflakeSemanticLogicalTable", - "RelatedSnowflakeSemanticMetric", - "RelatedSnowflakeSemanticView", - "RelatedSnowflakeShare", - "RelatedSnowflakeStage", - "RelatedSnowflakeStream", - "RelatedSnowflakeTag", - "Snowflake", - "SnowflakeAIModelContext", - "SnowflakeAIModelVersion", - "SnowflakeListing", - "SnowflakeSemanticDimension", - "SnowflakeSemanticFact", - "SnowflakeSemanticLogicalTable", - "SnowflakeSemanticMetric", - "SnowflakeSemanticView", - "SnowflakeShare", - ], - "_init_soda": [ - "RelatedSoda", - "RelatedSodaCheck", - "Soda", - "SodaCheck", - ], - "_init_spark": [ - "RelatedSpark", - "RelatedSparkJob", - "Spark", - "SparkJob", - ], - "_init_sql": [ - "CalculationView", - "Column", - "Database", - "Function", - "MaterialisedView", - "Procedure", - "Query", - "RelatedCalculationView", - "RelatedColumn", - "RelatedDatabase", - "RelatedFunction", - "RelatedMaterialisedView", - "RelatedProcedure", - "RelatedQuery", - "RelatedSQL", - "RelatedSchema", - "RelatedTable", - "RelatedTablePartition", - "RelatedView", - "SQL", - "Schema", - "Table", - "TablePartition", - "View", - ], - "_init_sql_insight": [ - "RelatedSqlInsight", - "RelatedSqlInsightBusinessQuestion", - "RelatedSqlInsightFilter", - "RelatedSqlInsightJoin", - "SqlInsight", - "SqlInsightBusinessQuestion", - "SqlInsightFilter", - "SqlInsightJoin", - ], - "_init_ssrs": [ - "RelatedSSRS", - "RelatedSSRSDataSet", - "RelatedSSRSField", - "RelatedSSRSFolder", - "RelatedSSRSReport", - "SSRS", - "SSRSDataSet", - "SSRSField", - "SSRSFolder", - "SSRSReport", - ], - "_init_starburst": [ - "RelatedStarburst", - "RelatedStarburstDataset", - "RelatedStarburstDatasetColumn", - "Starburst", - "StarburstDataset", - "StarburstDatasetColumn", - ], - "_init_superset": [ - "RelatedSuperset", - "RelatedSupersetChart", - "RelatedSupersetDashboard", - "RelatedSupersetDataset", - "Superset", - "SupersetChart", - "SupersetDashboard", - "SupersetDataset", - ], - "_init_tableau": [ - "RelatedTableau", - "RelatedTableauCalculatedField", - "RelatedTableauDashboard", - "RelatedTableauDashboardField", - "RelatedTableauDatasource", - "RelatedTableauDatasourceField", - "RelatedTableauFlow", - "RelatedTableauMetric", - "RelatedTableauProject", - "RelatedTableauSite", - "RelatedTableauWorkbook", - "RelatedTableauWorksheet", - "RelatedTableauWorksheetField", - "Tableau", - "TableauCalculatedField", - "TableauDashboard", - "TableauDashboardField", - "TableauDatasource", - "TableauDatasourceField", - "TableauFlow", - "TableauMetric", - "TableauProject", - "TableauSite", - "TableauWorkbook", - "TableauWorksheet", - "TableauWorksheetField", - ], - "_init_tag": [ - "RelatedSourceTag", - "RelatedTag", - "RelatedTagAttachment", - "SourceTag", - "Tag", - ], - "_init_task": ["RelatedTask", "Task"], - "_init_thoughtspot": [ - "RelatedThoughtspot", - "RelatedThoughtspotAnswer", - "RelatedThoughtspotColumn", - "RelatedThoughtspotDashlet", - "RelatedThoughtspotLiveboard", - "RelatedThoughtspotTable", - "RelatedThoughtspotView", - "RelatedThoughtspotWorksheet", - "Thoughtspot", - "ThoughtspotAnswer", - "ThoughtspotColumn", - "ThoughtspotDashlet", - "ThoughtspotLiveboard", - "ThoughtspotTable", - "ThoughtspotView", - "ThoughtspotWorksheet", - ], - "_init_unstructured": [ - "RelatedUnstructured", - "RelatedUnstructuredContainer", - "RelatedUnstructuredFolder", - "RelatedUnstructuredObject", - "Unstructured", - "UnstructuredContainer", - "UnstructuredFolder", - "UnstructuredObject", - ], - "_init_workflow": ["RelatedWorkflow", "RelatedWorkflowRun", "Workflow"], -} +Direct submodule imports are preferred and have zero overhead at import time:: -__getattr__, __dir__, __all__ = lazy.attach( - __name__, submod_attrs=__PYATLAN_V9_ASSETS__ -) + from pyatlan.models.column import Column # preferred — zero overhead -__all__ += [ - "AtlasClassification", +Package-level imports also work and only load the specific module needed:: + + from pyatlan.models import Column # lazy — only _init_sql.py loaded +""" + +from __future__ import annotations + +import ast +import importlib +import pkgutil +from pathlib import Path +from typing import Any + +# Base classes are always exported eagerly (they have no large transitive deps). +from .entity import AtlasClassification, Entity, TermAssignment +from .related_entity import RelatedEntity, SaveSemantic + +__all__ = [ + # Base classes "Entity", + "AtlasClassification", "TermAssignment", "RelatedEntity", "SaveSemantic", ] + +# Lazy index: class name → _init_module_name. +# Built once on first __getattr__ call via AST scanning (no module execution). +_lazy_index: dict[str, str] | None = None + + +def _build_lazy_index() -> dict[str, str]: + """Scan _init_*.py __all__ lists via AST to build a name→module map. + + Uses ast.parse() so no model modules are executed or imported — only their + source text is read to extract the __all__ list. + """ + index: dict[str, str] = {} + current_dir = Path(__file__).parent + for module_info in pkgutil.iter_modules([str(current_dir)]): + if not module_info.name.startswith("_init_"): + continue + module_file = current_dir / f"{module_info.name}.py" + try: + tree = ast.parse(module_file.read_bytes()) + except SyntaxError: + continue + for node in ast.walk(tree): + if isinstance(node, ast.Assign): + for target in node.targets: + if isinstance(target, ast.Name) and target.id == "__all__": + if isinstance(node.value, (ast.List, ast.Tuple)): + for elt in node.value.elts: + if isinstance(elt, ast.Constant) and isinstance( + elt.value, str + ): + index[elt.value] = module_info.name + return index + + +def __getattr__(name: str) -> Any: + """Lazy import of model classes on first access. + + Called by Python when an attribute is not found in this module's globals. + Enables ``from pyatlan.models import Column`` without eagerly importing all + model modules at package import time. + + The result is cached in globals() so subsequent accesses are O(1) dict lookups + and never go through __getattr__ again. + """ + global _lazy_index + if _lazy_index is None: + _lazy_index = _build_lazy_index() + + module_name = _lazy_index.get(name) + if module_name is not None: + module = importlib.import_module(f".{module_name}", __package__) + val = getattr(module, name) + # Cache in globals so future accesses bypass __getattr__ entirely. + globals()[name] = val + if name not in __all__: + __all__.append(name) + return val + + raise AttributeError(f"module 'pyatlan.models' has no attribute {name!r}") diff --git a/pyatlan_v9/model/assets/_init_sap_analytics_cloud.py b/pyatlan_v9/model/assets/_init_sap_analytics_cloud.py new file mode 100644 index 000000000..a6801d4fa --- /dev/null +++ b/pyatlan_v9/model/assets/_init_sap_analytics_cloud.py @@ -0,0 +1,35 @@ +# Auto-generated by PythonMsgspecRenderer.pkl - DO NOT EDIT +# SPDX-License-Identifier: Apache-2.0 +# Copyright 2024 Atlan Pte. Ltd. + +""" +SapAnalyticsCloud module exports. + +This module provides convenient imports for all SapAnalyticsCloud types and their Related variants. +""" + +from .sap_analytics_cloud_related import ( + RelatedSapAnalyticsCloud, + RelatedSapAnalyticsCloudColumn, + RelatedSapAnalyticsCloudFolder, + RelatedSapAnalyticsCloudModel, + RelatedSapAnalyticsCloudStory, +) +from .sap_analytics_cloud import SapAnalyticsCloud +from .sap_analytics_cloud_column import SapAnalyticsCloudColumn +from .sap_analytics_cloud_folder import SapAnalyticsCloudFolder +from .sap_analytics_cloud_model import SapAnalyticsCloudModel +from .sap_analytics_cloud_story import SapAnalyticsCloudStory + +__all__ = [ + "RelatedSapAnalyticsCloud", + "RelatedSapAnalyticsCloudColumn", + "RelatedSapAnalyticsCloudFolder", + "RelatedSapAnalyticsCloudModel", + "RelatedSapAnalyticsCloudStory", + "SapAnalyticsCloud", + "SapAnalyticsCloudColumn", + "SapAnalyticsCloudFolder", + "SapAnalyticsCloudModel", + "SapAnalyticsCloudStory", +] diff --git a/pyatlan_v9/model/assets/asset_grouping_related.py b/pyatlan_v9/model/assets/asset_grouping_related.py index 0688ef417..8b94fbe11 100644 --- a/pyatlan_v9/model/assets/asset_grouping_related.py +++ b/pyatlan_v9/model/assets/asset_grouping_related.py @@ -11,6 +11,7 @@ from __future__ import annotations +from msgspec import UNSET from .catalog_related import RelatedCatalog from .referenceable_related import RelatedReferenceable diff --git a/pyatlan_v9/model/assets/atlas_glossary.py b/pyatlan_v9/model/assets/atlas_glossary.py index 0f0de2793..028bb646b 100644 --- a/pyatlan_v9/model/assets/atlas_glossary.py +++ b/pyatlan_v9/model/assets/atlas_glossary.py @@ -48,6 +48,7 @@ RelatedAtlasGlossaryCategory, RelatedAtlasGlossaryTerm, ) +from .knowledge_related import RelatedKnowledgeFile from .monte_carlo_related import RelatedMCIncident, RelatedMCMonitor from .referenceable_related import RelatedReferenceable from .resource_related import RelatedFile, RelatedLink, RelatedReadme @@ -86,6 +87,7 @@ class AtlasGlossary(Asset): MEANINGS: ClassVar[Any] = None TERMS: ClassVar[Any] = None CATEGORIES: ClassVar[Any] = None + KNOWLEDGE_LINKED_FILES: ClassVar[Any] = None MC_MONITORS: ClassVar[Any] = None MC_INCIDENTS: ClassVar[Any] = None USER_DEF_RELATIONSHIP_TO: ClassVar[Any] = None @@ -163,6 +165,9 @@ class AtlasGlossary(Asset): categories: Union[List[RelatedAtlasGlossaryCategory], None, UnsetType] = UNSET """Categories contained within this glossary.""" + knowledge_linked_files: Union[List[RelatedKnowledgeFile], None, UnsetType] = UNSET + """Knowledge files linked to this asset.""" + mc_monitors: Union[List[RelatedMCMonitor], None, UnsetType] = UNSET """Monitors that observe this asset.""" @@ -424,6 +429,9 @@ class AtlasGlossaryRelationshipAttributes(AssetRelationshipAttributes): categories: Union[List[RelatedAtlasGlossaryCategory], None, UnsetType] = UNSET """Categories contained within this glossary.""" + knowledge_linked_files: Union[List[RelatedKnowledgeFile], None, UnsetType] = UNSET + """Knowledge files linked to this asset.""" + mc_monitors: Union[List[RelatedMCMonitor], None, UnsetType] = UNSET """Monitors that observe this asset.""" @@ -492,6 +500,7 @@ class AtlasGlossaryNested(AssetNested): "meanings", "terms", "categories", + "knowledge_linked_files", "mc_monitors", "mc_incidents", "user_def_relationship_to", @@ -598,6 +607,7 @@ def _atlas_glossary_from_nested(nested: AtlasGlossaryNested) -> AtlasGlossary: updated_by=nested.updated_by, classifications=nested.classifications, classification_names=nested.classification_names, + meanings=nested.meanings, labels=nested.labels, business_attributes=nested.business_attributes, custom_attributes=nested.custom_attributes, @@ -660,6 +670,7 @@ def _atlas_glossary_from_nested_bytes(data: bytes, serde: Serde) -> AtlasGlossar AtlasGlossary.MEANINGS = RelationField("meanings") AtlasGlossary.TERMS = RelationField("terms") AtlasGlossary.CATEGORIES = RelationField("categories") +AtlasGlossary.KNOWLEDGE_LINKED_FILES = RelationField("knowledgeLinkedFiles") AtlasGlossary.MC_MONITORS = RelationField("mcMonitors") AtlasGlossary.MC_INCIDENTS = RelationField("mcIncidents") AtlasGlossary.USER_DEF_RELATIONSHIP_TO = RelationField("userDefRelationshipTo") diff --git a/pyatlan_v9/model/assets/atlas_glossary_category.py b/pyatlan_v9/model/assets/atlas_glossary_category.py index 3956c58af..c77ece8eb 100644 --- a/pyatlan_v9/model/assets/atlas_glossary_category.py +++ b/pyatlan_v9/model/assets/atlas_glossary_category.py @@ -48,6 +48,7 @@ RelatedAtlasGlossaryCategory, RelatedAtlasGlossaryTerm, ) +from .knowledge_related import RelatedKnowledgeFile from .monte_carlo_related import RelatedMCIncident, RelatedMCMonitor from .referenceable_related import RelatedReferenceable from .resource_related import RelatedFile, RelatedLink, RelatedReadme @@ -69,7 +70,6 @@ class AtlasGlossaryCategory(Asset): LONG_DESCRIPTION: ClassVar[Any] = None ADDITIONAL_ATTRIBUTES: ClassVar[Any] = None CATEGORY_TYPE: ClassVar[Any] = None - ANCHOR: ClassVar[Any] = None ANOMALO_CHECKS: ClassVar[Any] = None APPLICATION: ClassVar[Any] = None APPLICATION_FIELD: ClassVar[Any] = None @@ -84,8 +84,10 @@ class AtlasGlossaryCategory(Asset): GCP_DATAPLEX_ASPECT_TYPE_METADATA_ENTITIES: ClassVar[Any] = None MEANINGS: ClassVar[Any] = None TERMS: ClassVar[Any] = None + ANCHOR: ClassVar[Any] = None CHILDREN_CATEGORIES: ClassVar[Any] = None PARENT_CATEGORY: ClassVar[Any] = None + KNOWLEDGE_LINKED_FILES: ClassVar[Any] = None MC_MONITORS: ClassVar[Any] = None MC_INCIDENTS: ClassVar[Any] = None USER_DEF_RELATIONSHIP_TO: ClassVar[Any] = None @@ -108,9 +110,6 @@ class AtlasGlossaryCategory(Asset): category_type: Union[str, None, UnsetType] = UNSET """""" - anchor: Union[RelatedAtlasGlossary, None, UnsetType] = UNSET - """Glossary in which this category is contained.""" - anomalo_checks: Union[List[RelatedAnomaloCheck], None, UnsetType] = UNSET """Checks that run on this asset.""" @@ -157,6 +156,9 @@ class AtlasGlossaryCategory(Asset): terms: Union[List[RelatedAtlasGlossaryTerm], None, UnsetType] = UNSET """Terms organized within this category.""" + anchor: Union[RelatedAtlasGlossary, None, UnsetType] = UNSET + """Glossary in which this category is contained.""" + children_categories: Union[List[RelatedAtlasGlossaryCategory], None, UnsetType] = ( UNSET ) @@ -165,6 +167,9 @@ class AtlasGlossaryCategory(Asset): parent_category: Union[RelatedAtlasGlossaryCategory, None, UnsetType] = UNSET """Parent category in which this category is located (or empty if this is a root-level category).""" + knowledge_linked_files: Union[List[RelatedKnowledgeFile], None, UnsetType] = UNSET + """Knowledge files linked to this asset.""" + mc_monitors: Union[List[RelatedMCMonitor], None, UnsetType] = UNSET """Monitors that observe this asset.""" @@ -499,9 +504,6 @@ class AtlasGlossaryCategoryAttributes(AssetAttributes): category_type: Union[str, None, UnsetType] = UNSET """""" - anchor: Union[RelatedAtlasGlossary, None, UnsetType] = UNSET - """Glossary in which this category is contained.""" - class AtlasGlossaryCategoryRelationshipAttributes(AssetRelationshipAttributes): """AtlasGlossaryCategory-specific relationship attributes for nested API format.""" @@ -552,6 +554,9 @@ class AtlasGlossaryCategoryRelationshipAttributes(AssetRelationshipAttributes): terms: Union[List[RelatedAtlasGlossaryTerm], None, UnsetType] = UNSET """Terms organized within this category.""" + anchor: Union[RelatedAtlasGlossary, None, UnsetType] = UNSET + """Glossary in which this category is contained.""" + children_categories: Union[List[RelatedAtlasGlossaryCategory], None, UnsetType] = ( UNSET ) @@ -560,6 +565,9 @@ class AtlasGlossaryCategoryRelationshipAttributes(AssetRelationshipAttributes): parent_category: Union[RelatedAtlasGlossaryCategory, None, UnsetType] = UNSET """Parent category in which this category is located (or empty if this is a root-level category).""" + knowledge_linked_files: Union[List[RelatedKnowledgeFile], None, UnsetType] = UNSET + """Knowledge files linked to this asset.""" + mc_monitors: Union[List[RelatedMCMonitor], None, UnsetType] = UNSET """Monitors that observe this asset.""" @@ -627,8 +635,10 @@ class AtlasGlossaryCategoryNested(AssetNested): "gcp_dataplex_aspect_type_metadata_entities", "meanings", "terms", + "anchor", "children_categories", "parent_category", + "knowledge_linked_files", "mc_monitors", "mc_incidents", "user_def_relationship_to", @@ -650,7 +660,6 @@ def _populate_atlas_glossary_category_attrs( attrs.long_description = obj.long_description attrs.additional_attributes = obj.additional_attributes attrs.category_type = obj.category_type - attrs.anchor = obj.anchor def _extract_atlas_glossary_category_attrs( @@ -662,7 +671,6 @@ def _extract_atlas_glossary_category_attrs( result["long_description"] = attrs.long_description result["additional_attributes"] = attrs.additional_attributes result["category_type"] = attrs.category_type - result["anchor"] = attrs.anchor return result @@ -741,6 +749,7 @@ def _atlas_glossary_category_from_nested( updated_by=nested.updated_by, classifications=nested.classifications, classification_names=nested.classification_names, + meanings=nested.meanings, labels=nested.labels, business_attributes=nested.business_attributes, custom_attributes=nested.custom_attributes, @@ -788,7 +797,6 @@ def _atlas_glossary_category_from_nested_bytes( "additionalAttributes", "additionalAttributes" ) AtlasGlossaryCategory.CATEGORY_TYPE = KeywordField("categoryType", "categoryType") -AtlasGlossaryCategory.ANCHOR = KeywordField("anchor", "anchor") AtlasGlossaryCategory.ANOMALO_CHECKS = RelationField("anomaloChecks") AtlasGlossaryCategory.APPLICATION = RelationField("application") AtlasGlossaryCategory.APPLICATION_FIELD = RelationField("applicationField") @@ -811,8 +819,10 @@ def _atlas_glossary_category_from_nested_bytes( ) AtlasGlossaryCategory.MEANINGS = RelationField("meanings") AtlasGlossaryCategory.TERMS = RelationField("terms") +AtlasGlossaryCategory.ANCHOR = RelationField("anchor") AtlasGlossaryCategory.CHILDREN_CATEGORIES = RelationField("childrenCategories") AtlasGlossaryCategory.PARENT_CATEGORY = RelationField("parentCategory") +AtlasGlossaryCategory.KNOWLEDGE_LINKED_FILES = RelationField("knowledgeLinkedFiles") AtlasGlossaryCategory.MC_MONITORS = RelationField("mcMonitors") AtlasGlossaryCategory.MC_INCIDENTS = RelationField("mcIncidents") AtlasGlossaryCategory.USER_DEF_RELATIONSHIP_TO = RelationField("userDefRelationshipTo") diff --git a/pyatlan_v9/model/assets/atlas_glossary_term.py b/pyatlan_v9/model/assets/atlas_glossary_term.py index b5813f122..703e0342b 100644 --- a/pyatlan_v9/model/assets/atlas_glossary_term.py +++ b/pyatlan_v9/model/assets/atlas_glossary_term.py @@ -48,6 +48,7 @@ RelatedAtlasGlossaryCategory, RelatedAtlasGlossaryTerm, ) +from .knowledge_related import RelatedKnowledgeFile from .monte_carlo_related import RelatedMCIncident, RelatedMCMonitor from .referenceable_related import RelatedReferenceable from .resource_related import RelatedFile, RelatedLink, RelatedReadme @@ -72,7 +73,6 @@ class AtlasGlossaryTerm(Asset): USAGE: ClassVar[Any] = None ADDITIONAL_ATTRIBUTES: ClassVar[Any] = None TERM_TYPE: ClassVar[Any] = None - ANCHOR: ClassVar[Any] = None ANOMALO_CHECKS: ClassVar[Any] = None APPLICATION: ClassVar[Any] = None APPLICATION_FIELD: ClassVar[Any] = None @@ -87,6 +87,7 @@ class AtlasGlossaryTerm(Asset): GCP_DATAPLEX_ASPECT_TYPE_METADATA_ENTITIES: ClassVar[Any] = None ASSIGNED_ENTITIES: ClassVar[Any] = None MEANINGS: ClassVar[Any] = None + ANCHOR: ClassVar[Any] = None CATEGORIES: ClassVar[Any] = None SEE_ALSO: ClassVar[Any] = None SYNONYMS: ClassVar[Any] = None @@ -101,6 +102,7 @@ class AtlasGlossaryTerm(Asset): IS_A: ClassVar[Any] = None VALID_VALUES_FOR: ClassVar[Any] = None VALID_VALUES: ClassVar[Any] = None + KNOWLEDGE_LINKED_FILES: ClassVar[Any] = None MC_MONITORS: ClassVar[Any] = None MC_INCIDENTS: ClassVar[Any] = None USER_DEF_RELATIONSHIP_TO: ClassVar[Any] = None @@ -132,9 +134,6 @@ class AtlasGlossaryTerm(Asset): term_type: Union[str, None, UnsetType] = UNSET """""" - anchor: Union[RelatedAtlasGlossary, None, UnsetType] = UNSET - """Glossary in which this term is contained.""" - anomalo_checks: Union[List[RelatedAnomaloCheck], None, UnsetType] = UNSET """Checks that run on this asset.""" @@ -181,6 +180,9 @@ class AtlasGlossaryTerm(Asset): meanings: Union[List[RelatedAtlasGlossaryTerm], None, UnsetType] = UNSET """Glossary terms that are linked to this asset.""" + anchor: Union[RelatedAtlasGlossary, None, UnsetType] = UNSET + """Glossary in which this term is contained.""" + categories: Union[List[RelatedAtlasGlossaryCategory], None, UnsetType] = UNSET """Categories within which this term is organized.""" @@ -223,6 +225,9 @@ class AtlasGlossaryTerm(Asset): valid_values: Union[List[RelatedAtlasGlossaryTerm], None, UnsetType] = UNSET """Valid values for this term.""" + knowledge_linked_files: Union[List[RelatedKnowledgeFile], None, UnsetType] = UNSET + """Knowledge files linked to this asset.""" + mc_monitors: Union[List[RelatedMCMonitor], None, UnsetType] = UNSET """Monitors that observe this asset.""" @@ -548,9 +553,6 @@ class AtlasGlossaryTermAttributes(AssetAttributes): term_type: Union[str, None, UnsetType] = UNSET """""" - anchor: Union[RelatedAtlasGlossary, None, UnsetType] = UNSET - """Glossary in which this term is contained.""" - class AtlasGlossaryTermRelationshipAttributes(AssetRelationshipAttributes): """AtlasGlossaryTerm-specific relationship attributes for nested API format.""" @@ -601,6 +603,9 @@ class AtlasGlossaryTermRelationshipAttributes(AssetRelationshipAttributes): meanings: Union[List[RelatedAtlasGlossaryTerm], None, UnsetType] = UNSET """Glossary terms that are linked to this asset.""" + anchor: Union[RelatedAtlasGlossary, None, UnsetType] = UNSET + """Glossary in which this term is contained.""" + categories: Union[List[RelatedAtlasGlossaryCategory], None, UnsetType] = UNSET """Categories within which this term is organized.""" @@ -643,6 +648,9 @@ class AtlasGlossaryTermRelationshipAttributes(AssetRelationshipAttributes): valid_values: Union[List[RelatedAtlasGlossaryTerm], None, UnsetType] = UNSET """Valid values for this term.""" + knowledge_linked_files: Union[List[RelatedKnowledgeFile], None, UnsetType] = UNSET + """Knowledge files linked to this asset.""" + mc_monitors: Union[List[RelatedMCMonitor], None, UnsetType] = UNSET """Monitors that observe this asset.""" @@ -710,6 +718,7 @@ class AtlasGlossaryTermNested(AssetNested): "gcp_dataplex_aspect_type_metadata_entities", "assigned_entities", "meanings", + "anchor", "categories", "see_also", "synonyms", @@ -724,6 +733,7 @@ class AtlasGlossaryTermNested(AssetNested): "is_a", "valid_values_for", "valid_values", + "knowledge_linked_files", "mc_monitors", "mc_incidents", "user_def_relationship_to", @@ -748,7 +758,6 @@ def _populate_atlas_glossary_term_attrs( attrs.usage = obj.usage attrs.additional_attributes = obj.additional_attributes attrs.term_type = obj.term_type - attrs.anchor = obj.anchor def _extract_atlas_glossary_term_attrs(attrs: AtlasGlossaryTermAttributes) -> dict: @@ -761,7 +770,6 @@ def _extract_atlas_glossary_term_attrs(attrs: AtlasGlossaryTermAttributes) -> di result["usage"] = attrs.usage result["additional_attributes"] = attrs.additional_attributes result["term_type"] = attrs.term_type - result["anchor"] = attrs.anchor return result @@ -840,6 +848,7 @@ def _atlas_glossary_term_from_nested( updated_by=nested.updated_by, classifications=nested.classifications, classification_names=nested.classification_names, + meanings=nested.meanings, labels=nested.labels, business_attributes=nested.business_attributes, custom_attributes=nested.custom_attributes, @@ -888,7 +897,6 @@ def _atlas_glossary_term_from_nested_bytes( "additionalAttributes", "additionalAttributes" ) AtlasGlossaryTerm.TERM_TYPE = KeywordField("termType", "termType") -AtlasGlossaryTerm.ANCHOR = KeywordField("anchor", "anchor") AtlasGlossaryTerm.ANOMALO_CHECKS = RelationField("anomaloChecks") AtlasGlossaryTerm.APPLICATION = RelationField("application") AtlasGlossaryTerm.APPLICATION_FIELD = RelationField("applicationField") @@ -907,6 +915,7 @@ def _atlas_glossary_term_from_nested_bytes( ) AtlasGlossaryTerm.ASSIGNED_ENTITIES = RelationField("assignedEntities") AtlasGlossaryTerm.MEANINGS = RelationField("meanings") +AtlasGlossaryTerm.ANCHOR = RelationField("anchor") AtlasGlossaryTerm.CATEGORIES = RelationField("categories") AtlasGlossaryTerm.SEE_ALSO = RelationField("seeAlso") AtlasGlossaryTerm.SYNONYMS = RelationField("synonyms") @@ -921,6 +930,7 @@ def _atlas_glossary_term_from_nested_bytes( AtlasGlossaryTerm.IS_A = RelationField("isA") AtlasGlossaryTerm.VALID_VALUES_FOR = RelationField("validValuesFor") AtlasGlossaryTerm.VALID_VALUES = RelationField("validValues") +AtlasGlossaryTerm.KNOWLEDGE_LINKED_FILES = RelationField("knowledgeLinkedFiles") AtlasGlossaryTerm.MC_MONITORS = RelationField("mcMonitors") AtlasGlossaryTerm.MC_INCIDENTS = RelationField("mcIncidents") AtlasGlossaryTerm.USER_DEF_RELATIONSHIP_TO = RelationField("userDefRelationshipTo") diff --git a/pyatlan_v9/model/assets/cognite_related.py b/pyatlan_v9/model/assets/cognite_related.py index df14e00a6..b20cc5ce2 100644 --- a/pyatlan_v9/model/assets/cognite_related.py +++ b/pyatlan_v9/model/assets/cognite_related.py @@ -11,6 +11,7 @@ from __future__ import annotations +from msgspec import UNSET from .catalog_related import RelatedSaaS from .referenceable_related import RelatedReferenceable diff --git a/pyatlan_v9/model/assets/data_quality_rule.py b/pyatlan_v9/model/assets/data_quality_rule.py index 9fe58aa56..96c7e1574 100644 --- a/pyatlan_v9/model/assets/data_quality_rule.py +++ b/pyatlan_v9/model/assets/data_quality_rule.py @@ -69,6 +69,7 @@ ) from .gcp_dataplex_related import RelatedGCPDataplexAspectType from .gtc_related import RelatedAtlasGlossaryTerm +from .knowledge_related import RelatedKnowledgeFile from .model_related import RelatedModelAttribute, RelatedModelEntity from .monte_carlo_related import RelatedMCIncident, RelatedMCMonitor from .partial_related import RelatedPartialField, RelatedPartialObject @@ -141,6 +142,7 @@ class DataQualityRule(Asset): DQ_RULE_REFERENCE_COLUMNS: ClassVar[Any] = None GCP_DATAPLEX_ASPECT_TYPE_METADATA_ENTITIES: ClassVar[Any] = None MEANINGS: ClassVar[Any] = None + KNOWLEDGE_LINKED_FILES: ClassVar[Any] = None MC_MONITORS: ClassVar[Any] = None MC_INCIDENTS: ClassVar[Any] = None PARTIAL_CHILD_FIELDS: ClassVar[Any] = None @@ -321,6 +323,9 @@ class DataQualityRule(Asset): meanings: Union[List[RelatedAtlasGlossaryTerm], None, UnsetType] = UNSET """Glossary terms that are linked to this asset.""" + knowledge_linked_files: Union[List[RelatedKnowledgeFile], None, UnsetType] = UNSET + """Knowledge files linked to this asset.""" + mc_monitors: Union[List[RelatedMCMonitor], None, UnsetType] = UNSET """Monitors that observe this asset.""" @@ -1341,6 +1346,9 @@ class DataQualityRuleRelationshipAttributes(AssetRelationshipAttributes): meanings: Union[List[RelatedAtlasGlossaryTerm], None, UnsetType] = UNSET """Glossary terms that are linked to this asset.""" + knowledge_linked_files: Union[List[RelatedKnowledgeFile], None, UnsetType] = UNSET + """Knowledge files linked to this asset.""" + mc_monitors: Union[List[RelatedMCMonitor], None, UnsetType] = UNSET """Monitors that observe this asset.""" @@ -1434,6 +1442,7 @@ class DataQualityRuleNested(AssetNested): "dq_rule_reference_columns", "gcp_dataplex_aspect_type_metadata_entities", "meanings", + "knowledge_linked_files", "mc_monitors", "mc_incidents", "partial_child_fields", @@ -1618,6 +1627,7 @@ def _data_quality_rule_from_nested(nested: DataQualityRuleNested) -> DataQuality updated_by=nested.updated_by, classifications=nested.classifications, classification_names=nested.classification_names, + meanings=nested.meanings, labels=nested.labels, business_attributes=nested.business_attributes, custom_attributes=nested.custom_attributes, @@ -1762,6 +1772,7 @@ def _data_quality_rule_from_nested_bytes(data: bytes, serde: Serde) -> DataQuali "gcpDataplexAspectTypeMetadataEntities" ) DataQualityRule.MEANINGS = RelationField("meanings") +DataQualityRule.KNOWLEDGE_LINKED_FILES = RelationField("knowledgeLinkedFiles") DataQualityRule.MC_MONITORS = RelationField("mcMonitors") DataQualityRule.MC_INCIDENTS = RelationField("mcIncidents") DataQualityRule.PARTIAL_CHILD_FIELDS = RelationField("partialChildFields") diff --git a/pyatlan_v9/model/assets/entity.py b/pyatlan_v9/model/assets/entity.py index c37568320..37887fc44 100644 --- a/pyatlan_v9/model/assets/entity.py +++ b/pyatlan_v9/model/assets/entity.py @@ -18,8 +18,6 @@ import msgspec from msgspec import UNSET, UnsetType -from .related_entity import SaveSemantic - class AtlasClassification( msgspec.Struct, kw_only=True, omit_defaults=True, rename="camel" @@ -31,8 +29,8 @@ class AtlasClassification( propagation settings and validity periods. """ - type_name: Union[Any, UnsetType] = UNSET - """The name of the classification type (str or AtlanTagName after translation).""" + type_name: Union[str, UnsetType] = UNSET + """The name of the classification type.""" entity_guid: Union[str, UnsetType] = UNSET """The GUID of the entity this classification is assigned to.""" @@ -52,18 +50,6 @@ class AtlasClassification( attributes: Union[Dict[str, Any], UnsetType] = UNSET """Custom attributes for this classification.""" - source_tag_attachments: Union[List[Any], None, UnsetType] = UNSET - """Source tag attachments extracted by the AtlanTagName translator.""" - - tag_id: Union[str, None, UnsetType] = UNSET - """Original tag ID before translation to a human-readable name.""" - - restrict_propagation_through_lineage: Union[bool, None, UnsetType] = UNSET - """Whether propagation through lineage is restricted.""" - - restrict_propagation_through_hierarchy: Union[bool, None, UnsetType] = UNSET - """Whether propagation through hierarchy is restricted.""" - class TermAssignment(msgspec.Struct, kw_only=True, omit_defaults=True, rename="camel"): """ @@ -198,18 +184,3 @@ class Entity(msgspec.Struct, kw_only=True, omit_defaults=True, rename="camel"): home_id: Union[str, UnsetType] = UNSET """Home identifier for distributed Atlas systems.""" - - # Lineage-specific fields (only populated in lineage API responses) - depth: Union[int, None, UnsetType] = UNSET - """Depth of this asset within lineage. Only available in assets retrieved via lineage.""" - - immediate_upstream: Union[List[Any], None, UnsetType] = UNSET - """Assets immediately upstream of this asset within lineage.""" - - immediate_downstream: Union[List[Any], None, UnsetType] = UNSET - """Assets immediately downstream of this asset within lineage.""" - - # Internal SDK fields (not sent to API) - semantic: Union[SaveSemantic, None, UnsetType] = UNSET - """Save semantic for relationship operations (REPLACE, APPEND, REMOVE). - Not serialized to JSON - used internally by ref_by_guid/ref_by_qualified_name.""" diff --git a/pyatlan_v9/model/assets/notebook_related.py b/pyatlan_v9/model/assets/notebook_related.py index 93bf0ea75..04e7520db 100644 --- a/pyatlan_v9/model/assets/notebook_related.py +++ b/pyatlan_v9/model/assets/notebook_related.py @@ -11,6 +11,7 @@ from __future__ import annotations +from msgspec import UNSET from .catalog_related import RelatedCatalog from .referenceable_related import RelatedReferenceable diff --git a/pyatlan_v9/model/assets/orchestration_related.py b/pyatlan_v9/model/assets/orchestration_related.py index 9cf6b2771..83e6e46aa 100644 --- a/pyatlan_v9/model/assets/orchestration_related.py +++ b/pyatlan_v9/model/assets/orchestration_related.py @@ -11,5 +11,4 @@ from __future__ import annotations - __all__ = [] diff --git a/pyatlan_v9/model/assets/quick_sight_dataset.py b/pyatlan_v9/model/assets/quick_sight_dataset.py index f90e5cd6c..b6043c3f6 100644 --- a/pyatlan_v9/model/assets/quick_sight_dataset.py +++ b/pyatlan_v9/model/assets/quick_sight_dataset.py @@ -45,6 +45,7 @@ from .data_quality_related import RelatedDataQualityRule, RelatedMetric from .gcp_dataplex_related import RelatedGCPDataplexAspectType from .gtc_related import RelatedAtlasGlossaryTerm +from .knowledge_related import RelatedKnowledgeFile from .model_related import RelatedModelAttribute, RelatedModelEntity from .monte_carlo_related import RelatedMCIncident, RelatedMCMonitor from .partial_related import RelatedPartialField, RelatedPartialObject @@ -71,8 +72,8 @@ class QuickSightDataset(Asset): Instance of a QuickSight dataset in Atlan. These are an internal data model built to be used by analysis. In a dataset, data can be pulled from different sources, joined, filtered, and columns translated to more business-friendly names when preparing the data for visualizing in the analysis layer. """ - QUICK_SIGHT_DATASET_IMPORT_MODE: ClassVar[Any] = None - QUICK_SIGHT_DATASET_COLUMN_COUNT: ClassVar[Any] = None + QUICK_SIGHT_IMPORT_MODE: ClassVar[Any] = None + QUICK_SIGHT_COLUMN_COUNT: ClassVar[Any] = None QUICK_SIGHT_ID: ClassVar[Any] = None QUICK_SIGHT_SHEET_ID: ClassVar[Any] = None QUICK_SIGHT_SHEET_NAME: ClassVar[Any] = None @@ -94,6 +95,7 @@ class QuickSightDataset(Asset): DQ_REFERENCE_DATASET_RULES: ClassVar[Any] = None GCP_DATAPLEX_ASPECT_TYPE_METADATA_ENTITIES: ClassVar[Any] = None MEANINGS: ClassVar[Any] = None + KNOWLEDGE_LINKED_FILES: ClassVar[Any] = None MC_MONITORS: ClassVar[Any] = None MC_INCIDENTS: ClassVar[Any] = None PARTIAL_CHILD_FIELDS: ClassVar[Any] = None @@ -112,10 +114,10 @@ class QuickSightDataset(Asset): INPUT_TO_SPARK_JOBS: ClassVar[Any] = None OUTPUT_FROM_SPARK_JOBS: ClassVar[Any] = None - quick_sight_dataset_import_mode: Union[str, None, UnsetType] = UNSET + quick_sight_import_mode: Union[str, None, UnsetType] = UNSET """Import mode for this dataset, for example: SPICE or DIRECT_QUERY.""" - quick_sight_dataset_column_count: Union[int, None, UnsetType] = UNSET + quick_sight_column_count: Union[int, None, UnsetType] = UNSET """Number of columns present in this dataset.""" quick_sight_id: Union[str, None, UnsetType] = UNSET @@ -187,6 +189,9 @@ class QuickSightDataset(Asset): meanings: Union[List[RelatedAtlasGlossaryTerm], None, UnsetType] = UNSET """Glossary terms that are linked to this asset.""" + knowledge_linked_files: Union[List[RelatedKnowledgeFile], None, UnsetType] = UNSET + """Knowledge files linked to this asset.""" + mc_monitors: Union[List[RelatedMCMonitor], None, UnsetType] = UNSET """Monitors that observe this asset.""" @@ -428,10 +433,10 @@ def from_json( class QuickSightDatasetAttributes(AssetAttributes): """QuickSightDataset-specific attributes for nested API format.""" - quick_sight_dataset_import_mode: Union[str, None, UnsetType] = UNSET + quick_sight_import_mode: Union[str, None, UnsetType] = UNSET """Import mode for this dataset, for example: SPICE or DIRECT_QUERY.""" - quick_sight_dataset_column_count: Union[int, None, UnsetType] = UNSET + quick_sight_column_count: Union[int, None, UnsetType] = UNSET """Number of columns present in this dataset.""" quick_sight_id: Union[str, None, UnsetType] = UNSET @@ -507,6 +512,9 @@ class QuickSightDatasetRelationshipAttributes(AssetRelationshipAttributes): meanings: Union[List[RelatedAtlasGlossaryTerm], None, UnsetType] = UNSET """Glossary terms that are linked to this asset.""" + knowledge_linked_files: Union[List[RelatedKnowledgeFile], None, UnsetType] = UNSET + """Knowledge files linked to this asset.""" + mc_monitors: Union[List[RelatedMCMonitor], None, UnsetType] = UNSET """Monitors that observe this asset.""" @@ -605,6 +613,7 @@ class QuickSightDatasetNested(AssetNested): "dq_reference_dataset_rules", "gcp_dataplex_aspect_type_metadata_entities", "meanings", + "knowledge_linked_files", "mc_monitors", "mc_incidents", "partial_child_fields", @@ -630,8 +639,8 @@ def _populate_quick_sight_dataset_attrs( ) -> None: """Populate QuickSightDataset-specific attributes on the attrs struct.""" _populate_asset_attrs(attrs, obj) - attrs.quick_sight_dataset_import_mode = obj.quick_sight_dataset_import_mode - attrs.quick_sight_dataset_column_count = obj.quick_sight_dataset_column_count + attrs.quick_sight_import_mode = obj.quick_sight_import_mode + attrs.quick_sight_column_count = obj.quick_sight_column_count attrs.quick_sight_id = obj.quick_sight_id attrs.quick_sight_sheet_id = obj.quick_sight_sheet_id attrs.quick_sight_sheet_name = obj.quick_sight_sheet_name @@ -641,8 +650,8 @@ def _populate_quick_sight_dataset_attrs( def _extract_quick_sight_dataset_attrs(attrs: QuickSightDatasetAttributes) -> dict: """Extract all QuickSightDataset attributes from the attrs struct into a flat dict.""" result = _extract_asset_attrs(attrs) - result["quick_sight_dataset_import_mode"] = attrs.quick_sight_dataset_import_mode - result["quick_sight_dataset_column_count"] = attrs.quick_sight_dataset_column_count + result["quick_sight_import_mode"] = attrs.quick_sight_import_mode + result["quick_sight_column_count"] = attrs.quick_sight_column_count result["quick_sight_id"] = attrs.quick_sight_id result["quick_sight_sheet_id"] = attrs.quick_sight_sheet_id result["quick_sight_sheet_name"] = attrs.quick_sight_sheet_name @@ -725,6 +734,7 @@ def _quick_sight_dataset_from_nested( updated_by=nested.updated_by, classifications=nested.classifications, classification_names=nested.classification_names, + meanings=nested.meanings, labels=nested.labels, business_attributes=nested.business_attributes, custom_attributes=nested.custom_attributes, @@ -767,11 +777,11 @@ def _quick_sight_dataset_from_nested_bytes( RelationField, ) -QuickSightDataset.QUICK_SIGHT_DATASET_IMPORT_MODE = KeywordField( - "quickSightDatasetImportMode", "quickSightDatasetImportMode" +QuickSightDataset.QUICK_SIGHT_IMPORT_MODE = KeywordField( + "quickSightImportMode", "quickSightImportMode" ) -QuickSightDataset.QUICK_SIGHT_DATASET_COLUMN_COUNT = NumericField( - "quickSightDatasetColumnCount", "quickSightDatasetColumnCount" +QuickSightDataset.QUICK_SIGHT_COLUMN_COUNT = NumericField( + "quickSightColumnCount", "quickSightColumnCount" ) QuickSightDataset.QUICK_SIGHT_ID = KeywordField("quickSightId", "quickSightId") QuickSightDataset.QUICK_SIGHT_SHEET_ID = KeywordField( @@ -806,6 +816,7 @@ def _quick_sight_dataset_from_nested_bytes( "gcpDataplexAspectTypeMetadataEntities" ) QuickSightDataset.MEANINGS = RelationField("meanings") +QuickSightDataset.KNOWLEDGE_LINKED_FILES = RelationField("knowledgeLinkedFiles") QuickSightDataset.MC_MONITORS = RelationField("mcMonitors") QuickSightDataset.MC_INCIDENTS = RelationField("mcIncidents") QuickSightDataset.PARTIAL_CHILD_FIELDS = RelationField("partialChildFields") diff --git a/pyatlan_v9/model/assets/quick_sight_dataset_field.py b/pyatlan_v9/model/assets/quick_sight_dataset_field.py index c4e833787..1628bfa0e 100644 --- a/pyatlan_v9/model/assets/quick_sight_dataset_field.py +++ b/pyatlan_v9/model/assets/quick_sight_dataset_field.py @@ -45,6 +45,7 @@ from .data_quality_related import RelatedDataQualityRule, RelatedMetric from .gcp_dataplex_related import RelatedGCPDataplexAspectType from .gtc_related import RelatedAtlasGlossaryTerm +from .knowledge_related import RelatedKnowledgeFile from .model_related import RelatedModelAttribute, RelatedModelEntity from .monte_carlo_related import RelatedMCIncident, RelatedMCMonitor from .partial_related import RelatedPartialField, RelatedPartialObject @@ -67,7 +68,7 @@ class QuickSightDatasetField(Asset): Instance of a QuickSight dataset field in Atlan. """ - QUICK_SIGHT_DATASET_FIELD_TYPE: ClassVar[Any] = None + QUICK_SIGHT_TYPE: ClassVar[Any] = None QUICK_SIGHT_DATASET_QUALIFIED_NAME: ClassVar[Any] = None QUICK_SIGHT_ID: ClassVar[Any] = None QUICK_SIGHT_SHEET_ID: ClassVar[Any] = None @@ -90,6 +91,7 @@ class QuickSightDatasetField(Asset): DQ_REFERENCE_DATASET_RULES: ClassVar[Any] = None GCP_DATAPLEX_ASPECT_TYPE_METADATA_ENTITIES: ClassVar[Any] = None MEANINGS: ClassVar[Any] = None + KNOWLEDGE_LINKED_FILES: ClassVar[Any] = None MC_MONITORS: ClassVar[Any] = None MC_INCIDENTS: ClassVar[Any] = None PARTIAL_CHILD_FIELDS: ClassVar[Any] = None @@ -107,7 +109,7 @@ class QuickSightDatasetField(Asset): INPUT_TO_SPARK_JOBS: ClassVar[Any] = None OUTPUT_FROM_SPARK_JOBS: ClassVar[Any] = None - quick_sight_dataset_field_type: Union[str, None, UnsetType] = UNSET + quick_sight_type: Union[str, None, UnsetType] = UNSET """Datatype of this field, for example: STRING, INTEGER, etc.""" quick_sight_dataset_qualified_name: Union[str, None, UnsetType] = UNSET @@ -182,6 +184,9 @@ class QuickSightDatasetField(Asset): meanings: Union[List[RelatedAtlasGlossaryTerm], None, UnsetType] = UNSET """Glossary terms that are linked to this asset.""" + knowledge_linked_files: Union[List[RelatedKnowledgeFile], None, UnsetType] = UNSET + """Knowledge files linked to this asset.""" + mc_monitors: Union[List[RelatedMCMonitor], None, UnsetType] = UNSET """Monitors that observe this asset.""" @@ -429,7 +434,7 @@ def from_json( class QuickSightDatasetFieldAttributes(AssetAttributes): """QuickSightDatasetField-specific attributes for nested API format.""" - quick_sight_dataset_field_type: Union[str, None, UnsetType] = UNSET + quick_sight_type: Union[str, None, UnsetType] = UNSET """Datatype of this field, for example: STRING, INTEGER, etc.""" quick_sight_dataset_qualified_name: Union[str, None, UnsetType] = UNSET @@ -508,6 +513,9 @@ class QuickSightDatasetFieldRelationshipAttributes(AssetRelationshipAttributes): meanings: Union[List[RelatedAtlasGlossaryTerm], None, UnsetType] = UNSET """Glossary terms that are linked to this asset.""" + knowledge_linked_files: Union[List[RelatedKnowledgeFile], None, UnsetType] = UNSET + """Knowledge files linked to this asset.""" + mc_monitors: Union[List[RelatedMCMonitor], None, UnsetType] = UNSET """Monitors that observe this asset.""" @@ -599,6 +607,7 @@ class QuickSightDatasetFieldNested(AssetNested): "dq_reference_dataset_rules", "gcp_dataplex_aspect_type_metadata_entities", "meanings", + "knowledge_linked_files", "mc_monitors", "mc_incidents", "partial_child_fields", @@ -623,7 +632,7 @@ def _populate_quick_sight_dataset_field_attrs( ) -> None: """Populate QuickSightDatasetField-specific attributes on the attrs struct.""" _populate_asset_attrs(attrs, obj) - attrs.quick_sight_dataset_field_type = obj.quick_sight_dataset_field_type + attrs.quick_sight_type = obj.quick_sight_type attrs.quick_sight_dataset_qualified_name = obj.quick_sight_dataset_qualified_name attrs.quick_sight_id = obj.quick_sight_id attrs.quick_sight_sheet_id = obj.quick_sight_sheet_id @@ -636,7 +645,7 @@ def _extract_quick_sight_dataset_field_attrs( ) -> dict: """Extract all QuickSightDatasetField attributes from the attrs struct into a flat dict.""" result = _extract_asset_attrs(attrs) - result["quick_sight_dataset_field_type"] = attrs.quick_sight_dataset_field_type + result["quick_sight_type"] = attrs.quick_sight_type result["quick_sight_dataset_qualified_name"] = ( attrs.quick_sight_dataset_qualified_name ) @@ -722,6 +731,7 @@ def _quick_sight_dataset_field_from_nested( updated_by=nested.updated_by, classifications=nested.classifications, classification_names=nested.classification_names, + meanings=nested.meanings, labels=nested.labels, business_attributes=nested.business_attributes, custom_attributes=nested.custom_attributes, @@ -763,8 +773,8 @@ def _quick_sight_dataset_field_from_nested_bytes( RelationField, ) -QuickSightDatasetField.QUICK_SIGHT_DATASET_FIELD_TYPE = KeywordField( - "quickSightDatasetFieldType", "quickSightDatasetFieldType" +QuickSightDatasetField.QUICK_SIGHT_TYPE = KeywordField( + "quickSightType", "quickSightType" ) QuickSightDatasetField.QUICK_SIGHT_DATASET_QUALIFIED_NAME = KeywordTextField( "quickSightDatasetQualifiedName", @@ -812,6 +822,7 @@ def _quick_sight_dataset_field_from_nested_bytes( "gcpDataplexAspectTypeMetadataEntities" ) QuickSightDatasetField.MEANINGS = RelationField("meanings") +QuickSightDatasetField.KNOWLEDGE_LINKED_FILES = RelationField("knowledgeLinkedFiles") QuickSightDatasetField.MC_MONITORS = RelationField("mcMonitors") QuickSightDatasetField.MC_INCIDENTS = RelationField("mcIncidents") QuickSightDatasetField.PARTIAL_CHILD_FIELDS = RelationField("partialChildFields") diff --git a/pyatlan_v9/model/assets/quick_sight_folder.py b/pyatlan_v9/model/assets/quick_sight_folder.py index 27bdc7a3b..a601c3e39 100644 --- a/pyatlan_v9/model/assets/quick_sight_folder.py +++ b/pyatlan_v9/model/assets/quick_sight_folder.py @@ -44,6 +44,7 @@ from .data_quality_related import RelatedDataQualityRule, RelatedMetric from .gcp_dataplex_related import RelatedGCPDataplexAspectType from .gtc_related import RelatedAtlasGlossaryTerm +from .knowledge_related import RelatedKnowledgeFile from .model_related import RelatedModelAttribute, RelatedModelEntity from .monte_carlo_related import RelatedMCIncident, RelatedMCMonitor from .partial_related import RelatedPartialField, RelatedPartialObject @@ -71,7 +72,7 @@ class QuickSightFolder(Asset): Instance of a QuickSight folder in Atlan. """ - QUICK_SIGHT_FOLDER_TYPE: ClassVar[Any] = None + QUICK_SIGHT_TYPE: ClassVar[Any] = None QUICK_SIGHT_FOLDER_HIERARCHY: ClassVar[Any] = None QUICK_SIGHT_ID: ClassVar[Any] = None QUICK_SIGHT_SHEET_ID: ClassVar[Any] = None @@ -94,6 +95,7 @@ class QuickSightFolder(Asset): DQ_REFERENCE_DATASET_RULES: ClassVar[Any] = None GCP_DATAPLEX_ASPECT_TYPE_METADATA_ENTITIES: ClassVar[Any] = None MEANINGS: ClassVar[Any] = None + KNOWLEDGE_LINKED_FILES: ClassVar[Any] = None MC_MONITORS: ClassVar[Any] = None MC_INCIDENTS: ClassVar[Any] = None PARTIAL_CHILD_FIELDS: ClassVar[Any] = None @@ -113,7 +115,7 @@ class QuickSightFolder(Asset): INPUT_TO_SPARK_JOBS: ClassVar[Any] = None OUTPUT_FROM_SPARK_JOBS: ClassVar[Any] = None - quick_sight_folder_type: Union[str, None, UnsetType] = UNSET + quick_sight_type: Union[str, None, UnsetType] = UNSET """Type of this folder, for example: SHARED or RESTRICTED.""" quick_sight_folder_hierarchy: Union[List[Dict[str, str]], None, UnsetType] = UNSET @@ -188,6 +190,9 @@ class QuickSightFolder(Asset): meanings: Union[List[RelatedAtlasGlossaryTerm], None, UnsetType] = UNSET """Glossary terms that are linked to this asset.""" + knowledge_linked_files: Union[List[RelatedKnowledgeFile], None, UnsetType] = UNSET + """Knowledge files linked to this asset.""" + mc_monitors: Union[List[RelatedMCMonitor], None, UnsetType] = UNSET """Monitors that observe this asset.""" @@ -410,7 +415,7 @@ def from_json( class QuickSightFolderAttributes(AssetAttributes): """QuickSightFolder-specific attributes for nested API format.""" - quick_sight_folder_type: Union[str, None, UnsetType] = UNSET + quick_sight_type: Union[str, None, UnsetType] = UNSET """Type of this folder, for example: SHARED or RESTRICTED.""" quick_sight_folder_hierarchy: Union[List[Dict[str, str]], None, UnsetType] = UNSET @@ -489,6 +494,9 @@ class QuickSightFolderRelationshipAttributes(AssetRelationshipAttributes): meanings: Union[List[RelatedAtlasGlossaryTerm], None, UnsetType] = UNSET """Glossary terms that are linked to this asset.""" + knowledge_linked_files: Union[List[RelatedKnowledgeFile], None, UnsetType] = UNSET + """Knowledge files linked to this asset.""" + mc_monitors: Union[List[RelatedMCMonitor], None, UnsetType] = UNSET """Monitors that observe this asset.""" @@ -590,6 +598,7 @@ class QuickSightFolderNested(AssetNested): "dq_reference_dataset_rules", "gcp_dataplex_aspect_type_metadata_entities", "meanings", + "knowledge_linked_files", "mc_monitors", "mc_incidents", "partial_child_fields", @@ -616,7 +625,7 @@ def _populate_quick_sight_folder_attrs( ) -> None: """Populate QuickSightFolder-specific attributes on the attrs struct.""" _populate_asset_attrs(attrs, obj) - attrs.quick_sight_folder_type = obj.quick_sight_folder_type + attrs.quick_sight_type = obj.quick_sight_type attrs.quick_sight_folder_hierarchy = obj.quick_sight_folder_hierarchy attrs.quick_sight_id = obj.quick_sight_id attrs.quick_sight_sheet_id = obj.quick_sight_sheet_id @@ -627,7 +636,7 @@ def _populate_quick_sight_folder_attrs( def _extract_quick_sight_folder_attrs(attrs: QuickSightFolderAttributes) -> dict: """Extract all QuickSightFolder attributes from the attrs struct into a flat dict.""" result = _extract_asset_attrs(attrs) - result["quick_sight_folder_type"] = attrs.quick_sight_folder_type + result["quick_sight_type"] = attrs.quick_sight_type result["quick_sight_folder_hierarchy"] = attrs.quick_sight_folder_hierarchy result["quick_sight_id"] = attrs.quick_sight_id result["quick_sight_sheet_id"] = attrs.quick_sight_sheet_id @@ -709,6 +718,7 @@ def _quick_sight_folder_from_nested(nested: QuickSightFolderNested) -> QuickSigh updated_by=nested.updated_by, classifications=nested.classifications, classification_names=nested.classification_names, + meanings=nested.meanings, labels=nested.labels, business_attributes=nested.business_attributes, custom_attributes=nested.custom_attributes, @@ -750,9 +760,7 @@ def _quick_sight_folder_from_nested_bytes( RelationField, ) -QuickSightFolder.QUICK_SIGHT_FOLDER_TYPE = KeywordField( - "quickSightFolderType", "quickSightFolderType" -) +QuickSightFolder.QUICK_SIGHT_TYPE = KeywordField("quickSightType", "quickSightType") QuickSightFolder.QUICK_SIGHT_FOLDER_HIERARCHY = KeywordField( "quickSightFolderHierarchy", "quickSightFolderHierarchy" ) @@ -789,6 +797,7 @@ def _quick_sight_folder_from_nested_bytes( "gcpDataplexAspectTypeMetadataEntities" ) QuickSightFolder.MEANINGS = RelationField("meanings") +QuickSightFolder.KNOWLEDGE_LINKED_FILES = RelationField("knowledgeLinkedFiles") QuickSightFolder.MC_MONITORS = RelationField("mcMonitors") QuickSightFolder.MC_INCIDENTS = RelationField("mcIncidents") QuickSightFolder.PARTIAL_CHILD_FIELDS = RelationField("partialChildFields") diff --git a/pyatlan_v9/model/assets/referenceable.py b/pyatlan_v9/model/assets/referenceable.py index ff643b5ff..2e593f0c4 100644 --- a/pyatlan_v9/model/assets/referenceable.py +++ b/pyatlan_v9/model/assets/referenceable.py @@ -19,21 +19,14 @@ import msgspec from msgspec import UNSET, UnsetType -from pyatlan.model.fields.atlan_fields import ( - InternalKeywordField, - InternalKeywordTextField, - InternalNumericField, - KeywordField, - KeywordTextField, - TextField, -) +from pyatlan.model.fields.atlan_fields import KeywordField, KeywordTextField from pyatlan_v9.model.conversion_utils import ( categorize_relationships, merge_relationships, ) from pyatlan_v9.model.serde import Serde, get_serde -from .entity import AtlasClassification, Entity +from .entity import Entity from .gtc_related import RelatedAtlasGlossaryTerm from .referenceable_related import RelatedReferenceable @@ -138,6 +131,20 @@ def relate(self) -> "RelatedReferenceable": return RelatedReferenceable(guid=self.guid) return RelatedReferenceable(qualified_name=self.qualified_name) + # DEFERRED: Referenceable.TYPE_NAME = InternalKeywordTextField("typeName", "__typeName.keyword", "__typeName", "__typeName") + # DEFERRED: Referenceable.GUID = InternalKeywordField("guid", "__guid", "__guid") + # DEFERRED: Referenceable.CREATED_BY = InternalKeywordField("createdBy", "__createdBy", "__createdBy") + # DEFERRED: Referenceable.UPDATED_BY = InternalKeywordField("updatedBy", "__modifiedBy", "__modifiedBy") + # DEFERRED: Referenceable.STATUS = InternalKeywordField("status", "__state", "__state") + # DEFERRED: Referenceable.ATLAN_TAGS = InternalKeywordTextField("classificationNames", "__traitNames", "__classificationsText", "__classificationNames") + # DEFERRED: Referenceable.PROPAGATED_ATLAN_TAGS = InternalKeywordTextField("classificationNames", "__propagatedTraitNames", "__classificationsText", "__propagatedClassificationNames") + # DEFERRED: Referenceable.ASSIGNED_TERMS = InternalKeywordTextField("meanings", "__meanings", "__meaningsText", "__meanings") + # DEFERRED: Referenceable.SUPER_TYPE_NAMES = InternalKeywordTextField("typeName", "__superTypeNames.keyword", "__superTypeNames", "__superTypeNames") + # DEFERRED: Referenceable.CREATE_TIME = InternalNumericField("createTime", "__timestamp", "__timestamp") + # DEFERRED: Referenceable.UPDATE_TIME = InternalNumericField("updateTime", "__modificationTimestamp", "__modificationTimestamp") + # DEFERRED: Referenceable.QUALIFIED_NAME = KeywordTextField("qualifiedName", "qualifiedName", "qualifiedName.text") + # DEFERRED: Referenceable.CUSTOM_ATTRIBUTES = TextField("customAttributes", "customAttributes") + # Entity-level field descriptor placeholders (assigned at module bottom) TYPE_NAME: ClassVar[Any] = None """Type of the asset. For example Table, Column, and so on.""" @@ -295,7 +302,7 @@ class ReferenceableNested( update_time: Union[Any, UnsetType] = UNSET created_by: Union[Any, UnsetType] = UNSET updated_by: Union[Any, UnsetType] = UNSET - classifications: Union[List[AtlasClassification], None, UnsetType] = UNSET + classifications: Union[Any, UnsetType] = UNSET classification_names: Union[Any, UnsetType] = UNSET meanings: Union[Any, UnsetType] = UNSET labels: Union[Any, UnsetType] = UNSET @@ -420,6 +427,7 @@ def _referenceable_from_nested(nested: ReferenceableNested) -> Referenceable: updated_by=nested.updated_by, classifications=nested.classifications, classification_names=nested.classification_names, + meanings=nested.meanings, labels=nested.labels, business_attributes=nested.business_attributes, custom_attributes=nested.custom_attributes, @@ -461,83 +469,3 @@ def _referenceable_from_nested_bytes(data: bytes, serde: Serde) -> Referenceable Referenceable.MEANINGS = RelationField("meanings") Referenceable.USER_DEF_RELATIONSHIP_TO = RelationField("userDefRelationshipTo") Referenceable.USER_DEF_RELATIONSHIP_FROM = RelationField("userDefRelationshipFrom") -# --------------------------------------------------------------------------- -# Referenceable internal field descriptors (entity-level, not in typedef) -# --------------------------------------------------------------------------- - -Referenceable.STATUS = InternalKeywordField("status", "__state", "__state") -Referenceable.GUID = InternalKeywordField("guid", "__guid", "__guid") -Referenceable.TYPE_NAME = InternalKeywordTextField( - "typeName", "__typeName.keyword", "__typeName", "__typeName" -) -Referenceable.CREATED_BY = InternalKeywordField( - "createdBy", "__createdBy", "__createdBy" -) -Referenceable.UPDATED_BY = InternalKeywordField( - "updatedBy", "__modifiedBy", "__modifiedBy" -) -Referenceable.ATLAN_TAGS = InternalKeywordTextField( - "classificationNames", - "__traitNames", - "__classificationsText", - "__classificationNames", -) -Referenceable.PROPAGATED_ATLAN_TAGS = InternalKeywordTextField( - "classificationNames", - "__propagatedTraitNames", - "__classificationsText", - "__propagatedClassificationNames", -) -Referenceable.ASSIGNED_TERMS = InternalKeywordTextField( - "meanings", "__meanings", "__meaningsText", "__meanings" -) -Referenceable.SUPER_TYPE_NAMES = InternalKeywordTextField( - "typeName", "__superTypeNames.keyword", "__superTypeNames", "__superTypeNames" -) -Referenceable.CREATE_TIME = InternalNumericField( - "createTime", "__timestamp", "__timestamp" -) -Referenceable.UPDATE_TIME = InternalNumericField( - "updateTime", "__modificationTimestamp", "__modificationTimestamp" -) -Referenceable.CUSTOM_ATTRIBUTES = TextField("customAttributes", "customAttributes") - -Referenceable.TYPE_NAME = InternalKeywordTextField( - "typeName", "__typeName.keyword", "__typeName", "__typeName" -) -Referenceable.GUID = InternalKeywordField("guid", "__guid", "__guid") -Referenceable.CREATED_BY = InternalKeywordField( - "createdBy", "__createdBy", "__createdBy" -) -Referenceable.UPDATED_BY = InternalKeywordField( - "updatedBy", "__modifiedBy", "__modifiedBy" -) -Referenceable.STATUS = InternalKeywordField("status", "__state", "__state") -Referenceable.ATLAN_TAGS = InternalKeywordTextField( - "classificationNames", - "__traitNames", - "__classificationsText", - "__classificationNames", -) -Referenceable.PROPAGATED_ATLAN_TAGS = InternalKeywordTextField( - "classificationNames", - "__propagatedTraitNames", - "__classificationsText", - "__propagatedClassificationNames", -) -Referenceable.ASSIGNED_TERMS = InternalKeywordTextField( - "meanings", "__meanings", "__meaningsText", "__meanings" -) -Referenceable.SUPER_TYPE_NAMES = InternalKeywordTextField( - "typeName", "__superTypeNames.keyword", "__superTypeNames", "__superTypeNames" -) -Referenceable.CREATE_TIME = InternalNumericField( - "createTime", "__timestamp", "__timestamp" -) -Referenceable.UPDATE_TIME = InternalNumericField( - "updateTime", "__modificationTimestamp", "__modificationTimestamp" -) -Referenceable.QUALIFIED_NAME = KeywordTextField( - "qualifiedName", "qualifiedName", "qualifiedName.text" -) -Referenceable.CUSTOM_ATTRIBUTES = TextField("customAttributes", "customAttributes") diff --git a/pyatlan_v9/model/assets/sap_analytics_cloud.py b/pyatlan_v9/model/assets/sap_analytics_cloud.py new file mode 100644 index 000000000..dc70766b3 --- /dev/null +++ b/pyatlan_v9/model/assets/sap_analytics_cloud.py @@ -0,0 +1,758 @@ +# Auto-generated by PythonMsgspecRenderer.pkl - DO NOT EDIT +# ruff: noqa: ARG002 +# SPDX-License-Identifier: Apache-2.0 +# Copyright 2024 Atlan Pte. Ltd. + +""" +SapAnalyticsCloud asset model with flattened inheritance. + +This module provides: +- SapAnalyticsCloud: Flat asset class (easy to use) +- SapAnalyticsCloudAttributes: Nested attributes struct (extends AssetAttributes) +- SapAnalyticsCloudNested: Nested API format struct +""" + +from __future__ import annotations + +from typing import Any, ClassVar, Dict, List, Set, Union + +import msgspec +from msgspec import UNSET, UnsetType + +from .airflow_related import RelatedAirflowTask +from .anomalo_related import RelatedAnomaloCheck +from .app_related import RelatedApplication, RelatedApplicationField +from .asset import ( + _ASSET_REL_FIELDS, + Asset, + AssetAttributes, + AssetNested, + AssetRelationshipAttributes, + _extract_asset_attrs, + _populate_asset_attrs, +) +from .context_related import RelatedContextRepository +from .data_contract_related import RelatedDataContract +from .data_mesh_related import RelatedDataProduct +from .data_quality_related import RelatedDataQualityRule, RelatedMetric +from .gcp_dataplex_related import RelatedGCPDataplexAspectType +from .gtc_related import RelatedAtlasGlossaryTerm +from .knowledge_related import RelatedKnowledgeFile +from .model_related import RelatedModelAttribute, RelatedModelEntity +from .monte_carlo_related import RelatedMCIncident, RelatedMCMonitor +from .partial_related import RelatedPartialField, RelatedPartialObject +from .process_related import RelatedProcess +from .referenceable_related import RelatedReferenceable +from .resource_related import RelatedFile, RelatedLink, RelatedReadme +from .schema_registry_related import RelatedSchemaRegistrySubject +from .soda_related import RelatedSodaCheck +from .spark_related import RelatedSparkJob +from pyatlan_v9.model.conversion_utils import categorize_relationships, merge_relationships +from pyatlan_v9.model.serde import Serde, get_serde +from pyatlan_v9.model.transform import register_asset + +from .sap_analytics_cloud_related import RelatedSapAnalyticsCloud + +# ============================================================================= +# FLAT ASSET CLASS +# ============================================================================= + +@register_asset +class SapAnalyticsCloud(Asset): + """ + Base class for SAP Analytics Cloud assets. Inherits the SAP-wide attributes (technicalName, logicalName, packageName, componentName, dataType, fieldCount, fieldOrder) so cross-SAP queries traverse SAP Analytics Cloud alongside SAP ERP, SAP BW and SAP Datasphere. + """ + + SAP_ANALYTICS_CLOUD_RESOURCE_ID: ClassVar[Any] = None + SAP_ANALYTICS_CLOUD_OBJECT_ID: ClassVar[Any] = None + SAP_ANALYTICS_CLOUD_REPOSITORY_PARTITION: ClassVar[Any] = None + SAP_ANALYTICS_CLOUD_WORKSPACE_ID: ClassVar[Any] = None + SAP_ANALYTICS_CLOUD_WORKSPACE_NAME: ClassVar[Any] = None + SAP_ANALYTICS_CLOUD_PARENT_FOLDER_QUALIFIED_NAME: ClassVar[Any] = None + SAP_ANALYTICS_CLOUD_PARENT_FOLDER_NAME: ClassVar[Any] = None + SAP_TECHNICAL_NAME: ClassVar[Any] = None + SAP_LOGICAL_NAME: ClassVar[Any] = None + SAP_PACKAGE_NAME: ClassVar[Any] = None + SAP_COMPONENT_NAME: ClassVar[Any] = None + SAP_DATA_TYPE: ClassVar[Any] = None + SAP_FIELD_COUNT: ClassVar[Any] = None + SAP_FIELD_ORDER: ClassVar[Any] = None + CATALOG_DATASET_GUID: ClassVar[Any] = None + INPUT_TO_AIRFLOW_TASKS: ClassVar[Any] = None + OUTPUT_FROM_AIRFLOW_TASKS: ClassVar[Any] = None + ANOMALO_CHECKS: ClassVar[Any] = None + APPLICATION: ClassVar[Any] = None + APPLICATION_FIELD: ClassVar[Any] = None + CONTEXT_REPOSITORIES: ClassVar[Any] = None + DATA_CONTRACT_LATEST: ClassVar[Any] = None + DATA_CONTRACT_LATEST_CERTIFIED: ClassVar[Any] = None + OUTPUT_PORT_DATA_PRODUCTS: ClassVar[Any] = None + INPUT_PORT_DATA_PRODUCTS: ClassVar[Any] = None + MODEL_IMPLEMENTED_ENTITIES: ClassVar[Any] = None + MODEL_IMPLEMENTED_ATTRIBUTES: ClassVar[Any] = None + METRICS: ClassVar[Any] = None + DQ_BASE_DATASET_RULES: ClassVar[Any] = None + DQ_REFERENCE_DATASET_RULES: ClassVar[Any] = None + GCP_DATAPLEX_ASPECT_TYPE_METADATA_ENTITIES: ClassVar[Any] = None + MEANINGS: ClassVar[Any] = None + KNOWLEDGE_LINKED_FILES: ClassVar[Any] = None + MC_MONITORS: ClassVar[Any] = None + MC_INCIDENTS: ClassVar[Any] = None + PARTIAL_CHILD_FIELDS: ClassVar[Any] = None + PARTIAL_CHILD_OBJECTS: ClassVar[Any] = None + INPUT_TO_PROCESSES: ClassVar[Any] = None + OUTPUT_FROM_PROCESSES: ClassVar[Any] = None + USER_DEF_RELATIONSHIP_TO: ClassVar[Any] = None + USER_DEF_RELATIONSHIP_FROM: ClassVar[Any] = None + FILES: ClassVar[Any] = None + LINKS: ClassVar[Any] = None + README: ClassVar[Any] = None + SCHEMA_REGISTRY_SUBJECTS: ClassVar[Any] = None + SODA_CHECKS: ClassVar[Any] = None + INPUT_TO_SPARK_JOBS: ClassVar[Any] = None + OUTPUT_FROM_SPARK_JOBS: ClassVar[Any] = None + + sap_analytics_cloud_resource_id: Union[str, None, UnsetType] = UNSET + """Identifier of this asset in the SAP Analytics Cloud file repository. Stable across renames and used by the source APIs to address the resource.""" + + sap_analytics_cloud_object_id: Union[str, None, UnsetType] = UNSET + """Underlying object identifier reported by the SAP Analytics Cloud file repository for this asset.""" + + sap_analytics_cloud_repository_partition: Union[str, None, UnsetType] = UNSET + """Partition of the SAP Analytics Cloud file repository this asset lives in: PUBLIC for shared tenant content, SYSTEM for SAP-shipped content and SAP Analytics Cloud's own telemetry, USERS for the container holding per-user private areas, and PRIVATE for an individual user's own content. Reported by the source as folderType, and carried by every resource rather than only by folders.""" + + sap_analytics_cloud_workspace_id: Union[str, None, UnsetType] = UNSET + """Identifier of the SAP Analytics Cloud workspace that owns this asset.""" + + sap_analytics_cloud_workspace_name: Union[str, None, UnsetType] = UNSET + """Simple name of the SAP Analytics Cloud workspace that owns this asset.""" + + sap_analytics_cloud_parent_folder_qualified_name: Union[str, None, UnsetType] = UNSET + """Unique name of the SAP Analytics Cloud folder that directly contains this asset. Empty for a root-level folder and for a live model, neither of which is contained by a folder.""" + + sap_analytics_cloud_parent_folder_name: Union[str, None, UnsetType] = UNSET + """Simple name of the SAP Analytics Cloud folder that directly contains this asset. Empty for a root-level folder and for a live model, neither of which is contained by a folder.""" + + sap_technical_name: Union[str, None, UnsetType] = UNSET + """Technical identifier for SAP data objects, used for integration and internal reference.""" + + sap_logical_name: Union[str, None, UnsetType] = UNSET + """Logical, business-friendly identifier for SAP data objects, aligned with business terminology and concepts.""" + + sap_package_name: Union[str, None, UnsetType] = UNSET + """Name of the SAP package, representing a logical grouping of related SAP data objects.""" + + sap_component_name: Union[str, None, UnsetType] = UNSET + """Name of the SAP component, representing a specific functional area in SAP.""" + + sap_data_type: Union[str, None, UnsetType] = UNSET + """SAP-specific data types.""" + + sap_field_count: Union[int, None, UnsetType] = UNSET + """Represents the total number of fields, columns, or child assets present in a given SAP asset.""" + + sap_field_order: Union[int, None, UnsetType] = UNSET + """Indicates the sequential position of a field, column, or child asset within its parent SAP asset, starting from 1.""" + + catalog_dataset_guid: Union[str, None, UnsetType] = UNSET + """Unique identifier of the dataset this asset belongs to.""" + + input_to_airflow_tasks: Union[List[RelatedAirflowTask], None, UnsetType] = UNSET + """Tasks to which this asset provides input.""" + + output_from_airflow_tasks: Union[List[RelatedAirflowTask], None, UnsetType] = UNSET + """Tasks from which this asset is output.""" + + anomalo_checks: Union[List[RelatedAnomaloCheck], None, UnsetType] = UNSET + """Checks that run on this asset.""" + + application: Union[RelatedApplication, None, UnsetType] = UNSET + """Application owning the Asset.""" + + application_field: Union[RelatedApplicationField, None, UnsetType] = UNSET + """ApplicationField owning the Asset.""" + + context_repositories: Union[List[RelatedContextRepository], None, UnsetType] = UNSET + """Context repositories that use this asset as input.""" + + data_contract_latest: Union[RelatedDataContract, None, UnsetType] = UNSET + """Latest version of the data contract (in any status) for this asset.""" + + data_contract_latest_certified: Union[RelatedDataContract, None, UnsetType] = UNSET + """Latest certified version of the data contract for this asset.""" + + output_port_data_products: Union[List[RelatedDataProduct], None, UnsetType] = UNSET + """Data products for which this asset is an output port.""" + + input_port_data_products: Union[List[RelatedDataProduct], None, UnsetType] = UNSET + """Data products for which this asset is an input port.""" + + model_implemented_entities: Union[List[RelatedModelEntity], None, UnsetType] = UNSET + """Entities implemented by this asset.""" + + model_implemented_attributes: Union[List[RelatedModelAttribute], None, UnsetType] = UNSET + """Attributes implemented by this asset.""" + + metrics: Union[List[RelatedMetric], None, UnsetType] = UNSET + """""" + + dq_base_dataset_rules: Union[List[RelatedDataQualityRule], None, UnsetType] = UNSET + """Rules that are applied on this dataset.""" + + dq_reference_dataset_rules: Union[List[RelatedDataQualityRule], None, UnsetType] = UNSET + """Rules where this dataset is referenced.""" + + gcp_dataplex_aspect_type_metadata_entities: Union[List[RelatedGCPDataplexAspectType], None, UnsetType] = UNSET + """Dataplex entries (assets) that have aspects of this Aspect Type attached.""" + + meanings: Union[List[RelatedAtlasGlossaryTerm], None, UnsetType] = UNSET + """Glossary terms that are linked to this asset.""" + + knowledge_linked_files: Union[List[RelatedKnowledgeFile], None, UnsetType] = UNSET + """Knowledge files linked to this asset.""" + + mc_monitors: Union[List[RelatedMCMonitor], None, UnsetType] = UNSET + """Monitors that observe this asset.""" + + mc_incidents: Union[List[RelatedMCIncident], None, UnsetType] = UNSET + """""" + + partial_child_fields: Union[List[RelatedPartialField], None, UnsetType] = UNSET + """Partial fields contained in the asset.""" + + partial_child_objects: Union[List[RelatedPartialObject], None, UnsetType] = UNSET + """Partial objects contained in the asset.""" + + input_to_processes: Union[List[RelatedProcess], None, UnsetType] = UNSET + """Processes to which this asset provides input.""" + + output_from_processes: Union[List[RelatedProcess], None, UnsetType] = UNSET + """Processes from which this asset is produced as output.""" + + user_def_relationship_to: Union[List[RelatedReferenceable], None, UnsetType] = UNSET + """""" + + user_def_relationship_from: Union[List[RelatedReferenceable], None, UnsetType] = UNSET + """""" + + files: Union[List[RelatedFile], None, UnsetType] = UNSET + """""" + + links: Union[List[RelatedLink], None, UnsetType] = UNSET + """Links that are attached to this asset.""" + + readme: Union[RelatedReadme, None, UnsetType] = UNSET + """README that is linked to this asset.""" + + schema_registry_subjects: Union[List[RelatedSchemaRegistrySubject], None, UnsetType] = UNSET + """Schema registry subjects associated with this asset.""" + + soda_checks: Union[List[RelatedSodaCheck], None, UnsetType] = UNSET + """""" + + input_to_spark_jobs: Union[List[RelatedSparkJob], None, UnsetType] = UNSET + """""" + + output_from_spark_jobs: Union[List[RelatedSparkJob], None, UnsetType] = UNSET + """""" + + def __post_init__(self) -> None: + self.type_name = "SapAnalyticsCloud" + + # ========================================================================= + # SDK Methods + # ========================================================================= + + def validate(self, for_creation: bool = False) -> None: + """ + Dry-run validation of this SapAnalyticsCloud instance. + + Checks that required fields (type_name, name, qualified_name) are set. + When ``for_creation=True``, also checks hierarchy-specific fields + (parent references, denormalized attributes) needed to create this asset. + + This is purely opt-in and is NOT called by any serde path — only by + explicit user invocation (e.g., validating JSONL before sending to Atlan). + + Args: + for_creation: If True, also validate fields required for asset creation. + + Raises: + ValueError: If any required fields are missing or invalid. + """ + errors: list[str] = [] + if self.type_name is UNSET: + errors.append("type_name is required") + if self.name is UNSET: + errors.append("name is required") + if self.qualified_name is UNSET or self.qualified_name is None: + errors.append("qualified_name is required") + if errors: + raise ValueError(f"SapAnalyticsCloud validation failed: {errors}") + + def minimize(self) -> "SapAnalyticsCloud": + """ + Return a minimal copy of this SapAnalyticsCloud with only updater-required fields. + + Calls :meth:`validate` first to ensure the instance is valid, then + returns a new SapAnalyticsCloud with only the fields needed for an update + (qualified_name, name, and any type-specific additional fields). + + Returns: + A new SapAnalyticsCloud instance with only the minimum required fields. + """ + self.validate() + return SapAnalyticsCloud(qualified_name=self.qualified_name, name=self.name) + + def relate(self) -> "RelatedSapAnalyticsCloud": + """ + Create a :class:`RelatedSapAnalyticsCloud` reference from this instance. + + Returns a lightweight reference suitable for use in relationship + attributes. Prefers ``guid`` if set, otherwise falls back to + ``qualified_name``. + + Returns: + A RelatedSapAnalyticsCloud reference to this asset. + """ + if self.guid is not UNSET: + return RelatedSapAnalyticsCloud(guid=self.guid) + return RelatedSapAnalyticsCloud(qualified_name=self.qualified_name) + + # ========================================================================= + # Optimized Serialization Methods (override Asset base class) + # ========================================================================= + + def to_json(self, nested: bool = True, serde: Serde | None = None) -> str: + """ + Convert to JSON string using optimized nested struct serialization. + + Args: + nested: If True (default), use nested API format. If False, use flat format. + serde: Optional Serde instance for encoder reuse. Uses shared singleton if None. + + Returns: + JSON string representation + """ + if serde is None: + serde = get_serde() + if nested: + return self.to_nested_bytes(serde).decode("utf-8") + else: + return serde.encode(self).decode("utf-8") + + def to_nested_bytes(self, serde: Serde | None = None) -> bytes: + """Serialize to Atlas nested-format JSON bytes (pure msgspec, no dict intermediate).""" + if serde is None: + serde = get_serde() + return _sap_analytics_cloud_to_nested_bytes(self, serde) + + @staticmethod + def from_json(json_data: str | bytes, serde: Serde | None = None) -> SapAnalyticsCloud: + """ + Create from JSON string or bytes using optimized nested struct deserialization. + + Args: + json_data: JSON string or bytes to deserialize + serde: Optional Serde instance for decoder reuse. Uses shared singleton if None. + + Returns: + SapAnalyticsCloud instance + """ + if isinstance(json_data, str): + json_data = json_data.encode("utf-8") + if serde is None: + serde = get_serde() + return _sap_analytics_cloud_from_nested_bytes(json_data, serde) + + +# ============================================================================= +# NESTED FORMAT CLASSES +# ============================================================================= + +class SapAnalyticsCloudAttributes(AssetAttributes): + """SapAnalyticsCloud-specific attributes for nested API format.""" + + sap_analytics_cloud_resource_id: Union[str, None, UnsetType] = UNSET + """Identifier of this asset in the SAP Analytics Cloud file repository. Stable across renames and used by the source APIs to address the resource.""" + + sap_analytics_cloud_object_id: Union[str, None, UnsetType] = UNSET + """Underlying object identifier reported by the SAP Analytics Cloud file repository for this asset.""" + + sap_analytics_cloud_repository_partition: Union[str, None, UnsetType] = UNSET + """Partition of the SAP Analytics Cloud file repository this asset lives in: PUBLIC for shared tenant content, SYSTEM for SAP-shipped content and SAP Analytics Cloud's own telemetry, USERS for the container holding per-user private areas, and PRIVATE for an individual user's own content. Reported by the source as folderType, and carried by every resource rather than only by folders.""" + + sap_analytics_cloud_workspace_id: Union[str, None, UnsetType] = UNSET + """Identifier of the SAP Analytics Cloud workspace that owns this asset.""" + + sap_analytics_cloud_workspace_name: Union[str, None, UnsetType] = UNSET + """Simple name of the SAP Analytics Cloud workspace that owns this asset.""" + + sap_analytics_cloud_parent_folder_qualified_name: Union[str, None, UnsetType] = UNSET + """Unique name of the SAP Analytics Cloud folder that directly contains this asset. Empty for a root-level folder and for a live model, neither of which is contained by a folder.""" + + sap_analytics_cloud_parent_folder_name: Union[str, None, UnsetType] = UNSET + """Simple name of the SAP Analytics Cloud folder that directly contains this asset. Empty for a root-level folder and for a live model, neither of which is contained by a folder.""" + + sap_technical_name: Union[str, None, UnsetType] = UNSET + """Technical identifier for SAP data objects, used for integration and internal reference.""" + + sap_logical_name: Union[str, None, UnsetType] = UNSET + """Logical, business-friendly identifier for SAP data objects, aligned with business terminology and concepts.""" + + sap_package_name: Union[str, None, UnsetType] = UNSET + """Name of the SAP package, representing a logical grouping of related SAP data objects.""" + + sap_component_name: Union[str, None, UnsetType] = UNSET + """Name of the SAP component, representing a specific functional area in SAP.""" + + sap_data_type: Union[str, None, UnsetType] = UNSET + """SAP-specific data types.""" + + sap_field_count: Union[int, None, UnsetType] = UNSET + """Represents the total number of fields, columns, or child assets present in a given SAP asset.""" + + sap_field_order: Union[int, None, UnsetType] = UNSET + """Indicates the sequential position of a field, column, or child asset within its parent SAP asset, starting from 1.""" + + catalog_dataset_guid: Union[str, None, UnsetType] = UNSET + """Unique identifier of the dataset this asset belongs to.""" + +class SapAnalyticsCloudRelationshipAttributes(AssetRelationshipAttributes): + """SapAnalyticsCloud-specific relationship attributes for nested API format.""" + + input_to_airflow_tasks: Union[List[RelatedAirflowTask], None, UnsetType] = UNSET + """Tasks to which this asset provides input.""" + + output_from_airflow_tasks: Union[List[RelatedAirflowTask], None, UnsetType] = UNSET + """Tasks from which this asset is output.""" + + anomalo_checks: Union[List[RelatedAnomaloCheck], None, UnsetType] = UNSET + """Checks that run on this asset.""" + + application: Union[RelatedApplication, None, UnsetType] = UNSET + """Application owning the Asset.""" + + application_field: Union[RelatedApplicationField, None, UnsetType] = UNSET + """ApplicationField owning the Asset.""" + + context_repositories: Union[List[RelatedContextRepository], None, UnsetType] = UNSET + """Context repositories that use this asset as input.""" + + data_contract_latest: Union[RelatedDataContract, None, UnsetType] = UNSET + """Latest version of the data contract (in any status) for this asset.""" + + data_contract_latest_certified: Union[RelatedDataContract, None, UnsetType] = UNSET + """Latest certified version of the data contract for this asset.""" + + output_port_data_products: Union[List[RelatedDataProduct], None, UnsetType] = UNSET + """Data products for which this asset is an output port.""" + + input_port_data_products: Union[List[RelatedDataProduct], None, UnsetType] = UNSET + """Data products for which this asset is an input port.""" + + model_implemented_entities: Union[List[RelatedModelEntity], None, UnsetType] = UNSET + """Entities implemented by this asset.""" + + model_implemented_attributes: Union[List[RelatedModelAttribute], None, UnsetType] = UNSET + """Attributes implemented by this asset.""" + + metrics: Union[List[RelatedMetric], None, UnsetType] = UNSET + """""" + + dq_base_dataset_rules: Union[List[RelatedDataQualityRule], None, UnsetType] = UNSET + """Rules that are applied on this dataset.""" + + dq_reference_dataset_rules: Union[List[RelatedDataQualityRule], None, UnsetType] = UNSET + """Rules where this dataset is referenced.""" + + gcp_dataplex_aspect_type_metadata_entities: Union[List[RelatedGCPDataplexAspectType], None, UnsetType] = UNSET + """Dataplex entries (assets) that have aspects of this Aspect Type attached.""" + + meanings: Union[List[RelatedAtlasGlossaryTerm], None, UnsetType] = UNSET + """Glossary terms that are linked to this asset.""" + + knowledge_linked_files: Union[List[RelatedKnowledgeFile], None, UnsetType] = UNSET + """Knowledge files linked to this asset.""" + + mc_monitors: Union[List[RelatedMCMonitor], None, UnsetType] = UNSET + """Monitors that observe this asset.""" + + mc_incidents: Union[List[RelatedMCIncident], None, UnsetType] = UNSET + """""" + + partial_child_fields: Union[List[RelatedPartialField], None, UnsetType] = UNSET + """Partial fields contained in the asset.""" + + partial_child_objects: Union[List[RelatedPartialObject], None, UnsetType] = UNSET + """Partial objects contained in the asset.""" + + input_to_processes: Union[List[RelatedProcess], None, UnsetType] = UNSET + """Processes to which this asset provides input.""" + + output_from_processes: Union[List[RelatedProcess], None, UnsetType] = UNSET + """Processes from which this asset is produced as output.""" + + user_def_relationship_to: Union[List[RelatedReferenceable], None, UnsetType] = UNSET + """""" + + user_def_relationship_from: Union[List[RelatedReferenceable], None, UnsetType] = UNSET + """""" + + files: Union[List[RelatedFile], None, UnsetType] = UNSET + """""" + + links: Union[List[RelatedLink], None, UnsetType] = UNSET + """Links that are attached to this asset.""" + + readme: Union[RelatedReadme, None, UnsetType] = UNSET + """README that is linked to this asset.""" + + schema_registry_subjects: Union[List[RelatedSchemaRegistrySubject], None, UnsetType] = UNSET + """Schema registry subjects associated with this asset.""" + + soda_checks: Union[List[RelatedSodaCheck], None, UnsetType] = UNSET + """""" + + input_to_spark_jobs: Union[List[RelatedSparkJob], None, UnsetType] = UNSET + """""" + + output_from_spark_jobs: Union[List[RelatedSparkJob], None, UnsetType] = UNSET + """""" + +class SapAnalyticsCloudNested(AssetNested): + """SapAnalyticsCloud in nested API format for high-performance serialization.""" + + attributes: Union[SapAnalyticsCloudAttributes, UnsetType] = UNSET + relationship_attributes: Union[SapAnalyticsCloudRelationshipAttributes, UnsetType] = UNSET + append_relationship_attributes: Union[SapAnalyticsCloudRelationshipAttributes, UnsetType] = UNSET + remove_relationship_attributes: Union[SapAnalyticsCloudRelationshipAttributes, UnsetType] = UNSET + +# ============================================================================= +# CONVERSION HELPERS & CONSTANTS +# ============================================================================= + +_SAP_ANALYTICS_CLOUD_REL_FIELDS: List[str] = [ + *_ASSET_REL_FIELDS, + "input_to_airflow_tasks", + "output_from_airflow_tasks", + "anomalo_checks", + "application", + "application_field", + "context_repositories", + "data_contract_latest", + "data_contract_latest_certified", + "output_port_data_products", + "input_port_data_products", + "model_implemented_entities", + "model_implemented_attributes", + "metrics", + "dq_base_dataset_rules", + "dq_reference_dataset_rules", + "gcp_dataplex_aspect_type_metadata_entities", + "meanings", + "knowledge_linked_files", + "mc_monitors", + "mc_incidents", + "partial_child_fields", + "partial_child_objects", + "input_to_processes", + "output_from_processes", + "user_def_relationship_to", + "user_def_relationship_from", + "files", + "links", + "readme", + "schema_registry_subjects", + "soda_checks", + "input_to_spark_jobs", + "output_from_spark_jobs", +] + +def _populate_sap_analytics_cloud_attrs(attrs: SapAnalyticsCloudAttributes, obj: SapAnalyticsCloud) -> None: + """Populate SapAnalyticsCloud-specific attributes on the attrs struct.""" + _populate_asset_attrs(attrs, obj) + attrs.sap_analytics_cloud_resource_id = obj.sap_analytics_cloud_resource_id + attrs.sap_analytics_cloud_object_id = obj.sap_analytics_cloud_object_id + attrs.sap_analytics_cloud_repository_partition = obj.sap_analytics_cloud_repository_partition + attrs.sap_analytics_cloud_workspace_id = obj.sap_analytics_cloud_workspace_id + attrs.sap_analytics_cloud_workspace_name = obj.sap_analytics_cloud_workspace_name + attrs.sap_analytics_cloud_parent_folder_qualified_name = obj.sap_analytics_cloud_parent_folder_qualified_name + attrs.sap_analytics_cloud_parent_folder_name = obj.sap_analytics_cloud_parent_folder_name + attrs.sap_technical_name = obj.sap_technical_name + attrs.sap_logical_name = obj.sap_logical_name + attrs.sap_package_name = obj.sap_package_name + attrs.sap_component_name = obj.sap_component_name + attrs.sap_data_type = obj.sap_data_type + attrs.sap_field_count = obj.sap_field_count + attrs.sap_field_order = obj.sap_field_order + attrs.catalog_dataset_guid = obj.catalog_dataset_guid + +def _extract_sap_analytics_cloud_attrs(attrs: SapAnalyticsCloudAttributes) -> dict: + """Extract all SapAnalyticsCloud attributes from the attrs struct into a flat dict.""" + result = _extract_asset_attrs(attrs) + result["sap_analytics_cloud_resource_id"] = attrs.sap_analytics_cloud_resource_id + result["sap_analytics_cloud_object_id"] = attrs.sap_analytics_cloud_object_id + result["sap_analytics_cloud_repository_partition"] = attrs.sap_analytics_cloud_repository_partition + result["sap_analytics_cloud_workspace_id"] = attrs.sap_analytics_cloud_workspace_id + result["sap_analytics_cloud_workspace_name"] = attrs.sap_analytics_cloud_workspace_name + result["sap_analytics_cloud_parent_folder_qualified_name"] = attrs.sap_analytics_cloud_parent_folder_qualified_name + result["sap_analytics_cloud_parent_folder_name"] = attrs.sap_analytics_cloud_parent_folder_name + result["sap_technical_name"] = attrs.sap_technical_name + result["sap_logical_name"] = attrs.sap_logical_name + result["sap_package_name"] = attrs.sap_package_name + result["sap_component_name"] = attrs.sap_component_name + result["sap_data_type"] = attrs.sap_data_type + result["sap_field_count"] = attrs.sap_field_count + result["sap_field_order"] = attrs.sap_field_order + result["catalog_dataset_guid"] = attrs.catalog_dataset_guid + return result + +# ============================================================================= +# CONVERSION FUNCTIONS +# ============================================================================= + + +def _sap_analytics_cloud_to_nested(sap_analytics_cloud: SapAnalyticsCloud) -> SapAnalyticsCloudNested: + """Convert flat SapAnalyticsCloud to nested format.""" + attrs = SapAnalyticsCloudAttributes() + _populate_sap_analytics_cloud_attrs(attrs, sap_analytics_cloud) + # Categorize relationships by save semantic (REPLACE, APPEND, REMOVE) + replace_rels, append_rels, remove_rels = categorize_relationships( + sap_analytics_cloud, _SAP_ANALYTICS_CLOUD_REL_FIELDS, SapAnalyticsCloudRelationshipAttributes + ) + return SapAnalyticsCloudNested( + guid=sap_analytics_cloud.guid, + type_name=sap_analytics_cloud.type_name, + status=sap_analytics_cloud.status, + version=sap_analytics_cloud.version, + create_time=sap_analytics_cloud.create_time, + update_time=sap_analytics_cloud.update_time, + created_by=sap_analytics_cloud.created_by, + updated_by=sap_analytics_cloud.updated_by, + classifications=sap_analytics_cloud.classifications, + classification_names=sap_analytics_cloud.classification_names, + meanings=sap_analytics_cloud.meanings, + labels=sap_analytics_cloud.labels, + business_attributes=sap_analytics_cloud.business_attributes, + custom_attributes=sap_analytics_cloud.custom_attributes, + pending_tasks=sap_analytics_cloud.pending_tasks, + proxy=sap_analytics_cloud.proxy, + is_incomplete=sap_analytics_cloud.is_incomplete, + provenance_type=sap_analytics_cloud.provenance_type, + home_id=sap_analytics_cloud.home_id, + depth=sap_analytics_cloud.depth, + immediate_upstream=sap_analytics_cloud.immediate_upstream, + immediate_downstream=sap_analytics_cloud.immediate_downstream, + attributes=attrs, + relationship_attributes=replace_rels, + append_relationship_attributes=append_rels, + remove_relationship_attributes=remove_rels, + ) + +def _sap_analytics_cloud_from_nested(nested: SapAnalyticsCloudNested) -> SapAnalyticsCloud: + """Convert nested format to flat SapAnalyticsCloud.""" + attrs = nested.attributes if nested.attributes is not UNSET else SapAnalyticsCloudAttributes() + # Merge relationships from all three buckets + merged_rels = merge_relationships( + nested.relationship_attributes, + nested.append_relationship_attributes, + nested.remove_relationship_attributes, + _SAP_ANALYTICS_CLOUD_REL_FIELDS, + SapAnalyticsCloudRelationshipAttributes + ) + return SapAnalyticsCloud( + guid=nested.guid, + type_name=nested.type_name, + status=nested.status, + version=nested.version, + create_time=nested.create_time, + update_time=nested.update_time, + created_by=nested.created_by, + updated_by=nested.updated_by, + classifications=nested.classifications, + classification_names=nested.classification_names, + meanings=nested.meanings, + labels=nested.labels, + business_attributes=nested.business_attributes, + custom_attributes=nested.custom_attributes, + pending_tasks=nested.pending_tasks, + proxy=nested.proxy, + is_incomplete=nested.is_incomplete, + provenance_type=nested.provenance_type, + home_id=nested.home_id, + depth=nested.depth, + immediate_upstream=nested.immediate_upstream, + immediate_downstream=nested.immediate_downstream, + **_extract_sap_analytics_cloud_attrs(attrs), + # Merged relationship attributes + **merged_rels, + ) + +def _sap_analytics_cloud_to_nested_bytes(sap_analytics_cloud: SapAnalyticsCloud, serde: Serde) -> bytes: + """Convert flat SapAnalyticsCloud to nested JSON bytes.""" + return serde.encode(_sap_analytics_cloud_to_nested(sap_analytics_cloud)) + + +def _sap_analytics_cloud_from_nested_bytes(data: bytes, serde: Serde) -> SapAnalyticsCloud: + """Convert nested JSON bytes to flat SapAnalyticsCloud.""" + nested = serde.decode(data, SapAnalyticsCloudNested) + return _sap_analytics_cloud_from_nested(nested) + +# --------------------------------------------------------------------------- +# Deferred field descriptor initialization +# --------------------------------------------------------------------------- +from pyatlan.model.fields.atlan_fields import ( # noqa: E402 + KeywordField, + NumericField, + RelationField, +) + +SapAnalyticsCloud.SAP_ANALYTICS_CLOUD_RESOURCE_ID = KeywordField("sapAnalyticsCloudResourceId", "sapAnalyticsCloudResourceId") +SapAnalyticsCloud.SAP_ANALYTICS_CLOUD_OBJECT_ID = KeywordField("sapAnalyticsCloudObjectId", "sapAnalyticsCloudObjectId") +SapAnalyticsCloud.SAP_ANALYTICS_CLOUD_REPOSITORY_PARTITION = KeywordField("sapAnalyticsCloudRepositoryPartition", "sapAnalyticsCloudRepositoryPartition") +SapAnalyticsCloud.SAP_ANALYTICS_CLOUD_WORKSPACE_ID = KeywordField("sapAnalyticsCloudWorkspaceId", "sapAnalyticsCloudWorkspaceId") +SapAnalyticsCloud.SAP_ANALYTICS_CLOUD_WORKSPACE_NAME = KeywordField("sapAnalyticsCloudWorkspaceName", "sapAnalyticsCloudWorkspaceName") +SapAnalyticsCloud.SAP_ANALYTICS_CLOUD_PARENT_FOLDER_QUALIFIED_NAME = KeywordField("sapAnalyticsCloudParentFolderQualifiedName", "sapAnalyticsCloudParentFolderQualifiedName") +SapAnalyticsCloud.SAP_ANALYTICS_CLOUD_PARENT_FOLDER_NAME = KeywordField("sapAnalyticsCloudParentFolderName", "sapAnalyticsCloudParentFolderName") +SapAnalyticsCloud.SAP_TECHNICAL_NAME = KeywordField("sapTechnicalName", "sapTechnicalName") +SapAnalyticsCloud.SAP_LOGICAL_NAME = KeywordField("sapLogicalName", "sapLogicalName") +SapAnalyticsCloud.SAP_PACKAGE_NAME = KeywordField("sapPackageName", "sapPackageName") +SapAnalyticsCloud.SAP_COMPONENT_NAME = KeywordField("sapComponentName", "sapComponentName") +SapAnalyticsCloud.SAP_DATA_TYPE = KeywordField("sapDataType", "sapDataType") +SapAnalyticsCloud.SAP_FIELD_COUNT = NumericField("sapFieldCount", "sapFieldCount") +SapAnalyticsCloud.SAP_FIELD_ORDER = NumericField("sapFieldOrder", "sapFieldOrder") +SapAnalyticsCloud.CATALOG_DATASET_GUID = KeywordField("catalogDatasetGuid", "catalogDatasetGuid") +SapAnalyticsCloud.INPUT_TO_AIRFLOW_TASKS = RelationField("inputToAirflowTasks") +SapAnalyticsCloud.OUTPUT_FROM_AIRFLOW_TASKS = RelationField("outputFromAirflowTasks") +SapAnalyticsCloud.ANOMALO_CHECKS = RelationField("anomaloChecks") +SapAnalyticsCloud.APPLICATION = RelationField("application") +SapAnalyticsCloud.APPLICATION_FIELD = RelationField("applicationField") +SapAnalyticsCloud.CONTEXT_REPOSITORIES = RelationField("contextRepositories") +SapAnalyticsCloud.DATA_CONTRACT_LATEST = RelationField("dataContractLatest") +SapAnalyticsCloud.DATA_CONTRACT_LATEST_CERTIFIED = RelationField("dataContractLatestCertified") +SapAnalyticsCloud.OUTPUT_PORT_DATA_PRODUCTS = RelationField("outputPortDataProducts") +SapAnalyticsCloud.INPUT_PORT_DATA_PRODUCTS = RelationField("inputPortDataProducts") +SapAnalyticsCloud.MODEL_IMPLEMENTED_ENTITIES = RelationField("modelImplementedEntities") +SapAnalyticsCloud.MODEL_IMPLEMENTED_ATTRIBUTES = RelationField("modelImplementedAttributes") +SapAnalyticsCloud.METRICS = RelationField("metrics") +SapAnalyticsCloud.DQ_BASE_DATASET_RULES = RelationField("dqBaseDatasetRules") +SapAnalyticsCloud.DQ_REFERENCE_DATASET_RULES = RelationField("dqReferenceDatasetRules") +SapAnalyticsCloud.GCP_DATAPLEX_ASPECT_TYPE_METADATA_ENTITIES = RelationField("gcpDataplexAspectTypeMetadataEntities") +SapAnalyticsCloud.MEANINGS = RelationField("meanings") +SapAnalyticsCloud.KNOWLEDGE_LINKED_FILES = RelationField("knowledgeLinkedFiles") +SapAnalyticsCloud.MC_MONITORS = RelationField("mcMonitors") +SapAnalyticsCloud.MC_INCIDENTS = RelationField("mcIncidents") +SapAnalyticsCloud.PARTIAL_CHILD_FIELDS = RelationField("partialChildFields") +SapAnalyticsCloud.PARTIAL_CHILD_OBJECTS = RelationField("partialChildObjects") +SapAnalyticsCloud.INPUT_TO_PROCESSES = RelationField("inputToProcesses") +SapAnalyticsCloud.OUTPUT_FROM_PROCESSES = RelationField("outputFromProcesses") +SapAnalyticsCloud.USER_DEF_RELATIONSHIP_TO = RelationField("userDefRelationshipTo") +SapAnalyticsCloud.USER_DEF_RELATIONSHIP_FROM = RelationField("userDefRelationshipFrom") +SapAnalyticsCloud.FILES = RelationField("files") +SapAnalyticsCloud.LINKS = RelationField("links") +SapAnalyticsCloud.README = RelationField("readme") +SapAnalyticsCloud.SCHEMA_REGISTRY_SUBJECTS = RelationField("schemaRegistrySubjects") +SapAnalyticsCloud.SODA_CHECKS = RelationField("sodaChecks") +SapAnalyticsCloud.INPUT_TO_SPARK_JOBS = RelationField("inputToSparkJobs") +SapAnalyticsCloud.OUTPUT_FROM_SPARK_JOBS = RelationField("outputFromSparkJobs") \ No newline at end of file diff --git a/pyatlan_v9/model/assets/sap_analytics_cloud_column.py b/pyatlan_v9/model/assets/sap_analytics_cloud_column.py new file mode 100644 index 000000000..d982d9601 --- /dev/null +++ b/pyatlan_v9/model/assets/sap_analytics_cloud_column.py @@ -0,0 +1,2165 @@ +# Auto-generated by PythonMsgspecRenderer.pkl - DO NOT EDIT +# ruff: noqa: ARG002 +# SPDX-License-Identifier: Apache-2.0 +# Copyright 2024 Atlan Pte. Ltd. + +""" +SapAnalyticsCloudColumn asset model with flattened inheritance. + +This module provides: +- SapAnalyticsCloudColumn: Flat asset class (easy to use) +- SapAnalyticsCloudColumnAttributes: Nested attributes struct (extends AssetAttributes) +- SapAnalyticsCloudColumnNested: Nested API format struct +""" + +from __future__ import annotations + +import re +from typing import Any, ClassVar, Dict, List, Set, Union + +import msgspec +from msgspec import UNSET, UnsetType + +from .airflow_related import RelatedAirflowTask +from .anomalo_related import RelatedAnomaloCheck +from .app_related import RelatedApplication, RelatedApplicationField +from .asset import ( + _ASSET_REL_FIELDS, + Asset, + AssetAttributes, + AssetNested, + AssetRelationshipAttributes, + _extract_asset_attrs, + _populate_asset_attrs, +) +from .context_related import RelatedContextRepository +from .cosmos_mongo_db_related import RelatedCosmosMongoDBCollection +from .data_contract_related import RelatedDataContract +from .data_mesh_related import RelatedDataProduct +from .data_quality_related import RelatedDataQualityRule, RelatedMetric +from .dbt_related import RelatedDbtMetric, RelatedDbtModel, RelatedDbtModelColumn, RelatedDbtSeed, RelatedDbtSource, RelatedDbtTest +from .gcp_dataplex_related import RelatedGCPDataplexAspectType +from .gtc_related import RelatedAtlasGlossaryTerm +from .knowledge_related import RelatedKnowledgeFile +from .model_related import RelatedModelAttribute, RelatedModelEntity +from .mongo_db_related import RelatedMongoDBCollection +from .monte_carlo_related import RelatedMCIncident, RelatedMCMonitor +from .partial_related import RelatedPartialField, RelatedPartialObject +from .process_related import RelatedProcess +from .referenceable_related import RelatedReferenceable +from .resource_related import RelatedFile, RelatedLink, RelatedReadme +from .schema_registry_related import RelatedSchemaRegistrySubject +from .snowflake_related import RelatedSnowflakeDynamicTable, RelatedSnowflakeSemanticLogicalTable +from .soda_related import RelatedSodaCheck +from .spark_related import RelatedSparkJob +from .sql_insight_related import RelatedSqlInsightBusinessQuestion, RelatedSqlInsightFilter, RelatedSqlInsightJoin +from .sql_related import RelatedCalculationView, RelatedColumn, RelatedMaterialisedView, RelatedQuery, RelatedTable, RelatedTablePartition, RelatedView +from pyatlan_v9.model.conversion_utils import categorize_relationships, merge_relationships +from pyatlan_v9.model.serde import Serde, get_serde +from pyatlan_v9.model.transform import register_asset + +from .sap_analytics_cloud_related import RelatedSapAnalyticsCloudColumn, RelatedSapAnalyticsCloudModel + +# ============================================================================= +# FLAT ASSET CLASS +# ============================================================================= + +@register_asset +class SapAnalyticsCloudColumn(Asset): + """ + Column of a SAP Analytics Cloud model. Depending on its role a column is the fact table itself, a measure or dimension of that fact table, or an attribute or hierarchy level of a dimension. + """ + + SAP_ANALYTICS_CLOUD_MODEL_QUALIFIED_NAME: ClassVar[Any] = None + SAP_ANALYTICS_CLOUD_MODEL_NAME: ClassVar[Any] = None + SAP_ANALYTICS_CLOUD_RESOURCE_ID: ClassVar[Any] = None + SAP_ANALYTICS_CLOUD_OBJECT_ID: ClassVar[Any] = None + SAP_ANALYTICS_CLOUD_REPOSITORY_PARTITION: ClassVar[Any] = None + SAP_ANALYTICS_CLOUD_WORKSPACE_ID: ClassVar[Any] = None + SAP_ANALYTICS_CLOUD_WORKSPACE_NAME: ClassVar[Any] = None + SAP_ANALYTICS_CLOUD_PARENT_FOLDER_QUALIFIED_NAME: ClassVar[Any] = None + SAP_ANALYTICS_CLOUD_PARENT_FOLDER_NAME: ClassVar[Any] = None + SAP_TECHNICAL_NAME: ClassVar[Any] = None + SAP_LOGICAL_NAME: ClassVar[Any] = None + SAP_PACKAGE_NAME: ClassVar[Any] = None + SAP_COMPONENT_NAME: ClassVar[Any] = None + SAP_DATA_TYPE: ClassVar[Any] = None + SAP_FIELD_COUNT: ClassVar[Any] = None + SAP_FIELD_ORDER: ClassVar[Any] = None + CATALOG_DATASET_GUID: ClassVar[Any] = None + DATA_TYPE: ClassVar[Any] = None + SUB_DATA_TYPE: ClassVar[Any] = None + COLUMN_COMPRESSION: ClassVar[Any] = None + COLUMN_ENCODING: ClassVar[Any] = None + RAW_DATA_TYPE_DEFINITION: ClassVar[Any] = None + ORDER: ClassVar[Any] = None + NESTED_COLUMN_ORDER: ClassVar[Any] = None + NESTED_COLUMN_COUNT: ClassVar[Any] = None + COLUMN_HIERARCHY: ClassVar[Any] = None + IS_PARTITION: ClassVar[Any] = None + PARTITION_ORDER: ClassVar[Any] = None + IS_CLUSTERED: ClassVar[Any] = None + IS_PRIMARY: ClassVar[Any] = None + IS_FOREIGN: ClassVar[Any] = None + IS_INDEXED: ClassVar[Any] = None + IS_SORT: ClassVar[Any] = None + IS_DIST: ClassVar[Any] = None + IS_PINNED: ClassVar[Any] = None + PINNED_BY: ClassVar[Any] = None + PINNED_AT: ClassVar[Any] = None + PRECISION: ClassVar[Any] = None + DEFAULT_VALUE: ClassVar[Any] = None + IS_NULLABLE: ClassVar[Any] = None + NUMERIC_SCALE: ClassVar[Any] = None + MAX_LENGTH: ClassVar[Any] = None + VALIDATIONS: ClassVar[Any] = None + PARENT_COLUMN_QUALIFIED_NAME: ClassVar[Any] = None + PARENT_COLUMN_NAME: ClassVar[Any] = None + COLUMN_DISTINCT_VALUES_COUNT: ClassVar[Any] = None + COLUMN_DISTINCT_VALUES_COUNT_LONG: ClassVar[Any] = None + COLUMN_DISTINCT_VALUES_PERCENTAGE: ClassVar[Any] = None + COLUMN_HISTOGRAM: ClassVar[Any] = None + COLUMN_MAX: ClassVar[Any] = None + COLUMN_MIN: ClassVar[Any] = None + COLUMN_MEAN: ClassVar[Any] = None + COLUMN_SUM: ClassVar[Any] = None + COLUMN_MEDIAN: ClassVar[Any] = None + COLUMN_STANDARD_DEVIATION: ClassVar[Any] = None + COLUMN_UNIQUE_VALUES_COUNT: ClassVar[Any] = None + COLUMN_UNIQUE_VALUES_COUNT_LONG: ClassVar[Any] = None + COLUMN_AVERAGE: ClassVar[Any] = None + COLUMN_AVERAGE_LENGTH: ClassVar[Any] = None + COLUMN_DUPLICATE_VALUES_COUNT: ClassVar[Any] = None + COLUMN_DUPLICATE_VALUES_COUNT_LONG: ClassVar[Any] = None + COLUMN_MAXIMUM_STRING_LENGTH: ClassVar[Any] = None + COLUMN_MAXS: ClassVar[Any] = None + COLUMN_MINIMUM_STRING_LENGTH: ClassVar[Any] = None + COLUMN_MINS: ClassVar[Any] = None + COLUMN_MISSING_VALUES_COUNT: ClassVar[Any] = None + COLUMN_MISSING_VALUES_COUNT_LONG: ClassVar[Any] = None + COLUMN_MISSING_VALUES_PERCENTAGE: ClassVar[Any] = None + COLUMN_UNIQUENESS_PERCENTAGE: ClassVar[Any] = None + COLUMN_VARIANCE: ClassVar[Any] = None + COLUMN_TOP_VALUES: ClassVar[Any] = None + COLUMN_MAX_VALUE: ClassVar[Any] = None + COLUMN_MIN_VALUE: ClassVar[Any] = None + COLUMN_MEAN_VALUE: ClassVar[Any] = None + COLUMN_SUM_VALUE: ClassVar[Any] = None + COLUMN_MEDIAN_VALUE: ClassVar[Any] = None + COLUMN_STANDARD_DEVIATION_VALUE: ClassVar[Any] = None + COLUMN_AVERAGE_VALUE: ClassVar[Any] = None + COLUMN_VARIANCE_VALUE: ClassVar[Any] = None + COLUMN_AVERAGE_LENGTH_VALUE: ClassVar[Any] = None + COLUMN_DISTRIBUTION_HISTOGRAM: ClassVar[Any] = None + COLUMN_DEPTH_LEVEL: ClassVar[Any] = None + NOSQL_COLLECTION_NAME: ClassVar[Any] = None + NOSQL_COLLECTION_QUALIFIED_NAME: ClassVar[Any] = None + COLUMN_IS_MEASURE: ClassVar[Any] = None + COLUMN_MEASURE_TYPE: ClassVar[Any] = None + COLUMN_AI_INSIGHTS_IS_MEASURE: ClassVar[Any] = None + COLUMN_AI_INSIGHTS_MEASURE_TYPE: ClassVar[Any] = None + COLUMN_AI_INSIGHTS_IS_DIMENSION: ClassVar[Any] = None + COLUMN_AI_INSIGHTS_DIMENSION_TYPE: ClassVar[Any] = None + COLUMN_AI_INSIGHTS_FOREIGN_KEY_COLUMN_QUALIFIED_NAME: ClassVar[Any] = None + QUERY_COUNT: ClassVar[Any] = None + QUERY_USER_COUNT: ClassVar[Any] = None + QUERY_USER_MAP: ClassVar[Any] = None + QUERY_COUNT_UPDATED_AT: ClassVar[Any] = None + DATABASE_NAME: ClassVar[Any] = None + DATABASE_QUALIFIED_NAME: ClassVar[Any] = None + SCHEMA_NAME: ClassVar[Any] = None + SCHEMA_QUALIFIED_NAME: ClassVar[Any] = None + TABLE_NAME: ClassVar[Any] = None + TABLE_QUALIFIED_NAME: ClassVar[Any] = None + VIEW_NAME: ClassVar[Any] = None + VIEW_QUALIFIED_NAME: ClassVar[Any] = None + CALCULATION_VIEW_NAME: ClassVar[Any] = None + CALCULATION_VIEW_QUALIFIED_NAME: ClassVar[Any] = None + IS_PROFILED: ClassVar[Any] = None + LAST_PROFILED_AT: ClassVar[Any] = None + SQL_AI_MODEL_CONTEXT_QUALIFIED_NAME: ClassVar[Any] = None + SQL_IS_SECURE: ClassVar[Any] = None + SQL_HAS_AI_INSIGHTS: ClassVar[Any] = None + SQL_AI_INSIGHTS_LAST_ANALYZED_AT: ClassVar[Any] = None + SQL_AI_INSIGHTS_POPULAR_BUSINESS_QUESTION_COUNT: ClassVar[Any] = None + SQL_AI_INSIGHTS_POPULAR_JOIN_COUNT: ClassVar[Any] = None + SQL_AI_INSIGHTS_POPULAR_FILTER_COUNT: ClassVar[Any] = None + SQL_AI_INSIGHTS_RELATIONSHIP_COUNT: ClassVar[Any] = None + SQL_COALESCE_LAST_RUN_STATUS: ClassVar[Any] = None + SQL_COALESCE_NODE_STATUS: ClassVar[Any] = None + SQL_COALESCE_LAST_RUN_AT: ClassVar[Any] = None + SQL_COALESCE_NODE_TYPE: ClassVar[Any] = None + SQL_COALESCE_ENVIRONMENT_ID: ClassVar[Any] = None + SQL_COALESCE_ENVIRONMENT_NAME: ClassVar[Any] = None + SQL_COALESCE_PROJECT_ID: ClassVar[Any] = None + SQL_COALESCE_PROJECT_NAME: ClassVar[Any] = None + SQL_SHARE_QUALIFIED_NAMES: ClassVar[Any] = None + INPUT_TO_AIRFLOW_TASKS: ClassVar[Any] = None + OUTPUT_FROM_AIRFLOW_TASKS: ClassVar[Any] = None + ANOMALO_CHECKS: ClassVar[Any] = None + APPLICATION: ClassVar[Any] = None + APPLICATION_FIELD: ClassVar[Any] = None + CONTEXT_REPOSITORIES: ClassVar[Any] = None + COSMOS_MONGO_DB_COLLECTION: ClassVar[Any] = None + DATA_CONTRACT_LATEST: ClassVar[Any] = None + DATA_CONTRACT_LATEST_CERTIFIED: ClassVar[Any] = None + OUTPUT_PORT_DATA_PRODUCTS: ClassVar[Any] = None + INPUT_PORT_DATA_PRODUCTS: ClassVar[Any] = None + MODEL_IMPLEMENTED_ENTITIES: ClassVar[Any] = None + MODEL_IMPLEMENTED_ATTRIBUTES: ClassVar[Any] = None + METRICS: ClassVar[Any] = None + METRIC_TIMESTAMPS: ClassVar[Any] = None + DATA_QUALITY_METRIC_DIMENSIONS: ClassVar[Any] = None + DQ_BASE_DATASET_RULES: ClassVar[Any] = None + DQ_BASE_COLUMN_RULES: ClassVar[Any] = None + DQ_REFERENCE_DATASET_RULES: ClassVar[Any] = None + DQ_REFERENCE_COLUMN_RULES: ClassVar[Any] = None + DBT_MODELS: ClassVar[Any] = None + SQL_DBT_MODELS: ClassVar[Any] = None + DBT_TESTS: ClassVar[Any] = None + DBT_SOURCES: ClassVar[Any] = None + SQL_DBT_SOURCES: ClassVar[Any] = None + DBT_METRICS: ClassVar[Any] = None + DBT_MODEL_COLUMNS: ClassVar[Any] = None + COLUMN_DBT_MODEL_COLUMNS: ClassVar[Any] = None + DBT_SEED_ASSETS: ClassVar[Any] = None + GCP_DATAPLEX_ASPECT_TYPE_METADATA_ENTITIES: ClassVar[Any] = None + MEANINGS: ClassVar[Any] = None + KNOWLEDGE_LINKED_FILES: ClassVar[Any] = None + MONGO_DB_COLLECTION: ClassVar[Any] = None + MC_MONITORS: ClassVar[Any] = None + MC_INCIDENTS: ClassVar[Any] = None + PARTIAL_CHILD_FIELDS: ClassVar[Any] = None + PARTIAL_CHILD_OBJECTS: ClassVar[Any] = None + INPUT_TO_PROCESSES: ClassVar[Any] = None + OUTPUT_FROM_PROCESSES: ClassVar[Any] = None + USER_DEF_RELATIONSHIP_TO: ClassVar[Any] = None + USER_DEF_RELATIONSHIP_FROM: ClassVar[Any] = None + FILES: ClassVar[Any] = None + LINKS: ClassVar[Any] = None + README: ClassVar[Any] = None + TABLE: ClassVar[Any] = None + NESTED_COLUMNS: ClassVar[Any] = None + PARENT_COLUMN: ClassVar[Any] = None + TABLE_PARTITION: ClassVar[Any] = None + VIEW: ClassVar[Any] = None + CALCULATION_VIEW: ClassVar[Any] = None + MATERIALISED_VIEW: ClassVar[Any] = None + FOREIGN_KEY_TO: ClassVar[Any] = None + FOREIGN_KEY_FROM: ClassVar[Any] = None + QUERIES: ClassVar[Any] = None + SAP_ANALYTICS_CLOUD_MODEL: ClassVar[Any] = None + SCHEMA_REGISTRY_SUBJECTS: ClassVar[Any] = None + SNOWFLAKE_DYNAMIC_TABLE: ClassVar[Any] = None + SNOWFLAKE_SEMANTIC_LOGICAL_TABLES: ClassVar[Any] = None + SODA_CHECKS: ClassVar[Any] = None + INPUT_TO_SPARK_JOBS: ClassVar[Any] = None + OUTPUT_FROM_SPARK_JOBS: ClassVar[Any] = None + SQL_INSIGHT_OUTGOING_JOINS: ClassVar[Any] = None + SQL_INSIGHT_INCOMING_JOINS: ClassVar[Any] = None + SQL_INSIGHT_FILTERS: ClassVar[Any] = None + SQL_INSIGHT_BUSINESS_QUESTIONS: ClassVar[Any] = None + + sap_analytics_cloud_model_qualified_name: Union[str, None, UnsetType] = UNSET + """Unique name of the SAP Analytics Cloud model in which this column exists.""" + + sap_analytics_cloud_model_name: Union[str, None, UnsetType] = UNSET + """Simple name of the SAP Analytics Cloud model in which this column exists.""" + + sap_analytics_cloud_resource_id: Union[str, None, UnsetType] = UNSET + """Identifier of this asset in the SAP Analytics Cloud file repository. Stable across renames and used by the source APIs to address the resource.""" + + sap_analytics_cloud_object_id: Union[str, None, UnsetType] = UNSET + """Underlying object identifier reported by the SAP Analytics Cloud file repository for this asset.""" + + sap_analytics_cloud_repository_partition: Union[str, None, UnsetType] = UNSET + """Partition of the SAP Analytics Cloud file repository this asset lives in: PUBLIC for shared tenant content, SYSTEM for SAP-shipped content and SAP Analytics Cloud's own telemetry, USERS for the container holding per-user private areas, and PRIVATE for an individual user's own content. Reported by the source as folderType, and carried by every resource rather than only by folders.""" + + sap_analytics_cloud_workspace_id: Union[str, None, UnsetType] = UNSET + """Identifier of the SAP Analytics Cloud workspace that owns this asset.""" + + sap_analytics_cloud_workspace_name: Union[str, None, UnsetType] = UNSET + """Simple name of the SAP Analytics Cloud workspace that owns this asset.""" + + sap_analytics_cloud_parent_folder_qualified_name: Union[str, None, UnsetType] = UNSET + """Unique name of the SAP Analytics Cloud folder that directly contains this asset. Empty for a root-level folder and for a live model, neither of which is contained by a folder.""" + + sap_analytics_cloud_parent_folder_name: Union[str, None, UnsetType] = UNSET + """Simple name of the SAP Analytics Cloud folder that directly contains this asset. Empty for a root-level folder and for a live model, neither of which is contained by a folder.""" + + sap_technical_name: Union[str, None, UnsetType] = UNSET + """Technical identifier for SAP data objects, used for integration and internal reference.""" + + sap_logical_name: Union[str, None, UnsetType] = UNSET + """Logical, business-friendly identifier for SAP data objects, aligned with business terminology and concepts.""" + + sap_package_name: Union[str, None, UnsetType] = UNSET + """Name of the SAP package, representing a logical grouping of related SAP data objects.""" + + sap_component_name: Union[str, None, UnsetType] = UNSET + """Name of the SAP component, representing a specific functional area in SAP.""" + + sap_data_type: Union[str, None, UnsetType] = UNSET + """SAP-specific data types.""" + + sap_field_count: Union[int, None, UnsetType] = UNSET + """Represents the total number of fields, columns, or child assets present in a given SAP asset.""" + + sap_field_order: Union[int, None, UnsetType] = UNSET + """Indicates the sequential position of a field, column, or child asset within its parent SAP asset, starting from 1.""" + + catalog_dataset_guid: Union[str, None, UnsetType] = UNSET + """Unique identifier of the dataset this asset belongs to.""" + + data_type: Union[str, None, UnsetType] = UNSET + """Data type of values in this column.""" + + sub_data_type: Union[str, None, UnsetType] = UNSET + """Sub-data type of this column.""" + + column_compression: Union[str, None, UnsetType] = UNSET + """Compression type of this column.""" + + column_encoding: Union[str, None, UnsetType] = UNSET + """Encoding type of this column.""" + + raw_data_type_definition: Union[str, None, UnsetType] = UNSET + """Raw data type definition of this column.""" + + order: Union[int, None, UnsetType] = UNSET + """Order (position) in which this column appears in the table (starting at 1).""" + + nested_column_order: Union[str, None, UnsetType] = UNSET + """Order (position) in which this column appears in the nested Column (nest level starts at 1).""" + + nested_column_count: Union[int, None, UnsetType] = UNSET + """Number of columns nested within this (STRUCT or NESTED) column.""" + + column_hierarchy: Union[List[Dict[str, str]], None, UnsetType] = UNSET + """List of top-level upstream nested columns.""" + + is_partition: Union[bool, None, UnsetType] = UNSET + """Whether this column is a partition column (true) or not (false).""" + + partition_order: Union[int, None, UnsetType] = UNSET + """Order (position) of this partition column in the table.""" + + is_clustered: Union[bool, None, UnsetType] = UNSET + """Whether this column is a clustered column (true) or not (false).""" + + is_primary: Union[bool, None, UnsetType] = UNSET + """When true, this column is the primary key for the table.""" + + is_foreign: Union[bool, None, UnsetType] = UNSET + """When true, this column is a foreign key to another table. NOTE: this must be true when using the foreignKeyTo relationship to specify columns that refer to this column as a foreign key.""" + + is_indexed: Union[bool, None, UnsetType] = UNSET + """When true, this column is indexed in the database.""" + + is_sort: Union[bool, None, UnsetType] = UNSET + """Whether this column is a sort column (true) or not (false).""" + + is_dist: Union[bool, None, UnsetType] = UNSET + """Whether this column is a distribution column (true) or not (false).""" + + is_pinned: Union[bool, None, UnsetType] = UNSET + """Whether this column is pinned (true) or not (false).""" + + pinned_by: Union[str, None, UnsetType] = UNSET + """User who pinned this column.""" + + pinned_at: Union[int, None, UnsetType] = UNSET + """Time (epoch) at which this column was pinned, in milliseconds.""" + + precision: Union[int, None, UnsetType] = UNSET + """Total number of digits allowed, when the dataType is numeric.""" + + default_value: Union[str, None, UnsetType] = UNSET + """Default value for this column.""" + + is_nullable: Union[bool, None, UnsetType] = UNSET + """When true, the values in this column can be null.""" + + numeric_scale: Union[float, None, UnsetType] = UNSET + """Number of digits allowed to the right of the decimal point.""" + + max_length: Union[int, None, UnsetType] = UNSET + """Maximum length of a value in this column.""" + + validations: Union[Dict[str, str], None, UnsetType] = UNSET + """Validations for this column.""" + + parent_column_qualified_name: Union[str, None, UnsetType] = UNSET + """Unique name of the column this column is nested within, for STRUCT and NESTED columns.""" + + parent_column_name: Union[str, None, UnsetType] = UNSET + """Simple name of the column this column is nested within, for STRUCT and NESTED columns.""" + + column_distinct_values_count: Union[int, None, UnsetType] = UNSET + """Number of rows that contain distinct values.""" + + column_distinct_values_count_long: Union[int, None, UnsetType] = UNSET + """Number of rows that contain distinct values.""" + + column_distinct_values_percentage: Union[float, None, UnsetType] = UNSET + """Percentage of rows in a column that contain distinct values.""" + + column_histogram: Union[Dict[str, Any], None, UnsetType] = UNSET + """List of values in a histogram that represents the contents of this column.""" + + column_max: Union[float, None, UnsetType] = UNSET + """Greatest value in a numeric column.""" + + column_min: Union[float, None, UnsetType] = UNSET + """Least value in a numeric column.""" + + column_mean: Union[float, None, UnsetType] = UNSET + """Arithmetic mean of the values in a numeric column.""" + + column_sum: Union[float, None, UnsetType] = UNSET + """Calculated sum of the values in a numeric column.""" + + column_median: Union[float, None, UnsetType] = UNSET + """Calculated median of the values in a numeric column.""" + + column_standard_deviation: Union[float, None, UnsetType] = UNSET + """Calculated standard deviation of the values in a numeric column.""" + + column_unique_values_count: Union[int, None, UnsetType] = UNSET + """Number of rows in which a value in this column appears only once.""" + + column_unique_values_count_long: Union[int, None, UnsetType] = UNSET + """Number of rows in which a value in this column appears only once.""" + + column_average: Union[float, None, UnsetType] = UNSET + """Average value in this column.""" + + column_average_length: Union[float, None, UnsetType] = UNSET + """Average length of values in a string column.""" + + column_duplicate_values_count: Union[int, None, UnsetType] = UNSET + """Number of rows that contain duplicate values.""" + + column_duplicate_values_count_long: Union[int, None, UnsetType] = UNSET + """Number of rows that contain duplicate values.""" + + column_maximum_string_length: Union[int, None, UnsetType] = UNSET + """Length of the longest value in a string column.""" + + column_maxs: Union[List[str], None, UnsetType] = UNSET + """List of the greatest values in a column.""" + + column_minimum_string_length: Union[int, None, UnsetType] = UNSET + """Length of the shortest value in a string column.""" + + column_mins: Union[List[str], None, UnsetType] = UNSET + """List of the least values in a column.""" + + column_missing_values_count: Union[int, None, UnsetType] = UNSET + """Number of rows in a column that do not contain content.""" + + column_missing_values_count_long: Union[int, None, UnsetType] = UNSET + """Number of rows in a column that do not contain content.""" + + column_missing_values_percentage: Union[float, None, UnsetType] = UNSET + """Percentage of rows in a column that do not contain content.""" + + column_uniqueness_percentage: Union[float, None, UnsetType] = UNSET + """Ratio indicating how unique data in this column is: 0 indicates that all values are the same, 100 indicates that all values in this column are unique.""" + + column_variance: Union[float, None, UnsetType] = UNSET + """Calculated variance of the values in a numeric column.""" + + column_top_values: Union[List[Dict[str, Any]], None, UnsetType] = UNSET + """List of top values in this column.""" + + column_max_value: Union[float, None, UnsetType] = UNSET + """Greatest value in a numeric column.""" + + column_min_value: Union[float, None, UnsetType] = UNSET + """Least value in a numeric column.""" + + column_mean_value: Union[float, None, UnsetType] = UNSET + """Arithmetic mean of the values in a numeric column.""" + + column_sum_value: Union[float, None, UnsetType] = UNSET + """Calculated sum of the values in a numeric column.""" + + column_median_value: Union[float, None, UnsetType] = UNSET + """Calculated median of the values in a numeric column.""" + + column_standard_deviation_value: Union[float, None, UnsetType] = UNSET + """Calculated standard deviation of the values in a numeric column.""" + + column_average_value: Union[float, None, UnsetType] = UNSET + """Average value in this column.""" + + column_variance_value: Union[float, None, UnsetType] = UNSET + """Calculated variance of the values in a numeric column.""" + + column_average_length_value: Union[float, None, UnsetType] = UNSET + """Average length of values in a string column.""" + + column_distribution_histogram: Union[Dict[str, Any], None, UnsetType] = UNSET + """Detailed information representing a histogram of values for a column.""" + + column_depth_level: Union[int, None, UnsetType] = UNSET + """Level of nesting of this column, used for STRUCT and NESTED columns.""" + + nosql_collection_name: Union[str, None, UnsetType] = UNSET + """Simple name of the cosmos/mongo collection in which this SQL asset (column) exists, or empty if it does not exist within a cosmos/mongo collection.""" + + nosql_collection_qualified_name: Union[str, None, UnsetType] = UNSET + """Unique name of the cosmos/mongo collection in which this SQL asset (column) exists, or empty if it does not exist within a cosmos/mongo collection.""" + + column_is_measure: Union[bool, None, UnsetType] = UNSET + """When true, this column is of type measure/calculated.""" + + column_measure_type: Union[str, None, UnsetType] = UNSET + """The type of measure/calculated column this is, eg: base, calculated, derived.""" + + column_ai_insights_is_measure: Union[bool, None, UnsetType] = UNSET + """When true, this column is identified as a measure/calculated column by AI analysis of query patterns.""" + + column_ai_insights_measure_type: Union[str, None, UnsetType] = UNSET + """Type of measure/calculated column as classified by AI analysis, for example: base, calculated, derived.""" + + column_ai_insights_is_dimension: Union[bool, None, UnsetType] = UNSET + """When true, this column is identified as a dimension by AI analysis of query patterns.""" + + column_ai_insights_dimension_type: Union[str, None, UnsetType] = UNSET + """Type of dimension as classified by AI analysis, for example: time, categorical, geographic.""" + + column_ai_insights_foreign_key_column_qualified_name: Union[str, None, UnsetType] = UNSET + """Qualified name of the column in another table that this column likely references as a foreign key, inferred by AI analysis of query patterns.""" + + query_count: Union[int, None, UnsetType] = UNSET + """Number of times this asset has been queried.""" + + query_user_count: Union[int, None, UnsetType] = UNSET + """Number of unique users who have queried this asset.""" + + query_user_map: Union[Dict[str, int], None, UnsetType] = UNSET + """Map of unique users who have queried this asset to the number of times they have queried it.""" + + query_count_updated_at: Union[int, None, UnsetType] = UNSET + """Time (epoch) at which the query count was last updated, in milliseconds.""" + + database_name: Union[str, None, UnsetType] = UNSET + """Simple name of the database in which this SQL asset exists, or empty if it does not exist within a database.""" + + database_qualified_name: Union[str, None, UnsetType] = UNSET + """Unique name of the database in which this SQL asset exists, or empty if it does not exist within a database.""" + + schema_name: Union[str, None, UnsetType] = UNSET + """Simple name of the schema in which this SQL asset exists, or empty if it does not exist within a schema.""" + + schema_qualified_name: Union[str, None, UnsetType] = UNSET + """Unique name of the schema in which this SQL asset exists, or empty if it does not exist within a schema.""" + + table_name: Union[str, None, UnsetType] = UNSET + """Simple name of the table in which this SQL asset exists, or empty if it does not exist within a table.""" + + table_qualified_name: Union[str, None, UnsetType] = UNSET + """Unique name of the table in which this SQL asset exists, or empty if it does not exist within a table.""" + + view_name: Union[str, None, UnsetType] = UNSET + """Simple name of the view in which this SQL asset exists, or empty if it does not exist within a view.""" + + view_qualified_name: Union[str, None, UnsetType] = UNSET + """Unique name of the view in which this SQL asset exists, or empty if it does not exist within a view.""" + + calculation_view_name: Union[str, None, UnsetType] = UNSET + """Simple name of the calculation view in which this SQL asset exists, or empty if it does not exist within a calculation view.""" + + calculation_view_qualified_name: Union[str, None, UnsetType] = UNSET + """Unique name of the calculation view in which this SQL asset exists, or empty if it does not exist within a calculation view.""" + + is_profiled: Union[bool, None, UnsetType] = UNSET + """Whether this asset has been profiled (true) or not (false).""" + + last_profiled_at: Union[int, None, UnsetType] = UNSET + """Time (epoch) at which this asset was last profiled, in milliseconds.""" + + sql_ai_model_context_qualified_name: Union[str, None, UnsetType] = msgspec.field(default=UNSET, name="sqlAIModelContextQualifiedName") + """Unique name of the context in which the model versions exist, or empty if it does not exist within an AI model context.""" + + sql_is_secure: Union[bool, None, UnsetType] = UNSET + """Whether this asset is secure (true) or not (false).""" + + sql_has_ai_insights: Union[bool, None, UnsetType] = UNSET + """Whether this asset has any AI insights data available.""" + + sql_ai_insights_last_analyzed_at: Union[int, None, UnsetType] = UNSET + """Time (epoch) at which this asset was last analyzed for AI insights, in milliseconds.""" + + sql_ai_insights_popular_business_question_count: Union[int, None, UnsetType] = UNSET + """Number of popular business questions associated with this asset.""" + + sql_ai_insights_popular_join_count: Union[int, None, UnsetType] = UNSET + """Number of popular join patterns associated with this asset.""" + + sql_ai_insights_popular_filter_count: Union[int, None, UnsetType] = UNSET + """Number of popular filter patterns associated with this asset.""" + + sql_ai_insights_relationship_count: Union[int, None, UnsetType] = UNSET + """Number of relationship insights associated with this asset.""" + + sql_coalesce_last_run_status: Union[str, None, UnsetType] = UNSET + """Status of the Coalesce run. One of: success, failure, cancelled, or skipped.""" + + sql_coalesce_node_status: Union[str, None, UnsetType] = UNSET + """Status of the Coalesce node for a given run.""" + + sql_coalesce_last_run_at: Union[int, None, UnsetType] = UNSET + """Time (epoch) at which the Coalesce node that materialized this asset last ran, in milliseconds.""" + + sql_coalesce_node_type: Union[str, None, UnsetType] = UNSET + """Type of the Coalesce node.""" + + sql_coalesce_environment_id: Union[str, None, UnsetType] = UNSET + """Identifier of the Coalesce environment.""" + + sql_coalesce_environment_name: Union[str, None, UnsetType] = UNSET + """Name of the Coalesce environment.""" + + sql_coalesce_project_id: Union[str, None, UnsetType] = UNSET + """Identifier of the Coalesce project.""" + + sql_coalesce_project_name: Union[str, None, UnsetType] = UNSET + """Name of the Coalesce project.""" + + sql_share_qualified_names: Union[List[str], None, UnsetType] = UNSET + """Qualified names of data shares this asset is granted to.""" + + input_to_airflow_tasks: Union[List[RelatedAirflowTask], None, UnsetType] = UNSET + """Tasks to which this asset provides input.""" + + output_from_airflow_tasks: Union[List[RelatedAirflowTask], None, UnsetType] = UNSET + """Tasks from which this asset is output.""" + + anomalo_checks: Union[List[RelatedAnomaloCheck], None, UnsetType] = UNSET + """Checks that run on this asset.""" + + application: Union[RelatedApplication, None, UnsetType] = UNSET + """Application owning the Asset.""" + + application_field: Union[RelatedApplicationField, None, UnsetType] = UNSET + """ApplicationField owning the Asset.""" + + context_repositories: Union[List[RelatedContextRepository], None, UnsetType] = UNSET + """Context repositories that use this asset as input.""" + + cosmos_mongo_db_collection: Union[RelatedCosmosMongoDBCollection, None, UnsetType] = msgspec.field(default=UNSET, name="cosmosMongoDBCollection") + """Cosmos collection in which this column exists.""" + + data_contract_latest: Union[RelatedDataContract, None, UnsetType] = UNSET + """Latest version of the data contract (in any status) for this asset.""" + + data_contract_latest_certified: Union[RelatedDataContract, None, UnsetType] = UNSET + """Latest certified version of the data contract for this asset.""" + + output_port_data_products: Union[List[RelatedDataProduct], None, UnsetType] = UNSET + """Data products for which this asset is an output port.""" + + input_port_data_products: Union[List[RelatedDataProduct], None, UnsetType] = UNSET + """Data products for which this asset is an input port.""" + + model_implemented_entities: Union[List[RelatedModelEntity], None, UnsetType] = UNSET + """Entities implemented by this asset.""" + + model_implemented_attributes: Union[List[RelatedModelAttribute], None, UnsetType] = UNSET + """Attributes implemented by this asset.""" + + metrics: Union[List[RelatedMetric], None, UnsetType] = UNSET + """""" + + metric_timestamps: Union[List[RelatedMetric], None, UnsetType] = UNSET + """""" + + data_quality_metric_dimensions: Union[List[RelatedMetric], None, UnsetType] = UNSET + """""" + + dq_base_dataset_rules: Union[List[RelatedDataQualityRule], None, UnsetType] = UNSET + """Rules that are applied on this dataset.""" + + dq_base_column_rules: Union[List[RelatedDataQualityRule], None, UnsetType] = UNSET + """Rules that are applied on this column.""" + + dq_reference_dataset_rules: Union[List[RelatedDataQualityRule], None, UnsetType] = UNSET + """Rules where this dataset is referenced.""" + + dq_reference_column_rules: Union[List[RelatedDataQualityRule], None, UnsetType] = UNSET + """Rules where this column is referenced.""" + + dbt_models: Union[List[RelatedDbtModel], None, UnsetType] = UNSET + """(Deprecated) Model containing the assets.""" + + sql_dbt_models: Union[List[RelatedDbtModel], None, UnsetType] = UNSET + """Assets related to the model.""" + + dbt_tests: Union[List[RelatedDbtTest], None, UnsetType] = UNSET + """Tests related to this asset.""" + + dbt_sources: Union[List[RelatedDbtSource], None, UnsetType] = UNSET + """Source containing the assets.""" + + sql_dbt_sources: Union[List[RelatedDbtSource], None, UnsetType] = msgspec.field(default=UNSET, name="sqlDBTSources") + """Sources related to this asset.""" + + dbt_metrics: Union[List[RelatedDbtMetric], None, UnsetType] = UNSET + """Metrics related to this model column.""" + + dbt_model_columns: Union[List[RelatedDbtModelColumn], None, UnsetType] = UNSET + """(Deprecated) Model columns related to this model column.""" + + column_dbt_model_columns: Union[List[RelatedDbtModelColumn], None, UnsetType] = UNSET + """Model columns related to this column.""" + + dbt_seed_assets: Union[List[RelatedDbtSeed], None, UnsetType] = UNSET + """DBT seeds that materialize the SQL asset.""" + + gcp_dataplex_aspect_type_metadata_entities: Union[List[RelatedGCPDataplexAspectType], None, UnsetType] = UNSET + """Dataplex entries (assets) that have aspects of this Aspect Type attached.""" + + meanings: Union[List[RelatedAtlasGlossaryTerm], None, UnsetType] = UNSET + """Glossary terms that are linked to this asset.""" + + knowledge_linked_files: Union[List[RelatedKnowledgeFile], None, UnsetType] = UNSET + """Knowledge files linked to this asset.""" + + mongo_db_collection: Union[RelatedMongoDBCollection, None, UnsetType] = msgspec.field(default=UNSET, name="mongoDBCollection") + """Collection in which the columns exist.""" + + mc_monitors: Union[List[RelatedMCMonitor], None, UnsetType] = UNSET + """Monitors that observe this asset.""" + + mc_incidents: Union[List[RelatedMCIncident], None, UnsetType] = UNSET + """""" + + partial_child_fields: Union[List[RelatedPartialField], None, UnsetType] = UNSET + """Partial fields contained in the asset.""" + + partial_child_objects: Union[List[RelatedPartialObject], None, UnsetType] = UNSET + """Partial objects contained in the asset.""" + + input_to_processes: Union[List[RelatedProcess], None, UnsetType] = UNSET + """Processes to which this asset provides input.""" + + output_from_processes: Union[List[RelatedProcess], None, UnsetType] = UNSET + """Processes from which this asset is produced as output.""" + + user_def_relationship_to: Union[List[RelatedReferenceable], None, UnsetType] = UNSET + """""" + + user_def_relationship_from: Union[List[RelatedReferenceable], None, UnsetType] = UNSET + """""" + + files: Union[List[RelatedFile], None, UnsetType] = UNSET + """""" + + links: Union[List[RelatedLink], None, UnsetType] = UNSET + """Links that are attached to this asset.""" + + readme: Union[RelatedReadme, None, UnsetType] = UNSET + """README that is linked to this asset.""" + + table: Union[RelatedTable, None, UnsetType] = UNSET + """Table in which this column exists.""" + + nested_columns: Union[List[RelatedColumn], None, UnsetType] = UNSET + """Nested columns that exist within this column.""" + + parent_column: Union[RelatedColumn, None, UnsetType] = UNSET + """Column in which this sub-column is nested.""" + + table_partition: Union[RelatedTablePartition, None, UnsetType] = UNSET + """Table partition that contains this column.""" + + view: Union[RelatedView, None, UnsetType] = UNSET + """View in which this column exists.""" + + calculation_view: Union[RelatedCalculationView, None, UnsetType] = UNSET + """Calculate view in which this column exists.""" + + materialised_view: Union[RelatedMaterialisedView, None, UnsetType] = UNSET + """Materialized view in which this column exists.""" + + foreign_key_to: Union[List[RelatedColumn], None, UnsetType] = UNSET + """Columns that use this column as a foreign key.""" + + foreign_key_from: Union[RelatedColumn, None, UnsetType] = UNSET + """Column this foreign key column refers to.""" + + queries: Union[List[RelatedQuery], None, UnsetType] = UNSET + """Queries that access this column.""" + + sap_analytics_cloud_model: Union[RelatedSapAnalyticsCloudModel, None, UnsetType] = UNSET + """Model in which this column is defined.""" + + schema_registry_subjects: Union[List[RelatedSchemaRegistrySubject], None, UnsetType] = UNSET + """Schema registry subjects associated with this asset.""" + + snowflake_dynamic_table: Union[RelatedSnowflakeDynamicTable, None, UnsetType] = UNSET + """Snowflake dynamic table in which this column exists.""" + + snowflake_semantic_logical_tables: Union[List[RelatedSnowflakeSemanticLogicalTable], None, UnsetType] = UNSET + """Semantic logical tables that reference this physical table or view.""" + + soda_checks: Union[List[RelatedSodaCheck], None, UnsetType] = UNSET + """""" + + input_to_spark_jobs: Union[List[RelatedSparkJob], None, UnsetType] = UNSET + """""" + + output_from_spark_jobs: Union[List[RelatedSparkJob], None, UnsetType] = UNSET + """""" + + sql_insight_outgoing_joins: Union[List[RelatedSqlInsightJoin], None, UnsetType] = UNSET + """Join insights where this asset is the source dataset.""" + + sql_insight_incoming_joins: Union[List[RelatedSqlInsightJoin], None, UnsetType] = UNSET + """Join insights where this asset is the joined dataset.""" + + sql_insight_filters: Union[List[RelatedSqlInsightFilter], None, UnsetType] = UNSET + """Filter insights for this column.""" + + sql_insight_business_questions: Union[List[RelatedSqlInsightBusinessQuestion], None, UnsetType] = UNSET + """Business question insights for this SQL asset.""" + + def __post_init__(self) -> None: + self.type_name = "SapAnalyticsCloudColumn" + + # ========================================================================= + # SDK Methods + # ========================================================================= + + _QUALIFIED_NAME_PATTERN: ClassVar[re.Pattern] = re.compile( + r"^.+/[^/]+/[^/]+/[^/]+/[^/]+$" + ) + + def validate(self, for_creation: bool = False) -> None: + """ + Dry-run validation of this SapAnalyticsCloudColumn instance. + + Checks that required fields (type_name, name, qualified_name) are set. + When ``for_creation=True``, also checks hierarchy-specific fields + (parent references, denormalized attributes) needed to create this asset. + + This is purely opt-in and is NOT called by any serde path — only by + explicit user invocation (e.g., validating JSONL before sending to Atlan). + + Args: + for_creation: If True, also validate fields required for asset creation. + + Raises: + ValueError: If any required fields are missing or invalid. + """ + errors: list[str] = [] + if self.type_name is UNSET: + errors.append("type_name is required") + if self.name is UNSET: + errors.append("name is required") + if self.qualified_name is UNSET or self.qualified_name is None: + errors.append("qualified_name is required") + elif not self._QUALIFIED_NAME_PATTERN.match(self.qualified_name): + errors.append( + f"qualified_name '{self.qualified_name}' does not match expected " + f"pattern: {self._QUALIFIED_NAME_PATTERN.pattern}" + ) + if for_creation: + if self.connection_qualified_name is UNSET: + errors.append("connection_qualified_name is required for creation") + if self.sap_analytics_cloud_model is UNSET: + errors.append("sap_analytics_cloud_model is required for creation") + if self.sap_analytics_cloud_model_name is UNSET: + errors.append("sap_analytics_cloud_model_name is required for creation") + if self.sap_analytics_cloud_model_qualified_name is UNSET: + errors.append("sap_analytics_cloud_model_qualified_name is required for creation") + if self.order is UNSET: + errors.append("order is required for creation") + if errors: + raise ValueError(f"SapAnalyticsCloudColumn validation failed: {errors}") + + def minimize(self) -> "SapAnalyticsCloudColumn": + """ + Return a minimal copy of this SapAnalyticsCloudColumn with only updater-required fields. + + Calls :meth:`validate` first to ensure the instance is valid, then + returns a new SapAnalyticsCloudColumn with only the fields needed for an update + (qualified_name, name, and any type-specific additional fields). + + Returns: + A new SapAnalyticsCloudColumn instance with only the minimum required fields. + """ + self.validate() + return SapAnalyticsCloudColumn(qualified_name=self.qualified_name, name=self.name) + + def relate(self) -> "RelatedSapAnalyticsCloudColumn": + """ + Create a :class:`RelatedSapAnalyticsCloudColumn` reference from this instance. + + Returns a lightweight reference suitable for use in relationship + attributes. Prefers ``guid`` if set, otherwise falls back to + ``qualified_name``. + + Returns: + A RelatedSapAnalyticsCloudColumn reference to this asset. + """ + if self.guid is not UNSET: + return RelatedSapAnalyticsCloudColumn(guid=self.guid) + return RelatedSapAnalyticsCloudColumn(qualified_name=self.qualified_name) + + # ========================================================================= + # Optimized Serialization Methods (override Asset base class) + # ========================================================================= + + def to_json(self, nested: bool = True, serde: Serde | None = None) -> str: + """ + Convert to JSON string using optimized nested struct serialization. + + Args: + nested: If True (default), use nested API format. If False, use flat format. + serde: Optional Serde instance for encoder reuse. Uses shared singleton if None. + + Returns: + JSON string representation + """ + if serde is None: + serde = get_serde() + if nested: + return self.to_nested_bytes(serde).decode("utf-8") + else: + return serde.encode(self).decode("utf-8") + + def to_nested_bytes(self, serde: Serde | None = None) -> bytes: + """Serialize to Atlas nested-format JSON bytes (pure msgspec, no dict intermediate).""" + if serde is None: + serde = get_serde() + return _sap_analytics_cloud_column_to_nested_bytes(self, serde) + + @staticmethod + def from_json(json_data: str | bytes, serde: Serde | None = None) -> SapAnalyticsCloudColumn: + """ + Create from JSON string or bytes using optimized nested struct deserialization. + + Args: + json_data: JSON string or bytes to deserialize + serde: Optional Serde instance for decoder reuse. Uses shared singleton if None. + + Returns: + SapAnalyticsCloudColumn instance + """ + if isinstance(json_data, str): + json_data = json_data.encode("utf-8") + if serde is None: + serde = get_serde() + return _sap_analytics_cloud_column_from_nested_bytes(json_data, serde) + + +# ============================================================================= +# NESTED FORMAT CLASSES +# ============================================================================= + +class SapAnalyticsCloudColumnAttributes(AssetAttributes): + """SapAnalyticsCloudColumn-specific attributes for nested API format.""" + + sap_analytics_cloud_model_qualified_name: Union[str, None, UnsetType] = UNSET + """Unique name of the SAP Analytics Cloud model in which this column exists.""" + + sap_analytics_cloud_model_name: Union[str, None, UnsetType] = UNSET + """Simple name of the SAP Analytics Cloud model in which this column exists.""" + + sap_analytics_cloud_resource_id: Union[str, None, UnsetType] = UNSET + """Identifier of this asset in the SAP Analytics Cloud file repository. Stable across renames and used by the source APIs to address the resource.""" + + sap_analytics_cloud_object_id: Union[str, None, UnsetType] = UNSET + """Underlying object identifier reported by the SAP Analytics Cloud file repository for this asset.""" + + sap_analytics_cloud_repository_partition: Union[str, None, UnsetType] = UNSET + """Partition of the SAP Analytics Cloud file repository this asset lives in: PUBLIC for shared tenant content, SYSTEM for SAP-shipped content and SAP Analytics Cloud's own telemetry, USERS for the container holding per-user private areas, and PRIVATE for an individual user's own content. Reported by the source as folderType, and carried by every resource rather than only by folders.""" + + sap_analytics_cloud_workspace_id: Union[str, None, UnsetType] = UNSET + """Identifier of the SAP Analytics Cloud workspace that owns this asset.""" + + sap_analytics_cloud_workspace_name: Union[str, None, UnsetType] = UNSET + """Simple name of the SAP Analytics Cloud workspace that owns this asset.""" + + sap_analytics_cloud_parent_folder_qualified_name: Union[str, None, UnsetType] = UNSET + """Unique name of the SAP Analytics Cloud folder that directly contains this asset. Empty for a root-level folder and for a live model, neither of which is contained by a folder.""" + + sap_analytics_cloud_parent_folder_name: Union[str, None, UnsetType] = UNSET + """Simple name of the SAP Analytics Cloud folder that directly contains this asset. Empty for a root-level folder and for a live model, neither of which is contained by a folder.""" + + sap_technical_name: Union[str, None, UnsetType] = UNSET + """Technical identifier for SAP data objects, used for integration and internal reference.""" + + sap_logical_name: Union[str, None, UnsetType] = UNSET + """Logical, business-friendly identifier for SAP data objects, aligned with business terminology and concepts.""" + + sap_package_name: Union[str, None, UnsetType] = UNSET + """Name of the SAP package, representing a logical grouping of related SAP data objects.""" + + sap_component_name: Union[str, None, UnsetType] = UNSET + """Name of the SAP component, representing a specific functional area in SAP.""" + + sap_data_type: Union[str, None, UnsetType] = UNSET + """SAP-specific data types.""" + + sap_field_count: Union[int, None, UnsetType] = UNSET + """Represents the total number of fields, columns, or child assets present in a given SAP asset.""" + + sap_field_order: Union[int, None, UnsetType] = UNSET + """Indicates the sequential position of a field, column, or child asset within its parent SAP asset, starting from 1.""" + + catalog_dataset_guid: Union[str, None, UnsetType] = UNSET + """Unique identifier of the dataset this asset belongs to.""" + + data_type: Union[str, None, UnsetType] = UNSET + """Data type of values in this column.""" + + sub_data_type: Union[str, None, UnsetType] = UNSET + """Sub-data type of this column.""" + + column_compression: Union[str, None, UnsetType] = UNSET + """Compression type of this column.""" + + column_encoding: Union[str, None, UnsetType] = UNSET + """Encoding type of this column.""" + + raw_data_type_definition: Union[str, None, UnsetType] = UNSET + """Raw data type definition of this column.""" + + order: Union[int, None, UnsetType] = UNSET + """Order (position) in which this column appears in the table (starting at 1).""" + + nested_column_order: Union[str, None, UnsetType] = UNSET + """Order (position) in which this column appears in the nested Column (nest level starts at 1).""" + + nested_column_count: Union[int, None, UnsetType] = UNSET + """Number of columns nested within this (STRUCT or NESTED) column.""" + + column_hierarchy: Union[List[Dict[str, str]], None, UnsetType] = UNSET + """List of top-level upstream nested columns.""" + + is_partition: Union[bool, None, UnsetType] = UNSET + """Whether this column is a partition column (true) or not (false).""" + + partition_order: Union[int, None, UnsetType] = UNSET + """Order (position) of this partition column in the table.""" + + is_clustered: Union[bool, None, UnsetType] = UNSET + """Whether this column is a clustered column (true) or not (false).""" + + is_primary: Union[bool, None, UnsetType] = UNSET + """When true, this column is the primary key for the table.""" + + is_foreign: Union[bool, None, UnsetType] = UNSET + """When true, this column is a foreign key to another table. NOTE: this must be true when using the foreignKeyTo relationship to specify columns that refer to this column as a foreign key.""" + + is_indexed: Union[bool, None, UnsetType] = UNSET + """When true, this column is indexed in the database.""" + + is_sort: Union[bool, None, UnsetType] = UNSET + """Whether this column is a sort column (true) or not (false).""" + + is_dist: Union[bool, None, UnsetType] = UNSET + """Whether this column is a distribution column (true) or not (false).""" + + is_pinned: Union[bool, None, UnsetType] = UNSET + """Whether this column is pinned (true) or not (false).""" + + pinned_by: Union[str, None, UnsetType] = UNSET + """User who pinned this column.""" + + pinned_at: Union[int, None, UnsetType] = UNSET + """Time (epoch) at which this column was pinned, in milliseconds.""" + + precision: Union[int, None, UnsetType] = UNSET + """Total number of digits allowed, when the dataType is numeric.""" + + default_value: Union[str, None, UnsetType] = UNSET + """Default value for this column.""" + + is_nullable: Union[bool, None, UnsetType] = UNSET + """When true, the values in this column can be null.""" + + numeric_scale: Union[float, None, UnsetType] = UNSET + """Number of digits allowed to the right of the decimal point.""" + + max_length: Union[int, None, UnsetType] = UNSET + """Maximum length of a value in this column.""" + + validations: Union[Dict[str, str], None, UnsetType] = UNSET + """Validations for this column.""" + + parent_column_qualified_name: Union[str, None, UnsetType] = UNSET + """Unique name of the column this column is nested within, for STRUCT and NESTED columns.""" + + parent_column_name: Union[str, None, UnsetType] = UNSET + """Simple name of the column this column is nested within, for STRUCT and NESTED columns.""" + + column_distinct_values_count: Union[int, None, UnsetType] = UNSET + """Number of rows that contain distinct values.""" + + column_distinct_values_count_long: Union[int, None, UnsetType] = UNSET + """Number of rows that contain distinct values.""" + + column_distinct_values_percentage: Union[float, None, UnsetType] = UNSET + """Percentage of rows in a column that contain distinct values.""" + + column_histogram: Union[Dict[str, Any], None, UnsetType] = UNSET + """List of values in a histogram that represents the contents of this column.""" + + column_max: Union[float, None, UnsetType] = UNSET + """Greatest value in a numeric column.""" + + column_min: Union[float, None, UnsetType] = UNSET + """Least value in a numeric column.""" + + column_mean: Union[float, None, UnsetType] = UNSET + """Arithmetic mean of the values in a numeric column.""" + + column_sum: Union[float, None, UnsetType] = UNSET + """Calculated sum of the values in a numeric column.""" + + column_median: Union[float, None, UnsetType] = UNSET + """Calculated median of the values in a numeric column.""" + + column_standard_deviation: Union[float, None, UnsetType] = UNSET + """Calculated standard deviation of the values in a numeric column.""" + + column_unique_values_count: Union[int, None, UnsetType] = UNSET + """Number of rows in which a value in this column appears only once.""" + + column_unique_values_count_long: Union[int, None, UnsetType] = UNSET + """Number of rows in which a value in this column appears only once.""" + + column_average: Union[float, None, UnsetType] = UNSET + """Average value in this column.""" + + column_average_length: Union[float, None, UnsetType] = UNSET + """Average length of values in a string column.""" + + column_duplicate_values_count: Union[int, None, UnsetType] = UNSET + """Number of rows that contain duplicate values.""" + + column_duplicate_values_count_long: Union[int, None, UnsetType] = UNSET + """Number of rows that contain duplicate values.""" + + column_maximum_string_length: Union[int, None, UnsetType] = UNSET + """Length of the longest value in a string column.""" + + column_maxs: Union[List[str], None, UnsetType] = UNSET + """List of the greatest values in a column.""" + + column_minimum_string_length: Union[int, None, UnsetType] = UNSET + """Length of the shortest value in a string column.""" + + column_mins: Union[List[str], None, UnsetType] = UNSET + """List of the least values in a column.""" + + column_missing_values_count: Union[int, None, UnsetType] = UNSET + """Number of rows in a column that do not contain content.""" + + column_missing_values_count_long: Union[int, None, UnsetType] = UNSET + """Number of rows in a column that do not contain content.""" + + column_missing_values_percentage: Union[float, None, UnsetType] = UNSET + """Percentage of rows in a column that do not contain content.""" + + column_uniqueness_percentage: Union[float, None, UnsetType] = UNSET + """Ratio indicating how unique data in this column is: 0 indicates that all values are the same, 100 indicates that all values in this column are unique.""" + + column_variance: Union[float, None, UnsetType] = UNSET + """Calculated variance of the values in a numeric column.""" + + column_top_values: Union[List[Dict[str, Any]], None, UnsetType] = UNSET + """List of top values in this column.""" + + column_max_value: Union[float, None, UnsetType] = UNSET + """Greatest value in a numeric column.""" + + column_min_value: Union[float, None, UnsetType] = UNSET + """Least value in a numeric column.""" + + column_mean_value: Union[float, None, UnsetType] = UNSET + """Arithmetic mean of the values in a numeric column.""" + + column_sum_value: Union[float, None, UnsetType] = UNSET + """Calculated sum of the values in a numeric column.""" + + column_median_value: Union[float, None, UnsetType] = UNSET + """Calculated median of the values in a numeric column.""" + + column_standard_deviation_value: Union[float, None, UnsetType] = UNSET + """Calculated standard deviation of the values in a numeric column.""" + + column_average_value: Union[float, None, UnsetType] = UNSET + """Average value in this column.""" + + column_variance_value: Union[float, None, UnsetType] = UNSET + """Calculated variance of the values in a numeric column.""" + + column_average_length_value: Union[float, None, UnsetType] = UNSET + """Average length of values in a string column.""" + + column_distribution_histogram: Union[Dict[str, Any], None, UnsetType] = UNSET + """Detailed information representing a histogram of values for a column.""" + + column_depth_level: Union[int, None, UnsetType] = UNSET + """Level of nesting of this column, used for STRUCT and NESTED columns.""" + + nosql_collection_name: Union[str, None, UnsetType] = UNSET + """Simple name of the cosmos/mongo collection in which this SQL asset (column) exists, or empty if it does not exist within a cosmos/mongo collection.""" + + nosql_collection_qualified_name: Union[str, None, UnsetType] = UNSET + """Unique name of the cosmos/mongo collection in which this SQL asset (column) exists, or empty if it does not exist within a cosmos/mongo collection.""" + + column_is_measure: Union[bool, None, UnsetType] = UNSET + """When true, this column is of type measure/calculated.""" + + column_measure_type: Union[str, None, UnsetType] = UNSET + """The type of measure/calculated column this is, eg: base, calculated, derived.""" + + column_ai_insights_is_measure: Union[bool, None, UnsetType] = UNSET + """When true, this column is identified as a measure/calculated column by AI analysis of query patterns.""" + + column_ai_insights_measure_type: Union[str, None, UnsetType] = UNSET + """Type of measure/calculated column as classified by AI analysis, for example: base, calculated, derived.""" + + column_ai_insights_is_dimension: Union[bool, None, UnsetType] = UNSET + """When true, this column is identified as a dimension by AI analysis of query patterns.""" + + column_ai_insights_dimension_type: Union[str, None, UnsetType] = UNSET + """Type of dimension as classified by AI analysis, for example: time, categorical, geographic.""" + + column_ai_insights_foreign_key_column_qualified_name: Union[str, None, UnsetType] = UNSET + """Qualified name of the column in another table that this column likely references as a foreign key, inferred by AI analysis of query patterns.""" + + query_count: Union[int, None, UnsetType] = UNSET + """Number of times this asset has been queried.""" + + query_user_count: Union[int, None, UnsetType] = UNSET + """Number of unique users who have queried this asset.""" + + query_user_map: Union[Dict[str, int], None, UnsetType] = UNSET + """Map of unique users who have queried this asset to the number of times they have queried it.""" + + query_count_updated_at: Union[int, None, UnsetType] = UNSET + """Time (epoch) at which the query count was last updated, in milliseconds.""" + + database_name: Union[str, None, UnsetType] = UNSET + """Simple name of the database in which this SQL asset exists, or empty if it does not exist within a database.""" + + database_qualified_name: Union[str, None, UnsetType] = UNSET + """Unique name of the database in which this SQL asset exists, or empty if it does not exist within a database.""" + + schema_name: Union[str, None, UnsetType] = UNSET + """Simple name of the schema in which this SQL asset exists, or empty if it does not exist within a schema.""" + + schema_qualified_name: Union[str, None, UnsetType] = UNSET + """Unique name of the schema in which this SQL asset exists, or empty if it does not exist within a schema.""" + + table_name: Union[str, None, UnsetType] = UNSET + """Simple name of the table in which this SQL asset exists, or empty if it does not exist within a table.""" + + table_qualified_name: Union[str, None, UnsetType] = UNSET + """Unique name of the table in which this SQL asset exists, or empty if it does not exist within a table.""" + + view_name: Union[str, None, UnsetType] = UNSET + """Simple name of the view in which this SQL asset exists, or empty if it does not exist within a view.""" + + view_qualified_name: Union[str, None, UnsetType] = UNSET + """Unique name of the view in which this SQL asset exists, or empty if it does not exist within a view.""" + + calculation_view_name: Union[str, None, UnsetType] = UNSET + """Simple name of the calculation view in which this SQL asset exists, or empty if it does not exist within a calculation view.""" + + calculation_view_qualified_name: Union[str, None, UnsetType] = UNSET + """Unique name of the calculation view in which this SQL asset exists, or empty if it does not exist within a calculation view.""" + + is_profiled: Union[bool, None, UnsetType] = UNSET + """Whether this asset has been profiled (true) or not (false).""" + + last_profiled_at: Union[int, None, UnsetType] = UNSET + """Time (epoch) at which this asset was last profiled, in milliseconds.""" + + sql_ai_model_context_qualified_name: Union[str, None, UnsetType] = msgspec.field(default=UNSET, name="sqlAIModelContextQualifiedName") + """Unique name of the context in which the model versions exist, or empty if it does not exist within an AI model context.""" + + sql_is_secure: Union[bool, None, UnsetType] = UNSET + """Whether this asset is secure (true) or not (false).""" + + sql_has_ai_insights: Union[bool, None, UnsetType] = UNSET + """Whether this asset has any AI insights data available.""" + + sql_ai_insights_last_analyzed_at: Union[int, None, UnsetType] = UNSET + """Time (epoch) at which this asset was last analyzed for AI insights, in milliseconds.""" + + sql_ai_insights_popular_business_question_count: Union[int, None, UnsetType] = UNSET + """Number of popular business questions associated with this asset.""" + + sql_ai_insights_popular_join_count: Union[int, None, UnsetType] = UNSET + """Number of popular join patterns associated with this asset.""" + + sql_ai_insights_popular_filter_count: Union[int, None, UnsetType] = UNSET + """Number of popular filter patterns associated with this asset.""" + + sql_ai_insights_relationship_count: Union[int, None, UnsetType] = UNSET + """Number of relationship insights associated with this asset.""" + + sql_coalesce_last_run_status: Union[str, None, UnsetType] = UNSET + """Status of the Coalesce run. One of: success, failure, cancelled, or skipped.""" + + sql_coalesce_node_status: Union[str, None, UnsetType] = UNSET + """Status of the Coalesce node for a given run.""" + + sql_coalesce_last_run_at: Union[int, None, UnsetType] = UNSET + """Time (epoch) at which the Coalesce node that materialized this asset last ran, in milliseconds.""" + + sql_coalesce_node_type: Union[str, None, UnsetType] = UNSET + """Type of the Coalesce node.""" + + sql_coalesce_environment_id: Union[str, None, UnsetType] = UNSET + """Identifier of the Coalesce environment.""" + + sql_coalesce_environment_name: Union[str, None, UnsetType] = UNSET + """Name of the Coalesce environment.""" + + sql_coalesce_project_id: Union[str, None, UnsetType] = UNSET + """Identifier of the Coalesce project.""" + + sql_coalesce_project_name: Union[str, None, UnsetType] = UNSET + """Name of the Coalesce project.""" + + sql_share_qualified_names: Union[List[str], None, UnsetType] = UNSET + """Qualified names of data shares this asset is granted to.""" + +class SapAnalyticsCloudColumnRelationshipAttributes(AssetRelationshipAttributes): + """SapAnalyticsCloudColumn-specific relationship attributes for nested API format.""" + + input_to_airflow_tasks: Union[List[RelatedAirflowTask], None, UnsetType] = UNSET + """Tasks to which this asset provides input.""" + + output_from_airflow_tasks: Union[List[RelatedAirflowTask], None, UnsetType] = UNSET + """Tasks from which this asset is output.""" + + anomalo_checks: Union[List[RelatedAnomaloCheck], None, UnsetType] = UNSET + """Checks that run on this asset.""" + + application: Union[RelatedApplication, None, UnsetType] = UNSET + """Application owning the Asset.""" + + application_field: Union[RelatedApplicationField, None, UnsetType] = UNSET + """ApplicationField owning the Asset.""" + + context_repositories: Union[List[RelatedContextRepository], None, UnsetType] = UNSET + """Context repositories that use this asset as input.""" + + cosmos_mongo_db_collection: Union[RelatedCosmosMongoDBCollection, None, UnsetType] = msgspec.field(default=UNSET, name="cosmosMongoDBCollection") + """Cosmos collection in which this column exists.""" + + data_contract_latest: Union[RelatedDataContract, None, UnsetType] = UNSET + """Latest version of the data contract (in any status) for this asset.""" + + data_contract_latest_certified: Union[RelatedDataContract, None, UnsetType] = UNSET + """Latest certified version of the data contract for this asset.""" + + output_port_data_products: Union[List[RelatedDataProduct], None, UnsetType] = UNSET + """Data products for which this asset is an output port.""" + + input_port_data_products: Union[List[RelatedDataProduct], None, UnsetType] = UNSET + """Data products for which this asset is an input port.""" + + model_implemented_entities: Union[List[RelatedModelEntity], None, UnsetType] = UNSET + """Entities implemented by this asset.""" + + model_implemented_attributes: Union[List[RelatedModelAttribute], None, UnsetType] = UNSET + """Attributes implemented by this asset.""" + + metrics: Union[List[RelatedMetric], None, UnsetType] = UNSET + """""" + + metric_timestamps: Union[List[RelatedMetric], None, UnsetType] = UNSET + """""" + + data_quality_metric_dimensions: Union[List[RelatedMetric], None, UnsetType] = UNSET + """""" + + dq_base_dataset_rules: Union[List[RelatedDataQualityRule], None, UnsetType] = UNSET + """Rules that are applied on this dataset.""" + + dq_base_column_rules: Union[List[RelatedDataQualityRule], None, UnsetType] = UNSET + """Rules that are applied on this column.""" + + dq_reference_dataset_rules: Union[List[RelatedDataQualityRule], None, UnsetType] = UNSET + """Rules where this dataset is referenced.""" + + dq_reference_column_rules: Union[List[RelatedDataQualityRule], None, UnsetType] = UNSET + """Rules where this column is referenced.""" + + dbt_models: Union[List[RelatedDbtModel], None, UnsetType] = UNSET + """(Deprecated) Model containing the assets.""" + + sql_dbt_models: Union[List[RelatedDbtModel], None, UnsetType] = UNSET + """Assets related to the model.""" + + dbt_tests: Union[List[RelatedDbtTest], None, UnsetType] = UNSET + """Tests related to this asset.""" + + dbt_sources: Union[List[RelatedDbtSource], None, UnsetType] = UNSET + """Source containing the assets.""" + + sql_dbt_sources: Union[List[RelatedDbtSource], None, UnsetType] = msgspec.field(default=UNSET, name="sqlDBTSources") + """Sources related to this asset.""" + + dbt_metrics: Union[List[RelatedDbtMetric], None, UnsetType] = UNSET + """Metrics related to this model column.""" + + dbt_model_columns: Union[List[RelatedDbtModelColumn], None, UnsetType] = UNSET + """(Deprecated) Model columns related to this model column.""" + + column_dbt_model_columns: Union[List[RelatedDbtModelColumn], None, UnsetType] = UNSET + """Model columns related to this column.""" + + dbt_seed_assets: Union[List[RelatedDbtSeed], None, UnsetType] = UNSET + """DBT seeds that materialize the SQL asset.""" + + gcp_dataplex_aspect_type_metadata_entities: Union[List[RelatedGCPDataplexAspectType], None, UnsetType] = UNSET + """Dataplex entries (assets) that have aspects of this Aspect Type attached.""" + + meanings: Union[List[RelatedAtlasGlossaryTerm], None, UnsetType] = UNSET + """Glossary terms that are linked to this asset.""" + + knowledge_linked_files: Union[List[RelatedKnowledgeFile], None, UnsetType] = UNSET + """Knowledge files linked to this asset.""" + + mongo_db_collection: Union[RelatedMongoDBCollection, None, UnsetType] = msgspec.field(default=UNSET, name="mongoDBCollection") + """Collection in which the columns exist.""" + + mc_monitors: Union[List[RelatedMCMonitor], None, UnsetType] = UNSET + """Monitors that observe this asset.""" + + mc_incidents: Union[List[RelatedMCIncident], None, UnsetType] = UNSET + """""" + + partial_child_fields: Union[List[RelatedPartialField], None, UnsetType] = UNSET + """Partial fields contained in the asset.""" + + partial_child_objects: Union[List[RelatedPartialObject], None, UnsetType] = UNSET + """Partial objects contained in the asset.""" + + input_to_processes: Union[List[RelatedProcess], None, UnsetType] = UNSET + """Processes to which this asset provides input.""" + + output_from_processes: Union[List[RelatedProcess], None, UnsetType] = UNSET + """Processes from which this asset is produced as output.""" + + user_def_relationship_to: Union[List[RelatedReferenceable], None, UnsetType] = UNSET + """""" + + user_def_relationship_from: Union[List[RelatedReferenceable], None, UnsetType] = UNSET + """""" + + files: Union[List[RelatedFile], None, UnsetType] = UNSET + """""" + + links: Union[List[RelatedLink], None, UnsetType] = UNSET + """Links that are attached to this asset.""" + + readme: Union[RelatedReadme, None, UnsetType] = UNSET + """README that is linked to this asset.""" + + table: Union[RelatedTable, None, UnsetType] = UNSET + """Table in which this column exists.""" + + nested_columns: Union[List[RelatedColumn], None, UnsetType] = UNSET + """Nested columns that exist within this column.""" + + parent_column: Union[RelatedColumn, None, UnsetType] = UNSET + """Column in which this sub-column is nested.""" + + table_partition: Union[RelatedTablePartition, None, UnsetType] = UNSET + """Table partition that contains this column.""" + + view: Union[RelatedView, None, UnsetType] = UNSET + """View in which this column exists.""" + + calculation_view: Union[RelatedCalculationView, None, UnsetType] = UNSET + """Calculate view in which this column exists.""" + + materialised_view: Union[RelatedMaterialisedView, None, UnsetType] = UNSET + """Materialized view in which this column exists.""" + + foreign_key_to: Union[List[RelatedColumn], None, UnsetType] = UNSET + """Columns that use this column as a foreign key.""" + + foreign_key_from: Union[RelatedColumn, None, UnsetType] = UNSET + """Column this foreign key column refers to.""" + + queries: Union[List[RelatedQuery], None, UnsetType] = UNSET + """Queries that access this column.""" + + sap_analytics_cloud_model: Union[RelatedSapAnalyticsCloudModel, None, UnsetType] = UNSET + """Model in which this column is defined.""" + + schema_registry_subjects: Union[List[RelatedSchemaRegistrySubject], None, UnsetType] = UNSET + """Schema registry subjects associated with this asset.""" + + snowflake_dynamic_table: Union[RelatedSnowflakeDynamicTable, None, UnsetType] = UNSET + """Snowflake dynamic table in which this column exists.""" + + snowflake_semantic_logical_tables: Union[List[RelatedSnowflakeSemanticLogicalTable], None, UnsetType] = UNSET + """Semantic logical tables that reference this physical table or view.""" + + soda_checks: Union[List[RelatedSodaCheck], None, UnsetType] = UNSET + """""" + + input_to_spark_jobs: Union[List[RelatedSparkJob], None, UnsetType] = UNSET + """""" + + output_from_spark_jobs: Union[List[RelatedSparkJob], None, UnsetType] = UNSET + """""" + + sql_insight_outgoing_joins: Union[List[RelatedSqlInsightJoin], None, UnsetType] = UNSET + """Join insights where this asset is the source dataset.""" + + sql_insight_incoming_joins: Union[List[RelatedSqlInsightJoin], None, UnsetType] = UNSET + """Join insights where this asset is the joined dataset.""" + + sql_insight_filters: Union[List[RelatedSqlInsightFilter], None, UnsetType] = UNSET + """Filter insights for this column.""" + + sql_insight_business_questions: Union[List[RelatedSqlInsightBusinessQuestion], None, UnsetType] = UNSET + """Business question insights for this SQL asset.""" + +class SapAnalyticsCloudColumnNested(AssetNested): + """SapAnalyticsCloudColumn in nested API format for high-performance serialization.""" + + attributes: Union[SapAnalyticsCloudColumnAttributes, UnsetType] = UNSET + relationship_attributes: Union[SapAnalyticsCloudColumnRelationshipAttributes, UnsetType] = UNSET + append_relationship_attributes: Union[SapAnalyticsCloudColumnRelationshipAttributes, UnsetType] = UNSET + remove_relationship_attributes: Union[SapAnalyticsCloudColumnRelationshipAttributes, UnsetType] = UNSET + +# ============================================================================= +# CONVERSION HELPERS & CONSTANTS +# ============================================================================= + +_SAP_ANALYTICS_CLOUD_COLUMN_REL_FIELDS: List[str] = [ + *_ASSET_REL_FIELDS, + "input_to_airflow_tasks", + "output_from_airflow_tasks", + "anomalo_checks", + "application", + "application_field", + "context_repositories", + "cosmos_mongo_db_collection", + "data_contract_latest", + "data_contract_latest_certified", + "output_port_data_products", + "input_port_data_products", + "model_implemented_entities", + "model_implemented_attributes", + "metrics", + "metric_timestamps", + "data_quality_metric_dimensions", + "dq_base_dataset_rules", + "dq_base_column_rules", + "dq_reference_dataset_rules", + "dq_reference_column_rules", + "dbt_models", + "sql_dbt_models", + "dbt_tests", + "dbt_sources", + "sql_dbt_sources", + "dbt_metrics", + "dbt_model_columns", + "column_dbt_model_columns", + "dbt_seed_assets", + "gcp_dataplex_aspect_type_metadata_entities", + "meanings", + "knowledge_linked_files", + "mongo_db_collection", + "mc_monitors", + "mc_incidents", + "partial_child_fields", + "partial_child_objects", + "input_to_processes", + "output_from_processes", + "user_def_relationship_to", + "user_def_relationship_from", + "files", + "links", + "readme", + "table", + "nested_columns", + "parent_column", + "table_partition", + "view", + "calculation_view", + "materialised_view", + "foreign_key_to", + "foreign_key_from", + "queries", + "sap_analytics_cloud_model", + "schema_registry_subjects", + "snowflake_dynamic_table", + "snowflake_semantic_logical_tables", + "soda_checks", + "input_to_spark_jobs", + "output_from_spark_jobs", + "sql_insight_outgoing_joins", + "sql_insight_incoming_joins", + "sql_insight_filters", + "sql_insight_business_questions", +] + +def _populate_sap_analytics_cloud_column_attrs(attrs: SapAnalyticsCloudColumnAttributes, obj: SapAnalyticsCloudColumn) -> None: + """Populate SapAnalyticsCloudColumn-specific attributes on the attrs struct.""" + _populate_asset_attrs(attrs, obj) + attrs.sap_analytics_cloud_model_qualified_name = obj.sap_analytics_cloud_model_qualified_name + attrs.sap_analytics_cloud_model_name = obj.sap_analytics_cloud_model_name + attrs.sap_analytics_cloud_resource_id = obj.sap_analytics_cloud_resource_id + attrs.sap_analytics_cloud_object_id = obj.sap_analytics_cloud_object_id + attrs.sap_analytics_cloud_repository_partition = obj.sap_analytics_cloud_repository_partition + attrs.sap_analytics_cloud_workspace_id = obj.sap_analytics_cloud_workspace_id + attrs.sap_analytics_cloud_workspace_name = obj.sap_analytics_cloud_workspace_name + attrs.sap_analytics_cloud_parent_folder_qualified_name = obj.sap_analytics_cloud_parent_folder_qualified_name + attrs.sap_analytics_cloud_parent_folder_name = obj.sap_analytics_cloud_parent_folder_name + attrs.sap_technical_name = obj.sap_technical_name + attrs.sap_logical_name = obj.sap_logical_name + attrs.sap_package_name = obj.sap_package_name + attrs.sap_component_name = obj.sap_component_name + attrs.sap_data_type = obj.sap_data_type + attrs.sap_field_count = obj.sap_field_count + attrs.sap_field_order = obj.sap_field_order + attrs.catalog_dataset_guid = obj.catalog_dataset_guid + attrs.data_type = obj.data_type + attrs.sub_data_type = obj.sub_data_type + attrs.column_compression = obj.column_compression + attrs.column_encoding = obj.column_encoding + attrs.raw_data_type_definition = obj.raw_data_type_definition + attrs.order = obj.order + attrs.nested_column_order = obj.nested_column_order + attrs.nested_column_count = obj.nested_column_count + attrs.column_hierarchy = obj.column_hierarchy + attrs.is_partition = obj.is_partition + attrs.partition_order = obj.partition_order + attrs.is_clustered = obj.is_clustered + attrs.is_primary = obj.is_primary + attrs.is_foreign = obj.is_foreign + attrs.is_indexed = obj.is_indexed + attrs.is_sort = obj.is_sort + attrs.is_dist = obj.is_dist + attrs.is_pinned = obj.is_pinned + attrs.pinned_by = obj.pinned_by + attrs.pinned_at = obj.pinned_at + attrs.precision = obj.precision + attrs.default_value = obj.default_value + attrs.is_nullable = obj.is_nullable + attrs.numeric_scale = obj.numeric_scale + attrs.max_length = obj.max_length + attrs.validations = obj.validations + attrs.parent_column_qualified_name = obj.parent_column_qualified_name + attrs.parent_column_name = obj.parent_column_name + attrs.column_distinct_values_count = obj.column_distinct_values_count + attrs.column_distinct_values_count_long = obj.column_distinct_values_count_long + attrs.column_distinct_values_percentage = obj.column_distinct_values_percentage + attrs.column_histogram = obj.column_histogram + attrs.column_max = obj.column_max + attrs.column_min = obj.column_min + attrs.column_mean = obj.column_mean + attrs.column_sum = obj.column_sum + attrs.column_median = obj.column_median + attrs.column_standard_deviation = obj.column_standard_deviation + attrs.column_unique_values_count = obj.column_unique_values_count + attrs.column_unique_values_count_long = obj.column_unique_values_count_long + attrs.column_average = obj.column_average + attrs.column_average_length = obj.column_average_length + attrs.column_duplicate_values_count = obj.column_duplicate_values_count + attrs.column_duplicate_values_count_long = obj.column_duplicate_values_count_long + attrs.column_maximum_string_length = obj.column_maximum_string_length + attrs.column_maxs = obj.column_maxs + attrs.column_minimum_string_length = obj.column_minimum_string_length + attrs.column_mins = obj.column_mins + attrs.column_missing_values_count = obj.column_missing_values_count + attrs.column_missing_values_count_long = obj.column_missing_values_count_long + attrs.column_missing_values_percentage = obj.column_missing_values_percentage + attrs.column_uniqueness_percentage = obj.column_uniqueness_percentage + attrs.column_variance = obj.column_variance + attrs.column_top_values = obj.column_top_values + attrs.column_max_value = obj.column_max_value + attrs.column_min_value = obj.column_min_value + attrs.column_mean_value = obj.column_mean_value + attrs.column_sum_value = obj.column_sum_value + attrs.column_median_value = obj.column_median_value + attrs.column_standard_deviation_value = obj.column_standard_deviation_value + attrs.column_average_value = obj.column_average_value + attrs.column_variance_value = obj.column_variance_value + attrs.column_average_length_value = obj.column_average_length_value + attrs.column_distribution_histogram = obj.column_distribution_histogram + attrs.column_depth_level = obj.column_depth_level + attrs.nosql_collection_name = obj.nosql_collection_name + attrs.nosql_collection_qualified_name = obj.nosql_collection_qualified_name + attrs.column_is_measure = obj.column_is_measure + attrs.column_measure_type = obj.column_measure_type + attrs.column_ai_insights_is_measure = obj.column_ai_insights_is_measure + attrs.column_ai_insights_measure_type = obj.column_ai_insights_measure_type + attrs.column_ai_insights_is_dimension = obj.column_ai_insights_is_dimension + attrs.column_ai_insights_dimension_type = obj.column_ai_insights_dimension_type + attrs.column_ai_insights_foreign_key_column_qualified_name = obj.column_ai_insights_foreign_key_column_qualified_name + attrs.query_count = obj.query_count + attrs.query_user_count = obj.query_user_count + attrs.query_user_map = obj.query_user_map + attrs.query_count_updated_at = obj.query_count_updated_at + attrs.database_name = obj.database_name + attrs.database_qualified_name = obj.database_qualified_name + attrs.schema_name = obj.schema_name + attrs.schema_qualified_name = obj.schema_qualified_name + attrs.table_name = obj.table_name + attrs.table_qualified_name = obj.table_qualified_name + attrs.view_name = obj.view_name + attrs.view_qualified_name = obj.view_qualified_name + attrs.calculation_view_name = obj.calculation_view_name + attrs.calculation_view_qualified_name = obj.calculation_view_qualified_name + attrs.is_profiled = obj.is_profiled + attrs.last_profiled_at = obj.last_profiled_at + attrs.sql_ai_model_context_qualified_name = obj.sql_ai_model_context_qualified_name + attrs.sql_is_secure = obj.sql_is_secure + attrs.sql_has_ai_insights = obj.sql_has_ai_insights + attrs.sql_ai_insights_last_analyzed_at = obj.sql_ai_insights_last_analyzed_at + attrs.sql_ai_insights_popular_business_question_count = obj.sql_ai_insights_popular_business_question_count + attrs.sql_ai_insights_popular_join_count = obj.sql_ai_insights_popular_join_count + attrs.sql_ai_insights_popular_filter_count = obj.sql_ai_insights_popular_filter_count + attrs.sql_ai_insights_relationship_count = obj.sql_ai_insights_relationship_count + attrs.sql_coalesce_last_run_status = obj.sql_coalesce_last_run_status + attrs.sql_coalesce_node_status = obj.sql_coalesce_node_status + attrs.sql_coalesce_last_run_at = obj.sql_coalesce_last_run_at + attrs.sql_coalesce_node_type = obj.sql_coalesce_node_type + attrs.sql_coalesce_environment_id = obj.sql_coalesce_environment_id + attrs.sql_coalesce_environment_name = obj.sql_coalesce_environment_name + attrs.sql_coalesce_project_id = obj.sql_coalesce_project_id + attrs.sql_coalesce_project_name = obj.sql_coalesce_project_name + attrs.sql_share_qualified_names = obj.sql_share_qualified_names + +def _extract_sap_analytics_cloud_column_attrs(attrs: SapAnalyticsCloudColumnAttributes) -> dict: + """Extract all SapAnalyticsCloudColumn attributes from the attrs struct into a flat dict.""" + result = _extract_asset_attrs(attrs) + result["sap_analytics_cloud_model_qualified_name"] = attrs.sap_analytics_cloud_model_qualified_name + result["sap_analytics_cloud_model_name"] = attrs.sap_analytics_cloud_model_name + result["sap_analytics_cloud_resource_id"] = attrs.sap_analytics_cloud_resource_id + result["sap_analytics_cloud_object_id"] = attrs.sap_analytics_cloud_object_id + result["sap_analytics_cloud_repository_partition"] = attrs.sap_analytics_cloud_repository_partition + result["sap_analytics_cloud_workspace_id"] = attrs.sap_analytics_cloud_workspace_id + result["sap_analytics_cloud_workspace_name"] = attrs.sap_analytics_cloud_workspace_name + result["sap_analytics_cloud_parent_folder_qualified_name"] = attrs.sap_analytics_cloud_parent_folder_qualified_name + result["sap_analytics_cloud_parent_folder_name"] = attrs.sap_analytics_cloud_parent_folder_name + result["sap_technical_name"] = attrs.sap_technical_name + result["sap_logical_name"] = attrs.sap_logical_name + result["sap_package_name"] = attrs.sap_package_name + result["sap_component_name"] = attrs.sap_component_name + result["sap_data_type"] = attrs.sap_data_type + result["sap_field_count"] = attrs.sap_field_count + result["sap_field_order"] = attrs.sap_field_order + result["catalog_dataset_guid"] = attrs.catalog_dataset_guid + result["data_type"] = attrs.data_type + result["sub_data_type"] = attrs.sub_data_type + result["column_compression"] = attrs.column_compression + result["column_encoding"] = attrs.column_encoding + result["raw_data_type_definition"] = attrs.raw_data_type_definition + result["order"] = attrs.order + result["nested_column_order"] = attrs.nested_column_order + result["nested_column_count"] = attrs.nested_column_count + result["column_hierarchy"] = attrs.column_hierarchy + result["is_partition"] = attrs.is_partition + result["partition_order"] = attrs.partition_order + result["is_clustered"] = attrs.is_clustered + result["is_primary"] = attrs.is_primary + result["is_foreign"] = attrs.is_foreign + result["is_indexed"] = attrs.is_indexed + result["is_sort"] = attrs.is_sort + result["is_dist"] = attrs.is_dist + result["is_pinned"] = attrs.is_pinned + result["pinned_by"] = attrs.pinned_by + result["pinned_at"] = attrs.pinned_at + result["precision"] = attrs.precision + result["default_value"] = attrs.default_value + result["is_nullable"] = attrs.is_nullable + result["numeric_scale"] = attrs.numeric_scale + result["max_length"] = attrs.max_length + result["validations"] = attrs.validations + result["parent_column_qualified_name"] = attrs.parent_column_qualified_name + result["parent_column_name"] = attrs.parent_column_name + result["column_distinct_values_count"] = attrs.column_distinct_values_count + result["column_distinct_values_count_long"] = attrs.column_distinct_values_count_long + result["column_distinct_values_percentage"] = attrs.column_distinct_values_percentage + result["column_histogram"] = attrs.column_histogram + result["column_max"] = attrs.column_max + result["column_min"] = attrs.column_min + result["column_mean"] = attrs.column_mean + result["column_sum"] = attrs.column_sum + result["column_median"] = attrs.column_median + result["column_standard_deviation"] = attrs.column_standard_deviation + result["column_unique_values_count"] = attrs.column_unique_values_count + result["column_unique_values_count_long"] = attrs.column_unique_values_count_long + result["column_average"] = attrs.column_average + result["column_average_length"] = attrs.column_average_length + result["column_duplicate_values_count"] = attrs.column_duplicate_values_count + result["column_duplicate_values_count_long"] = attrs.column_duplicate_values_count_long + result["column_maximum_string_length"] = attrs.column_maximum_string_length + result["column_maxs"] = attrs.column_maxs + result["column_minimum_string_length"] = attrs.column_minimum_string_length + result["column_mins"] = attrs.column_mins + result["column_missing_values_count"] = attrs.column_missing_values_count + result["column_missing_values_count_long"] = attrs.column_missing_values_count_long + result["column_missing_values_percentage"] = attrs.column_missing_values_percentage + result["column_uniqueness_percentage"] = attrs.column_uniqueness_percentage + result["column_variance"] = attrs.column_variance + result["column_top_values"] = attrs.column_top_values + result["column_max_value"] = attrs.column_max_value + result["column_min_value"] = attrs.column_min_value + result["column_mean_value"] = attrs.column_mean_value + result["column_sum_value"] = attrs.column_sum_value + result["column_median_value"] = attrs.column_median_value + result["column_standard_deviation_value"] = attrs.column_standard_deviation_value + result["column_average_value"] = attrs.column_average_value + result["column_variance_value"] = attrs.column_variance_value + result["column_average_length_value"] = attrs.column_average_length_value + result["column_distribution_histogram"] = attrs.column_distribution_histogram + result["column_depth_level"] = attrs.column_depth_level + result["nosql_collection_name"] = attrs.nosql_collection_name + result["nosql_collection_qualified_name"] = attrs.nosql_collection_qualified_name + result["column_is_measure"] = attrs.column_is_measure + result["column_measure_type"] = attrs.column_measure_type + result["column_ai_insights_is_measure"] = attrs.column_ai_insights_is_measure + result["column_ai_insights_measure_type"] = attrs.column_ai_insights_measure_type + result["column_ai_insights_is_dimension"] = attrs.column_ai_insights_is_dimension + result["column_ai_insights_dimension_type"] = attrs.column_ai_insights_dimension_type + result["column_ai_insights_foreign_key_column_qualified_name"] = attrs.column_ai_insights_foreign_key_column_qualified_name + result["query_count"] = attrs.query_count + result["query_user_count"] = attrs.query_user_count + result["query_user_map"] = attrs.query_user_map + result["query_count_updated_at"] = attrs.query_count_updated_at + result["database_name"] = attrs.database_name + result["database_qualified_name"] = attrs.database_qualified_name + result["schema_name"] = attrs.schema_name + result["schema_qualified_name"] = attrs.schema_qualified_name + result["table_name"] = attrs.table_name + result["table_qualified_name"] = attrs.table_qualified_name + result["view_name"] = attrs.view_name + result["view_qualified_name"] = attrs.view_qualified_name + result["calculation_view_name"] = attrs.calculation_view_name + result["calculation_view_qualified_name"] = attrs.calculation_view_qualified_name + result["is_profiled"] = attrs.is_profiled + result["last_profiled_at"] = attrs.last_profiled_at + result["sql_ai_model_context_qualified_name"] = attrs.sql_ai_model_context_qualified_name + result["sql_is_secure"] = attrs.sql_is_secure + result["sql_has_ai_insights"] = attrs.sql_has_ai_insights + result["sql_ai_insights_last_analyzed_at"] = attrs.sql_ai_insights_last_analyzed_at + result["sql_ai_insights_popular_business_question_count"] = attrs.sql_ai_insights_popular_business_question_count + result["sql_ai_insights_popular_join_count"] = attrs.sql_ai_insights_popular_join_count + result["sql_ai_insights_popular_filter_count"] = attrs.sql_ai_insights_popular_filter_count + result["sql_ai_insights_relationship_count"] = attrs.sql_ai_insights_relationship_count + result["sql_coalesce_last_run_status"] = attrs.sql_coalesce_last_run_status + result["sql_coalesce_node_status"] = attrs.sql_coalesce_node_status + result["sql_coalesce_last_run_at"] = attrs.sql_coalesce_last_run_at + result["sql_coalesce_node_type"] = attrs.sql_coalesce_node_type + result["sql_coalesce_environment_id"] = attrs.sql_coalesce_environment_id + result["sql_coalesce_environment_name"] = attrs.sql_coalesce_environment_name + result["sql_coalesce_project_id"] = attrs.sql_coalesce_project_id + result["sql_coalesce_project_name"] = attrs.sql_coalesce_project_name + result["sql_share_qualified_names"] = attrs.sql_share_qualified_names + return result + +# ============================================================================= +# CONVERSION FUNCTIONS +# ============================================================================= + + +def _sap_analytics_cloud_column_to_nested(sap_analytics_cloud_column: SapAnalyticsCloudColumn) -> SapAnalyticsCloudColumnNested: + """Convert flat SapAnalyticsCloudColumn to nested format.""" + attrs = SapAnalyticsCloudColumnAttributes() + _populate_sap_analytics_cloud_column_attrs(attrs, sap_analytics_cloud_column) + # Categorize relationships by save semantic (REPLACE, APPEND, REMOVE) + replace_rels, append_rels, remove_rels = categorize_relationships( + sap_analytics_cloud_column, _SAP_ANALYTICS_CLOUD_COLUMN_REL_FIELDS, SapAnalyticsCloudColumnRelationshipAttributes + ) + return SapAnalyticsCloudColumnNested( + guid=sap_analytics_cloud_column.guid, + type_name=sap_analytics_cloud_column.type_name, + status=sap_analytics_cloud_column.status, + version=sap_analytics_cloud_column.version, + create_time=sap_analytics_cloud_column.create_time, + update_time=sap_analytics_cloud_column.update_time, + created_by=sap_analytics_cloud_column.created_by, + updated_by=sap_analytics_cloud_column.updated_by, + classifications=sap_analytics_cloud_column.classifications, + classification_names=sap_analytics_cloud_column.classification_names, + meanings=sap_analytics_cloud_column.meanings, + labels=sap_analytics_cloud_column.labels, + business_attributes=sap_analytics_cloud_column.business_attributes, + custom_attributes=sap_analytics_cloud_column.custom_attributes, + pending_tasks=sap_analytics_cloud_column.pending_tasks, + proxy=sap_analytics_cloud_column.proxy, + is_incomplete=sap_analytics_cloud_column.is_incomplete, + provenance_type=sap_analytics_cloud_column.provenance_type, + home_id=sap_analytics_cloud_column.home_id, + depth=sap_analytics_cloud_column.depth, + immediate_upstream=sap_analytics_cloud_column.immediate_upstream, + immediate_downstream=sap_analytics_cloud_column.immediate_downstream, + attributes=attrs, + relationship_attributes=replace_rels, + append_relationship_attributes=append_rels, + remove_relationship_attributes=remove_rels, + ) + +def _sap_analytics_cloud_column_from_nested(nested: SapAnalyticsCloudColumnNested) -> SapAnalyticsCloudColumn: + """Convert nested format to flat SapAnalyticsCloudColumn.""" + attrs = nested.attributes if nested.attributes is not UNSET else SapAnalyticsCloudColumnAttributes() + # Merge relationships from all three buckets + merged_rels = merge_relationships( + nested.relationship_attributes, + nested.append_relationship_attributes, + nested.remove_relationship_attributes, + _SAP_ANALYTICS_CLOUD_COLUMN_REL_FIELDS, + SapAnalyticsCloudColumnRelationshipAttributes + ) + return SapAnalyticsCloudColumn( + guid=nested.guid, + type_name=nested.type_name, + status=nested.status, + version=nested.version, + create_time=nested.create_time, + update_time=nested.update_time, + created_by=nested.created_by, + updated_by=nested.updated_by, + classifications=nested.classifications, + classification_names=nested.classification_names, + meanings=nested.meanings, + labels=nested.labels, + business_attributes=nested.business_attributes, + custom_attributes=nested.custom_attributes, + pending_tasks=nested.pending_tasks, + proxy=nested.proxy, + is_incomplete=nested.is_incomplete, + provenance_type=nested.provenance_type, + home_id=nested.home_id, + depth=nested.depth, + immediate_upstream=nested.immediate_upstream, + immediate_downstream=nested.immediate_downstream, + **_extract_sap_analytics_cloud_column_attrs(attrs), + # Merged relationship attributes + **merged_rels, + ) + +def _sap_analytics_cloud_column_to_nested_bytes(sap_analytics_cloud_column: SapAnalyticsCloudColumn, serde: Serde) -> bytes: + """Convert flat SapAnalyticsCloudColumn to nested JSON bytes.""" + return serde.encode(_sap_analytics_cloud_column_to_nested(sap_analytics_cloud_column)) + + +def _sap_analytics_cloud_column_from_nested_bytes(data: bytes, serde: Serde) -> SapAnalyticsCloudColumn: + """Convert nested JSON bytes to flat SapAnalyticsCloudColumn.""" + nested = serde.decode(data, SapAnalyticsCloudColumnNested) + return _sap_analytics_cloud_column_from_nested(nested) + +# --------------------------------------------------------------------------- +# Deferred field descriptor initialization +# --------------------------------------------------------------------------- +from pyatlan.model.fields.atlan_fields import ( # noqa: E402 + BooleanField, + KeywordField, + KeywordTextField, + NumericField, + RelationField, +) + +SapAnalyticsCloudColumn.SAP_ANALYTICS_CLOUD_MODEL_QUALIFIED_NAME = KeywordField("sapAnalyticsCloudModelQualifiedName", "sapAnalyticsCloudModelQualifiedName") +SapAnalyticsCloudColumn.SAP_ANALYTICS_CLOUD_MODEL_NAME = KeywordField("sapAnalyticsCloudModelName", "sapAnalyticsCloudModelName") +SapAnalyticsCloudColumn.SAP_ANALYTICS_CLOUD_RESOURCE_ID = KeywordField("sapAnalyticsCloudResourceId", "sapAnalyticsCloudResourceId") +SapAnalyticsCloudColumn.SAP_ANALYTICS_CLOUD_OBJECT_ID = KeywordField("sapAnalyticsCloudObjectId", "sapAnalyticsCloudObjectId") +SapAnalyticsCloudColumn.SAP_ANALYTICS_CLOUD_REPOSITORY_PARTITION = KeywordField("sapAnalyticsCloudRepositoryPartition", "sapAnalyticsCloudRepositoryPartition") +SapAnalyticsCloudColumn.SAP_ANALYTICS_CLOUD_WORKSPACE_ID = KeywordField("sapAnalyticsCloudWorkspaceId", "sapAnalyticsCloudWorkspaceId") +SapAnalyticsCloudColumn.SAP_ANALYTICS_CLOUD_WORKSPACE_NAME = KeywordField("sapAnalyticsCloudWorkspaceName", "sapAnalyticsCloudWorkspaceName") +SapAnalyticsCloudColumn.SAP_ANALYTICS_CLOUD_PARENT_FOLDER_QUALIFIED_NAME = KeywordField("sapAnalyticsCloudParentFolderQualifiedName", "sapAnalyticsCloudParentFolderQualifiedName") +SapAnalyticsCloudColumn.SAP_ANALYTICS_CLOUD_PARENT_FOLDER_NAME = KeywordField("sapAnalyticsCloudParentFolderName", "sapAnalyticsCloudParentFolderName") +SapAnalyticsCloudColumn.SAP_TECHNICAL_NAME = KeywordField("sapTechnicalName", "sapTechnicalName") +SapAnalyticsCloudColumn.SAP_LOGICAL_NAME = KeywordField("sapLogicalName", "sapLogicalName") +SapAnalyticsCloudColumn.SAP_PACKAGE_NAME = KeywordField("sapPackageName", "sapPackageName") +SapAnalyticsCloudColumn.SAP_COMPONENT_NAME = KeywordField("sapComponentName", "sapComponentName") +SapAnalyticsCloudColumn.SAP_DATA_TYPE = KeywordField("sapDataType", "sapDataType") +SapAnalyticsCloudColumn.SAP_FIELD_COUNT = NumericField("sapFieldCount", "sapFieldCount") +SapAnalyticsCloudColumn.SAP_FIELD_ORDER = NumericField("sapFieldOrder", "sapFieldOrder") +SapAnalyticsCloudColumn.CATALOG_DATASET_GUID = KeywordField("catalogDatasetGuid", "catalogDatasetGuid") +SapAnalyticsCloudColumn.DATA_TYPE = KeywordTextField("dataType", "dataType", "dataType.text") +SapAnalyticsCloudColumn.SUB_DATA_TYPE = KeywordField("subDataType", "subDataType") +SapAnalyticsCloudColumn.COLUMN_COMPRESSION = KeywordField("columnCompression", "columnCompression") +SapAnalyticsCloudColumn.COLUMN_ENCODING = KeywordField("columnEncoding", "columnEncoding") +SapAnalyticsCloudColumn.RAW_DATA_TYPE_DEFINITION = KeywordField("rawDataTypeDefinition", "rawDataTypeDefinition") +SapAnalyticsCloudColumn.ORDER = NumericField("order", "order") +SapAnalyticsCloudColumn.NESTED_COLUMN_ORDER = KeywordTextField("nestedColumnOrder", "nestedColumnOrder", "nestedColumnOrder.text") +SapAnalyticsCloudColumn.NESTED_COLUMN_COUNT = NumericField("nestedColumnCount", "nestedColumnCount") +SapAnalyticsCloudColumn.COLUMN_HIERARCHY = KeywordField("columnHierarchy", "columnHierarchy") +SapAnalyticsCloudColumn.IS_PARTITION = BooleanField("isPartition", "isPartition") +SapAnalyticsCloudColumn.PARTITION_ORDER = NumericField("partitionOrder", "partitionOrder") +SapAnalyticsCloudColumn.IS_CLUSTERED = BooleanField("isClustered", "isClustered") +SapAnalyticsCloudColumn.IS_PRIMARY = BooleanField("isPrimary", "isPrimary") +SapAnalyticsCloudColumn.IS_FOREIGN = BooleanField("isForeign", "isForeign") +SapAnalyticsCloudColumn.IS_INDEXED = BooleanField("isIndexed", "isIndexed") +SapAnalyticsCloudColumn.IS_SORT = BooleanField("isSort", "isSort") +SapAnalyticsCloudColumn.IS_DIST = BooleanField("isDist", "isDist") +SapAnalyticsCloudColumn.IS_PINNED = BooleanField("isPinned", "isPinned") +SapAnalyticsCloudColumn.PINNED_BY = KeywordField("pinnedBy", "pinnedBy") +SapAnalyticsCloudColumn.PINNED_AT = NumericField("pinnedAt", "pinnedAt") +SapAnalyticsCloudColumn.PRECISION = NumericField("precision", "precision") +SapAnalyticsCloudColumn.DEFAULT_VALUE = KeywordField("defaultValue", "defaultValue") +SapAnalyticsCloudColumn.IS_NULLABLE = BooleanField("isNullable", "isNullable") +SapAnalyticsCloudColumn.NUMERIC_SCALE = NumericField("numericScale", "numericScale") +SapAnalyticsCloudColumn.MAX_LENGTH = NumericField("maxLength", "maxLength") +SapAnalyticsCloudColumn.VALIDATIONS = KeywordField("validations", "validations") +SapAnalyticsCloudColumn.PARENT_COLUMN_QUALIFIED_NAME = KeywordTextField("parentColumnQualifiedName", "parentColumnQualifiedName", "parentColumnQualifiedName.text") +SapAnalyticsCloudColumn.PARENT_COLUMN_NAME = KeywordField("parentColumnName", "parentColumnName") +SapAnalyticsCloudColumn.COLUMN_DISTINCT_VALUES_COUNT = NumericField("columnDistinctValuesCount", "columnDistinctValuesCount") +SapAnalyticsCloudColumn.COLUMN_DISTINCT_VALUES_COUNT_LONG = NumericField("columnDistinctValuesCountLong", "columnDistinctValuesCountLong") +SapAnalyticsCloudColumn.COLUMN_DISTINCT_VALUES_PERCENTAGE = NumericField("columnDistinctValuesPercentage", "columnDistinctValuesPercentage") +SapAnalyticsCloudColumn.COLUMN_HISTOGRAM = KeywordField("columnHistogram", "columnHistogram") +SapAnalyticsCloudColumn.COLUMN_MAX = NumericField("columnMax", "columnMax") +SapAnalyticsCloudColumn.COLUMN_MIN = NumericField("columnMin", "columnMin") +SapAnalyticsCloudColumn.COLUMN_MEAN = NumericField("columnMean", "columnMean") +SapAnalyticsCloudColumn.COLUMN_SUM = NumericField("columnSum", "columnSum") +SapAnalyticsCloudColumn.COLUMN_MEDIAN = NumericField("columnMedian", "columnMedian") +SapAnalyticsCloudColumn.COLUMN_STANDARD_DEVIATION = NumericField("columnStandardDeviation", "columnStandardDeviation") +SapAnalyticsCloudColumn.COLUMN_UNIQUE_VALUES_COUNT = NumericField("columnUniqueValuesCount", "columnUniqueValuesCount") +SapAnalyticsCloudColumn.COLUMN_UNIQUE_VALUES_COUNT_LONG = NumericField("columnUniqueValuesCountLong", "columnUniqueValuesCountLong") +SapAnalyticsCloudColumn.COLUMN_AVERAGE = NumericField("columnAverage", "columnAverage") +SapAnalyticsCloudColumn.COLUMN_AVERAGE_LENGTH = NumericField("columnAverageLength", "columnAverageLength") +SapAnalyticsCloudColumn.COLUMN_DUPLICATE_VALUES_COUNT = NumericField("columnDuplicateValuesCount", "columnDuplicateValuesCount") +SapAnalyticsCloudColumn.COLUMN_DUPLICATE_VALUES_COUNT_LONG = NumericField("columnDuplicateValuesCountLong", "columnDuplicateValuesCountLong") +SapAnalyticsCloudColumn.COLUMN_MAXIMUM_STRING_LENGTH = NumericField("columnMaximumStringLength", "columnMaximumStringLength") +SapAnalyticsCloudColumn.COLUMN_MAXS = KeywordField("columnMaxs", "columnMaxs") +SapAnalyticsCloudColumn.COLUMN_MINIMUM_STRING_LENGTH = NumericField("columnMinimumStringLength", "columnMinimumStringLength") +SapAnalyticsCloudColumn.COLUMN_MINS = KeywordField("columnMins", "columnMins") +SapAnalyticsCloudColumn.COLUMN_MISSING_VALUES_COUNT = NumericField("columnMissingValuesCount", "columnMissingValuesCount") +SapAnalyticsCloudColumn.COLUMN_MISSING_VALUES_COUNT_LONG = NumericField("columnMissingValuesCountLong", "columnMissingValuesCountLong") +SapAnalyticsCloudColumn.COLUMN_MISSING_VALUES_PERCENTAGE = NumericField("columnMissingValuesPercentage", "columnMissingValuesPercentage") +SapAnalyticsCloudColumn.COLUMN_UNIQUENESS_PERCENTAGE = NumericField("columnUniquenessPercentage", "columnUniquenessPercentage") +SapAnalyticsCloudColumn.COLUMN_VARIANCE = NumericField("columnVariance", "columnVariance") +SapAnalyticsCloudColumn.COLUMN_TOP_VALUES = KeywordField("columnTopValues", "columnTopValues") +SapAnalyticsCloudColumn.COLUMN_MAX_VALUE = NumericField("columnMaxValue", "columnMaxValue") +SapAnalyticsCloudColumn.COLUMN_MIN_VALUE = NumericField("columnMinValue", "columnMinValue") +SapAnalyticsCloudColumn.COLUMN_MEAN_VALUE = NumericField("columnMeanValue", "columnMeanValue") +SapAnalyticsCloudColumn.COLUMN_SUM_VALUE = NumericField("columnSumValue", "columnSumValue") +SapAnalyticsCloudColumn.COLUMN_MEDIAN_VALUE = NumericField("columnMedianValue", "columnMedianValue") +SapAnalyticsCloudColumn.COLUMN_STANDARD_DEVIATION_VALUE = NumericField("columnStandardDeviationValue", "columnStandardDeviationValue") +SapAnalyticsCloudColumn.COLUMN_AVERAGE_VALUE = NumericField("columnAverageValue", "columnAverageValue") +SapAnalyticsCloudColumn.COLUMN_VARIANCE_VALUE = NumericField("columnVarianceValue", "columnVarianceValue") +SapAnalyticsCloudColumn.COLUMN_AVERAGE_LENGTH_VALUE = NumericField("columnAverageLengthValue", "columnAverageLengthValue") +SapAnalyticsCloudColumn.COLUMN_DISTRIBUTION_HISTOGRAM = KeywordField("columnDistributionHistogram", "columnDistributionHistogram") +SapAnalyticsCloudColumn.COLUMN_DEPTH_LEVEL = NumericField("columnDepthLevel", "columnDepthLevel") +SapAnalyticsCloudColumn.NOSQL_COLLECTION_NAME = KeywordField("nosqlCollectionName", "nosqlCollectionName") +SapAnalyticsCloudColumn.NOSQL_COLLECTION_QUALIFIED_NAME = KeywordField("nosqlCollectionQualifiedName", "nosqlCollectionQualifiedName") +SapAnalyticsCloudColumn.COLUMN_IS_MEASURE = BooleanField("columnIsMeasure", "columnIsMeasure") +SapAnalyticsCloudColumn.COLUMN_MEASURE_TYPE = KeywordField("columnMeasureType", "columnMeasureType") +SapAnalyticsCloudColumn.COLUMN_AI_INSIGHTS_IS_MEASURE = BooleanField("columnAiInsightsIsMeasure", "columnAiInsightsIsMeasure") +SapAnalyticsCloudColumn.COLUMN_AI_INSIGHTS_MEASURE_TYPE = KeywordField("columnAiInsightsMeasureType", "columnAiInsightsMeasureType") +SapAnalyticsCloudColumn.COLUMN_AI_INSIGHTS_IS_DIMENSION = BooleanField("columnAiInsightsIsDimension", "columnAiInsightsIsDimension") +SapAnalyticsCloudColumn.COLUMN_AI_INSIGHTS_DIMENSION_TYPE = KeywordField("columnAiInsightsDimensionType", "columnAiInsightsDimensionType") +SapAnalyticsCloudColumn.COLUMN_AI_INSIGHTS_FOREIGN_KEY_COLUMN_QUALIFIED_NAME = KeywordField("columnAiInsightsForeignKeyColumnQualifiedName", "columnAiInsightsForeignKeyColumnQualifiedName") +SapAnalyticsCloudColumn.QUERY_COUNT = NumericField("queryCount", "queryCount") +SapAnalyticsCloudColumn.QUERY_USER_COUNT = NumericField("queryUserCount", "queryUserCount") +SapAnalyticsCloudColumn.QUERY_USER_MAP = KeywordField("queryUserMap", "queryUserMap") +SapAnalyticsCloudColumn.QUERY_COUNT_UPDATED_AT = NumericField("queryCountUpdatedAt", "queryCountUpdatedAt") +SapAnalyticsCloudColumn.DATABASE_NAME = KeywordField("databaseName", "databaseName") +SapAnalyticsCloudColumn.DATABASE_QUALIFIED_NAME = KeywordField("databaseQualifiedName", "databaseQualifiedName") +SapAnalyticsCloudColumn.SCHEMA_NAME = KeywordField("schemaName", "schemaName") +SapAnalyticsCloudColumn.SCHEMA_QUALIFIED_NAME = KeywordField("schemaQualifiedName", "schemaQualifiedName") +SapAnalyticsCloudColumn.TABLE_NAME = KeywordField("tableName", "tableName") +SapAnalyticsCloudColumn.TABLE_QUALIFIED_NAME = KeywordField("tableQualifiedName", "tableQualifiedName") +SapAnalyticsCloudColumn.VIEW_NAME = KeywordField("viewName", "viewName") +SapAnalyticsCloudColumn.VIEW_QUALIFIED_NAME = KeywordField("viewQualifiedName", "viewQualifiedName") +SapAnalyticsCloudColumn.CALCULATION_VIEW_NAME = KeywordField("calculationViewName", "calculationViewName") +SapAnalyticsCloudColumn.CALCULATION_VIEW_QUALIFIED_NAME = KeywordField("calculationViewQualifiedName", "calculationViewQualifiedName") +SapAnalyticsCloudColumn.IS_PROFILED = BooleanField("isProfiled", "isProfiled") +SapAnalyticsCloudColumn.LAST_PROFILED_AT = NumericField("lastProfiledAt", "lastProfiledAt") +SapAnalyticsCloudColumn.SQL_AI_MODEL_CONTEXT_QUALIFIED_NAME = KeywordField("sqlAIModelContextQualifiedName", "sqlAIModelContextQualifiedName") +SapAnalyticsCloudColumn.SQL_IS_SECURE = BooleanField("sqlIsSecure", "sqlIsSecure") +SapAnalyticsCloudColumn.SQL_HAS_AI_INSIGHTS = BooleanField("sqlHasAiInsights", "sqlHasAiInsights") +SapAnalyticsCloudColumn.SQL_AI_INSIGHTS_LAST_ANALYZED_AT = NumericField("sqlAiInsightsLastAnalyzedAt", "sqlAiInsightsLastAnalyzedAt") +SapAnalyticsCloudColumn.SQL_AI_INSIGHTS_POPULAR_BUSINESS_QUESTION_COUNT = NumericField("sqlAiInsightsPopularBusinessQuestionCount", "sqlAiInsightsPopularBusinessQuestionCount") +SapAnalyticsCloudColumn.SQL_AI_INSIGHTS_POPULAR_JOIN_COUNT = NumericField("sqlAiInsightsPopularJoinCount", "sqlAiInsightsPopularJoinCount") +SapAnalyticsCloudColumn.SQL_AI_INSIGHTS_POPULAR_FILTER_COUNT = NumericField("sqlAiInsightsPopularFilterCount", "sqlAiInsightsPopularFilterCount") +SapAnalyticsCloudColumn.SQL_AI_INSIGHTS_RELATIONSHIP_COUNT = NumericField("sqlAiInsightsRelationshipCount", "sqlAiInsightsRelationshipCount") +SapAnalyticsCloudColumn.SQL_COALESCE_LAST_RUN_STATUS = KeywordField("sqlCoalesceLastRunStatus", "sqlCoalesceLastRunStatus") +SapAnalyticsCloudColumn.SQL_COALESCE_NODE_STATUS = KeywordField("sqlCoalesceNodeStatus", "sqlCoalesceNodeStatus") +SapAnalyticsCloudColumn.SQL_COALESCE_LAST_RUN_AT = NumericField("sqlCoalesceLastRunAt", "sqlCoalesceLastRunAt") +SapAnalyticsCloudColumn.SQL_COALESCE_NODE_TYPE = KeywordField("sqlCoalesceNodeType", "sqlCoalesceNodeType") +SapAnalyticsCloudColumn.SQL_COALESCE_ENVIRONMENT_ID = KeywordField("sqlCoalesceEnvironmentId", "sqlCoalesceEnvironmentId") +SapAnalyticsCloudColumn.SQL_COALESCE_ENVIRONMENT_NAME = KeywordTextField("sqlCoalesceEnvironmentName", "sqlCoalesceEnvironmentName", "sqlCoalesceEnvironmentName.text") +SapAnalyticsCloudColumn.SQL_COALESCE_PROJECT_ID = KeywordField("sqlCoalesceProjectId", "sqlCoalesceProjectId") +SapAnalyticsCloudColumn.SQL_COALESCE_PROJECT_NAME = KeywordTextField("sqlCoalesceProjectName", "sqlCoalesceProjectName", "sqlCoalesceProjectName.text") +SapAnalyticsCloudColumn.SQL_SHARE_QUALIFIED_NAMES = KeywordField("sqlShareQualifiedNames", "sqlShareQualifiedNames") +SapAnalyticsCloudColumn.INPUT_TO_AIRFLOW_TASKS = RelationField("inputToAirflowTasks") +SapAnalyticsCloudColumn.OUTPUT_FROM_AIRFLOW_TASKS = RelationField("outputFromAirflowTasks") +SapAnalyticsCloudColumn.ANOMALO_CHECKS = RelationField("anomaloChecks") +SapAnalyticsCloudColumn.APPLICATION = RelationField("application") +SapAnalyticsCloudColumn.APPLICATION_FIELD = RelationField("applicationField") +SapAnalyticsCloudColumn.CONTEXT_REPOSITORIES = RelationField("contextRepositories") +SapAnalyticsCloudColumn.COSMOS_MONGO_DB_COLLECTION = RelationField("cosmosMongoDBCollection") +SapAnalyticsCloudColumn.DATA_CONTRACT_LATEST = RelationField("dataContractLatest") +SapAnalyticsCloudColumn.DATA_CONTRACT_LATEST_CERTIFIED = RelationField("dataContractLatestCertified") +SapAnalyticsCloudColumn.OUTPUT_PORT_DATA_PRODUCTS = RelationField("outputPortDataProducts") +SapAnalyticsCloudColumn.INPUT_PORT_DATA_PRODUCTS = RelationField("inputPortDataProducts") +SapAnalyticsCloudColumn.MODEL_IMPLEMENTED_ENTITIES = RelationField("modelImplementedEntities") +SapAnalyticsCloudColumn.MODEL_IMPLEMENTED_ATTRIBUTES = RelationField("modelImplementedAttributes") +SapAnalyticsCloudColumn.METRICS = RelationField("metrics") +SapAnalyticsCloudColumn.METRIC_TIMESTAMPS = RelationField("metricTimestamps") +SapAnalyticsCloudColumn.DATA_QUALITY_METRIC_DIMENSIONS = RelationField("dataQualityMetricDimensions") +SapAnalyticsCloudColumn.DQ_BASE_DATASET_RULES = RelationField("dqBaseDatasetRules") +SapAnalyticsCloudColumn.DQ_BASE_COLUMN_RULES = RelationField("dqBaseColumnRules") +SapAnalyticsCloudColumn.DQ_REFERENCE_DATASET_RULES = RelationField("dqReferenceDatasetRules") +SapAnalyticsCloudColumn.DQ_REFERENCE_COLUMN_RULES = RelationField("dqReferenceColumnRules") +SapAnalyticsCloudColumn.DBT_MODELS = RelationField("dbtModels") +SapAnalyticsCloudColumn.SQL_DBT_MODELS = RelationField("sqlDbtModels") +SapAnalyticsCloudColumn.DBT_TESTS = RelationField("dbtTests") +SapAnalyticsCloudColumn.DBT_SOURCES = RelationField("dbtSources") +SapAnalyticsCloudColumn.SQL_DBT_SOURCES = RelationField("sqlDBTSources") +SapAnalyticsCloudColumn.DBT_METRICS = RelationField("dbtMetrics") +SapAnalyticsCloudColumn.DBT_MODEL_COLUMNS = RelationField("dbtModelColumns") +SapAnalyticsCloudColumn.COLUMN_DBT_MODEL_COLUMNS = RelationField("columnDbtModelColumns") +SapAnalyticsCloudColumn.DBT_SEED_ASSETS = RelationField("dbtSeedAssets") +SapAnalyticsCloudColumn.GCP_DATAPLEX_ASPECT_TYPE_METADATA_ENTITIES = RelationField("gcpDataplexAspectTypeMetadataEntities") +SapAnalyticsCloudColumn.MEANINGS = RelationField("meanings") +SapAnalyticsCloudColumn.KNOWLEDGE_LINKED_FILES = RelationField("knowledgeLinkedFiles") +SapAnalyticsCloudColumn.MONGO_DB_COLLECTION = RelationField("mongoDBCollection") +SapAnalyticsCloudColumn.MC_MONITORS = RelationField("mcMonitors") +SapAnalyticsCloudColumn.MC_INCIDENTS = RelationField("mcIncidents") +SapAnalyticsCloudColumn.PARTIAL_CHILD_FIELDS = RelationField("partialChildFields") +SapAnalyticsCloudColumn.PARTIAL_CHILD_OBJECTS = RelationField("partialChildObjects") +SapAnalyticsCloudColumn.INPUT_TO_PROCESSES = RelationField("inputToProcesses") +SapAnalyticsCloudColumn.OUTPUT_FROM_PROCESSES = RelationField("outputFromProcesses") +SapAnalyticsCloudColumn.USER_DEF_RELATIONSHIP_TO = RelationField("userDefRelationshipTo") +SapAnalyticsCloudColumn.USER_DEF_RELATIONSHIP_FROM = RelationField("userDefRelationshipFrom") +SapAnalyticsCloudColumn.FILES = RelationField("files") +SapAnalyticsCloudColumn.LINKS = RelationField("links") +SapAnalyticsCloudColumn.README = RelationField("readme") +SapAnalyticsCloudColumn.TABLE = RelationField("table") +SapAnalyticsCloudColumn.NESTED_COLUMNS = RelationField("nestedColumns") +SapAnalyticsCloudColumn.PARENT_COLUMN = RelationField("parentColumn") +SapAnalyticsCloudColumn.TABLE_PARTITION = RelationField("tablePartition") +SapAnalyticsCloudColumn.VIEW = RelationField("view") +SapAnalyticsCloudColumn.CALCULATION_VIEW = RelationField("calculationView") +SapAnalyticsCloudColumn.MATERIALISED_VIEW = RelationField("materialisedView") +SapAnalyticsCloudColumn.FOREIGN_KEY_TO = RelationField("foreignKeyTo") +SapAnalyticsCloudColumn.FOREIGN_KEY_FROM = RelationField("foreignKeyFrom") +SapAnalyticsCloudColumn.QUERIES = RelationField("queries") +SapAnalyticsCloudColumn.SAP_ANALYTICS_CLOUD_MODEL = RelationField("sapAnalyticsCloudModel") +SapAnalyticsCloudColumn.SCHEMA_REGISTRY_SUBJECTS = RelationField("schemaRegistrySubjects") +SapAnalyticsCloudColumn.SNOWFLAKE_DYNAMIC_TABLE = RelationField("snowflakeDynamicTable") +SapAnalyticsCloudColumn.SNOWFLAKE_SEMANTIC_LOGICAL_TABLES = RelationField("snowflakeSemanticLogicalTables") +SapAnalyticsCloudColumn.SODA_CHECKS = RelationField("sodaChecks") +SapAnalyticsCloudColumn.INPUT_TO_SPARK_JOBS = RelationField("inputToSparkJobs") +SapAnalyticsCloudColumn.OUTPUT_FROM_SPARK_JOBS = RelationField("outputFromSparkJobs") +SapAnalyticsCloudColumn.SQL_INSIGHT_OUTGOING_JOINS = RelationField("sqlInsightOutgoingJoins") +SapAnalyticsCloudColumn.SQL_INSIGHT_INCOMING_JOINS = RelationField("sqlInsightIncomingJoins") +SapAnalyticsCloudColumn.SQL_INSIGHT_FILTERS = RelationField("sqlInsightFilters") +SapAnalyticsCloudColumn.SQL_INSIGHT_BUSINESS_QUESTIONS = RelationField("sqlInsightBusinessQuestions") \ No newline at end of file diff --git a/pyatlan_v9/model/assets/sap_analytics_cloud_folder.py b/pyatlan_v9/model/assets/sap_analytics_cloud_folder.py new file mode 100644 index 000000000..861619706 --- /dev/null +++ b/pyatlan_v9/model/assets/sap_analytics_cloud_folder.py @@ -0,0 +1,807 @@ +# Auto-generated by PythonMsgspecRenderer.pkl - DO NOT EDIT +# ruff: noqa: ARG002 +# SPDX-License-Identifier: Apache-2.0 +# Copyright 2024 Atlan Pte. Ltd. + +""" +SapAnalyticsCloudFolder asset model with flattened inheritance. + +This module provides: +- SapAnalyticsCloudFolder: Flat asset class (easy to use) +- SapAnalyticsCloudFolderAttributes: Nested attributes struct (extends AssetAttributes) +- SapAnalyticsCloudFolderNested: Nested API format struct +""" + +from __future__ import annotations + +import re +from typing import Any, ClassVar, Dict, List, Set, Union + +import msgspec +from msgspec import UNSET, UnsetType + +from .airflow_related import RelatedAirflowTask +from .anomalo_related import RelatedAnomaloCheck +from .app_related import RelatedApplication, RelatedApplicationField +from .asset import ( + _ASSET_REL_FIELDS, + Asset, + AssetAttributes, + AssetNested, + AssetRelationshipAttributes, + _extract_asset_attrs, + _populate_asset_attrs, +) +from .context_related import RelatedContextRepository +from .data_contract_related import RelatedDataContract +from .data_mesh_related import RelatedDataProduct +from .data_quality_related import RelatedDataQualityRule, RelatedMetric +from .gcp_dataplex_related import RelatedGCPDataplexAspectType +from .gtc_related import RelatedAtlasGlossaryTerm +from .knowledge_related import RelatedKnowledgeFile +from .model_related import RelatedModelAttribute, RelatedModelEntity +from .monte_carlo_related import RelatedMCIncident, RelatedMCMonitor +from .partial_related import RelatedPartialField, RelatedPartialObject +from .process_related import RelatedProcess +from .referenceable_related import RelatedReferenceable +from .resource_related import RelatedFile, RelatedLink, RelatedReadme +from .schema_registry_related import RelatedSchemaRegistrySubject +from .soda_related import RelatedSodaCheck +from .spark_related import RelatedSparkJob +from pyatlan_v9.model.conversion_utils import categorize_relationships, merge_relationships +from pyatlan_v9.model.serde import Serde, get_serde +from pyatlan_v9.model.transform import register_asset + +from .sap_analytics_cloud_related import RelatedSapAnalyticsCloudFolder, RelatedSapAnalyticsCloudModel, RelatedSapAnalyticsCloudStory + +# ============================================================================= +# FLAT ASSET CLASS +# ============================================================================= + +@register_asset +class SapAnalyticsCloudFolder(Asset): + """ + Folder in the SAP Analytics Cloud file repository. Folders nest to arbitrary depth and are the organizational container for stories and models. + """ + + SAP_ANALYTICS_CLOUD_RESOURCE_ID: ClassVar[Any] = None + SAP_ANALYTICS_CLOUD_OBJECT_ID: ClassVar[Any] = None + SAP_ANALYTICS_CLOUD_REPOSITORY_PARTITION: ClassVar[Any] = None + SAP_ANALYTICS_CLOUD_WORKSPACE_ID: ClassVar[Any] = None + SAP_ANALYTICS_CLOUD_WORKSPACE_NAME: ClassVar[Any] = None + SAP_ANALYTICS_CLOUD_PARENT_FOLDER_QUALIFIED_NAME: ClassVar[Any] = None + SAP_ANALYTICS_CLOUD_PARENT_FOLDER_NAME: ClassVar[Any] = None + SAP_TECHNICAL_NAME: ClassVar[Any] = None + SAP_LOGICAL_NAME: ClassVar[Any] = None + SAP_PACKAGE_NAME: ClassVar[Any] = None + SAP_COMPONENT_NAME: ClassVar[Any] = None + SAP_DATA_TYPE: ClassVar[Any] = None + SAP_FIELD_COUNT: ClassVar[Any] = None + SAP_FIELD_ORDER: ClassVar[Any] = None + CATALOG_DATASET_GUID: ClassVar[Any] = None + INPUT_TO_AIRFLOW_TASKS: ClassVar[Any] = None + OUTPUT_FROM_AIRFLOW_TASKS: ClassVar[Any] = None + ANOMALO_CHECKS: ClassVar[Any] = None + APPLICATION: ClassVar[Any] = None + APPLICATION_FIELD: ClassVar[Any] = None + CONTEXT_REPOSITORIES: ClassVar[Any] = None + DATA_CONTRACT_LATEST: ClassVar[Any] = None + DATA_CONTRACT_LATEST_CERTIFIED: ClassVar[Any] = None + OUTPUT_PORT_DATA_PRODUCTS: ClassVar[Any] = None + INPUT_PORT_DATA_PRODUCTS: ClassVar[Any] = None + MODEL_IMPLEMENTED_ENTITIES: ClassVar[Any] = None + MODEL_IMPLEMENTED_ATTRIBUTES: ClassVar[Any] = None + METRICS: ClassVar[Any] = None + DQ_BASE_DATASET_RULES: ClassVar[Any] = None + DQ_REFERENCE_DATASET_RULES: ClassVar[Any] = None + GCP_DATAPLEX_ASPECT_TYPE_METADATA_ENTITIES: ClassVar[Any] = None + MEANINGS: ClassVar[Any] = None + KNOWLEDGE_LINKED_FILES: ClassVar[Any] = None + MC_MONITORS: ClassVar[Any] = None + MC_INCIDENTS: ClassVar[Any] = None + PARTIAL_CHILD_FIELDS: ClassVar[Any] = None + PARTIAL_CHILD_OBJECTS: ClassVar[Any] = None + INPUT_TO_PROCESSES: ClassVar[Any] = None + OUTPUT_FROM_PROCESSES: ClassVar[Any] = None + USER_DEF_RELATIONSHIP_TO: ClassVar[Any] = None + USER_DEF_RELATIONSHIP_FROM: ClassVar[Any] = None + FILES: ClassVar[Any] = None + LINKS: ClassVar[Any] = None + README: ClassVar[Any] = None + SAP_ANALYTICS_CLOUD_SUB_FOLDERS: ClassVar[Any] = None + SAP_ANALYTICS_CLOUD_PARENT_FOLDER: ClassVar[Any] = None + SAP_ANALYTICS_CLOUD_MODELS: ClassVar[Any] = None + SAP_ANALYTICS_CLOUD_STORIES: ClassVar[Any] = None + SCHEMA_REGISTRY_SUBJECTS: ClassVar[Any] = None + SODA_CHECKS: ClassVar[Any] = None + INPUT_TO_SPARK_JOBS: ClassVar[Any] = None + OUTPUT_FROM_SPARK_JOBS: ClassVar[Any] = None + + sap_analytics_cloud_resource_id: Union[str, None, UnsetType] = UNSET + """Identifier of this asset in the SAP Analytics Cloud file repository. Stable across renames and used by the source APIs to address the resource.""" + + sap_analytics_cloud_object_id: Union[str, None, UnsetType] = UNSET + """Underlying object identifier reported by the SAP Analytics Cloud file repository for this asset.""" + + sap_analytics_cloud_repository_partition: Union[str, None, UnsetType] = UNSET + """Partition of the SAP Analytics Cloud file repository this asset lives in: PUBLIC for shared tenant content, SYSTEM for SAP-shipped content and SAP Analytics Cloud's own telemetry, USERS for the container holding per-user private areas, and PRIVATE for an individual user's own content. Reported by the source as folderType, and carried by every resource rather than only by folders.""" + + sap_analytics_cloud_workspace_id: Union[str, None, UnsetType] = UNSET + """Identifier of the SAP Analytics Cloud workspace that owns this asset.""" + + sap_analytics_cloud_workspace_name: Union[str, None, UnsetType] = UNSET + """Simple name of the SAP Analytics Cloud workspace that owns this asset.""" + + sap_analytics_cloud_parent_folder_qualified_name: Union[str, None, UnsetType] = UNSET + """Unique name of the SAP Analytics Cloud folder that directly contains this asset. Empty for a root-level folder and for a live model, neither of which is contained by a folder.""" + + sap_analytics_cloud_parent_folder_name: Union[str, None, UnsetType] = UNSET + """Simple name of the SAP Analytics Cloud folder that directly contains this asset. Empty for a root-level folder and for a live model, neither of which is contained by a folder.""" + + sap_technical_name: Union[str, None, UnsetType] = UNSET + """Technical identifier for SAP data objects, used for integration and internal reference.""" + + sap_logical_name: Union[str, None, UnsetType] = UNSET + """Logical, business-friendly identifier for SAP data objects, aligned with business terminology and concepts.""" + + sap_package_name: Union[str, None, UnsetType] = UNSET + """Name of the SAP package, representing a logical grouping of related SAP data objects.""" + + sap_component_name: Union[str, None, UnsetType] = UNSET + """Name of the SAP component, representing a specific functional area in SAP.""" + + sap_data_type: Union[str, None, UnsetType] = UNSET + """SAP-specific data types.""" + + sap_field_count: Union[int, None, UnsetType] = UNSET + """Represents the total number of fields, columns, or child assets present in a given SAP asset.""" + + sap_field_order: Union[int, None, UnsetType] = UNSET + """Indicates the sequential position of a field, column, or child asset within its parent SAP asset, starting from 1.""" + + catalog_dataset_guid: Union[str, None, UnsetType] = UNSET + """Unique identifier of the dataset this asset belongs to.""" + + input_to_airflow_tasks: Union[List[RelatedAirflowTask], None, UnsetType] = UNSET + """Tasks to which this asset provides input.""" + + output_from_airflow_tasks: Union[List[RelatedAirflowTask], None, UnsetType] = UNSET + """Tasks from which this asset is output.""" + + anomalo_checks: Union[List[RelatedAnomaloCheck], None, UnsetType] = UNSET + """Checks that run on this asset.""" + + application: Union[RelatedApplication, None, UnsetType] = UNSET + """Application owning the Asset.""" + + application_field: Union[RelatedApplicationField, None, UnsetType] = UNSET + """ApplicationField owning the Asset.""" + + context_repositories: Union[List[RelatedContextRepository], None, UnsetType] = UNSET + """Context repositories that use this asset as input.""" + + data_contract_latest: Union[RelatedDataContract, None, UnsetType] = UNSET + """Latest version of the data contract (in any status) for this asset.""" + + data_contract_latest_certified: Union[RelatedDataContract, None, UnsetType] = UNSET + """Latest certified version of the data contract for this asset.""" + + output_port_data_products: Union[List[RelatedDataProduct], None, UnsetType] = UNSET + """Data products for which this asset is an output port.""" + + input_port_data_products: Union[List[RelatedDataProduct], None, UnsetType] = UNSET + """Data products for which this asset is an input port.""" + + model_implemented_entities: Union[List[RelatedModelEntity], None, UnsetType] = UNSET + """Entities implemented by this asset.""" + + model_implemented_attributes: Union[List[RelatedModelAttribute], None, UnsetType] = UNSET + """Attributes implemented by this asset.""" + + metrics: Union[List[RelatedMetric], None, UnsetType] = UNSET + """""" + + dq_base_dataset_rules: Union[List[RelatedDataQualityRule], None, UnsetType] = UNSET + """Rules that are applied on this dataset.""" + + dq_reference_dataset_rules: Union[List[RelatedDataQualityRule], None, UnsetType] = UNSET + """Rules where this dataset is referenced.""" + + gcp_dataplex_aspect_type_metadata_entities: Union[List[RelatedGCPDataplexAspectType], None, UnsetType] = UNSET + """Dataplex entries (assets) that have aspects of this Aspect Type attached.""" + + meanings: Union[List[RelatedAtlasGlossaryTerm], None, UnsetType] = UNSET + """Glossary terms that are linked to this asset.""" + + knowledge_linked_files: Union[List[RelatedKnowledgeFile], None, UnsetType] = UNSET + """Knowledge files linked to this asset.""" + + mc_monitors: Union[List[RelatedMCMonitor], None, UnsetType] = UNSET + """Monitors that observe this asset.""" + + mc_incidents: Union[List[RelatedMCIncident], None, UnsetType] = UNSET + """""" + + partial_child_fields: Union[List[RelatedPartialField], None, UnsetType] = UNSET + """Partial fields contained in the asset.""" + + partial_child_objects: Union[List[RelatedPartialObject], None, UnsetType] = UNSET + """Partial objects contained in the asset.""" + + input_to_processes: Union[List[RelatedProcess], None, UnsetType] = UNSET + """Processes to which this asset provides input.""" + + output_from_processes: Union[List[RelatedProcess], None, UnsetType] = UNSET + """Processes from which this asset is produced as output.""" + + user_def_relationship_to: Union[List[RelatedReferenceable], None, UnsetType] = UNSET + """""" + + user_def_relationship_from: Union[List[RelatedReferenceable], None, UnsetType] = UNSET + """""" + + files: Union[List[RelatedFile], None, UnsetType] = UNSET + """""" + + links: Union[List[RelatedLink], None, UnsetType] = UNSET + """Links that are attached to this asset.""" + + readme: Union[RelatedReadme, None, UnsetType] = UNSET + """README that is linked to this asset.""" + + sap_analytics_cloud_sub_folders: Union[List[RelatedSapAnalyticsCloudFolder], None, UnsetType] = UNSET + """Folders nested within this folder.""" + + sap_analytics_cloud_parent_folder: Union[RelatedSapAnalyticsCloudFolder, None, UnsetType] = UNSET + """Folder containing this folder.""" + + sap_analytics_cloud_models: Union[List[RelatedSapAnalyticsCloudModel], None, UnsetType] = UNSET + """Models held in this folder.""" + + sap_analytics_cloud_stories: Union[List[RelatedSapAnalyticsCloudStory], None, UnsetType] = UNSET + """Stories held in this folder.""" + + schema_registry_subjects: Union[List[RelatedSchemaRegistrySubject], None, UnsetType] = UNSET + """Schema registry subjects associated with this asset.""" + + soda_checks: Union[List[RelatedSodaCheck], None, UnsetType] = UNSET + """""" + + input_to_spark_jobs: Union[List[RelatedSparkJob], None, UnsetType] = UNSET + """""" + + output_from_spark_jobs: Union[List[RelatedSparkJob], None, UnsetType] = UNSET + """""" + + def __post_init__(self) -> None: + self.type_name = "SapAnalyticsCloudFolder" + + # ========================================================================= + # SDK Methods + # ========================================================================= + + _QUALIFIED_NAME_PATTERN: ClassVar[re.Pattern] = re.compile( + r"^.+/[^/]+/[^/]+$" + ) + + def validate(self, for_creation: bool = False) -> None: + """ + Dry-run validation of this SapAnalyticsCloudFolder instance. + + Checks that required fields (type_name, name, qualified_name) are set. + When ``for_creation=True``, also checks hierarchy-specific fields + (parent references, denormalized attributes) needed to create this asset. + + This is purely opt-in and is NOT called by any serde path — only by + explicit user invocation (e.g., validating JSONL before sending to Atlan). + + Args: + for_creation: If True, also validate fields required for asset creation. + + Raises: + ValueError: If any required fields are missing or invalid. + """ + errors: list[str] = [] + if self.type_name is UNSET: + errors.append("type_name is required") + if self.name is UNSET: + errors.append("name is required") + if self.qualified_name is UNSET or self.qualified_name is None: + errors.append("qualified_name is required") + elif not self._QUALIFIED_NAME_PATTERN.match(self.qualified_name): + errors.append( + f"qualified_name '{self.qualified_name}' does not match expected " + f"pattern: {self._QUALIFIED_NAME_PATTERN.pattern}" + ) + if for_creation: + if self.connection_qualified_name is UNSET: + errors.append("connection_qualified_name is required for creation") + if errors: + raise ValueError(f"SapAnalyticsCloudFolder validation failed: {errors}") + + def minimize(self) -> "SapAnalyticsCloudFolder": + """ + Return a minimal copy of this SapAnalyticsCloudFolder with only updater-required fields. + + Calls :meth:`validate` first to ensure the instance is valid, then + returns a new SapAnalyticsCloudFolder with only the fields needed for an update + (qualified_name, name, and any type-specific additional fields). + + Returns: + A new SapAnalyticsCloudFolder instance with only the minimum required fields. + """ + self.validate() + return SapAnalyticsCloudFolder(qualified_name=self.qualified_name, name=self.name) + + def relate(self) -> "RelatedSapAnalyticsCloudFolder": + """ + Create a :class:`RelatedSapAnalyticsCloudFolder` reference from this instance. + + Returns a lightweight reference suitable for use in relationship + attributes. Prefers ``guid`` if set, otherwise falls back to + ``qualified_name``. + + Returns: + A RelatedSapAnalyticsCloudFolder reference to this asset. + """ + if self.guid is not UNSET: + return RelatedSapAnalyticsCloudFolder(guid=self.guid) + return RelatedSapAnalyticsCloudFolder(qualified_name=self.qualified_name) + + # ========================================================================= + # Optimized Serialization Methods (override Asset base class) + # ========================================================================= + + def to_json(self, nested: bool = True, serde: Serde | None = None) -> str: + """ + Convert to JSON string using optimized nested struct serialization. + + Args: + nested: If True (default), use nested API format. If False, use flat format. + serde: Optional Serde instance for encoder reuse. Uses shared singleton if None. + + Returns: + JSON string representation + """ + if serde is None: + serde = get_serde() + if nested: + return self.to_nested_bytes(serde).decode("utf-8") + else: + return serde.encode(self).decode("utf-8") + + def to_nested_bytes(self, serde: Serde | None = None) -> bytes: + """Serialize to Atlas nested-format JSON bytes (pure msgspec, no dict intermediate).""" + if serde is None: + serde = get_serde() + return _sap_analytics_cloud_folder_to_nested_bytes(self, serde) + + @staticmethod + def from_json(json_data: str | bytes, serde: Serde | None = None) -> SapAnalyticsCloudFolder: + """ + Create from JSON string or bytes using optimized nested struct deserialization. + + Args: + json_data: JSON string or bytes to deserialize + serde: Optional Serde instance for decoder reuse. Uses shared singleton if None. + + Returns: + SapAnalyticsCloudFolder instance + """ + if isinstance(json_data, str): + json_data = json_data.encode("utf-8") + if serde is None: + serde = get_serde() + return _sap_analytics_cloud_folder_from_nested_bytes(json_data, serde) + + +# ============================================================================= +# NESTED FORMAT CLASSES +# ============================================================================= + +class SapAnalyticsCloudFolderAttributes(AssetAttributes): + """SapAnalyticsCloudFolder-specific attributes for nested API format.""" + + sap_analytics_cloud_resource_id: Union[str, None, UnsetType] = UNSET + """Identifier of this asset in the SAP Analytics Cloud file repository. Stable across renames and used by the source APIs to address the resource.""" + + sap_analytics_cloud_object_id: Union[str, None, UnsetType] = UNSET + """Underlying object identifier reported by the SAP Analytics Cloud file repository for this asset.""" + + sap_analytics_cloud_repository_partition: Union[str, None, UnsetType] = UNSET + """Partition of the SAP Analytics Cloud file repository this asset lives in: PUBLIC for shared tenant content, SYSTEM for SAP-shipped content and SAP Analytics Cloud's own telemetry, USERS for the container holding per-user private areas, and PRIVATE for an individual user's own content. Reported by the source as folderType, and carried by every resource rather than only by folders.""" + + sap_analytics_cloud_workspace_id: Union[str, None, UnsetType] = UNSET + """Identifier of the SAP Analytics Cloud workspace that owns this asset.""" + + sap_analytics_cloud_workspace_name: Union[str, None, UnsetType] = UNSET + """Simple name of the SAP Analytics Cloud workspace that owns this asset.""" + + sap_analytics_cloud_parent_folder_qualified_name: Union[str, None, UnsetType] = UNSET + """Unique name of the SAP Analytics Cloud folder that directly contains this asset. Empty for a root-level folder and for a live model, neither of which is contained by a folder.""" + + sap_analytics_cloud_parent_folder_name: Union[str, None, UnsetType] = UNSET + """Simple name of the SAP Analytics Cloud folder that directly contains this asset. Empty for a root-level folder and for a live model, neither of which is contained by a folder.""" + + sap_technical_name: Union[str, None, UnsetType] = UNSET + """Technical identifier for SAP data objects, used for integration and internal reference.""" + + sap_logical_name: Union[str, None, UnsetType] = UNSET + """Logical, business-friendly identifier for SAP data objects, aligned with business terminology and concepts.""" + + sap_package_name: Union[str, None, UnsetType] = UNSET + """Name of the SAP package, representing a logical grouping of related SAP data objects.""" + + sap_component_name: Union[str, None, UnsetType] = UNSET + """Name of the SAP component, representing a specific functional area in SAP.""" + + sap_data_type: Union[str, None, UnsetType] = UNSET + """SAP-specific data types.""" + + sap_field_count: Union[int, None, UnsetType] = UNSET + """Represents the total number of fields, columns, or child assets present in a given SAP asset.""" + + sap_field_order: Union[int, None, UnsetType] = UNSET + """Indicates the sequential position of a field, column, or child asset within its parent SAP asset, starting from 1.""" + + catalog_dataset_guid: Union[str, None, UnsetType] = UNSET + """Unique identifier of the dataset this asset belongs to.""" + +class SapAnalyticsCloudFolderRelationshipAttributes(AssetRelationshipAttributes): + """SapAnalyticsCloudFolder-specific relationship attributes for nested API format.""" + + input_to_airflow_tasks: Union[List[RelatedAirflowTask], None, UnsetType] = UNSET + """Tasks to which this asset provides input.""" + + output_from_airflow_tasks: Union[List[RelatedAirflowTask], None, UnsetType] = UNSET + """Tasks from which this asset is output.""" + + anomalo_checks: Union[List[RelatedAnomaloCheck], None, UnsetType] = UNSET + """Checks that run on this asset.""" + + application: Union[RelatedApplication, None, UnsetType] = UNSET + """Application owning the Asset.""" + + application_field: Union[RelatedApplicationField, None, UnsetType] = UNSET + """ApplicationField owning the Asset.""" + + context_repositories: Union[List[RelatedContextRepository], None, UnsetType] = UNSET + """Context repositories that use this asset as input.""" + + data_contract_latest: Union[RelatedDataContract, None, UnsetType] = UNSET + """Latest version of the data contract (in any status) for this asset.""" + + data_contract_latest_certified: Union[RelatedDataContract, None, UnsetType] = UNSET + """Latest certified version of the data contract for this asset.""" + + output_port_data_products: Union[List[RelatedDataProduct], None, UnsetType] = UNSET + """Data products for which this asset is an output port.""" + + input_port_data_products: Union[List[RelatedDataProduct], None, UnsetType] = UNSET + """Data products for which this asset is an input port.""" + + model_implemented_entities: Union[List[RelatedModelEntity], None, UnsetType] = UNSET + """Entities implemented by this asset.""" + + model_implemented_attributes: Union[List[RelatedModelAttribute], None, UnsetType] = UNSET + """Attributes implemented by this asset.""" + + metrics: Union[List[RelatedMetric], None, UnsetType] = UNSET + """""" + + dq_base_dataset_rules: Union[List[RelatedDataQualityRule], None, UnsetType] = UNSET + """Rules that are applied on this dataset.""" + + dq_reference_dataset_rules: Union[List[RelatedDataQualityRule], None, UnsetType] = UNSET + """Rules where this dataset is referenced.""" + + gcp_dataplex_aspect_type_metadata_entities: Union[List[RelatedGCPDataplexAspectType], None, UnsetType] = UNSET + """Dataplex entries (assets) that have aspects of this Aspect Type attached.""" + + meanings: Union[List[RelatedAtlasGlossaryTerm], None, UnsetType] = UNSET + """Glossary terms that are linked to this asset.""" + + knowledge_linked_files: Union[List[RelatedKnowledgeFile], None, UnsetType] = UNSET + """Knowledge files linked to this asset.""" + + mc_monitors: Union[List[RelatedMCMonitor], None, UnsetType] = UNSET + """Monitors that observe this asset.""" + + mc_incidents: Union[List[RelatedMCIncident], None, UnsetType] = UNSET + """""" + + partial_child_fields: Union[List[RelatedPartialField], None, UnsetType] = UNSET + """Partial fields contained in the asset.""" + + partial_child_objects: Union[List[RelatedPartialObject], None, UnsetType] = UNSET + """Partial objects contained in the asset.""" + + input_to_processes: Union[List[RelatedProcess], None, UnsetType] = UNSET + """Processes to which this asset provides input.""" + + output_from_processes: Union[List[RelatedProcess], None, UnsetType] = UNSET + """Processes from which this asset is produced as output.""" + + user_def_relationship_to: Union[List[RelatedReferenceable], None, UnsetType] = UNSET + """""" + + user_def_relationship_from: Union[List[RelatedReferenceable], None, UnsetType] = UNSET + """""" + + files: Union[List[RelatedFile], None, UnsetType] = UNSET + """""" + + links: Union[List[RelatedLink], None, UnsetType] = UNSET + """Links that are attached to this asset.""" + + readme: Union[RelatedReadme, None, UnsetType] = UNSET + """README that is linked to this asset.""" + + sap_analytics_cloud_sub_folders: Union[List[RelatedSapAnalyticsCloudFolder], None, UnsetType] = UNSET + """Folders nested within this folder.""" + + sap_analytics_cloud_parent_folder: Union[RelatedSapAnalyticsCloudFolder, None, UnsetType] = UNSET + """Folder containing this folder.""" + + sap_analytics_cloud_models: Union[List[RelatedSapAnalyticsCloudModel], None, UnsetType] = UNSET + """Models held in this folder.""" + + sap_analytics_cloud_stories: Union[List[RelatedSapAnalyticsCloudStory], None, UnsetType] = UNSET + """Stories held in this folder.""" + + schema_registry_subjects: Union[List[RelatedSchemaRegistrySubject], None, UnsetType] = UNSET + """Schema registry subjects associated with this asset.""" + + soda_checks: Union[List[RelatedSodaCheck], None, UnsetType] = UNSET + """""" + + input_to_spark_jobs: Union[List[RelatedSparkJob], None, UnsetType] = UNSET + """""" + + output_from_spark_jobs: Union[List[RelatedSparkJob], None, UnsetType] = UNSET + """""" + +class SapAnalyticsCloudFolderNested(AssetNested): + """SapAnalyticsCloudFolder in nested API format for high-performance serialization.""" + + attributes: Union[SapAnalyticsCloudFolderAttributes, UnsetType] = UNSET + relationship_attributes: Union[SapAnalyticsCloudFolderRelationshipAttributes, UnsetType] = UNSET + append_relationship_attributes: Union[SapAnalyticsCloudFolderRelationshipAttributes, UnsetType] = UNSET + remove_relationship_attributes: Union[SapAnalyticsCloudFolderRelationshipAttributes, UnsetType] = UNSET + +# ============================================================================= +# CONVERSION HELPERS & CONSTANTS +# ============================================================================= + +_SAP_ANALYTICS_CLOUD_FOLDER_REL_FIELDS: List[str] = [ + *_ASSET_REL_FIELDS, + "input_to_airflow_tasks", + "output_from_airflow_tasks", + "anomalo_checks", + "application", + "application_field", + "context_repositories", + "data_contract_latest", + "data_contract_latest_certified", + "output_port_data_products", + "input_port_data_products", + "model_implemented_entities", + "model_implemented_attributes", + "metrics", + "dq_base_dataset_rules", + "dq_reference_dataset_rules", + "gcp_dataplex_aspect_type_metadata_entities", + "meanings", + "knowledge_linked_files", + "mc_monitors", + "mc_incidents", + "partial_child_fields", + "partial_child_objects", + "input_to_processes", + "output_from_processes", + "user_def_relationship_to", + "user_def_relationship_from", + "files", + "links", + "readme", + "sap_analytics_cloud_sub_folders", + "sap_analytics_cloud_parent_folder", + "sap_analytics_cloud_models", + "sap_analytics_cloud_stories", + "schema_registry_subjects", + "soda_checks", + "input_to_spark_jobs", + "output_from_spark_jobs", +] + +def _populate_sap_analytics_cloud_folder_attrs(attrs: SapAnalyticsCloudFolderAttributes, obj: SapAnalyticsCloudFolder) -> None: + """Populate SapAnalyticsCloudFolder-specific attributes on the attrs struct.""" + _populate_asset_attrs(attrs, obj) + attrs.sap_analytics_cloud_resource_id = obj.sap_analytics_cloud_resource_id + attrs.sap_analytics_cloud_object_id = obj.sap_analytics_cloud_object_id + attrs.sap_analytics_cloud_repository_partition = obj.sap_analytics_cloud_repository_partition + attrs.sap_analytics_cloud_workspace_id = obj.sap_analytics_cloud_workspace_id + attrs.sap_analytics_cloud_workspace_name = obj.sap_analytics_cloud_workspace_name + attrs.sap_analytics_cloud_parent_folder_qualified_name = obj.sap_analytics_cloud_parent_folder_qualified_name + attrs.sap_analytics_cloud_parent_folder_name = obj.sap_analytics_cloud_parent_folder_name + attrs.sap_technical_name = obj.sap_technical_name + attrs.sap_logical_name = obj.sap_logical_name + attrs.sap_package_name = obj.sap_package_name + attrs.sap_component_name = obj.sap_component_name + attrs.sap_data_type = obj.sap_data_type + attrs.sap_field_count = obj.sap_field_count + attrs.sap_field_order = obj.sap_field_order + attrs.catalog_dataset_guid = obj.catalog_dataset_guid + +def _extract_sap_analytics_cloud_folder_attrs(attrs: SapAnalyticsCloudFolderAttributes) -> dict: + """Extract all SapAnalyticsCloudFolder attributes from the attrs struct into a flat dict.""" + result = _extract_asset_attrs(attrs) + result["sap_analytics_cloud_resource_id"] = attrs.sap_analytics_cloud_resource_id + result["sap_analytics_cloud_object_id"] = attrs.sap_analytics_cloud_object_id + result["sap_analytics_cloud_repository_partition"] = attrs.sap_analytics_cloud_repository_partition + result["sap_analytics_cloud_workspace_id"] = attrs.sap_analytics_cloud_workspace_id + result["sap_analytics_cloud_workspace_name"] = attrs.sap_analytics_cloud_workspace_name + result["sap_analytics_cloud_parent_folder_qualified_name"] = attrs.sap_analytics_cloud_parent_folder_qualified_name + result["sap_analytics_cloud_parent_folder_name"] = attrs.sap_analytics_cloud_parent_folder_name + result["sap_technical_name"] = attrs.sap_technical_name + result["sap_logical_name"] = attrs.sap_logical_name + result["sap_package_name"] = attrs.sap_package_name + result["sap_component_name"] = attrs.sap_component_name + result["sap_data_type"] = attrs.sap_data_type + result["sap_field_count"] = attrs.sap_field_count + result["sap_field_order"] = attrs.sap_field_order + result["catalog_dataset_guid"] = attrs.catalog_dataset_guid + return result + +# ============================================================================= +# CONVERSION FUNCTIONS +# ============================================================================= + + +def _sap_analytics_cloud_folder_to_nested(sap_analytics_cloud_folder: SapAnalyticsCloudFolder) -> SapAnalyticsCloudFolderNested: + """Convert flat SapAnalyticsCloudFolder to nested format.""" + attrs = SapAnalyticsCloudFolderAttributes() + _populate_sap_analytics_cloud_folder_attrs(attrs, sap_analytics_cloud_folder) + # Categorize relationships by save semantic (REPLACE, APPEND, REMOVE) + replace_rels, append_rels, remove_rels = categorize_relationships( + sap_analytics_cloud_folder, _SAP_ANALYTICS_CLOUD_FOLDER_REL_FIELDS, SapAnalyticsCloudFolderRelationshipAttributes + ) + return SapAnalyticsCloudFolderNested( + guid=sap_analytics_cloud_folder.guid, + type_name=sap_analytics_cloud_folder.type_name, + status=sap_analytics_cloud_folder.status, + version=sap_analytics_cloud_folder.version, + create_time=sap_analytics_cloud_folder.create_time, + update_time=sap_analytics_cloud_folder.update_time, + created_by=sap_analytics_cloud_folder.created_by, + updated_by=sap_analytics_cloud_folder.updated_by, + classifications=sap_analytics_cloud_folder.classifications, + classification_names=sap_analytics_cloud_folder.classification_names, + meanings=sap_analytics_cloud_folder.meanings, + labels=sap_analytics_cloud_folder.labels, + business_attributes=sap_analytics_cloud_folder.business_attributes, + custom_attributes=sap_analytics_cloud_folder.custom_attributes, + pending_tasks=sap_analytics_cloud_folder.pending_tasks, + proxy=sap_analytics_cloud_folder.proxy, + is_incomplete=sap_analytics_cloud_folder.is_incomplete, + provenance_type=sap_analytics_cloud_folder.provenance_type, + home_id=sap_analytics_cloud_folder.home_id, + depth=sap_analytics_cloud_folder.depth, + immediate_upstream=sap_analytics_cloud_folder.immediate_upstream, + immediate_downstream=sap_analytics_cloud_folder.immediate_downstream, + attributes=attrs, + relationship_attributes=replace_rels, + append_relationship_attributes=append_rels, + remove_relationship_attributes=remove_rels, + ) + +def _sap_analytics_cloud_folder_from_nested(nested: SapAnalyticsCloudFolderNested) -> SapAnalyticsCloudFolder: + """Convert nested format to flat SapAnalyticsCloudFolder.""" + attrs = nested.attributes if nested.attributes is not UNSET else SapAnalyticsCloudFolderAttributes() + # Merge relationships from all three buckets + merged_rels = merge_relationships( + nested.relationship_attributes, + nested.append_relationship_attributes, + nested.remove_relationship_attributes, + _SAP_ANALYTICS_CLOUD_FOLDER_REL_FIELDS, + SapAnalyticsCloudFolderRelationshipAttributes + ) + return SapAnalyticsCloudFolder( + guid=nested.guid, + type_name=nested.type_name, + status=nested.status, + version=nested.version, + create_time=nested.create_time, + update_time=nested.update_time, + created_by=nested.created_by, + updated_by=nested.updated_by, + classifications=nested.classifications, + classification_names=nested.classification_names, + meanings=nested.meanings, + labels=nested.labels, + business_attributes=nested.business_attributes, + custom_attributes=nested.custom_attributes, + pending_tasks=nested.pending_tasks, + proxy=nested.proxy, + is_incomplete=nested.is_incomplete, + provenance_type=nested.provenance_type, + home_id=nested.home_id, + depth=nested.depth, + immediate_upstream=nested.immediate_upstream, + immediate_downstream=nested.immediate_downstream, + **_extract_sap_analytics_cloud_folder_attrs(attrs), + # Merged relationship attributes + **merged_rels, + ) + +def _sap_analytics_cloud_folder_to_nested_bytes(sap_analytics_cloud_folder: SapAnalyticsCloudFolder, serde: Serde) -> bytes: + """Convert flat SapAnalyticsCloudFolder to nested JSON bytes.""" + return serde.encode(_sap_analytics_cloud_folder_to_nested(sap_analytics_cloud_folder)) + + +def _sap_analytics_cloud_folder_from_nested_bytes(data: bytes, serde: Serde) -> SapAnalyticsCloudFolder: + """Convert nested JSON bytes to flat SapAnalyticsCloudFolder.""" + nested = serde.decode(data, SapAnalyticsCloudFolderNested) + return _sap_analytics_cloud_folder_from_nested(nested) + +# --------------------------------------------------------------------------- +# Deferred field descriptor initialization +# --------------------------------------------------------------------------- +from pyatlan.model.fields.atlan_fields import ( # noqa: E402 + KeywordField, + NumericField, + RelationField, +) + +SapAnalyticsCloudFolder.SAP_ANALYTICS_CLOUD_RESOURCE_ID = KeywordField("sapAnalyticsCloudResourceId", "sapAnalyticsCloudResourceId") +SapAnalyticsCloudFolder.SAP_ANALYTICS_CLOUD_OBJECT_ID = KeywordField("sapAnalyticsCloudObjectId", "sapAnalyticsCloudObjectId") +SapAnalyticsCloudFolder.SAP_ANALYTICS_CLOUD_REPOSITORY_PARTITION = KeywordField("sapAnalyticsCloudRepositoryPartition", "sapAnalyticsCloudRepositoryPartition") +SapAnalyticsCloudFolder.SAP_ANALYTICS_CLOUD_WORKSPACE_ID = KeywordField("sapAnalyticsCloudWorkspaceId", "sapAnalyticsCloudWorkspaceId") +SapAnalyticsCloudFolder.SAP_ANALYTICS_CLOUD_WORKSPACE_NAME = KeywordField("sapAnalyticsCloudWorkspaceName", "sapAnalyticsCloudWorkspaceName") +SapAnalyticsCloudFolder.SAP_ANALYTICS_CLOUD_PARENT_FOLDER_QUALIFIED_NAME = KeywordField("sapAnalyticsCloudParentFolderQualifiedName", "sapAnalyticsCloudParentFolderQualifiedName") +SapAnalyticsCloudFolder.SAP_ANALYTICS_CLOUD_PARENT_FOLDER_NAME = KeywordField("sapAnalyticsCloudParentFolderName", "sapAnalyticsCloudParentFolderName") +SapAnalyticsCloudFolder.SAP_TECHNICAL_NAME = KeywordField("sapTechnicalName", "sapTechnicalName") +SapAnalyticsCloudFolder.SAP_LOGICAL_NAME = KeywordField("sapLogicalName", "sapLogicalName") +SapAnalyticsCloudFolder.SAP_PACKAGE_NAME = KeywordField("sapPackageName", "sapPackageName") +SapAnalyticsCloudFolder.SAP_COMPONENT_NAME = KeywordField("sapComponentName", "sapComponentName") +SapAnalyticsCloudFolder.SAP_DATA_TYPE = KeywordField("sapDataType", "sapDataType") +SapAnalyticsCloudFolder.SAP_FIELD_COUNT = NumericField("sapFieldCount", "sapFieldCount") +SapAnalyticsCloudFolder.SAP_FIELD_ORDER = NumericField("sapFieldOrder", "sapFieldOrder") +SapAnalyticsCloudFolder.CATALOG_DATASET_GUID = KeywordField("catalogDatasetGuid", "catalogDatasetGuid") +SapAnalyticsCloudFolder.INPUT_TO_AIRFLOW_TASKS = RelationField("inputToAirflowTasks") +SapAnalyticsCloudFolder.OUTPUT_FROM_AIRFLOW_TASKS = RelationField("outputFromAirflowTasks") +SapAnalyticsCloudFolder.ANOMALO_CHECKS = RelationField("anomaloChecks") +SapAnalyticsCloudFolder.APPLICATION = RelationField("application") +SapAnalyticsCloudFolder.APPLICATION_FIELD = RelationField("applicationField") +SapAnalyticsCloudFolder.CONTEXT_REPOSITORIES = RelationField("contextRepositories") +SapAnalyticsCloudFolder.DATA_CONTRACT_LATEST = RelationField("dataContractLatest") +SapAnalyticsCloudFolder.DATA_CONTRACT_LATEST_CERTIFIED = RelationField("dataContractLatestCertified") +SapAnalyticsCloudFolder.OUTPUT_PORT_DATA_PRODUCTS = RelationField("outputPortDataProducts") +SapAnalyticsCloudFolder.INPUT_PORT_DATA_PRODUCTS = RelationField("inputPortDataProducts") +SapAnalyticsCloudFolder.MODEL_IMPLEMENTED_ENTITIES = RelationField("modelImplementedEntities") +SapAnalyticsCloudFolder.MODEL_IMPLEMENTED_ATTRIBUTES = RelationField("modelImplementedAttributes") +SapAnalyticsCloudFolder.METRICS = RelationField("metrics") +SapAnalyticsCloudFolder.DQ_BASE_DATASET_RULES = RelationField("dqBaseDatasetRules") +SapAnalyticsCloudFolder.DQ_REFERENCE_DATASET_RULES = RelationField("dqReferenceDatasetRules") +SapAnalyticsCloudFolder.GCP_DATAPLEX_ASPECT_TYPE_METADATA_ENTITIES = RelationField("gcpDataplexAspectTypeMetadataEntities") +SapAnalyticsCloudFolder.MEANINGS = RelationField("meanings") +SapAnalyticsCloudFolder.KNOWLEDGE_LINKED_FILES = RelationField("knowledgeLinkedFiles") +SapAnalyticsCloudFolder.MC_MONITORS = RelationField("mcMonitors") +SapAnalyticsCloudFolder.MC_INCIDENTS = RelationField("mcIncidents") +SapAnalyticsCloudFolder.PARTIAL_CHILD_FIELDS = RelationField("partialChildFields") +SapAnalyticsCloudFolder.PARTIAL_CHILD_OBJECTS = RelationField("partialChildObjects") +SapAnalyticsCloudFolder.INPUT_TO_PROCESSES = RelationField("inputToProcesses") +SapAnalyticsCloudFolder.OUTPUT_FROM_PROCESSES = RelationField("outputFromProcesses") +SapAnalyticsCloudFolder.USER_DEF_RELATIONSHIP_TO = RelationField("userDefRelationshipTo") +SapAnalyticsCloudFolder.USER_DEF_RELATIONSHIP_FROM = RelationField("userDefRelationshipFrom") +SapAnalyticsCloudFolder.FILES = RelationField("files") +SapAnalyticsCloudFolder.LINKS = RelationField("links") +SapAnalyticsCloudFolder.README = RelationField("readme") +SapAnalyticsCloudFolder.SAP_ANALYTICS_CLOUD_SUB_FOLDERS = RelationField("sapAnalyticsCloudSubFolders") +SapAnalyticsCloudFolder.SAP_ANALYTICS_CLOUD_PARENT_FOLDER = RelationField("sapAnalyticsCloudParentFolder") +SapAnalyticsCloudFolder.SAP_ANALYTICS_CLOUD_MODELS = RelationField("sapAnalyticsCloudModels") +SapAnalyticsCloudFolder.SAP_ANALYTICS_CLOUD_STORIES = RelationField("sapAnalyticsCloudStories") +SapAnalyticsCloudFolder.SCHEMA_REGISTRY_SUBJECTS = RelationField("schemaRegistrySubjects") +SapAnalyticsCloudFolder.SODA_CHECKS = RelationField("sodaChecks") +SapAnalyticsCloudFolder.INPUT_TO_SPARK_JOBS = RelationField("inputToSparkJobs") +SapAnalyticsCloudFolder.OUTPUT_FROM_SPARK_JOBS = RelationField("outputFromSparkJobs") \ No newline at end of file diff --git a/pyatlan_v9/model/assets/sap_analytics_cloud_model.py b/pyatlan_v9/model/assets/sap_analytics_cloud_model.py new file mode 100644 index 000000000..52c3efaed --- /dev/null +++ b/pyatlan_v9/model/assets/sap_analytics_cloud_model.py @@ -0,0 +1,911 @@ +# Auto-generated by PythonMsgspecRenderer.pkl - DO NOT EDIT +# ruff: noqa: ARG002 +# SPDX-License-Identifier: Apache-2.0 +# Copyright 2024 Atlan Pte. Ltd. + +""" +SapAnalyticsCloudModel asset model with flattened inheritance. + +This module provides: +- SapAnalyticsCloudModel: Flat asset class (easy to use) +- SapAnalyticsCloudModelAttributes: Nested attributes struct (extends AssetAttributes) +- SapAnalyticsCloudModelNested: Nested API format struct +""" + +from __future__ import annotations + +import re +from typing import Any, ClassVar, Dict, List, Set, Union + +import msgspec +from msgspec import UNSET, UnsetType + +from .airflow_related import RelatedAirflowTask +from .anomalo_related import RelatedAnomaloCheck +from .app_related import RelatedApplication, RelatedApplicationField +from .asset import ( + _ASSET_REL_FIELDS, + Asset, + AssetAttributes, + AssetNested, + AssetRelationshipAttributes, + _extract_asset_attrs, + _populate_asset_attrs, +) +from .context_related import RelatedContextRepository +from .data_contract_related import RelatedDataContract +from .data_mesh_related import RelatedDataProduct +from .data_quality_related import RelatedDataQualityRule, RelatedMetric +from .gcp_dataplex_related import RelatedGCPDataplexAspectType +from .gtc_related import RelatedAtlasGlossaryTerm +from .knowledge_related import RelatedKnowledgeFile +from .model_related import RelatedModelAttribute, RelatedModelEntity +from .monte_carlo_related import RelatedMCIncident, RelatedMCMonitor +from .partial_related import RelatedPartialField, RelatedPartialObject +from .process_related import RelatedProcess +from .referenceable_related import RelatedReferenceable +from .resource_related import RelatedFile, RelatedLink, RelatedReadme +from .schema_registry_related import RelatedSchemaRegistrySubject +from .soda_related import RelatedSodaCheck +from .spark_related import RelatedSparkJob +from pyatlan_v9.model.conversion_utils import categorize_relationships, merge_relationships +from pyatlan_v9.model.serde import Serde, get_serde +from pyatlan_v9.model.transform import register_asset + +from .sap_analytics_cloud_related import RelatedSapAnalyticsCloudColumn, RelatedSapAnalyticsCloudFolder, RelatedSapAnalyticsCloudModel + +# ============================================================================= +# FLAT ASSET CLASS +# ============================================================================= + +@register_asset +class SapAnalyticsCloudModel(Asset): + """ + Analytic or planning model in SAP Analytics Cloud. A model is a multidimensional object composed of a fact table, measures, dimensions and hierarchies, whose data is either imported into SAP Analytics Cloud or queried live from a remote system. + """ + + SAP_ANALYTICS_CLOUD_MODEL_KIND: ClassVar[Any] = None + SAP_ANALYTICS_CLOUD_DATA_ACCESS_MODE: ClassVar[Any] = None + SAP_ANALYTICS_CLOUD_PROVIDER_ID: ClassVar[Any] = None + SAP_ANALYTICS_CLOUD_MODEL_ID: ClassVar[Any] = None + SAP_ANALYTICS_CLOUD_STORY_COUNT: ClassVar[Any] = None + SAP_ANALYTICS_CLOUD_LIVE_CONNECTION_ID: ClassVar[Any] = None + SAP_ANALYTICS_CLOUD_LIVE_CONNECTION_NAME: ClassVar[Any] = None + SAP_ANALYTICS_CLOUD_LIVE_CONNECTION_TYPE: ClassVar[Any] = None + SAP_ANALYTICS_CLOUD_LIVE_CONNECTION_SYSTEM_TYPE: ClassVar[Any] = None + SAP_ANALYTICS_CLOUD_LIVE_CONNECTION_HOST: ClassVar[Any] = None + SAP_ANALYTICS_CLOUD_LIVE_CONNECTION_PORT: ClassVar[Any] = None + SAP_ANALYTICS_CLOUD_LIVE_CONNECTION_PROTOCOL: ClassVar[Any] = None + SAP_ANALYTICS_CLOUD_RESOURCE_ID: ClassVar[Any] = None + SAP_ANALYTICS_CLOUD_OBJECT_ID: ClassVar[Any] = None + SAP_ANALYTICS_CLOUD_REPOSITORY_PARTITION: ClassVar[Any] = None + SAP_ANALYTICS_CLOUD_WORKSPACE_ID: ClassVar[Any] = None + SAP_ANALYTICS_CLOUD_WORKSPACE_NAME: ClassVar[Any] = None + SAP_ANALYTICS_CLOUD_PARENT_FOLDER_QUALIFIED_NAME: ClassVar[Any] = None + SAP_ANALYTICS_CLOUD_PARENT_FOLDER_NAME: ClassVar[Any] = None + SAP_TECHNICAL_NAME: ClassVar[Any] = None + SAP_LOGICAL_NAME: ClassVar[Any] = None + SAP_PACKAGE_NAME: ClassVar[Any] = None + SAP_COMPONENT_NAME: ClassVar[Any] = None + SAP_DATA_TYPE: ClassVar[Any] = None + SAP_FIELD_COUNT: ClassVar[Any] = None + SAP_FIELD_ORDER: ClassVar[Any] = None + CATALOG_DATASET_GUID: ClassVar[Any] = None + INPUT_TO_AIRFLOW_TASKS: ClassVar[Any] = None + OUTPUT_FROM_AIRFLOW_TASKS: ClassVar[Any] = None + ANOMALO_CHECKS: ClassVar[Any] = None + APPLICATION: ClassVar[Any] = None + APPLICATION_FIELD: ClassVar[Any] = None + CONTEXT_REPOSITORIES: ClassVar[Any] = None + DATA_CONTRACT_LATEST: ClassVar[Any] = None + DATA_CONTRACT_LATEST_CERTIFIED: ClassVar[Any] = None + OUTPUT_PORT_DATA_PRODUCTS: ClassVar[Any] = None + INPUT_PORT_DATA_PRODUCTS: ClassVar[Any] = None + MODEL_IMPLEMENTED_ENTITIES: ClassVar[Any] = None + MODEL_IMPLEMENTED_ATTRIBUTES: ClassVar[Any] = None + METRICS: ClassVar[Any] = None + DQ_BASE_DATASET_RULES: ClassVar[Any] = None + DQ_REFERENCE_DATASET_RULES: ClassVar[Any] = None + GCP_DATAPLEX_ASPECT_TYPE_METADATA_ENTITIES: ClassVar[Any] = None + MEANINGS: ClassVar[Any] = None + KNOWLEDGE_LINKED_FILES: ClassVar[Any] = None + MC_MONITORS: ClassVar[Any] = None + MC_INCIDENTS: ClassVar[Any] = None + PARTIAL_CHILD_FIELDS: ClassVar[Any] = None + PARTIAL_CHILD_OBJECTS: ClassVar[Any] = None + INPUT_TO_PROCESSES: ClassVar[Any] = None + OUTPUT_FROM_PROCESSES: ClassVar[Any] = None + USER_DEF_RELATIONSHIP_TO: ClassVar[Any] = None + USER_DEF_RELATIONSHIP_FROM: ClassVar[Any] = None + FILES: ClassVar[Any] = None + LINKS: ClassVar[Any] = None + README: ClassVar[Any] = None + SAP_ANALYTICS_CLOUD_FOLDER: ClassVar[Any] = None + SAP_ANALYTICS_CLOUD_COLUMNS: ClassVar[Any] = None + SCHEMA_REGISTRY_SUBJECTS: ClassVar[Any] = None + SODA_CHECKS: ClassVar[Any] = None + INPUT_TO_SPARK_JOBS: ClassVar[Any] = None + OUTPUT_FROM_SPARK_JOBS: ClassVar[Any] = None + + sap_analytics_cloud_model_kind: Union[str, None, UnsetType] = UNSET + """Whether this model is an analytic model or a planning model, as reported by the source. ANALYTIC for a read-only model used for analysis and reporting, PLANNING for a model that supports write-back, versions and planning operations.""" + + sap_analytics_cloud_data_access_mode: Union[str, None, UnsetType] = UNSET + """How this model reaches its data, as reported by the source. IMPORT when the data is acquired into SAP Analytics Cloud and stored there, LIVE when it stays in a remote system and is queried live over a connection.""" + + sap_analytics_cloud_provider_id: Union[str, None, UnsetType] = UNSET + """Identifier of the OData provider that exposes this model's metadata. This is the key that joins a model to its columns.""" + + sap_analytics_cloud_model_id: Union[str, None, UnsetType] = UNSET + """Model identifier reported by the SAP Analytics Cloud tenant APIs, which differs from the file-repository resource identifier for live models.""" + + sap_analytics_cloud_story_count: Union[int, None, UnsetType] = UNSET + """Number of SAP Analytics Cloud stories that consume this model, as reported by the source.""" + + sap_analytics_cloud_live_connection_id: Union[str, None, UnsetType] = UNSET + """Identifier of the remote connection a live model reads from. Empty for imported models.""" + + sap_analytics_cloud_live_connection_name: Union[str, None, UnsetType] = UNSET + """Simple name of the remote connection a live model reads from. Empty for imported models.""" + + sap_analytics_cloud_live_connection_type: Union[str, None, UnsetType] = UNSET + """Type of the remote connection a live model reads from, such as DIRECT. Empty for imported models.""" + + sap_analytics_cloud_live_connection_system_type: Union[str, None, UnsetType] = UNSET + """Type of the remote system a live model reads from, such as DWC for SAP Datasphere. Empty for imported models.""" + + sap_analytics_cloud_live_connection_host: Union[str, None, UnsetType] = UNSET + """Host of the remote system a live model reads from. Empty for imported models.""" + + sap_analytics_cloud_live_connection_port: Union[int, None, UnsetType] = UNSET + """Port of the remote system a live model reads from. Empty for imported models.""" + + sap_analytics_cloud_live_connection_protocol: Union[str, None, UnsetType] = UNSET + """Protocol used to reach the remote system a live model reads from, such as HTTPS. Empty for imported models.""" + + sap_analytics_cloud_resource_id: Union[str, None, UnsetType] = UNSET + """Identifier of this asset in the SAP Analytics Cloud file repository. Stable across renames and used by the source APIs to address the resource.""" + + sap_analytics_cloud_object_id: Union[str, None, UnsetType] = UNSET + """Underlying object identifier reported by the SAP Analytics Cloud file repository for this asset.""" + + sap_analytics_cloud_repository_partition: Union[str, None, UnsetType] = UNSET + """Partition of the SAP Analytics Cloud file repository this asset lives in: PUBLIC for shared tenant content, SYSTEM for SAP-shipped content and SAP Analytics Cloud's own telemetry, USERS for the container holding per-user private areas, and PRIVATE for an individual user's own content. Reported by the source as folderType, and carried by every resource rather than only by folders.""" + + sap_analytics_cloud_workspace_id: Union[str, None, UnsetType] = UNSET + """Identifier of the SAP Analytics Cloud workspace that owns this asset.""" + + sap_analytics_cloud_workspace_name: Union[str, None, UnsetType] = UNSET + """Simple name of the SAP Analytics Cloud workspace that owns this asset.""" + + sap_analytics_cloud_parent_folder_qualified_name: Union[str, None, UnsetType] = UNSET + """Unique name of the SAP Analytics Cloud folder that directly contains this asset. Empty for a root-level folder and for a live model, neither of which is contained by a folder.""" + + sap_analytics_cloud_parent_folder_name: Union[str, None, UnsetType] = UNSET + """Simple name of the SAP Analytics Cloud folder that directly contains this asset. Empty for a root-level folder and for a live model, neither of which is contained by a folder.""" + + sap_technical_name: Union[str, None, UnsetType] = UNSET + """Technical identifier for SAP data objects, used for integration and internal reference.""" + + sap_logical_name: Union[str, None, UnsetType] = UNSET + """Logical, business-friendly identifier for SAP data objects, aligned with business terminology and concepts.""" + + sap_package_name: Union[str, None, UnsetType] = UNSET + """Name of the SAP package, representing a logical grouping of related SAP data objects.""" + + sap_component_name: Union[str, None, UnsetType] = UNSET + """Name of the SAP component, representing a specific functional area in SAP.""" + + sap_data_type: Union[str, None, UnsetType] = UNSET + """SAP-specific data types.""" + + sap_field_count: Union[int, None, UnsetType] = UNSET + """Represents the total number of fields, columns, or child assets present in a given SAP asset.""" + + sap_field_order: Union[int, None, UnsetType] = UNSET + """Indicates the sequential position of a field, column, or child asset within its parent SAP asset, starting from 1.""" + + catalog_dataset_guid: Union[str, None, UnsetType] = UNSET + """Unique identifier of the dataset this asset belongs to.""" + + input_to_airflow_tasks: Union[List[RelatedAirflowTask], None, UnsetType] = UNSET + """Tasks to which this asset provides input.""" + + output_from_airflow_tasks: Union[List[RelatedAirflowTask], None, UnsetType] = UNSET + """Tasks from which this asset is output.""" + + anomalo_checks: Union[List[RelatedAnomaloCheck], None, UnsetType] = UNSET + """Checks that run on this asset.""" + + application: Union[RelatedApplication, None, UnsetType] = UNSET + """Application owning the Asset.""" + + application_field: Union[RelatedApplicationField, None, UnsetType] = UNSET + """ApplicationField owning the Asset.""" + + context_repositories: Union[List[RelatedContextRepository], None, UnsetType] = UNSET + """Context repositories that use this asset as input.""" + + data_contract_latest: Union[RelatedDataContract, None, UnsetType] = UNSET + """Latest version of the data contract (in any status) for this asset.""" + + data_contract_latest_certified: Union[RelatedDataContract, None, UnsetType] = UNSET + """Latest certified version of the data contract for this asset.""" + + output_port_data_products: Union[List[RelatedDataProduct], None, UnsetType] = UNSET + """Data products for which this asset is an output port.""" + + input_port_data_products: Union[List[RelatedDataProduct], None, UnsetType] = UNSET + """Data products for which this asset is an input port.""" + + model_implemented_entities: Union[List[RelatedModelEntity], None, UnsetType] = UNSET + """Entities implemented by this asset.""" + + model_implemented_attributes: Union[List[RelatedModelAttribute], None, UnsetType] = UNSET + """Attributes implemented by this asset.""" + + metrics: Union[List[RelatedMetric], None, UnsetType] = UNSET + """""" + + dq_base_dataset_rules: Union[List[RelatedDataQualityRule], None, UnsetType] = UNSET + """Rules that are applied on this dataset.""" + + dq_reference_dataset_rules: Union[List[RelatedDataQualityRule], None, UnsetType] = UNSET + """Rules where this dataset is referenced.""" + + gcp_dataplex_aspect_type_metadata_entities: Union[List[RelatedGCPDataplexAspectType], None, UnsetType] = UNSET + """Dataplex entries (assets) that have aspects of this Aspect Type attached.""" + + meanings: Union[List[RelatedAtlasGlossaryTerm], None, UnsetType] = UNSET + """Glossary terms that are linked to this asset.""" + + knowledge_linked_files: Union[List[RelatedKnowledgeFile], None, UnsetType] = UNSET + """Knowledge files linked to this asset.""" + + mc_monitors: Union[List[RelatedMCMonitor], None, UnsetType] = UNSET + """Monitors that observe this asset.""" + + mc_incidents: Union[List[RelatedMCIncident], None, UnsetType] = UNSET + """""" + + partial_child_fields: Union[List[RelatedPartialField], None, UnsetType] = UNSET + """Partial fields contained in the asset.""" + + partial_child_objects: Union[List[RelatedPartialObject], None, UnsetType] = UNSET + """Partial objects contained in the asset.""" + + input_to_processes: Union[List[RelatedProcess], None, UnsetType] = UNSET + """Processes to which this asset provides input.""" + + output_from_processes: Union[List[RelatedProcess], None, UnsetType] = UNSET + """Processes from which this asset is produced as output.""" + + user_def_relationship_to: Union[List[RelatedReferenceable], None, UnsetType] = UNSET + """""" + + user_def_relationship_from: Union[List[RelatedReferenceable], None, UnsetType] = UNSET + """""" + + files: Union[List[RelatedFile], None, UnsetType] = UNSET + """""" + + links: Union[List[RelatedLink], None, UnsetType] = UNSET + """Links that are attached to this asset.""" + + readme: Union[RelatedReadme, None, UnsetType] = UNSET + """README that is linked to this asset.""" + + sap_analytics_cloud_folder: Union[RelatedSapAnalyticsCloudFolder, None, UnsetType] = UNSET + """Folder containing this model.""" + + sap_analytics_cloud_columns: Union[List[RelatedSapAnalyticsCloudColumn], None, UnsetType] = UNSET + """Columns defined within this model.""" + + schema_registry_subjects: Union[List[RelatedSchemaRegistrySubject], None, UnsetType] = UNSET + """Schema registry subjects associated with this asset.""" + + soda_checks: Union[List[RelatedSodaCheck], None, UnsetType] = UNSET + """""" + + input_to_spark_jobs: Union[List[RelatedSparkJob], None, UnsetType] = UNSET + """""" + + output_from_spark_jobs: Union[List[RelatedSparkJob], None, UnsetType] = UNSET + """""" + + def __post_init__(self) -> None: + self.type_name = "SapAnalyticsCloudModel" + + # ========================================================================= + # SDK Methods + # ========================================================================= + + _QUALIFIED_NAME_PATTERN: ClassVar[re.Pattern] = re.compile( + r"^.+/[^/]+/[^/]+/[^/]+$" + ) + + def validate(self, for_creation: bool = False) -> None: + """ + Dry-run validation of this SapAnalyticsCloudModel instance. + + Checks that required fields (type_name, name, qualified_name) are set. + When ``for_creation=True``, also checks hierarchy-specific fields + (parent references, denormalized attributes) needed to create this asset. + + This is purely opt-in and is NOT called by any serde path — only by + explicit user invocation (e.g., validating JSONL before sending to Atlan). + + Args: + for_creation: If True, also validate fields required for asset creation. + + Raises: + ValueError: If any required fields are missing or invalid. + """ + errors: list[str] = [] + if self.type_name is UNSET: + errors.append("type_name is required") + if self.name is UNSET: + errors.append("name is required") + if self.qualified_name is UNSET or self.qualified_name is None: + errors.append("qualified_name is required") + elif not self._QUALIFIED_NAME_PATTERN.match(self.qualified_name): + errors.append( + f"qualified_name '{self.qualified_name}' does not match expected " + f"pattern: {self._QUALIFIED_NAME_PATTERN.pattern}" + ) + if for_creation: + if self.connection_qualified_name is UNSET: + errors.append("connection_qualified_name is required for creation") + if self.sap_analytics_cloud_folder is UNSET: + errors.append("sap_analytics_cloud_folder is required for creation") + if errors: + raise ValueError(f"SapAnalyticsCloudModel validation failed: {errors}") + + def minimize(self) -> "SapAnalyticsCloudModel": + """ + Return a minimal copy of this SapAnalyticsCloudModel with only updater-required fields. + + Calls :meth:`validate` first to ensure the instance is valid, then + returns a new SapAnalyticsCloudModel with only the fields needed for an update + (qualified_name, name, and any type-specific additional fields). + + Returns: + A new SapAnalyticsCloudModel instance with only the minimum required fields. + """ + self.validate() + return SapAnalyticsCloudModel(qualified_name=self.qualified_name, name=self.name) + + def relate(self) -> "RelatedSapAnalyticsCloudModel": + """ + Create a :class:`RelatedSapAnalyticsCloudModel` reference from this instance. + + Returns a lightweight reference suitable for use in relationship + attributes. Prefers ``guid`` if set, otherwise falls back to + ``qualified_name``. + + Returns: + A RelatedSapAnalyticsCloudModel reference to this asset. + """ + if self.guid is not UNSET: + return RelatedSapAnalyticsCloudModel(guid=self.guid) + return RelatedSapAnalyticsCloudModel(qualified_name=self.qualified_name) + + # ========================================================================= + # Optimized Serialization Methods (override Asset base class) + # ========================================================================= + + def to_json(self, nested: bool = True, serde: Serde | None = None) -> str: + """ + Convert to JSON string using optimized nested struct serialization. + + Args: + nested: If True (default), use nested API format. If False, use flat format. + serde: Optional Serde instance for encoder reuse. Uses shared singleton if None. + + Returns: + JSON string representation + """ + if serde is None: + serde = get_serde() + if nested: + return self.to_nested_bytes(serde).decode("utf-8") + else: + return serde.encode(self).decode("utf-8") + + def to_nested_bytes(self, serde: Serde | None = None) -> bytes: + """Serialize to Atlas nested-format JSON bytes (pure msgspec, no dict intermediate).""" + if serde is None: + serde = get_serde() + return _sap_analytics_cloud_model_to_nested_bytes(self, serde) + + @staticmethod + def from_json(json_data: str | bytes, serde: Serde | None = None) -> SapAnalyticsCloudModel: + """ + Create from JSON string or bytes using optimized nested struct deserialization. + + Args: + json_data: JSON string or bytes to deserialize + serde: Optional Serde instance for decoder reuse. Uses shared singleton if None. + + Returns: + SapAnalyticsCloudModel instance + """ + if isinstance(json_data, str): + json_data = json_data.encode("utf-8") + if serde is None: + serde = get_serde() + return _sap_analytics_cloud_model_from_nested_bytes(json_data, serde) + + +# ============================================================================= +# NESTED FORMAT CLASSES +# ============================================================================= + +class SapAnalyticsCloudModelAttributes(AssetAttributes): + """SapAnalyticsCloudModel-specific attributes for nested API format.""" + + sap_analytics_cloud_model_kind: Union[str, None, UnsetType] = UNSET + """Whether this model is an analytic model or a planning model, as reported by the source. ANALYTIC for a read-only model used for analysis and reporting, PLANNING for a model that supports write-back, versions and planning operations.""" + + sap_analytics_cloud_data_access_mode: Union[str, None, UnsetType] = UNSET + """How this model reaches its data, as reported by the source. IMPORT when the data is acquired into SAP Analytics Cloud and stored there, LIVE when it stays in a remote system and is queried live over a connection.""" + + sap_analytics_cloud_provider_id: Union[str, None, UnsetType] = UNSET + """Identifier of the OData provider that exposes this model's metadata. This is the key that joins a model to its columns.""" + + sap_analytics_cloud_model_id: Union[str, None, UnsetType] = UNSET + """Model identifier reported by the SAP Analytics Cloud tenant APIs, which differs from the file-repository resource identifier for live models.""" + + sap_analytics_cloud_story_count: Union[int, None, UnsetType] = UNSET + """Number of SAP Analytics Cloud stories that consume this model, as reported by the source.""" + + sap_analytics_cloud_live_connection_id: Union[str, None, UnsetType] = UNSET + """Identifier of the remote connection a live model reads from. Empty for imported models.""" + + sap_analytics_cloud_live_connection_name: Union[str, None, UnsetType] = UNSET + """Simple name of the remote connection a live model reads from. Empty for imported models.""" + + sap_analytics_cloud_live_connection_type: Union[str, None, UnsetType] = UNSET + """Type of the remote connection a live model reads from, such as DIRECT. Empty for imported models.""" + + sap_analytics_cloud_live_connection_system_type: Union[str, None, UnsetType] = UNSET + """Type of the remote system a live model reads from, such as DWC for SAP Datasphere. Empty for imported models.""" + + sap_analytics_cloud_live_connection_host: Union[str, None, UnsetType] = UNSET + """Host of the remote system a live model reads from. Empty for imported models.""" + + sap_analytics_cloud_live_connection_port: Union[int, None, UnsetType] = UNSET + """Port of the remote system a live model reads from. Empty for imported models.""" + + sap_analytics_cloud_live_connection_protocol: Union[str, None, UnsetType] = UNSET + """Protocol used to reach the remote system a live model reads from, such as HTTPS. Empty for imported models.""" + + sap_analytics_cloud_resource_id: Union[str, None, UnsetType] = UNSET + """Identifier of this asset in the SAP Analytics Cloud file repository. Stable across renames and used by the source APIs to address the resource.""" + + sap_analytics_cloud_object_id: Union[str, None, UnsetType] = UNSET + """Underlying object identifier reported by the SAP Analytics Cloud file repository for this asset.""" + + sap_analytics_cloud_repository_partition: Union[str, None, UnsetType] = UNSET + """Partition of the SAP Analytics Cloud file repository this asset lives in: PUBLIC for shared tenant content, SYSTEM for SAP-shipped content and SAP Analytics Cloud's own telemetry, USERS for the container holding per-user private areas, and PRIVATE for an individual user's own content. Reported by the source as folderType, and carried by every resource rather than only by folders.""" + + sap_analytics_cloud_workspace_id: Union[str, None, UnsetType] = UNSET + """Identifier of the SAP Analytics Cloud workspace that owns this asset.""" + + sap_analytics_cloud_workspace_name: Union[str, None, UnsetType] = UNSET + """Simple name of the SAP Analytics Cloud workspace that owns this asset.""" + + sap_analytics_cloud_parent_folder_qualified_name: Union[str, None, UnsetType] = UNSET + """Unique name of the SAP Analytics Cloud folder that directly contains this asset. Empty for a root-level folder and for a live model, neither of which is contained by a folder.""" + + sap_analytics_cloud_parent_folder_name: Union[str, None, UnsetType] = UNSET + """Simple name of the SAP Analytics Cloud folder that directly contains this asset. Empty for a root-level folder and for a live model, neither of which is contained by a folder.""" + + sap_technical_name: Union[str, None, UnsetType] = UNSET + """Technical identifier for SAP data objects, used for integration and internal reference.""" + + sap_logical_name: Union[str, None, UnsetType] = UNSET + """Logical, business-friendly identifier for SAP data objects, aligned with business terminology and concepts.""" + + sap_package_name: Union[str, None, UnsetType] = UNSET + """Name of the SAP package, representing a logical grouping of related SAP data objects.""" + + sap_component_name: Union[str, None, UnsetType] = UNSET + """Name of the SAP component, representing a specific functional area in SAP.""" + + sap_data_type: Union[str, None, UnsetType] = UNSET + """SAP-specific data types.""" + + sap_field_count: Union[int, None, UnsetType] = UNSET + """Represents the total number of fields, columns, or child assets present in a given SAP asset.""" + + sap_field_order: Union[int, None, UnsetType] = UNSET + """Indicates the sequential position of a field, column, or child asset within its parent SAP asset, starting from 1.""" + + catalog_dataset_guid: Union[str, None, UnsetType] = UNSET + """Unique identifier of the dataset this asset belongs to.""" + +class SapAnalyticsCloudModelRelationshipAttributes(AssetRelationshipAttributes): + """SapAnalyticsCloudModel-specific relationship attributes for nested API format.""" + + input_to_airflow_tasks: Union[List[RelatedAirflowTask], None, UnsetType] = UNSET + """Tasks to which this asset provides input.""" + + output_from_airflow_tasks: Union[List[RelatedAirflowTask], None, UnsetType] = UNSET + """Tasks from which this asset is output.""" + + anomalo_checks: Union[List[RelatedAnomaloCheck], None, UnsetType] = UNSET + """Checks that run on this asset.""" + + application: Union[RelatedApplication, None, UnsetType] = UNSET + """Application owning the Asset.""" + + application_field: Union[RelatedApplicationField, None, UnsetType] = UNSET + """ApplicationField owning the Asset.""" + + context_repositories: Union[List[RelatedContextRepository], None, UnsetType] = UNSET + """Context repositories that use this asset as input.""" + + data_contract_latest: Union[RelatedDataContract, None, UnsetType] = UNSET + """Latest version of the data contract (in any status) for this asset.""" + + data_contract_latest_certified: Union[RelatedDataContract, None, UnsetType] = UNSET + """Latest certified version of the data contract for this asset.""" + + output_port_data_products: Union[List[RelatedDataProduct], None, UnsetType] = UNSET + """Data products for which this asset is an output port.""" + + input_port_data_products: Union[List[RelatedDataProduct], None, UnsetType] = UNSET + """Data products for which this asset is an input port.""" + + model_implemented_entities: Union[List[RelatedModelEntity], None, UnsetType] = UNSET + """Entities implemented by this asset.""" + + model_implemented_attributes: Union[List[RelatedModelAttribute], None, UnsetType] = UNSET + """Attributes implemented by this asset.""" + + metrics: Union[List[RelatedMetric], None, UnsetType] = UNSET + """""" + + dq_base_dataset_rules: Union[List[RelatedDataQualityRule], None, UnsetType] = UNSET + """Rules that are applied on this dataset.""" + + dq_reference_dataset_rules: Union[List[RelatedDataQualityRule], None, UnsetType] = UNSET + """Rules where this dataset is referenced.""" + + gcp_dataplex_aspect_type_metadata_entities: Union[List[RelatedGCPDataplexAspectType], None, UnsetType] = UNSET + """Dataplex entries (assets) that have aspects of this Aspect Type attached.""" + + meanings: Union[List[RelatedAtlasGlossaryTerm], None, UnsetType] = UNSET + """Glossary terms that are linked to this asset.""" + + knowledge_linked_files: Union[List[RelatedKnowledgeFile], None, UnsetType] = UNSET + """Knowledge files linked to this asset.""" + + mc_monitors: Union[List[RelatedMCMonitor], None, UnsetType] = UNSET + """Monitors that observe this asset.""" + + mc_incidents: Union[List[RelatedMCIncident], None, UnsetType] = UNSET + """""" + + partial_child_fields: Union[List[RelatedPartialField], None, UnsetType] = UNSET + """Partial fields contained in the asset.""" + + partial_child_objects: Union[List[RelatedPartialObject], None, UnsetType] = UNSET + """Partial objects contained in the asset.""" + + input_to_processes: Union[List[RelatedProcess], None, UnsetType] = UNSET + """Processes to which this asset provides input.""" + + output_from_processes: Union[List[RelatedProcess], None, UnsetType] = UNSET + """Processes from which this asset is produced as output.""" + + user_def_relationship_to: Union[List[RelatedReferenceable], None, UnsetType] = UNSET + """""" + + user_def_relationship_from: Union[List[RelatedReferenceable], None, UnsetType] = UNSET + """""" + + files: Union[List[RelatedFile], None, UnsetType] = UNSET + """""" + + links: Union[List[RelatedLink], None, UnsetType] = UNSET + """Links that are attached to this asset.""" + + readme: Union[RelatedReadme, None, UnsetType] = UNSET + """README that is linked to this asset.""" + + sap_analytics_cloud_folder: Union[RelatedSapAnalyticsCloudFolder, None, UnsetType] = UNSET + """Folder containing this model.""" + + sap_analytics_cloud_columns: Union[List[RelatedSapAnalyticsCloudColumn], None, UnsetType] = UNSET + """Columns defined within this model.""" + + schema_registry_subjects: Union[List[RelatedSchemaRegistrySubject], None, UnsetType] = UNSET + """Schema registry subjects associated with this asset.""" + + soda_checks: Union[List[RelatedSodaCheck], None, UnsetType] = UNSET + """""" + + input_to_spark_jobs: Union[List[RelatedSparkJob], None, UnsetType] = UNSET + """""" + + output_from_spark_jobs: Union[List[RelatedSparkJob], None, UnsetType] = UNSET + """""" + +class SapAnalyticsCloudModelNested(AssetNested): + """SapAnalyticsCloudModel in nested API format for high-performance serialization.""" + + attributes: Union[SapAnalyticsCloudModelAttributes, UnsetType] = UNSET + relationship_attributes: Union[SapAnalyticsCloudModelRelationshipAttributes, UnsetType] = UNSET + append_relationship_attributes: Union[SapAnalyticsCloudModelRelationshipAttributes, UnsetType] = UNSET + remove_relationship_attributes: Union[SapAnalyticsCloudModelRelationshipAttributes, UnsetType] = UNSET + +# ============================================================================= +# CONVERSION HELPERS & CONSTANTS +# ============================================================================= + +_SAP_ANALYTICS_CLOUD_MODEL_REL_FIELDS: List[str] = [ + *_ASSET_REL_FIELDS, + "input_to_airflow_tasks", + "output_from_airflow_tasks", + "anomalo_checks", + "application", + "application_field", + "context_repositories", + "data_contract_latest", + "data_contract_latest_certified", + "output_port_data_products", + "input_port_data_products", + "model_implemented_entities", + "model_implemented_attributes", + "metrics", + "dq_base_dataset_rules", + "dq_reference_dataset_rules", + "gcp_dataplex_aspect_type_metadata_entities", + "meanings", + "knowledge_linked_files", + "mc_monitors", + "mc_incidents", + "partial_child_fields", + "partial_child_objects", + "input_to_processes", + "output_from_processes", + "user_def_relationship_to", + "user_def_relationship_from", + "files", + "links", + "readme", + "sap_analytics_cloud_folder", + "sap_analytics_cloud_columns", + "schema_registry_subjects", + "soda_checks", + "input_to_spark_jobs", + "output_from_spark_jobs", +] + +def _populate_sap_analytics_cloud_model_attrs(attrs: SapAnalyticsCloudModelAttributes, obj: SapAnalyticsCloudModel) -> None: + """Populate SapAnalyticsCloudModel-specific attributes on the attrs struct.""" + _populate_asset_attrs(attrs, obj) + attrs.sap_analytics_cloud_model_kind = obj.sap_analytics_cloud_model_kind + attrs.sap_analytics_cloud_data_access_mode = obj.sap_analytics_cloud_data_access_mode + attrs.sap_analytics_cloud_provider_id = obj.sap_analytics_cloud_provider_id + attrs.sap_analytics_cloud_model_id = obj.sap_analytics_cloud_model_id + attrs.sap_analytics_cloud_story_count = obj.sap_analytics_cloud_story_count + attrs.sap_analytics_cloud_live_connection_id = obj.sap_analytics_cloud_live_connection_id + attrs.sap_analytics_cloud_live_connection_name = obj.sap_analytics_cloud_live_connection_name + attrs.sap_analytics_cloud_live_connection_type = obj.sap_analytics_cloud_live_connection_type + attrs.sap_analytics_cloud_live_connection_system_type = obj.sap_analytics_cloud_live_connection_system_type + attrs.sap_analytics_cloud_live_connection_host = obj.sap_analytics_cloud_live_connection_host + attrs.sap_analytics_cloud_live_connection_port = obj.sap_analytics_cloud_live_connection_port + attrs.sap_analytics_cloud_live_connection_protocol = obj.sap_analytics_cloud_live_connection_protocol + attrs.sap_analytics_cloud_resource_id = obj.sap_analytics_cloud_resource_id + attrs.sap_analytics_cloud_object_id = obj.sap_analytics_cloud_object_id + attrs.sap_analytics_cloud_repository_partition = obj.sap_analytics_cloud_repository_partition + attrs.sap_analytics_cloud_workspace_id = obj.sap_analytics_cloud_workspace_id + attrs.sap_analytics_cloud_workspace_name = obj.sap_analytics_cloud_workspace_name + attrs.sap_analytics_cloud_parent_folder_qualified_name = obj.sap_analytics_cloud_parent_folder_qualified_name + attrs.sap_analytics_cloud_parent_folder_name = obj.sap_analytics_cloud_parent_folder_name + attrs.sap_technical_name = obj.sap_technical_name + attrs.sap_logical_name = obj.sap_logical_name + attrs.sap_package_name = obj.sap_package_name + attrs.sap_component_name = obj.sap_component_name + attrs.sap_data_type = obj.sap_data_type + attrs.sap_field_count = obj.sap_field_count + attrs.sap_field_order = obj.sap_field_order + attrs.catalog_dataset_guid = obj.catalog_dataset_guid + +def _extract_sap_analytics_cloud_model_attrs(attrs: SapAnalyticsCloudModelAttributes) -> dict: + """Extract all SapAnalyticsCloudModel attributes from the attrs struct into a flat dict.""" + result = _extract_asset_attrs(attrs) + result["sap_analytics_cloud_model_kind"] = attrs.sap_analytics_cloud_model_kind + result["sap_analytics_cloud_data_access_mode"] = attrs.sap_analytics_cloud_data_access_mode + result["sap_analytics_cloud_provider_id"] = attrs.sap_analytics_cloud_provider_id + result["sap_analytics_cloud_model_id"] = attrs.sap_analytics_cloud_model_id + result["sap_analytics_cloud_story_count"] = attrs.sap_analytics_cloud_story_count + result["sap_analytics_cloud_live_connection_id"] = attrs.sap_analytics_cloud_live_connection_id + result["sap_analytics_cloud_live_connection_name"] = attrs.sap_analytics_cloud_live_connection_name + result["sap_analytics_cloud_live_connection_type"] = attrs.sap_analytics_cloud_live_connection_type + result["sap_analytics_cloud_live_connection_system_type"] = attrs.sap_analytics_cloud_live_connection_system_type + result["sap_analytics_cloud_live_connection_host"] = attrs.sap_analytics_cloud_live_connection_host + result["sap_analytics_cloud_live_connection_port"] = attrs.sap_analytics_cloud_live_connection_port + result["sap_analytics_cloud_live_connection_protocol"] = attrs.sap_analytics_cloud_live_connection_protocol + result["sap_analytics_cloud_resource_id"] = attrs.sap_analytics_cloud_resource_id + result["sap_analytics_cloud_object_id"] = attrs.sap_analytics_cloud_object_id + result["sap_analytics_cloud_repository_partition"] = attrs.sap_analytics_cloud_repository_partition + result["sap_analytics_cloud_workspace_id"] = attrs.sap_analytics_cloud_workspace_id + result["sap_analytics_cloud_workspace_name"] = attrs.sap_analytics_cloud_workspace_name + result["sap_analytics_cloud_parent_folder_qualified_name"] = attrs.sap_analytics_cloud_parent_folder_qualified_name + result["sap_analytics_cloud_parent_folder_name"] = attrs.sap_analytics_cloud_parent_folder_name + result["sap_technical_name"] = attrs.sap_technical_name + result["sap_logical_name"] = attrs.sap_logical_name + result["sap_package_name"] = attrs.sap_package_name + result["sap_component_name"] = attrs.sap_component_name + result["sap_data_type"] = attrs.sap_data_type + result["sap_field_count"] = attrs.sap_field_count + result["sap_field_order"] = attrs.sap_field_order + result["catalog_dataset_guid"] = attrs.catalog_dataset_guid + return result + +# ============================================================================= +# CONVERSION FUNCTIONS +# ============================================================================= + + +def _sap_analytics_cloud_model_to_nested(sap_analytics_cloud_model: SapAnalyticsCloudModel) -> SapAnalyticsCloudModelNested: + """Convert flat SapAnalyticsCloudModel to nested format.""" + attrs = SapAnalyticsCloudModelAttributes() + _populate_sap_analytics_cloud_model_attrs(attrs, sap_analytics_cloud_model) + # Categorize relationships by save semantic (REPLACE, APPEND, REMOVE) + replace_rels, append_rels, remove_rels = categorize_relationships( + sap_analytics_cloud_model, _SAP_ANALYTICS_CLOUD_MODEL_REL_FIELDS, SapAnalyticsCloudModelRelationshipAttributes + ) + return SapAnalyticsCloudModelNested( + guid=sap_analytics_cloud_model.guid, + type_name=sap_analytics_cloud_model.type_name, + status=sap_analytics_cloud_model.status, + version=sap_analytics_cloud_model.version, + create_time=sap_analytics_cloud_model.create_time, + update_time=sap_analytics_cloud_model.update_time, + created_by=sap_analytics_cloud_model.created_by, + updated_by=sap_analytics_cloud_model.updated_by, + classifications=sap_analytics_cloud_model.classifications, + classification_names=sap_analytics_cloud_model.classification_names, + meanings=sap_analytics_cloud_model.meanings, + labels=sap_analytics_cloud_model.labels, + business_attributes=sap_analytics_cloud_model.business_attributes, + custom_attributes=sap_analytics_cloud_model.custom_attributes, + pending_tasks=sap_analytics_cloud_model.pending_tasks, + proxy=sap_analytics_cloud_model.proxy, + is_incomplete=sap_analytics_cloud_model.is_incomplete, + provenance_type=sap_analytics_cloud_model.provenance_type, + home_id=sap_analytics_cloud_model.home_id, + depth=sap_analytics_cloud_model.depth, + immediate_upstream=sap_analytics_cloud_model.immediate_upstream, + immediate_downstream=sap_analytics_cloud_model.immediate_downstream, + attributes=attrs, + relationship_attributes=replace_rels, + append_relationship_attributes=append_rels, + remove_relationship_attributes=remove_rels, + ) + +def _sap_analytics_cloud_model_from_nested(nested: SapAnalyticsCloudModelNested) -> SapAnalyticsCloudModel: + """Convert nested format to flat SapAnalyticsCloudModel.""" + attrs = nested.attributes if nested.attributes is not UNSET else SapAnalyticsCloudModelAttributes() + # Merge relationships from all three buckets + merged_rels = merge_relationships( + nested.relationship_attributes, + nested.append_relationship_attributes, + nested.remove_relationship_attributes, + _SAP_ANALYTICS_CLOUD_MODEL_REL_FIELDS, + SapAnalyticsCloudModelRelationshipAttributes + ) + return SapAnalyticsCloudModel( + guid=nested.guid, + type_name=nested.type_name, + status=nested.status, + version=nested.version, + create_time=nested.create_time, + update_time=nested.update_time, + created_by=nested.created_by, + updated_by=nested.updated_by, + classifications=nested.classifications, + classification_names=nested.classification_names, + meanings=nested.meanings, + labels=nested.labels, + business_attributes=nested.business_attributes, + custom_attributes=nested.custom_attributes, + pending_tasks=nested.pending_tasks, + proxy=nested.proxy, + is_incomplete=nested.is_incomplete, + provenance_type=nested.provenance_type, + home_id=nested.home_id, + depth=nested.depth, + immediate_upstream=nested.immediate_upstream, + immediate_downstream=nested.immediate_downstream, + **_extract_sap_analytics_cloud_model_attrs(attrs), + # Merged relationship attributes + **merged_rels, + ) + +def _sap_analytics_cloud_model_to_nested_bytes(sap_analytics_cloud_model: SapAnalyticsCloudModel, serde: Serde) -> bytes: + """Convert flat SapAnalyticsCloudModel to nested JSON bytes.""" + return serde.encode(_sap_analytics_cloud_model_to_nested(sap_analytics_cloud_model)) + + +def _sap_analytics_cloud_model_from_nested_bytes(data: bytes, serde: Serde) -> SapAnalyticsCloudModel: + """Convert nested JSON bytes to flat SapAnalyticsCloudModel.""" + nested = serde.decode(data, SapAnalyticsCloudModelNested) + return _sap_analytics_cloud_model_from_nested(nested) + +# --------------------------------------------------------------------------- +# Deferred field descriptor initialization +# --------------------------------------------------------------------------- +from pyatlan.model.fields.atlan_fields import ( # noqa: E402 + KeywordField, + NumericField, + RelationField, +) + +SapAnalyticsCloudModel.SAP_ANALYTICS_CLOUD_MODEL_KIND = KeywordField("sapAnalyticsCloudModelKind", "sapAnalyticsCloudModelKind") +SapAnalyticsCloudModel.SAP_ANALYTICS_CLOUD_DATA_ACCESS_MODE = KeywordField("sapAnalyticsCloudDataAccessMode", "sapAnalyticsCloudDataAccessMode") +SapAnalyticsCloudModel.SAP_ANALYTICS_CLOUD_PROVIDER_ID = KeywordField("sapAnalyticsCloudProviderId", "sapAnalyticsCloudProviderId") +SapAnalyticsCloudModel.SAP_ANALYTICS_CLOUD_MODEL_ID = KeywordField("sapAnalyticsCloudModelId", "sapAnalyticsCloudModelId") +SapAnalyticsCloudModel.SAP_ANALYTICS_CLOUD_STORY_COUNT = NumericField("sapAnalyticsCloudStoryCount", "sapAnalyticsCloudStoryCount") +SapAnalyticsCloudModel.SAP_ANALYTICS_CLOUD_LIVE_CONNECTION_ID = KeywordField("sapAnalyticsCloudLiveConnectionId", "sapAnalyticsCloudLiveConnectionId") +SapAnalyticsCloudModel.SAP_ANALYTICS_CLOUD_LIVE_CONNECTION_NAME = KeywordField("sapAnalyticsCloudLiveConnectionName", "sapAnalyticsCloudLiveConnectionName") +SapAnalyticsCloudModel.SAP_ANALYTICS_CLOUD_LIVE_CONNECTION_TYPE = KeywordField("sapAnalyticsCloudLiveConnectionType", "sapAnalyticsCloudLiveConnectionType") +SapAnalyticsCloudModel.SAP_ANALYTICS_CLOUD_LIVE_CONNECTION_SYSTEM_TYPE = KeywordField("sapAnalyticsCloudLiveConnectionSystemType", "sapAnalyticsCloudLiveConnectionSystemType") +SapAnalyticsCloudModel.SAP_ANALYTICS_CLOUD_LIVE_CONNECTION_HOST = KeywordField("sapAnalyticsCloudLiveConnectionHost", "sapAnalyticsCloudLiveConnectionHost") +SapAnalyticsCloudModel.SAP_ANALYTICS_CLOUD_LIVE_CONNECTION_PORT = NumericField("sapAnalyticsCloudLiveConnectionPort", "sapAnalyticsCloudLiveConnectionPort") +SapAnalyticsCloudModel.SAP_ANALYTICS_CLOUD_LIVE_CONNECTION_PROTOCOL = KeywordField("sapAnalyticsCloudLiveConnectionProtocol", "sapAnalyticsCloudLiveConnectionProtocol") +SapAnalyticsCloudModel.SAP_ANALYTICS_CLOUD_RESOURCE_ID = KeywordField("sapAnalyticsCloudResourceId", "sapAnalyticsCloudResourceId") +SapAnalyticsCloudModel.SAP_ANALYTICS_CLOUD_OBJECT_ID = KeywordField("sapAnalyticsCloudObjectId", "sapAnalyticsCloudObjectId") +SapAnalyticsCloudModel.SAP_ANALYTICS_CLOUD_REPOSITORY_PARTITION = KeywordField("sapAnalyticsCloudRepositoryPartition", "sapAnalyticsCloudRepositoryPartition") +SapAnalyticsCloudModel.SAP_ANALYTICS_CLOUD_WORKSPACE_ID = KeywordField("sapAnalyticsCloudWorkspaceId", "sapAnalyticsCloudWorkspaceId") +SapAnalyticsCloudModel.SAP_ANALYTICS_CLOUD_WORKSPACE_NAME = KeywordField("sapAnalyticsCloudWorkspaceName", "sapAnalyticsCloudWorkspaceName") +SapAnalyticsCloudModel.SAP_ANALYTICS_CLOUD_PARENT_FOLDER_QUALIFIED_NAME = KeywordField("sapAnalyticsCloudParentFolderQualifiedName", "sapAnalyticsCloudParentFolderQualifiedName") +SapAnalyticsCloudModel.SAP_ANALYTICS_CLOUD_PARENT_FOLDER_NAME = KeywordField("sapAnalyticsCloudParentFolderName", "sapAnalyticsCloudParentFolderName") +SapAnalyticsCloudModel.SAP_TECHNICAL_NAME = KeywordField("sapTechnicalName", "sapTechnicalName") +SapAnalyticsCloudModel.SAP_LOGICAL_NAME = KeywordField("sapLogicalName", "sapLogicalName") +SapAnalyticsCloudModel.SAP_PACKAGE_NAME = KeywordField("sapPackageName", "sapPackageName") +SapAnalyticsCloudModel.SAP_COMPONENT_NAME = KeywordField("sapComponentName", "sapComponentName") +SapAnalyticsCloudModel.SAP_DATA_TYPE = KeywordField("sapDataType", "sapDataType") +SapAnalyticsCloudModel.SAP_FIELD_COUNT = NumericField("sapFieldCount", "sapFieldCount") +SapAnalyticsCloudModel.SAP_FIELD_ORDER = NumericField("sapFieldOrder", "sapFieldOrder") +SapAnalyticsCloudModel.CATALOG_DATASET_GUID = KeywordField("catalogDatasetGuid", "catalogDatasetGuid") +SapAnalyticsCloudModel.INPUT_TO_AIRFLOW_TASKS = RelationField("inputToAirflowTasks") +SapAnalyticsCloudModel.OUTPUT_FROM_AIRFLOW_TASKS = RelationField("outputFromAirflowTasks") +SapAnalyticsCloudModel.ANOMALO_CHECKS = RelationField("anomaloChecks") +SapAnalyticsCloudModel.APPLICATION = RelationField("application") +SapAnalyticsCloudModel.APPLICATION_FIELD = RelationField("applicationField") +SapAnalyticsCloudModel.CONTEXT_REPOSITORIES = RelationField("contextRepositories") +SapAnalyticsCloudModel.DATA_CONTRACT_LATEST = RelationField("dataContractLatest") +SapAnalyticsCloudModel.DATA_CONTRACT_LATEST_CERTIFIED = RelationField("dataContractLatestCertified") +SapAnalyticsCloudModel.OUTPUT_PORT_DATA_PRODUCTS = RelationField("outputPortDataProducts") +SapAnalyticsCloudModel.INPUT_PORT_DATA_PRODUCTS = RelationField("inputPortDataProducts") +SapAnalyticsCloudModel.MODEL_IMPLEMENTED_ENTITIES = RelationField("modelImplementedEntities") +SapAnalyticsCloudModel.MODEL_IMPLEMENTED_ATTRIBUTES = RelationField("modelImplementedAttributes") +SapAnalyticsCloudModel.METRICS = RelationField("metrics") +SapAnalyticsCloudModel.DQ_BASE_DATASET_RULES = RelationField("dqBaseDatasetRules") +SapAnalyticsCloudModel.DQ_REFERENCE_DATASET_RULES = RelationField("dqReferenceDatasetRules") +SapAnalyticsCloudModel.GCP_DATAPLEX_ASPECT_TYPE_METADATA_ENTITIES = RelationField("gcpDataplexAspectTypeMetadataEntities") +SapAnalyticsCloudModel.MEANINGS = RelationField("meanings") +SapAnalyticsCloudModel.KNOWLEDGE_LINKED_FILES = RelationField("knowledgeLinkedFiles") +SapAnalyticsCloudModel.MC_MONITORS = RelationField("mcMonitors") +SapAnalyticsCloudModel.MC_INCIDENTS = RelationField("mcIncidents") +SapAnalyticsCloudModel.PARTIAL_CHILD_FIELDS = RelationField("partialChildFields") +SapAnalyticsCloudModel.PARTIAL_CHILD_OBJECTS = RelationField("partialChildObjects") +SapAnalyticsCloudModel.INPUT_TO_PROCESSES = RelationField("inputToProcesses") +SapAnalyticsCloudModel.OUTPUT_FROM_PROCESSES = RelationField("outputFromProcesses") +SapAnalyticsCloudModel.USER_DEF_RELATIONSHIP_TO = RelationField("userDefRelationshipTo") +SapAnalyticsCloudModel.USER_DEF_RELATIONSHIP_FROM = RelationField("userDefRelationshipFrom") +SapAnalyticsCloudModel.FILES = RelationField("files") +SapAnalyticsCloudModel.LINKS = RelationField("links") +SapAnalyticsCloudModel.README = RelationField("readme") +SapAnalyticsCloudModel.SAP_ANALYTICS_CLOUD_FOLDER = RelationField("sapAnalyticsCloudFolder") +SapAnalyticsCloudModel.SAP_ANALYTICS_CLOUD_COLUMNS = RelationField("sapAnalyticsCloudColumns") +SapAnalyticsCloudModel.SCHEMA_REGISTRY_SUBJECTS = RelationField("schemaRegistrySubjects") +SapAnalyticsCloudModel.SODA_CHECKS = RelationField("sodaChecks") +SapAnalyticsCloudModel.INPUT_TO_SPARK_JOBS = RelationField("inputToSparkJobs") +SapAnalyticsCloudModel.OUTPUT_FROM_SPARK_JOBS = RelationField("outputFromSparkJobs") \ No newline at end of file diff --git a/pyatlan_v9/model/assets/sap_analytics_cloud_related.py b/pyatlan_v9/model/assets/sap_analytics_cloud_related.py new file mode 100644 index 000000000..cfb3a2ea1 --- /dev/null +++ b/pyatlan_v9/model/assets/sap_analytics_cloud_related.py @@ -0,0 +1,173 @@ +# Auto-generated by PythonMsgspecRenderer.pkl - DO NOT EDIT +# SPDX-License-Identifier: Apache-2.0 +# Copyright 2024 Atlan Pte. Ltd. + +""" +Related type classes for SapAnalyticsCloud module. + +This module contains all Related{Type} classes for the SapAnalyticsCloud type hierarchy. +These classes are used for relationship attributes to reference related entities. +""" + +from __future__ import annotations + +from typing import Dict, List, Set, Union + +import msgspec +from msgspec import UNSET, UnsetType + +from .referenceable_related import RelatedReferenceable +from .sap_related import RelatedSAP + +__all__ = [ + "RelatedSapAnalyticsCloud", + "RelatedSapAnalyticsCloudFolder", + "RelatedSapAnalyticsCloudModel", + "RelatedSapAnalyticsCloudStory", + "RelatedSapAnalyticsCloudColumn", +] + + +class RelatedSapAnalyticsCloud(RelatedSAP): + """ + Related entity reference for SapAnalyticsCloud assets. + + Extends RelatedSAP with SapAnalyticsCloud-specific attributes. + """ + + # type_name inherited from parent with default=UNSET + # __post_init__ sets it to "SapAnalyticsCloud" so it serializes correctly + + sap_analytics_cloud_resource_id: Union[str, None, UnsetType] = UNSET + """Identifier of this asset in the SAP Analytics Cloud file repository. Stable across renames and used by the source APIs to address the resource.""" + + sap_analytics_cloud_object_id: Union[str, None, UnsetType] = UNSET + """Underlying object identifier reported by the SAP Analytics Cloud file repository for this asset.""" + + sap_analytics_cloud_repository_partition: Union[str, None, UnsetType] = UNSET + """Partition of the SAP Analytics Cloud file repository this asset lives in: PUBLIC for shared tenant content, SYSTEM for SAP-shipped content and SAP Analytics Cloud's own telemetry, USERS for the container holding per-user private areas, and PRIVATE for an individual user's own content. Reported by the source as folderType, and carried by every resource rather than only by folders.""" + + sap_analytics_cloud_workspace_id: Union[str, None, UnsetType] = UNSET + """Identifier of the SAP Analytics Cloud workspace that owns this asset.""" + + sap_analytics_cloud_workspace_name: Union[str, None, UnsetType] = UNSET + """Simple name of the SAP Analytics Cloud workspace that owns this asset.""" + + sap_analytics_cloud_parent_folder_qualified_name: Union[str, None, UnsetType] = UNSET + """Unique name of the SAP Analytics Cloud folder that directly contains this asset. Empty for a root-level folder and for a live model, neither of which is contained by a folder.""" + + sap_analytics_cloud_parent_folder_name: Union[str, None, UnsetType] = UNSET + """Simple name of the SAP Analytics Cloud folder that directly contains this asset. Empty for a root-level folder and for a live model, neither of which is contained by a folder.""" + + def __post_init__(self) -> None: + RelatedReferenceable.__post_init__(self) + if self.type_name is UNSET: + self.type_name = "SapAnalyticsCloud" + +class RelatedSapAnalyticsCloudFolder(RelatedSapAnalyticsCloud): + """ + Related entity reference for SapAnalyticsCloudFolder assets. + + Extends RelatedSapAnalyticsCloud with SapAnalyticsCloudFolder-specific attributes. + """ + + # type_name inherited from parent with default=UNSET + # __post_init__ sets it to "SapAnalyticsCloudFolder" so it serializes correctly + + def __post_init__(self) -> None: + RelatedReferenceable.__post_init__(self) + if self.type_name is UNSET: + self.type_name = "SapAnalyticsCloudFolder" + +class RelatedSapAnalyticsCloudModel(RelatedSapAnalyticsCloud): + """ + Related entity reference for SapAnalyticsCloudModel assets. + + Extends RelatedSapAnalyticsCloud with SapAnalyticsCloudModel-specific attributes. + """ + + # type_name inherited from parent with default=UNSET + # __post_init__ sets it to "SapAnalyticsCloudModel" so it serializes correctly + + sap_analytics_cloud_model_kind: Union[str, None, UnsetType] = UNSET + """Whether this model is an analytic model or a planning model, as reported by the source. ANALYTIC for a read-only model used for analysis and reporting, PLANNING for a model that supports write-back, versions and planning operations.""" + + sap_analytics_cloud_data_access_mode: Union[str, None, UnsetType] = UNSET + """How this model reaches its data, as reported by the source. IMPORT when the data is acquired into SAP Analytics Cloud and stored there, LIVE when it stays in a remote system and is queried live over a connection.""" + + sap_analytics_cloud_provider_id: Union[str, None, UnsetType] = UNSET + """Identifier of the OData provider that exposes this model's metadata. This is the key that joins a model to its columns.""" + + sap_analytics_cloud_model_id: Union[str, None, UnsetType] = UNSET + """Model identifier reported by the SAP Analytics Cloud tenant APIs, which differs from the file-repository resource identifier for live models.""" + + sap_analytics_cloud_story_count: Union[int, None, UnsetType] = UNSET + """Number of SAP Analytics Cloud stories that consume this model, as reported by the source.""" + + sap_analytics_cloud_live_connection_id: Union[str, None, UnsetType] = UNSET + """Identifier of the remote connection a live model reads from. Empty for imported models.""" + + sap_analytics_cloud_live_connection_name: Union[str, None, UnsetType] = UNSET + """Simple name of the remote connection a live model reads from. Empty for imported models.""" + + sap_analytics_cloud_live_connection_type: Union[str, None, UnsetType] = UNSET + """Type of the remote connection a live model reads from, such as DIRECT. Empty for imported models.""" + + sap_analytics_cloud_live_connection_system_type: Union[str, None, UnsetType] = UNSET + """Type of the remote system a live model reads from, such as DWC for SAP Datasphere. Empty for imported models.""" + + sap_analytics_cloud_live_connection_host: Union[str, None, UnsetType] = UNSET + """Host of the remote system a live model reads from. Empty for imported models.""" + + sap_analytics_cloud_live_connection_port: Union[int, None, UnsetType] = UNSET + """Port of the remote system a live model reads from. Empty for imported models.""" + + sap_analytics_cloud_live_connection_protocol: Union[str, None, UnsetType] = UNSET + """Protocol used to reach the remote system a live model reads from, such as HTTPS. Empty for imported models.""" + + def __post_init__(self) -> None: + RelatedReferenceable.__post_init__(self) + if self.type_name is UNSET: + self.type_name = "SapAnalyticsCloudModel" + +class RelatedSapAnalyticsCloudStory(RelatedSapAnalyticsCloud): + """ + Related entity reference for SapAnalyticsCloudStory assets. + + Extends RelatedSapAnalyticsCloud with SapAnalyticsCloudStory-specific attributes. + """ + + # type_name inherited from parent with default=UNSET + # __post_init__ sets it to "SapAnalyticsCloudStory" so it serializes correctly + + sap_analytics_cloud_story_kind: Union[str, None, UnsetType] = UNSET + """Subtype of this story as reported by the source, such as COMPOSITE for a story that embeds other stories or TEMPLATE for a story used as the starting point for new ones. Empty for an ordinary story.""" + + sap_analytics_cloud_is_sample: Union[bool, None, UnsetType] = UNSET + """Whether this story is one of the samples shipped with SAP Analytics Cloud rather than tenant content.""" + + def __post_init__(self) -> None: + RelatedReferenceable.__post_init__(self) + if self.type_name is UNSET: + self.type_name = "SapAnalyticsCloudStory" + +class RelatedSapAnalyticsCloudColumn(RelatedSapAnalyticsCloud): + """ + Related entity reference for SapAnalyticsCloudColumn assets. + + Extends RelatedSapAnalyticsCloud with SapAnalyticsCloudColumn-specific attributes. + """ + + # type_name inherited from parent with default=UNSET + # __post_init__ sets it to "SapAnalyticsCloudColumn" so it serializes correctly + + sap_analytics_cloud_model_qualified_name: Union[str, None, UnsetType] = UNSET + """Unique name of the SAP Analytics Cloud model in which this column exists.""" + + sap_analytics_cloud_model_name: Union[str, None, UnsetType] = UNSET + """Simple name of the SAP Analytics Cloud model in which this column exists.""" + + def __post_init__(self) -> None: + RelatedReferenceable.__post_init__(self) + if self.type_name is UNSET: + self.type_name = "SapAnalyticsCloudColumn" diff --git a/pyatlan_v9/model/assets/sap_analytics_cloud_story.py b/pyatlan_v9/model/assets/sap_analytics_cloud_story.py new file mode 100644 index 000000000..b9ea0052b --- /dev/null +++ b/pyatlan_v9/model/assets/sap_analytics_cloud_story.py @@ -0,0 +1,803 @@ +# Auto-generated by PythonMsgspecRenderer.pkl - DO NOT EDIT +# ruff: noqa: ARG002 +# SPDX-License-Identifier: Apache-2.0 +# Copyright 2024 Atlan Pte. Ltd. + +""" +SapAnalyticsCloudStory asset model with flattened inheritance. + +This module provides: +- SapAnalyticsCloudStory: Flat asset class (easy to use) +- SapAnalyticsCloudStoryAttributes: Nested attributes struct (extends AssetAttributes) +- SapAnalyticsCloudStoryNested: Nested API format struct +""" + +from __future__ import annotations + +import re +from typing import Any, ClassVar, Dict, List, Set, Union + +import msgspec +from msgspec import UNSET, UnsetType + +from .airflow_related import RelatedAirflowTask +from .anomalo_related import RelatedAnomaloCheck +from .app_related import RelatedApplication, RelatedApplicationField +from .asset import ( + _ASSET_REL_FIELDS, + Asset, + AssetAttributes, + AssetNested, + AssetRelationshipAttributes, + _extract_asset_attrs, + _populate_asset_attrs, +) +from .context_related import RelatedContextRepository +from .data_contract_related import RelatedDataContract +from .data_mesh_related import RelatedDataProduct +from .data_quality_related import RelatedDataQualityRule, RelatedMetric +from .gcp_dataplex_related import RelatedGCPDataplexAspectType +from .gtc_related import RelatedAtlasGlossaryTerm +from .knowledge_related import RelatedKnowledgeFile +from .model_related import RelatedModelAttribute, RelatedModelEntity +from .monte_carlo_related import RelatedMCIncident, RelatedMCMonitor +from .partial_related import RelatedPartialField, RelatedPartialObject +from .process_related import RelatedProcess +from .referenceable_related import RelatedReferenceable +from .resource_related import RelatedFile, RelatedLink, RelatedReadme +from .schema_registry_related import RelatedSchemaRegistrySubject +from .soda_related import RelatedSodaCheck +from .spark_related import RelatedSparkJob +from pyatlan_v9.model.conversion_utils import categorize_relationships, merge_relationships +from pyatlan_v9.model.serde import Serde, get_serde +from pyatlan_v9.model.transform import register_asset + +from .sap_analytics_cloud_related import RelatedSapAnalyticsCloudFolder, RelatedSapAnalyticsCloudStory + +# ============================================================================= +# FLAT ASSET CLASS +# ============================================================================= + +@register_asset +class SapAnalyticsCloudStory(Asset): + """ + Story in SAP Analytics Cloud. A story is an interactive presentation built over one or more models, and can itself be composed of other stories or act as a template for new ones. + """ + + SAP_ANALYTICS_CLOUD_STORY_KIND: ClassVar[Any] = None + SAP_ANALYTICS_CLOUD_IS_SAMPLE: ClassVar[Any] = None + SAP_ANALYTICS_CLOUD_RESOURCE_ID: ClassVar[Any] = None + SAP_ANALYTICS_CLOUD_OBJECT_ID: ClassVar[Any] = None + SAP_ANALYTICS_CLOUD_REPOSITORY_PARTITION: ClassVar[Any] = None + SAP_ANALYTICS_CLOUD_WORKSPACE_ID: ClassVar[Any] = None + SAP_ANALYTICS_CLOUD_WORKSPACE_NAME: ClassVar[Any] = None + SAP_ANALYTICS_CLOUD_PARENT_FOLDER_QUALIFIED_NAME: ClassVar[Any] = None + SAP_ANALYTICS_CLOUD_PARENT_FOLDER_NAME: ClassVar[Any] = None + SAP_TECHNICAL_NAME: ClassVar[Any] = None + SAP_LOGICAL_NAME: ClassVar[Any] = None + SAP_PACKAGE_NAME: ClassVar[Any] = None + SAP_COMPONENT_NAME: ClassVar[Any] = None + SAP_DATA_TYPE: ClassVar[Any] = None + SAP_FIELD_COUNT: ClassVar[Any] = None + SAP_FIELD_ORDER: ClassVar[Any] = None + CATALOG_DATASET_GUID: ClassVar[Any] = None + INPUT_TO_AIRFLOW_TASKS: ClassVar[Any] = None + OUTPUT_FROM_AIRFLOW_TASKS: ClassVar[Any] = None + ANOMALO_CHECKS: ClassVar[Any] = None + APPLICATION: ClassVar[Any] = None + APPLICATION_FIELD: ClassVar[Any] = None + CONTEXT_REPOSITORIES: ClassVar[Any] = None + DATA_CONTRACT_LATEST: ClassVar[Any] = None + DATA_CONTRACT_LATEST_CERTIFIED: ClassVar[Any] = None + OUTPUT_PORT_DATA_PRODUCTS: ClassVar[Any] = None + INPUT_PORT_DATA_PRODUCTS: ClassVar[Any] = None + MODEL_IMPLEMENTED_ENTITIES: ClassVar[Any] = None + MODEL_IMPLEMENTED_ATTRIBUTES: ClassVar[Any] = None + METRICS: ClassVar[Any] = None + DQ_BASE_DATASET_RULES: ClassVar[Any] = None + DQ_REFERENCE_DATASET_RULES: ClassVar[Any] = None + GCP_DATAPLEX_ASPECT_TYPE_METADATA_ENTITIES: ClassVar[Any] = None + MEANINGS: ClassVar[Any] = None + KNOWLEDGE_LINKED_FILES: ClassVar[Any] = None + MC_MONITORS: ClassVar[Any] = None + MC_INCIDENTS: ClassVar[Any] = None + PARTIAL_CHILD_FIELDS: ClassVar[Any] = None + PARTIAL_CHILD_OBJECTS: ClassVar[Any] = None + INPUT_TO_PROCESSES: ClassVar[Any] = None + OUTPUT_FROM_PROCESSES: ClassVar[Any] = None + USER_DEF_RELATIONSHIP_TO: ClassVar[Any] = None + USER_DEF_RELATIONSHIP_FROM: ClassVar[Any] = None + FILES: ClassVar[Any] = None + LINKS: ClassVar[Any] = None + README: ClassVar[Any] = None + SAP_ANALYTICS_CLOUD_FOLDER: ClassVar[Any] = None + SCHEMA_REGISTRY_SUBJECTS: ClassVar[Any] = None + SODA_CHECKS: ClassVar[Any] = None + INPUT_TO_SPARK_JOBS: ClassVar[Any] = None + OUTPUT_FROM_SPARK_JOBS: ClassVar[Any] = None + + sap_analytics_cloud_story_kind: Union[str, None, UnsetType] = UNSET + """Subtype of this story as reported by the source, such as COMPOSITE for a story that embeds other stories or TEMPLATE for a story used as the starting point for new ones. Empty for an ordinary story.""" + + sap_analytics_cloud_is_sample: Union[bool, None, UnsetType] = UNSET + """Whether this story is one of the samples shipped with SAP Analytics Cloud rather than tenant content.""" + + sap_analytics_cloud_resource_id: Union[str, None, UnsetType] = UNSET + """Identifier of this asset in the SAP Analytics Cloud file repository. Stable across renames and used by the source APIs to address the resource.""" + + sap_analytics_cloud_object_id: Union[str, None, UnsetType] = UNSET + """Underlying object identifier reported by the SAP Analytics Cloud file repository for this asset.""" + + sap_analytics_cloud_repository_partition: Union[str, None, UnsetType] = UNSET + """Partition of the SAP Analytics Cloud file repository this asset lives in: PUBLIC for shared tenant content, SYSTEM for SAP-shipped content and SAP Analytics Cloud's own telemetry, USERS for the container holding per-user private areas, and PRIVATE for an individual user's own content. Reported by the source as folderType, and carried by every resource rather than only by folders.""" + + sap_analytics_cloud_workspace_id: Union[str, None, UnsetType] = UNSET + """Identifier of the SAP Analytics Cloud workspace that owns this asset.""" + + sap_analytics_cloud_workspace_name: Union[str, None, UnsetType] = UNSET + """Simple name of the SAP Analytics Cloud workspace that owns this asset.""" + + sap_analytics_cloud_parent_folder_qualified_name: Union[str, None, UnsetType] = UNSET + """Unique name of the SAP Analytics Cloud folder that directly contains this asset. Empty for a root-level folder and for a live model, neither of which is contained by a folder.""" + + sap_analytics_cloud_parent_folder_name: Union[str, None, UnsetType] = UNSET + """Simple name of the SAP Analytics Cloud folder that directly contains this asset. Empty for a root-level folder and for a live model, neither of which is contained by a folder.""" + + sap_technical_name: Union[str, None, UnsetType] = UNSET + """Technical identifier for SAP data objects, used for integration and internal reference.""" + + sap_logical_name: Union[str, None, UnsetType] = UNSET + """Logical, business-friendly identifier for SAP data objects, aligned with business terminology and concepts.""" + + sap_package_name: Union[str, None, UnsetType] = UNSET + """Name of the SAP package, representing a logical grouping of related SAP data objects.""" + + sap_component_name: Union[str, None, UnsetType] = UNSET + """Name of the SAP component, representing a specific functional area in SAP.""" + + sap_data_type: Union[str, None, UnsetType] = UNSET + """SAP-specific data types.""" + + sap_field_count: Union[int, None, UnsetType] = UNSET + """Represents the total number of fields, columns, or child assets present in a given SAP asset.""" + + sap_field_order: Union[int, None, UnsetType] = UNSET + """Indicates the sequential position of a field, column, or child asset within its parent SAP asset, starting from 1.""" + + catalog_dataset_guid: Union[str, None, UnsetType] = UNSET + """Unique identifier of the dataset this asset belongs to.""" + + input_to_airflow_tasks: Union[List[RelatedAirflowTask], None, UnsetType] = UNSET + """Tasks to which this asset provides input.""" + + output_from_airflow_tasks: Union[List[RelatedAirflowTask], None, UnsetType] = UNSET + """Tasks from which this asset is output.""" + + anomalo_checks: Union[List[RelatedAnomaloCheck], None, UnsetType] = UNSET + """Checks that run on this asset.""" + + application: Union[RelatedApplication, None, UnsetType] = UNSET + """Application owning the Asset.""" + + application_field: Union[RelatedApplicationField, None, UnsetType] = UNSET + """ApplicationField owning the Asset.""" + + context_repositories: Union[List[RelatedContextRepository], None, UnsetType] = UNSET + """Context repositories that use this asset as input.""" + + data_contract_latest: Union[RelatedDataContract, None, UnsetType] = UNSET + """Latest version of the data contract (in any status) for this asset.""" + + data_contract_latest_certified: Union[RelatedDataContract, None, UnsetType] = UNSET + """Latest certified version of the data contract for this asset.""" + + output_port_data_products: Union[List[RelatedDataProduct], None, UnsetType] = UNSET + """Data products for which this asset is an output port.""" + + input_port_data_products: Union[List[RelatedDataProduct], None, UnsetType] = UNSET + """Data products for which this asset is an input port.""" + + model_implemented_entities: Union[List[RelatedModelEntity], None, UnsetType] = UNSET + """Entities implemented by this asset.""" + + model_implemented_attributes: Union[List[RelatedModelAttribute], None, UnsetType] = UNSET + """Attributes implemented by this asset.""" + + metrics: Union[List[RelatedMetric], None, UnsetType] = UNSET + """""" + + dq_base_dataset_rules: Union[List[RelatedDataQualityRule], None, UnsetType] = UNSET + """Rules that are applied on this dataset.""" + + dq_reference_dataset_rules: Union[List[RelatedDataQualityRule], None, UnsetType] = UNSET + """Rules where this dataset is referenced.""" + + gcp_dataplex_aspect_type_metadata_entities: Union[List[RelatedGCPDataplexAspectType], None, UnsetType] = UNSET + """Dataplex entries (assets) that have aspects of this Aspect Type attached.""" + + meanings: Union[List[RelatedAtlasGlossaryTerm], None, UnsetType] = UNSET + """Glossary terms that are linked to this asset.""" + + knowledge_linked_files: Union[List[RelatedKnowledgeFile], None, UnsetType] = UNSET + """Knowledge files linked to this asset.""" + + mc_monitors: Union[List[RelatedMCMonitor], None, UnsetType] = UNSET + """Monitors that observe this asset.""" + + mc_incidents: Union[List[RelatedMCIncident], None, UnsetType] = UNSET + """""" + + partial_child_fields: Union[List[RelatedPartialField], None, UnsetType] = UNSET + """Partial fields contained in the asset.""" + + partial_child_objects: Union[List[RelatedPartialObject], None, UnsetType] = UNSET + """Partial objects contained in the asset.""" + + input_to_processes: Union[List[RelatedProcess], None, UnsetType] = UNSET + """Processes to which this asset provides input.""" + + output_from_processes: Union[List[RelatedProcess], None, UnsetType] = UNSET + """Processes from which this asset is produced as output.""" + + user_def_relationship_to: Union[List[RelatedReferenceable], None, UnsetType] = UNSET + """""" + + user_def_relationship_from: Union[List[RelatedReferenceable], None, UnsetType] = UNSET + """""" + + files: Union[List[RelatedFile], None, UnsetType] = UNSET + """""" + + links: Union[List[RelatedLink], None, UnsetType] = UNSET + """Links that are attached to this asset.""" + + readme: Union[RelatedReadme, None, UnsetType] = UNSET + """README that is linked to this asset.""" + + sap_analytics_cloud_folder: Union[RelatedSapAnalyticsCloudFolder, None, UnsetType] = UNSET + """Folder containing this story.""" + + schema_registry_subjects: Union[List[RelatedSchemaRegistrySubject], None, UnsetType] = UNSET + """Schema registry subjects associated with this asset.""" + + soda_checks: Union[List[RelatedSodaCheck], None, UnsetType] = UNSET + """""" + + input_to_spark_jobs: Union[List[RelatedSparkJob], None, UnsetType] = UNSET + """""" + + output_from_spark_jobs: Union[List[RelatedSparkJob], None, UnsetType] = UNSET + """""" + + def __post_init__(self) -> None: + self.type_name = "SapAnalyticsCloudStory" + + # ========================================================================= + # SDK Methods + # ========================================================================= + + _QUALIFIED_NAME_PATTERN: ClassVar[re.Pattern] = re.compile( + r"^.+/[^/]+/[^/]+/[^/]+$" + ) + + def validate(self, for_creation: bool = False) -> None: + """ + Dry-run validation of this SapAnalyticsCloudStory instance. + + Checks that required fields (type_name, name, qualified_name) are set. + When ``for_creation=True``, also checks hierarchy-specific fields + (parent references, denormalized attributes) needed to create this asset. + + This is purely opt-in and is NOT called by any serde path — only by + explicit user invocation (e.g., validating JSONL before sending to Atlan). + + Args: + for_creation: If True, also validate fields required for asset creation. + + Raises: + ValueError: If any required fields are missing or invalid. + """ + errors: list[str] = [] + if self.type_name is UNSET: + errors.append("type_name is required") + if self.name is UNSET: + errors.append("name is required") + if self.qualified_name is UNSET or self.qualified_name is None: + errors.append("qualified_name is required") + elif not self._QUALIFIED_NAME_PATTERN.match(self.qualified_name): + errors.append( + f"qualified_name '{self.qualified_name}' does not match expected " + f"pattern: {self._QUALIFIED_NAME_PATTERN.pattern}" + ) + if for_creation: + if self.connection_qualified_name is UNSET: + errors.append("connection_qualified_name is required for creation") + if self.sap_analytics_cloud_folder is UNSET: + errors.append("sap_analytics_cloud_folder is required for creation") + if errors: + raise ValueError(f"SapAnalyticsCloudStory validation failed: {errors}") + + def minimize(self) -> "SapAnalyticsCloudStory": + """ + Return a minimal copy of this SapAnalyticsCloudStory with only updater-required fields. + + Calls :meth:`validate` first to ensure the instance is valid, then + returns a new SapAnalyticsCloudStory with only the fields needed for an update + (qualified_name, name, and any type-specific additional fields). + + Returns: + A new SapAnalyticsCloudStory instance with only the minimum required fields. + """ + self.validate() + return SapAnalyticsCloudStory(qualified_name=self.qualified_name, name=self.name) + + def relate(self) -> "RelatedSapAnalyticsCloudStory": + """ + Create a :class:`RelatedSapAnalyticsCloudStory` reference from this instance. + + Returns a lightweight reference suitable for use in relationship + attributes. Prefers ``guid`` if set, otherwise falls back to + ``qualified_name``. + + Returns: + A RelatedSapAnalyticsCloudStory reference to this asset. + """ + if self.guid is not UNSET: + return RelatedSapAnalyticsCloudStory(guid=self.guid) + return RelatedSapAnalyticsCloudStory(qualified_name=self.qualified_name) + + # ========================================================================= + # Optimized Serialization Methods (override Asset base class) + # ========================================================================= + + def to_json(self, nested: bool = True, serde: Serde | None = None) -> str: + """ + Convert to JSON string using optimized nested struct serialization. + + Args: + nested: If True (default), use nested API format. If False, use flat format. + serde: Optional Serde instance for encoder reuse. Uses shared singleton if None. + + Returns: + JSON string representation + """ + if serde is None: + serde = get_serde() + if nested: + return self.to_nested_bytes(serde).decode("utf-8") + else: + return serde.encode(self).decode("utf-8") + + def to_nested_bytes(self, serde: Serde | None = None) -> bytes: + """Serialize to Atlas nested-format JSON bytes (pure msgspec, no dict intermediate).""" + if serde is None: + serde = get_serde() + return _sap_analytics_cloud_story_to_nested_bytes(self, serde) + + @staticmethod + def from_json(json_data: str | bytes, serde: Serde | None = None) -> SapAnalyticsCloudStory: + """ + Create from JSON string or bytes using optimized nested struct deserialization. + + Args: + json_data: JSON string or bytes to deserialize + serde: Optional Serde instance for decoder reuse. Uses shared singleton if None. + + Returns: + SapAnalyticsCloudStory instance + """ + if isinstance(json_data, str): + json_data = json_data.encode("utf-8") + if serde is None: + serde = get_serde() + return _sap_analytics_cloud_story_from_nested_bytes(json_data, serde) + + +# ============================================================================= +# NESTED FORMAT CLASSES +# ============================================================================= + +class SapAnalyticsCloudStoryAttributes(AssetAttributes): + """SapAnalyticsCloudStory-specific attributes for nested API format.""" + + sap_analytics_cloud_story_kind: Union[str, None, UnsetType] = UNSET + """Subtype of this story as reported by the source, such as COMPOSITE for a story that embeds other stories or TEMPLATE for a story used as the starting point for new ones. Empty for an ordinary story.""" + + sap_analytics_cloud_is_sample: Union[bool, None, UnsetType] = UNSET + """Whether this story is one of the samples shipped with SAP Analytics Cloud rather than tenant content.""" + + sap_analytics_cloud_resource_id: Union[str, None, UnsetType] = UNSET + """Identifier of this asset in the SAP Analytics Cloud file repository. Stable across renames and used by the source APIs to address the resource.""" + + sap_analytics_cloud_object_id: Union[str, None, UnsetType] = UNSET + """Underlying object identifier reported by the SAP Analytics Cloud file repository for this asset.""" + + sap_analytics_cloud_repository_partition: Union[str, None, UnsetType] = UNSET + """Partition of the SAP Analytics Cloud file repository this asset lives in: PUBLIC for shared tenant content, SYSTEM for SAP-shipped content and SAP Analytics Cloud's own telemetry, USERS for the container holding per-user private areas, and PRIVATE for an individual user's own content. Reported by the source as folderType, and carried by every resource rather than only by folders.""" + + sap_analytics_cloud_workspace_id: Union[str, None, UnsetType] = UNSET + """Identifier of the SAP Analytics Cloud workspace that owns this asset.""" + + sap_analytics_cloud_workspace_name: Union[str, None, UnsetType] = UNSET + """Simple name of the SAP Analytics Cloud workspace that owns this asset.""" + + sap_analytics_cloud_parent_folder_qualified_name: Union[str, None, UnsetType] = UNSET + """Unique name of the SAP Analytics Cloud folder that directly contains this asset. Empty for a root-level folder and for a live model, neither of which is contained by a folder.""" + + sap_analytics_cloud_parent_folder_name: Union[str, None, UnsetType] = UNSET + """Simple name of the SAP Analytics Cloud folder that directly contains this asset. Empty for a root-level folder and for a live model, neither of which is contained by a folder.""" + + sap_technical_name: Union[str, None, UnsetType] = UNSET + """Technical identifier for SAP data objects, used for integration and internal reference.""" + + sap_logical_name: Union[str, None, UnsetType] = UNSET + """Logical, business-friendly identifier for SAP data objects, aligned with business terminology and concepts.""" + + sap_package_name: Union[str, None, UnsetType] = UNSET + """Name of the SAP package, representing a logical grouping of related SAP data objects.""" + + sap_component_name: Union[str, None, UnsetType] = UNSET + """Name of the SAP component, representing a specific functional area in SAP.""" + + sap_data_type: Union[str, None, UnsetType] = UNSET + """SAP-specific data types.""" + + sap_field_count: Union[int, None, UnsetType] = UNSET + """Represents the total number of fields, columns, or child assets present in a given SAP asset.""" + + sap_field_order: Union[int, None, UnsetType] = UNSET + """Indicates the sequential position of a field, column, or child asset within its parent SAP asset, starting from 1.""" + + catalog_dataset_guid: Union[str, None, UnsetType] = UNSET + """Unique identifier of the dataset this asset belongs to.""" + +class SapAnalyticsCloudStoryRelationshipAttributes(AssetRelationshipAttributes): + """SapAnalyticsCloudStory-specific relationship attributes for nested API format.""" + + input_to_airflow_tasks: Union[List[RelatedAirflowTask], None, UnsetType] = UNSET + """Tasks to which this asset provides input.""" + + output_from_airflow_tasks: Union[List[RelatedAirflowTask], None, UnsetType] = UNSET + """Tasks from which this asset is output.""" + + anomalo_checks: Union[List[RelatedAnomaloCheck], None, UnsetType] = UNSET + """Checks that run on this asset.""" + + application: Union[RelatedApplication, None, UnsetType] = UNSET + """Application owning the Asset.""" + + application_field: Union[RelatedApplicationField, None, UnsetType] = UNSET + """ApplicationField owning the Asset.""" + + context_repositories: Union[List[RelatedContextRepository], None, UnsetType] = UNSET + """Context repositories that use this asset as input.""" + + data_contract_latest: Union[RelatedDataContract, None, UnsetType] = UNSET + """Latest version of the data contract (in any status) for this asset.""" + + data_contract_latest_certified: Union[RelatedDataContract, None, UnsetType] = UNSET + """Latest certified version of the data contract for this asset.""" + + output_port_data_products: Union[List[RelatedDataProduct], None, UnsetType] = UNSET + """Data products for which this asset is an output port.""" + + input_port_data_products: Union[List[RelatedDataProduct], None, UnsetType] = UNSET + """Data products for which this asset is an input port.""" + + model_implemented_entities: Union[List[RelatedModelEntity], None, UnsetType] = UNSET + """Entities implemented by this asset.""" + + model_implemented_attributes: Union[List[RelatedModelAttribute], None, UnsetType] = UNSET + """Attributes implemented by this asset.""" + + metrics: Union[List[RelatedMetric], None, UnsetType] = UNSET + """""" + + dq_base_dataset_rules: Union[List[RelatedDataQualityRule], None, UnsetType] = UNSET + """Rules that are applied on this dataset.""" + + dq_reference_dataset_rules: Union[List[RelatedDataQualityRule], None, UnsetType] = UNSET + """Rules where this dataset is referenced.""" + + gcp_dataplex_aspect_type_metadata_entities: Union[List[RelatedGCPDataplexAspectType], None, UnsetType] = UNSET + """Dataplex entries (assets) that have aspects of this Aspect Type attached.""" + + meanings: Union[List[RelatedAtlasGlossaryTerm], None, UnsetType] = UNSET + """Glossary terms that are linked to this asset.""" + + knowledge_linked_files: Union[List[RelatedKnowledgeFile], None, UnsetType] = UNSET + """Knowledge files linked to this asset.""" + + mc_monitors: Union[List[RelatedMCMonitor], None, UnsetType] = UNSET + """Monitors that observe this asset.""" + + mc_incidents: Union[List[RelatedMCIncident], None, UnsetType] = UNSET + """""" + + partial_child_fields: Union[List[RelatedPartialField], None, UnsetType] = UNSET + """Partial fields contained in the asset.""" + + partial_child_objects: Union[List[RelatedPartialObject], None, UnsetType] = UNSET + """Partial objects contained in the asset.""" + + input_to_processes: Union[List[RelatedProcess], None, UnsetType] = UNSET + """Processes to which this asset provides input.""" + + output_from_processes: Union[List[RelatedProcess], None, UnsetType] = UNSET + """Processes from which this asset is produced as output.""" + + user_def_relationship_to: Union[List[RelatedReferenceable], None, UnsetType] = UNSET + """""" + + user_def_relationship_from: Union[List[RelatedReferenceable], None, UnsetType] = UNSET + """""" + + files: Union[List[RelatedFile], None, UnsetType] = UNSET + """""" + + links: Union[List[RelatedLink], None, UnsetType] = UNSET + """Links that are attached to this asset.""" + + readme: Union[RelatedReadme, None, UnsetType] = UNSET + """README that is linked to this asset.""" + + sap_analytics_cloud_folder: Union[RelatedSapAnalyticsCloudFolder, None, UnsetType] = UNSET + """Folder containing this story.""" + + schema_registry_subjects: Union[List[RelatedSchemaRegistrySubject], None, UnsetType] = UNSET + """Schema registry subjects associated with this asset.""" + + soda_checks: Union[List[RelatedSodaCheck], None, UnsetType] = UNSET + """""" + + input_to_spark_jobs: Union[List[RelatedSparkJob], None, UnsetType] = UNSET + """""" + + output_from_spark_jobs: Union[List[RelatedSparkJob], None, UnsetType] = UNSET + """""" + +class SapAnalyticsCloudStoryNested(AssetNested): + """SapAnalyticsCloudStory in nested API format for high-performance serialization.""" + + attributes: Union[SapAnalyticsCloudStoryAttributes, UnsetType] = UNSET + relationship_attributes: Union[SapAnalyticsCloudStoryRelationshipAttributes, UnsetType] = UNSET + append_relationship_attributes: Union[SapAnalyticsCloudStoryRelationshipAttributes, UnsetType] = UNSET + remove_relationship_attributes: Union[SapAnalyticsCloudStoryRelationshipAttributes, UnsetType] = UNSET + +# ============================================================================= +# CONVERSION HELPERS & CONSTANTS +# ============================================================================= + +_SAP_ANALYTICS_CLOUD_STORY_REL_FIELDS: List[str] = [ + *_ASSET_REL_FIELDS, + "input_to_airflow_tasks", + "output_from_airflow_tasks", + "anomalo_checks", + "application", + "application_field", + "context_repositories", + "data_contract_latest", + "data_contract_latest_certified", + "output_port_data_products", + "input_port_data_products", + "model_implemented_entities", + "model_implemented_attributes", + "metrics", + "dq_base_dataset_rules", + "dq_reference_dataset_rules", + "gcp_dataplex_aspect_type_metadata_entities", + "meanings", + "knowledge_linked_files", + "mc_monitors", + "mc_incidents", + "partial_child_fields", + "partial_child_objects", + "input_to_processes", + "output_from_processes", + "user_def_relationship_to", + "user_def_relationship_from", + "files", + "links", + "readme", + "sap_analytics_cloud_folder", + "schema_registry_subjects", + "soda_checks", + "input_to_spark_jobs", + "output_from_spark_jobs", +] + +def _populate_sap_analytics_cloud_story_attrs(attrs: SapAnalyticsCloudStoryAttributes, obj: SapAnalyticsCloudStory) -> None: + """Populate SapAnalyticsCloudStory-specific attributes on the attrs struct.""" + _populate_asset_attrs(attrs, obj) + attrs.sap_analytics_cloud_story_kind = obj.sap_analytics_cloud_story_kind + attrs.sap_analytics_cloud_is_sample = obj.sap_analytics_cloud_is_sample + attrs.sap_analytics_cloud_resource_id = obj.sap_analytics_cloud_resource_id + attrs.sap_analytics_cloud_object_id = obj.sap_analytics_cloud_object_id + attrs.sap_analytics_cloud_repository_partition = obj.sap_analytics_cloud_repository_partition + attrs.sap_analytics_cloud_workspace_id = obj.sap_analytics_cloud_workspace_id + attrs.sap_analytics_cloud_workspace_name = obj.sap_analytics_cloud_workspace_name + attrs.sap_analytics_cloud_parent_folder_qualified_name = obj.sap_analytics_cloud_parent_folder_qualified_name + attrs.sap_analytics_cloud_parent_folder_name = obj.sap_analytics_cloud_parent_folder_name + attrs.sap_technical_name = obj.sap_technical_name + attrs.sap_logical_name = obj.sap_logical_name + attrs.sap_package_name = obj.sap_package_name + attrs.sap_component_name = obj.sap_component_name + attrs.sap_data_type = obj.sap_data_type + attrs.sap_field_count = obj.sap_field_count + attrs.sap_field_order = obj.sap_field_order + attrs.catalog_dataset_guid = obj.catalog_dataset_guid + +def _extract_sap_analytics_cloud_story_attrs(attrs: SapAnalyticsCloudStoryAttributes) -> dict: + """Extract all SapAnalyticsCloudStory attributes from the attrs struct into a flat dict.""" + result = _extract_asset_attrs(attrs) + result["sap_analytics_cloud_story_kind"] = attrs.sap_analytics_cloud_story_kind + result["sap_analytics_cloud_is_sample"] = attrs.sap_analytics_cloud_is_sample + result["sap_analytics_cloud_resource_id"] = attrs.sap_analytics_cloud_resource_id + result["sap_analytics_cloud_object_id"] = attrs.sap_analytics_cloud_object_id + result["sap_analytics_cloud_repository_partition"] = attrs.sap_analytics_cloud_repository_partition + result["sap_analytics_cloud_workspace_id"] = attrs.sap_analytics_cloud_workspace_id + result["sap_analytics_cloud_workspace_name"] = attrs.sap_analytics_cloud_workspace_name + result["sap_analytics_cloud_parent_folder_qualified_name"] = attrs.sap_analytics_cloud_parent_folder_qualified_name + result["sap_analytics_cloud_parent_folder_name"] = attrs.sap_analytics_cloud_parent_folder_name + result["sap_technical_name"] = attrs.sap_technical_name + result["sap_logical_name"] = attrs.sap_logical_name + result["sap_package_name"] = attrs.sap_package_name + result["sap_component_name"] = attrs.sap_component_name + result["sap_data_type"] = attrs.sap_data_type + result["sap_field_count"] = attrs.sap_field_count + result["sap_field_order"] = attrs.sap_field_order + result["catalog_dataset_guid"] = attrs.catalog_dataset_guid + return result + +# ============================================================================= +# CONVERSION FUNCTIONS +# ============================================================================= + + +def _sap_analytics_cloud_story_to_nested(sap_analytics_cloud_story: SapAnalyticsCloudStory) -> SapAnalyticsCloudStoryNested: + """Convert flat SapAnalyticsCloudStory to nested format.""" + attrs = SapAnalyticsCloudStoryAttributes() + _populate_sap_analytics_cloud_story_attrs(attrs, sap_analytics_cloud_story) + # Categorize relationships by save semantic (REPLACE, APPEND, REMOVE) + replace_rels, append_rels, remove_rels = categorize_relationships( + sap_analytics_cloud_story, _SAP_ANALYTICS_CLOUD_STORY_REL_FIELDS, SapAnalyticsCloudStoryRelationshipAttributes + ) + return SapAnalyticsCloudStoryNested( + guid=sap_analytics_cloud_story.guid, + type_name=sap_analytics_cloud_story.type_name, + status=sap_analytics_cloud_story.status, + version=sap_analytics_cloud_story.version, + create_time=sap_analytics_cloud_story.create_time, + update_time=sap_analytics_cloud_story.update_time, + created_by=sap_analytics_cloud_story.created_by, + updated_by=sap_analytics_cloud_story.updated_by, + classifications=sap_analytics_cloud_story.classifications, + classification_names=sap_analytics_cloud_story.classification_names, + meanings=sap_analytics_cloud_story.meanings, + labels=sap_analytics_cloud_story.labels, + business_attributes=sap_analytics_cloud_story.business_attributes, + custom_attributes=sap_analytics_cloud_story.custom_attributes, + pending_tasks=sap_analytics_cloud_story.pending_tasks, + proxy=sap_analytics_cloud_story.proxy, + is_incomplete=sap_analytics_cloud_story.is_incomplete, + provenance_type=sap_analytics_cloud_story.provenance_type, + home_id=sap_analytics_cloud_story.home_id, + depth=sap_analytics_cloud_story.depth, + immediate_upstream=sap_analytics_cloud_story.immediate_upstream, + immediate_downstream=sap_analytics_cloud_story.immediate_downstream, + attributes=attrs, + relationship_attributes=replace_rels, + append_relationship_attributes=append_rels, + remove_relationship_attributes=remove_rels, + ) + +def _sap_analytics_cloud_story_from_nested(nested: SapAnalyticsCloudStoryNested) -> SapAnalyticsCloudStory: + """Convert nested format to flat SapAnalyticsCloudStory.""" + attrs = nested.attributes if nested.attributes is not UNSET else SapAnalyticsCloudStoryAttributes() + # Merge relationships from all three buckets + merged_rels = merge_relationships( + nested.relationship_attributes, + nested.append_relationship_attributes, + nested.remove_relationship_attributes, + _SAP_ANALYTICS_CLOUD_STORY_REL_FIELDS, + SapAnalyticsCloudStoryRelationshipAttributes + ) + return SapAnalyticsCloudStory( + guid=nested.guid, + type_name=nested.type_name, + status=nested.status, + version=nested.version, + create_time=nested.create_time, + update_time=nested.update_time, + created_by=nested.created_by, + updated_by=nested.updated_by, + classifications=nested.classifications, + classification_names=nested.classification_names, + meanings=nested.meanings, + labels=nested.labels, + business_attributes=nested.business_attributes, + custom_attributes=nested.custom_attributes, + pending_tasks=nested.pending_tasks, + proxy=nested.proxy, + is_incomplete=nested.is_incomplete, + provenance_type=nested.provenance_type, + home_id=nested.home_id, + depth=nested.depth, + immediate_upstream=nested.immediate_upstream, + immediate_downstream=nested.immediate_downstream, + **_extract_sap_analytics_cloud_story_attrs(attrs), + # Merged relationship attributes + **merged_rels, + ) + +def _sap_analytics_cloud_story_to_nested_bytes(sap_analytics_cloud_story: SapAnalyticsCloudStory, serde: Serde) -> bytes: + """Convert flat SapAnalyticsCloudStory to nested JSON bytes.""" + return serde.encode(_sap_analytics_cloud_story_to_nested(sap_analytics_cloud_story)) + + +def _sap_analytics_cloud_story_from_nested_bytes(data: bytes, serde: Serde) -> SapAnalyticsCloudStory: + """Convert nested JSON bytes to flat SapAnalyticsCloudStory.""" + nested = serde.decode(data, SapAnalyticsCloudStoryNested) + return _sap_analytics_cloud_story_from_nested(nested) + +# --------------------------------------------------------------------------- +# Deferred field descriptor initialization +# --------------------------------------------------------------------------- +from pyatlan.model.fields.atlan_fields import ( # noqa: E402 + BooleanField, + KeywordField, + NumericField, + RelationField, +) + +SapAnalyticsCloudStory.SAP_ANALYTICS_CLOUD_STORY_KIND = KeywordField("sapAnalyticsCloudStoryKind", "sapAnalyticsCloudStoryKind") +SapAnalyticsCloudStory.SAP_ANALYTICS_CLOUD_IS_SAMPLE = BooleanField("sapAnalyticsCloudIsSample", "sapAnalyticsCloudIsSample") +SapAnalyticsCloudStory.SAP_ANALYTICS_CLOUD_RESOURCE_ID = KeywordField("sapAnalyticsCloudResourceId", "sapAnalyticsCloudResourceId") +SapAnalyticsCloudStory.SAP_ANALYTICS_CLOUD_OBJECT_ID = KeywordField("sapAnalyticsCloudObjectId", "sapAnalyticsCloudObjectId") +SapAnalyticsCloudStory.SAP_ANALYTICS_CLOUD_REPOSITORY_PARTITION = KeywordField("sapAnalyticsCloudRepositoryPartition", "sapAnalyticsCloudRepositoryPartition") +SapAnalyticsCloudStory.SAP_ANALYTICS_CLOUD_WORKSPACE_ID = KeywordField("sapAnalyticsCloudWorkspaceId", "sapAnalyticsCloudWorkspaceId") +SapAnalyticsCloudStory.SAP_ANALYTICS_CLOUD_WORKSPACE_NAME = KeywordField("sapAnalyticsCloudWorkspaceName", "sapAnalyticsCloudWorkspaceName") +SapAnalyticsCloudStory.SAP_ANALYTICS_CLOUD_PARENT_FOLDER_QUALIFIED_NAME = KeywordField("sapAnalyticsCloudParentFolderQualifiedName", "sapAnalyticsCloudParentFolderQualifiedName") +SapAnalyticsCloudStory.SAP_ANALYTICS_CLOUD_PARENT_FOLDER_NAME = KeywordField("sapAnalyticsCloudParentFolderName", "sapAnalyticsCloudParentFolderName") +SapAnalyticsCloudStory.SAP_TECHNICAL_NAME = KeywordField("sapTechnicalName", "sapTechnicalName") +SapAnalyticsCloudStory.SAP_LOGICAL_NAME = KeywordField("sapLogicalName", "sapLogicalName") +SapAnalyticsCloudStory.SAP_PACKAGE_NAME = KeywordField("sapPackageName", "sapPackageName") +SapAnalyticsCloudStory.SAP_COMPONENT_NAME = KeywordField("sapComponentName", "sapComponentName") +SapAnalyticsCloudStory.SAP_DATA_TYPE = KeywordField("sapDataType", "sapDataType") +SapAnalyticsCloudStory.SAP_FIELD_COUNT = NumericField("sapFieldCount", "sapFieldCount") +SapAnalyticsCloudStory.SAP_FIELD_ORDER = NumericField("sapFieldOrder", "sapFieldOrder") +SapAnalyticsCloudStory.CATALOG_DATASET_GUID = KeywordField("catalogDatasetGuid", "catalogDatasetGuid") +SapAnalyticsCloudStory.INPUT_TO_AIRFLOW_TASKS = RelationField("inputToAirflowTasks") +SapAnalyticsCloudStory.OUTPUT_FROM_AIRFLOW_TASKS = RelationField("outputFromAirflowTasks") +SapAnalyticsCloudStory.ANOMALO_CHECKS = RelationField("anomaloChecks") +SapAnalyticsCloudStory.APPLICATION = RelationField("application") +SapAnalyticsCloudStory.APPLICATION_FIELD = RelationField("applicationField") +SapAnalyticsCloudStory.CONTEXT_REPOSITORIES = RelationField("contextRepositories") +SapAnalyticsCloudStory.DATA_CONTRACT_LATEST = RelationField("dataContractLatest") +SapAnalyticsCloudStory.DATA_CONTRACT_LATEST_CERTIFIED = RelationField("dataContractLatestCertified") +SapAnalyticsCloudStory.OUTPUT_PORT_DATA_PRODUCTS = RelationField("outputPortDataProducts") +SapAnalyticsCloudStory.INPUT_PORT_DATA_PRODUCTS = RelationField("inputPortDataProducts") +SapAnalyticsCloudStory.MODEL_IMPLEMENTED_ENTITIES = RelationField("modelImplementedEntities") +SapAnalyticsCloudStory.MODEL_IMPLEMENTED_ATTRIBUTES = RelationField("modelImplementedAttributes") +SapAnalyticsCloudStory.METRICS = RelationField("metrics") +SapAnalyticsCloudStory.DQ_BASE_DATASET_RULES = RelationField("dqBaseDatasetRules") +SapAnalyticsCloudStory.DQ_REFERENCE_DATASET_RULES = RelationField("dqReferenceDatasetRules") +SapAnalyticsCloudStory.GCP_DATAPLEX_ASPECT_TYPE_METADATA_ENTITIES = RelationField("gcpDataplexAspectTypeMetadataEntities") +SapAnalyticsCloudStory.MEANINGS = RelationField("meanings") +SapAnalyticsCloudStory.KNOWLEDGE_LINKED_FILES = RelationField("knowledgeLinkedFiles") +SapAnalyticsCloudStory.MC_MONITORS = RelationField("mcMonitors") +SapAnalyticsCloudStory.MC_INCIDENTS = RelationField("mcIncidents") +SapAnalyticsCloudStory.PARTIAL_CHILD_FIELDS = RelationField("partialChildFields") +SapAnalyticsCloudStory.PARTIAL_CHILD_OBJECTS = RelationField("partialChildObjects") +SapAnalyticsCloudStory.INPUT_TO_PROCESSES = RelationField("inputToProcesses") +SapAnalyticsCloudStory.OUTPUT_FROM_PROCESSES = RelationField("outputFromProcesses") +SapAnalyticsCloudStory.USER_DEF_RELATIONSHIP_TO = RelationField("userDefRelationshipTo") +SapAnalyticsCloudStory.USER_DEF_RELATIONSHIP_FROM = RelationField("userDefRelationshipFrom") +SapAnalyticsCloudStory.FILES = RelationField("files") +SapAnalyticsCloudStory.LINKS = RelationField("links") +SapAnalyticsCloudStory.README = RelationField("readme") +SapAnalyticsCloudStory.SAP_ANALYTICS_CLOUD_FOLDER = RelationField("sapAnalyticsCloudFolder") +SapAnalyticsCloudStory.SCHEMA_REGISTRY_SUBJECTS = RelationField("schemaRegistrySubjects") +SapAnalyticsCloudStory.SODA_CHECKS = RelationField("sodaChecks") +SapAnalyticsCloudStory.INPUT_TO_SPARK_JOBS = RelationField("inputToSparkJobs") +SapAnalyticsCloudStory.OUTPUT_FROM_SPARK_JOBS = RelationField("outputFromSparkJobs") \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 0865144a7..e69de29bb 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,304 +0,0 @@ -# This file was autogenerated by uv via the following command: -# uv export --all-extras --no-hashes --e . -annotated-types==0.7.0 ; python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via pydantic -anyio==4.12.1 ; python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via httpx -ast-serialize==0.6.0 ; python_full_version >= '3.10' and python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via mypy -authlib==1.6.9 ; python_full_version < '3.10' and platform_python_implementation == 'CPython' - # via pyatlan -authlib==1.7.2 ; python_full_version >= '3.10' and python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via pyatlan -backports-asyncio-runner==1.2.0 ; python_full_version < '3.11' and platform_python_implementation == 'CPython' - # via pytest-asyncio -backports-tarfile==1.2.0 ; python_full_version < '3.12' and platform_python_implementation == 'CPython' - # via jaraco-context -cachebox==5.2.3 ; python_full_version >= '3.10' and python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via deepdiff -certifi==2026.2.25 ; python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via - # httpcore - # httpx - # requests -cffi==2.0.0 ; python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via cryptography -cfgv==3.4.0 ; python_full_version < '3.10' and platform_python_implementation == 'CPython' - # via pre-commit -cfgv==3.5.0 ; python_full_version >= '3.10' and python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via pre-commit -charset-normalizer==3.4.5 ; python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via requests -colorama==0.4.6 ; python_full_version < '3.15' and platform_python_implementation == 'CPython' and sys_platform == 'win32' - # via pytest -coverage==7.10.7 ; python_full_version < '3.10' and platform_python_implementation == 'CPython' - # via pytest-cov -coverage==7.13.4 ; python_full_version >= '3.10' and python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via pytest-cov -cryptography==50.0.0 ; python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via - # authlib - # joserfc - # secretstorage - # types-authlib -deepdiff==8.6.1 ; python_full_version < '3.10' and platform_python_implementation == 'CPython' -deepdiff==9.1.0 ; python_full_version >= '3.10' and python_full_version < '3.15' and platform_python_implementation == 'CPython' -distlib==0.4.0 ; python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via virtualenv -docutils==0.21.2 ; python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via readme-renderer -exceptiongroup==1.3.1 ; python_full_version < '3.11' and platform_python_implementation == 'CPython' - # via - # anyio - # pytest -filelock==3.19.1 ; python_full_version < '3.10' and platform_python_implementation == 'CPython' - # via - # python-discovery - # virtualenv -filelock==3.32.0 ; python_full_version >= '3.10' and python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via - # python-discovery - # virtualenv -h11==0.16.0 ; python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via httpcore -httpcore==1.0.9 ; python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via httpx -httpx==0.28.1 ; python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via - # httpx-retries - # pyatlan -httpx-retries==0.4.6 ; python_full_version < '3.10' and platform_python_implementation == 'CPython' - # via pyatlan -httpx-retries==0.6.0 ; python_full_version >= '3.10' and python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via pyatlan -id==1.5.0 ; python_full_version < '3.10' and platform_python_implementation == 'CPython' - # via twine -id==1.6.1 ; python_full_version >= '3.10' and python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via twine -identify==2.6.15 ; python_full_version < '3.10' and platform_python_implementation == 'CPython' - # via pre-commit -identify==2.6.17 ; python_full_version >= '3.10' and python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via pre-commit -idna==3.11 ; python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via - # anyio - # httpx - # requests - # yarl -importlib-metadata==8.7.1 ; (python_full_version < '3.12' and platform_machine != 'ppc64le' and platform_machine != 's390x' and platform_python_implementation == 'CPython') or (python_full_version < '3.10' and platform_machine == 'ppc64le' and platform_python_implementation == 'CPython') or (python_full_version < '3.10' and platform_machine == 's390x' and platform_python_implementation == 'CPython') - # via - # keyring - # twine -iniconfig==2.1.0 ; python_full_version < '3.10' and platform_python_implementation == 'CPython' - # via pytest -iniconfig==2.3.0 ; python_full_version >= '3.10' and python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via pytest -jaraco-classes==3.4.0 ; python_full_version < '3.15' and platform_machine != 'ppc64le' and platform_machine != 's390x' and platform_python_implementation == 'CPython' - # via keyring -jaraco-context==6.1.0 ; python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via keyring -jaraco-functools==4.4.0 ; python_full_version < '3.15' and platform_machine != 'ppc64le' and platform_machine != 's390x' and platform_python_implementation == 'CPython' - # via keyring -jeepney==0.9.0 ; python_full_version < '3.15' and platform_machine != 'ppc64le' and platform_machine != 's390x' and platform_python_implementation == 'CPython' and sys_platform == 'linux' - # via - # keyring - # secretstorage -jinja2==3.1.6 ; python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via pyatlan -joserfc==1.7.4 ; python_full_version >= '3.10' and python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via authlib -keyring==25.7.0 ; python_full_version < '3.15' and platform_machine != 'ppc64le' and platform_machine != 's390x' and platform_python_implementation == 'CPython' - # via twine -lazy-loader==0.5 ; python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via pyatlan -librt==0.8.1 ; python_full_version < '3.10' and platform_python_implementation == 'CPython' - # via mypy -librt==0.13.0 ; python_full_version >= '3.10' and python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via mypy -markdown-it-py==3.0.0 ; python_full_version < '3.10' and platform_python_implementation == 'CPython' - # via rich -markdown-it-py==4.0.0 ; python_full_version >= '3.10' and python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via rich -markupsafe==3.0.3 ; python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via jinja2 -mdurl==0.1.2 ; python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via markdown-it-py -more-itertools==10.8.0 ; python_full_version < '3.15' and platform_machine != 'ppc64le' and platform_machine != 's390x' and platform_python_implementation == 'CPython' - # via - # jaraco-classes - # jaraco-functools -msgspec==0.20.0 ; python_full_version < '3.10' and platform_python_implementation == 'CPython' - # via pyatlan -msgspec==0.21.1 ; python_full_version >= '3.10' and python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via pyatlan -multidict==6.7.1 ; python_full_version < '3.10' and platform_python_implementation == 'CPython' - # via yarl -mypy==1.19.1 ; python_full_version < '3.10' and platform_python_implementation == 'CPython' -mypy==2.3.0 ; python_full_version >= '3.10' and python_full_version < '3.15' and platform_python_implementation == 'CPython' -mypy-extensions==1.1.0 ; python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via mypy -nanoid==2.0.0 ; python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via pyatlan -networkx==3.2.1 ; python_full_version < '3.11' and platform_python_implementation == 'CPython' - # via networkx-stubs -networkx==3.6.1 ; python_full_version >= '3.11' and python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via networkx-stubs -networkx-stubs==0.0.1 ; python_full_version < '3.15' and platform_python_implementation == 'CPython' -nh3==0.3.3 ; python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via readme-renderer -nodeenv==1.10.0 ; python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via pre-commit -orderly-set==5.5.0 ; python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via deepdiff -packaging==26.0 ; python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via - # lazy-loader - # pytest - # twine -pathspec==1.0.4 ; python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via mypy -platformdirs==4.4.0 ; python_full_version < '3.10' and platform_python_implementation == 'CPython' - # via - # python-discovery - # virtualenv -platformdirs==4.9.4 ; python_full_version >= '3.10' and python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via - # python-discovery - # virtualenv -pluggy==1.6.0 ; python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via - # pytest - # pytest-cov -pre-commit==4.3.0 ; python_full_version < '3.10' and platform_python_implementation == 'CPython' -pre-commit==4.6.0 ; python_full_version >= '3.10' and python_full_version < '3.15' and platform_python_implementation == 'CPython' -propcache==0.4.1 ; python_full_version < '3.10' and platform_python_implementation == 'CPython' - # via yarl -pycparser==2.23 ; python_full_version < '3.10' and implementation_name != 'PyPy' and platform_python_implementation == 'CPython' - # via cffi -pycparser==3.0 ; python_full_version >= '3.10' and python_full_version < '3.15' and implementation_name != 'PyPy' and platform_python_implementation == 'CPython' - # via cffi -pydantic==2.13.4 ; python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via pyatlan -pydantic-core==2.46.4 ; python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via pydantic -pygments==2.19.2 ; python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via - # pytest - # readme-renderer - # rich -pytest==8.4.2 ; python_full_version < '3.10' and platform_python_implementation == 'CPython' - # via - # pytest-asyncio - # pytest-cov - # pytest-order - # pytest-sugar - # pytest-timer - # pytest-vcr -pytest==9.1.1 ; python_full_version >= '3.10' and python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via - # pytest-asyncio - # pytest-cov - # pytest-order - # pytest-sugar - # pytest-timer - # pytest-vcr -pytest-asyncio==1.2.0 ; python_full_version < '3.10' and platform_python_implementation == 'CPython' -pytest-asyncio==1.4.0 ; python_full_version >= '3.10' and python_full_version < '3.15' and platform_python_implementation == 'CPython' -pytest-cov==7.1.0 ; python_full_version < '3.15' and platform_python_implementation == 'CPython' -pytest-order==1.5.0 ; python_full_version < '3.15' and platform_python_implementation == 'CPython' -pytest-sugar==1.1.1 ; python_full_version < '3.15' and platform_python_implementation == 'CPython' -pytest-timer==1.0.0 ; python_full_version < '3.15' and platform_python_implementation == 'CPython' -pytest-vcr==1.0.2 ; python_full_version < '3.15' and platform_python_implementation == 'CPython' -python-dateutil==2.9.0.post0 ; python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via pyatlan -python-discovery==1.5.0 ; python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via virtualenv -pytz==2026.2 ; python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via pyatlan -pywin32-ctypes==0.2.3 ; python_full_version < '3.15' and platform_machine != 'ppc64le' and platform_machine != 's390x' and platform_python_implementation == 'CPython' and sys_platform == 'win32' - # via keyring -pyyaml==6.0.3 ; python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via - # pre-commit - # pyatlan - # vcrpy -readme-renderer==44.0 ; python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via twine -requests==2.32.5 ; python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via - # id - # requests-toolbelt - # twine -requests-toolbelt==1.0.0 ; python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via twine -rfc3986==2.0.0 ; python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via twine -rich==14.3.3 ; python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via twine -ruff==0.15.22 ; python_full_version < '3.15' and platform_python_implementation == 'CPython' -secretstorage==3.3.3 ; python_full_version < '3.10' and platform_machine != 'ppc64le' and platform_machine != 's390x' and platform_python_implementation == 'CPython' and sys_platform == 'linux' - # via keyring -secretstorage==3.5.0 ; python_full_version >= '3.10' and python_full_version < '3.15' and platform_machine != 'ppc64le' and platform_machine != 's390x' and platform_python_implementation == 'CPython' and sys_platform == 'linux' - # via keyring -six==1.17.0 ; python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via python-dateutil -tenacity==9.1.2 ; python_full_version < '3.10' and platform_python_implementation == 'CPython' - # via pyatlan -tenacity==9.1.4 ; python_full_version >= '3.10' and python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via pyatlan -termcolor==3.1.0 ; python_full_version < '3.10' and platform_python_implementation == 'CPython' - # via - # pytest-sugar - # pytest-timer -termcolor==3.3.0 ; python_full_version >= '3.10' and python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via - # pytest-sugar - # pytest-timer -tomli==2.4.0 ; python_full_version <= '3.11' and platform_python_implementation == 'CPython' - # via - # coverage - # mypy - # pytest -twine==6.2.0 ; python_full_version < '3.15' and platform_python_implementation == 'CPython' -types-authlib==1.6.7.20260208 ; python_full_version < '3.10' and platform_python_implementation == 'CPython' -types-authlib==1.6.11.20260518 ; python_full_version >= '3.10' and python_full_version < '3.15' and platform_python_implementation == 'CPython' -types-retry==0.9.9.20250322 ; python_full_version < '3.15' and platform_python_implementation == 'CPython' -types-setuptools==81.0.0.20260209 ; python_full_version < '3.10' and platform_python_implementation == 'CPython' -types-setuptools==83.0.0.20260716 ; python_full_version >= '3.10' and python_full_version < '3.15' and platform_python_implementation == 'CPython' -typing-extensions==4.15.0 ; python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via - # anyio - # cryptography - # exceptiongroup - # multidict - # mypy - # pydantic - # pydantic-core - # pytest-asyncio - # typing-inspection - # virtualenv -typing-inspection==0.4.2 ; python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via pydantic -urllib3==1.26.20 ; python_full_version < '3.10' and platform_python_implementation == 'CPython' - # via - # requests - # twine - # vcrpy -urllib3==2.7.0 ; python_full_version >= '3.10' and python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via - # id - # requests - # twine -vcrpy==7.0.0 ; python_full_version < '3.10' and platform_python_implementation == 'CPython' - # via pytest-vcr -vcrpy==8.3.0 ; python_full_version >= '3.10' and python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via pytest-vcr -virtualenv==21.7.0 ; python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via pre-commit -wrapt==2.1.2 ; python_full_version < '3.15' and platform_python_implementation == 'CPython' - # via vcrpy -yarl==1.22.0 ; python_full_version < '3.10' and platform_python_implementation == 'CPython' - # via vcrpy -zipp==3.23.0 ; (python_full_version < '3.12' and platform_machine != 'ppc64le' and platform_machine != 's390x' and platform_python_implementation == 'CPython') or (python_full_version < '3.10' and platform_machine == 'ppc64le' and platform_python_implementation == 'CPython') or (python_full_version < '3.10' and platform_machine == 's390x' and platform_python_implementation == 'CPython') - # via importlib-metadata diff --git a/tests/integration/aio/test_client.py b/tests/integration/aio/test_client.py index cd5f1ad19..82546c937 100644 --- a/tests/integration/aio/test_client.py +++ b/tests/integration/aio/test_client.py @@ -29,8 +29,8 @@ AtlasGlossaryTerm, Connection, Database, - KnowledgeFile, DataContract, + KnowledgeFile, Schema, Table, ) diff --git a/tests/integration/test_app_client.py b/tests/integration/test_app_client.py index 6ac3266de..bcf6888aa 100644 --- a/tests/integration/test_app_client.py +++ b/tests/integration/test_app_client.py @@ -21,11 +21,7 @@ from pyatlan.client.atlan import AtlanClient from pyatlan.errors import AtlanError -from pyatlan.model.app import ( - AppInfo, - AppInputContract, - AppResponse, -) +from pyatlan.model.app import AppInfo, AppInputContract, AppResponse from pyatlan.model.apps import BigqueryCrawler, BigqueryCrawlerInputs from tests.integration.client import TestId diff --git a/tests/unit/test_app_client.py b/tests/unit/test_app_client.py index b984c8a63..157788d0a 100644 --- a/tests/unit/test_app_client.py +++ b/tests/unit/test_app_client.py @@ -11,13 +11,11 @@ import httpx import pytest -from pyatlan.client.transport import PyatlanSyncTransport - from pyatlan.client.aio.app import AsyncAppClient from pyatlan.client.app import _APP_NO_500_RETRY, AppClient from pyatlan.client.common import ApiCaller, AsyncApiCaller +from pyatlan.client.transport import PyatlanSyncTransport from pyatlan.errors import AtlanError -from pyatlan.model.assets import AppWorkflowRun from pyatlan.model.app import ( AppDeleteResponse, AppInfo, @@ -29,6 +27,7 @@ AppScheduleResponse, AppSummary, ) +from pyatlan.model.assets import AppWorkflowRun @pytest.fixture diff --git a/tests/unit/test_core.py b/tests/unit/test_core.py index 214b59f77..fd43c33cc 100644 --- a/tests/unit/test_core.py +++ b/tests/unit/test_core.py @@ -1,7 +1,6 @@ from __future__ import annotations import json - from typing import no_type_check from unittest.mock import MagicMock