| 
									
										
										
										
											2025-04-03 10:39:47 +05:30
										 |  |  | #  Copyright 2025 Collate | 
					
						
							|  |  |  | #  Licensed under the Collate Community License, Version 1.0 (the "License"); | 
					
						
							| 
									
										
										
										
											2023-12-22 15:43:41 +01:00
										 |  |  | #  you may not use this file except in compliance with the License. | 
					
						
							|  |  |  | #  You may obtain a copy of the License at | 
					
						
							| 
									
										
										
										
											2025-04-03 10:39:47 +05:30
										 |  |  | #  https://github.com/open-metadata/OpenMetadata/blob/main/ingestion/LICENSE | 
					
						
							| 
									
										
										
										
											2023-12-22 15:43:41 +01:00
										 |  |  | #  Unless required by applicable law or agreed to in writing, software | 
					
						
							|  |  |  | #  distributed under the License is distributed on an "AS IS" BASIS, | 
					
						
							|  |  |  | #  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
					
						
							|  |  |  | #  See the License for the specific language governing permissions and | 
					
						
							|  |  |  | #  limitations under the License. | 
					
						
							|  |  |  | """
 | 
					
						
							|  |  |  | OpenMetadata base class for tests | 
					
						
							|  |  |  | """
 | 
					
						
							|  |  |  | import uuid | 
					
						
							|  |  |  | from datetime import datetime | 
					
						
							| 
									
										
										
										
											2024-04-22 22:35:37 +02:00
										 |  |  | from textwrap import dedent | 
					
						
							| 
									
										
										
										
											2024-01-25 11:16:22 +05:30
										 |  |  | from typing import Any, List, Optional, Type | 
					
						
							| 
									
										
										
										
											2023-12-22 15:43:41 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | from airflow import DAG | 
					
						
							|  |  |  | from airflow.operators.bash import BashOperator | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-23 09:56:24 +02:00
										 |  |  | from metadata.generated.schema.api.data.createDashboard import CreateDashboardRequest | 
					
						
							|  |  |  | from metadata.generated.schema.api.data.createDashboardDataModel import ( | 
					
						
							|  |  |  |     CreateDashboardDataModelRequest, | 
					
						
							|  |  |  | ) | 
					
						
							| 
									
										
										
										
											2024-01-25 11:16:22 +05:30
										 |  |  | from metadata.generated.schema.api.data.createDatabase import CreateDatabaseRequest | 
					
						
							|  |  |  | from metadata.generated.schema.api.data.createDatabaseSchema import ( | 
					
						
							|  |  |  |     CreateDatabaseSchemaRequest, | 
					
						
							|  |  |  | ) | 
					
						
							| 
									
										
										
										
											2023-12-22 15:43:41 +01:00
										 |  |  | from metadata.generated.schema.api.data.createPipeline import CreatePipelineRequest | 
					
						
							| 
									
										
										
										
											2024-01-25 11:16:22 +05:30
										 |  |  | from metadata.generated.schema.api.data.createTable import CreateTableRequest | 
					
						
							| 
									
										
										
										
											2024-04-23 09:56:24 +02:00
										 |  |  | from metadata.generated.schema.api.services.createDashboardService import ( | 
					
						
							|  |  |  |     CreateDashboardServiceRequest, | 
					
						
							|  |  |  | ) | 
					
						
							| 
									
										
										
										
											2024-01-25 11:16:22 +05:30
										 |  |  | from metadata.generated.schema.api.services.createDatabaseService import ( | 
					
						
							|  |  |  |     CreateDatabaseServiceRequest, | 
					
						
							|  |  |  | ) | 
					
						
							| 
									
										
										
										
											2023-12-22 15:43:41 +01:00
										 |  |  | from metadata.generated.schema.api.services.createPipelineService import ( | 
					
						
							|  |  |  |     CreatePipelineServiceRequest, | 
					
						
							|  |  |  | ) | 
					
						
							| 
									
										
										
										
											2024-01-25 11:16:22 +05:30
										 |  |  | from metadata.generated.schema.api.teams.createTeam import CreateTeamRequest | 
					
						
							|  |  |  | from metadata.generated.schema.api.teams.createUser import CreateUserRequest | 
					
						
							|  |  |  | from metadata.generated.schema.api.tests.createTestCase import CreateTestCaseRequest | 
					
						
							|  |  |  | from metadata.generated.schema.api.tests.createTestDefinition import ( | 
					
						
							|  |  |  |     CreateTestDefinitionRequest, | 
					
						
							|  |  |  | ) | 
					
						
							| 
									
										
										
										
											2024-06-05 21:18:37 +02:00
										 |  |  | from metadata.generated.schema.api.tests.createTestSuite import ( | 
					
						
							|  |  |  |     CreateTestSuiteRequest, | 
					
						
							|  |  |  |     TestSuiteEntityName, | 
					
						
							|  |  |  | ) | 
					
						
							| 
									
										
										
										
											2024-04-23 09:56:24 +02:00
										 |  |  | from metadata.generated.schema.entity.data.dashboard import Dashboard | 
					
						
							|  |  |  | from metadata.generated.schema.entity.data.dashboardDataModel import ( | 
					
						
							|  |  |  |     DashboardDataModel, | 
					
						
							|  |  |  |     DataModelType, | 
					
						
							|  |  |  | ) | 
					
						
							| 
									
										
										
										
											2024-01-25 11:16:22 +05:30
										 |  |  | from metadata.generated.schema.entity.data.database import Database | 
					
						
							|  |  |  | from metadata.generated.schema.entity.data.databaseSchema import DatabaseSchema | 
					
						
							| 
									
										
										
										
											2023-12-22 15:43:41 +01:00
										 |  |  | from metadata.generated.schema.entity.data.pipeline import Pipeline, Task | 
					
						
							| 
									
										
										
										
											2024-01-25 11:16:22 +05:30
										 |  |  | from metadata.generated.schema.entity.data.table import Column, DataType, Table | 
					
						
							| 
									
										
										
										
											2024-04-23 09:56:24 +02:00
										 |  |  | from metadata.generated.schema.entity.services.connections.dashboard.lookerConnection import ( | 
					
						
							|  |  |  |     LookerConnection, | 
					
						
							|  |  |  | ) | 
					
						
							| 
									
										
										
										
											2024-01-25 11:16:22 +05:30
										 |  |  | from metadata.generated.schema.entity.services.connections.database.common.basicAuth import ( | 
					
						
							|  |  |  |     BasicAuth, | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | from metadata.generated.schema.entity.services.connections.database.mysqlConnection import ( | 
					
						
							|  |  |  |     MysqlConnection, | 
					
						
							|  |  |  | ) | 
					
						
							| 
									
										
										
										
											2024-01-31 18:51:09 -08:00
										 |  |  | from metadata.generated.schema.entity.services.connections.pipeline.customPipelineConnection import ( | 
					
						
							|  |  |  |     CustomPipelineConnection, | 
					
						
							|  |  |  |     CustomPipelineType, | 
					
						
							| 
									
										
										
										
											2023-12-22 15:43:41 +01:00
										 |  |  | ) | 
					
						
							| 
									
										
										
										
											2024-04-23 09:56:24 +02:00
										 |  |  | from metadata.generated.schema.entity.services.dashboardService import ( | 
					
						
							|  |  |  |     DashboardConnection, | 
					
						
							|  |  |  |     DashboardService, | 
					
						
							|  |  |  |     DashboardServiceType, | 
					
						
							|  |  |  | ) | 
					
						
							| 
									
										
										
										
											2024-01-25 11:16:22 +05:30
										 |  |  | from metadata.generated.schema.entity.services.databaseService import ( | 
					
						
							|  |  |  |     DatabaseConnection, | 
					
						
							|  |  |  |     DatabaseService, | 
					
						
							|  |  |  |     DatabaseServiceType, | 
					
						
							|  |  |  | ) | 
					
						
							| 
									
										
										
										
											2023-12-22 15:43:41 +01:00
										 |  |  | from metadata.generated.schema.entity.services.pipelineService import ( | 
					
						
							|  |  |  |     PipelineConnection, | 
					
						
							|  |  |  |     PipelineService, | 
					
						
							|  |  |  |     PipelineServiceType, | 
					
						
							|  |  |  | ) | 
					
						
							| 
									
										
										
										
											2024-06-05 21:18:37 +02:00
										 |  |  | from metadata.generated.schema.entity.teams.team import TeamType | 
					
						
							| 
									
										
										
										
											2024-01-25 11:16:22 +05:30
										 |  |  | from metadata.generated.schema.tests.testCase import TestCaseParameterValue | 
					
						
							|  |  |  | from metadata.generated.schema.tests.testDefinition import ( | 
					
						
							|  |  |  |     TestCaseParameterDefinition, | 
					
						
							|  |  |  |     TestPlatform, | 
					
						
							|  |  |  | ) | 
					
						
							| 
									
										
										
										
											2024-06-05 21:18:37 +02:00
										 |  |  | from metadata.generated.schema.type.basic import ( | 
					
						
							|  |  |  |     Email, | 
					
						
							|  |  |  |     EntityLink, | 
					
						
							|  |  |  |     EntityName, | 
					
						
							|  |  |  |     FullyQualifiedEntityName, | 
					
						
							|  |  |  |     Markdown, | 
					
						
							|  |  |  |     TestCaseEntityName, | 
					
						
							|  |  |  | ) | 
					
						
							| 
									
										
										
										
											2024-10-10 17:14:22 +02:00
										 |  |  | from metadata.generated.schema.type.tagLabel import ( | 
					
						
							|  |  |  |     LabelType, | 
					
						
							|  |  |  |     State, | 
					
						
							|  |  |  |     TagFQN, | 
					
						
							|  |  |  |     TagLabel, | 
					
						
							|  |  |  |     TagSource, | 
					
						
							|  |  |  | ) | 
					
						
							| 
									
										
										
										
											2024-06-25 07:51:22 +02:00
										 |  |  | from metadata.ingestion.ometa.ometa_api import C, T | 
					
						
							| 
									
										
										
										
											2023-12-22 15:43:41 +01:00
										 |  |  | from metadata.utils.dispatch import class_register | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-10 17:14:22 +02:00
										 |  |  | TIER1_TAG: TagLabel = TagLabel( | 
					
						
							|  |  |  |     tagFQN=TagFQN(f"Tier.Tier1"), | 
					
						
							|  |  |  |     name="Tier1", | 
					
						
							|  |  |  |     source=TagSource.Classification, | 
					
						
							|  |  |  |     labelType=LabelType.Automated, | 
					
						
							|  |  |  |     state=State.Suggested, | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-23 09:56:24 +02:00
										 |  |  | COLUMNS = [ | 
					
						
							|  |  |  |     Column(name="id", dataType=DataType.BIGINT), | 
					
						
							|  |  |  |     Column(name="another", dataType=DataType.BIGINT), | 
					
						
							|  |  |  |     Column( | 
					
						
							|  |  |  |         name="struct", | 
					
						
							|  |  |  |         dataType=DataType.STRUCT, | 
					
						
							|  |  |  |         children=[ | 
					
						
							|  |  |  |             Column(name="id", dataType=DataType.INT), | 
					
						
							|  |  |  |             Column(name="name", dataType=DataType.STRING), | 
					
						
							|  |  |  |         ], | 
					
						
							|  |  |  |     ), | 
					
						
							|  |  |  | ] | 
					
						
							| 
									
										
										
										
											2023-12-22 15:43:41 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-22 22:35:37 +02:00
										 |  |  | METADATA_INGESTION_CONFIG_TEMPLATE = dedent( | 
					
						
							|  |  |  |     """{{
 | 
					
						
							|  |  |  |         "source": {{ | 
					
						
							|  |  |  |             "type": "{type}", | 
					
						
							|  |  |  |             "serviceName": "{service_name}", | 
					
						
							|  |  |  |             "serviceConnection": {{ | 
					
						
							|  |  |  |                 "config": {service_config} | 
					
						
							|  |  |  |             }}, | 
					
						
							|  |  |  |             "sourceConfig": {{"config": {source_config} }} | 
					
						
							|  |  |  |         }}, | 
					
						
							|  |  |  |         "sink": {{"type": "metadata-rest", "config": {{}}}}, | 
					
						
							|  |  |  |         "workflowConfig": {{ | 
					
						
							|  |  |  |             "loggerLevel": "DEBUG", | 
					
						
							|  |  |  |             "openMetadataServerConfig": {{ | 
					
						
							|  |  |  |                 "hostPort": "http://localhost:8585/api", | 
					
						
							|  |  |  |                 "authProvider": "openmetadata", | 
					
						
							|  |  |  |                 "securityConfig": {{ | 
					
						
							|  |  |  |                     "jwtToken": "eyJraWQiOiJHYjM4OWEtOWY3Ni1nZGpzLWE5MmotMDI0MmJrOTQzNTYiLCJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJhZG1pbiIsImlzQm90IjpmYWxzZSwiaXNzIjoib3Blbi1tZXRhZGF0YS5vcmciLCJpYXQiOjE2NjM5Mzg0NjIsImVtYWlsIjoiYWRtaW5Ab3Blbm1ldGFkYXRhLm9yZyJ9.tS8um_5DKu7HgzGBzS1VTA5uUjKWOCU0B_j08WXBiEC0mr0zNREkqVfwFDD-d24HlNEbrqioLsBuFRiwIWKc1m_ZlVQbG7P36RUxhuv2vbSp80FKyNM-Tj93FDzq91jsyNmsQhyNv_fNr3TXfzzSPjHt8Go0FMMP66weoKMgW2PbXlhVKwEuXUHyakLLzewm9UMeQaEiRzhiTMU3UkLXcKbYEJJvfNFcLwSl9W8JCO_l0Yj3ud-qt_nQYEZwqW6u5nfdQllN133iikV4fM5QZsMCnm8Rq1mvLR0y9bmJiD7fwM1tmJ791TUWqmKaTnP49U493VanKpUAfzIiOiIbhg" | 
					
						
							|  |  |  |                 }} | 
					
						
							|  |  |  |             }} | 
					
						
							|  |  |  |         }} | 
					
						
							|  |  |  |     }}"""
 | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | PROFILER_INGESTION_CONFIG_TEMPLATE = dedent( | 
					
						
							|  |  |  |     """{{
 | 
					
						
							|  |  |  |         "source": {{ | 
					
						
							|  |  |  |             "type": "{type}", | 
					
						
							|  |  |  |             "serviceName": "{service_name}", | 
					
						
							|  |  |  |             "serviceConnection": {{ | 
					
						
							|  |  |  |                 "config": {service_config} | 
					
						
							|  |  |  |             }}, | 
					
						
							| 
									
										
										
										
											2025-02-17 09:37:06 +01:00
										 |  |  |             "sourceConfig": {{"config": {{"type":"Profiler", "profileSample": 100}}}} | 
					
						
							| 
									
										
										
										
											2024-04-22 22:35:37 +02:00
										 |  |  |         }}, | 
					
						
							|  |  |  |         "processor": {{"type": "orm-profiler", "config": {{}}}}, | 
					
						
							|  |  |  |         "sink": {{"type": "metadata-rest", "config": {{}}}}, | 
					
						
							|  |  |  |         "workflowConfig": {{ | 
					
						
							|  |  |  |             "loggerLevel": "DEBUG", | 
					
						
							|  |  |  |             "openMetadataServerConfig": {{ | 
					
						
							|  |  |  |                 "hostPort": "http://localhost:8585/api", | 
					
						
							|  |  |  |                 "authProvider": "openmetadata", | 
					
						
							|  |  |  |                 "securityConfig": {{ | 
					
						
							|  |  |  |                     "jwtToken": "eyJraWQiOiJHYjM4OWEtOWY3Ni1nZGpzLWE5MmotMDI0MmJrOTQzNTYiLCJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJhZG1pbiIsImlzQm90IjpmYWxzZSwiaXNzIjoib3Blbi1tZXRhZGF0YS5vcmciLCJpYXQiOjE2NjM5Mzg0NjIsImVtYWlsIjoiYWRtaW5Ab3Blbm1ldGFkYXRhLm9yZyJ9.tS8um_5DKu7HgzGBzS1VTA5uUjKWOCU0B_j08WXBiEC0mr0zNREkqVfwFDD-d24HlNEbrqioLsBuFRiwIWKc1m_ZlVQbG7P36RUxhuv2vbSp80FKyNM-Tj93FDzq91jsyNmsQhyNv_fNr3TXfzzSPjHt8Go0FMMP66weoKMgW2PbXlhVKwEuXUHyakLLzewm9UMeQaEiRzhiTMU3UkLXcKbYEJJvfNFcLwSl9W8JCO_l0Yj3ud-qt_nQYEZwqW6u5nfdQllN133iikV4fM5QZsMCnm8Rq1mvLR0y9bmJiD7fwM1tmJ791TUWqmKaTnP49U493VanKpUAfzIiOiIbhg" | 
					
						
							|  |  |  |                 }} | 
					
						
							|  |  |  |             }} | 
					
						
							|  |  |  |         }} | 
					
						
							|  |  |  |     }}"""
 | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-12-22 15:43:41 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | def generate_name() -> EntityName: | 
					
						
							|  |  |  |     """Generate a random for the asset""" | 
					
						
							| 
									
										
										
										
											2024-06-05 21:18:37 +02:00
										 |  |  |     return EntityName(str(uuid.uuid4())) | 
					
						
							| 
									
										
										
										
											2023-12-22 15:43:41 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | create_service_registry = class_register() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def get_create_service(entity: Type[T], name: Optional[EntityName] = None) -> C: | 
					
						
							|  |  |  |     """Create a vanilla service based on the input type""" | 
					
						
							|  |  |  |     func = create_service_registry.registry.get(entity.__name__) | 
					
						
							|  |  |  |     if not func: | 
					
						
							|  |  |  |         raise ValueError( | 
					
						
							|  |  |  |             f"Create Service for type {entity.__name__} has not yet been implemented. Add it on `integration_base.py`" | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if not name: | 
					
						
							| 
									
										
										
										
											2024-06-05 21:18:37 +02:00
										 |  |  |         name = generate_name().root | 
					
						
							| 
									
										
										
										
											2023-12-22 15:43:41 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     return func(name) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @create_service_registry.add(PipelineService) | 
					
						
							|  |  |  | def _(name: EntityName) -> C: | 
					
						
							|  |  |  |     """Prepare a Create service request""" | 
					
						
							|  |  |  |     return CreatePipelineServiceRequest( | 
					
						
							|  |  |  |         name=name, | 
					
						
							| 
									
										
										
										
											2024-01-31 18:51:09 -08:00
										 |  |  |         serviceType=PipelineServiceType.CustomPipeline, | 
					
						
							| 
									
										
										
										
											2023-12-22 15:43:41 +01:00
										 |  |  |         connection=PipelineConnection( | 
					
						
							| 
									
										
										
										
											2024-01-31 18:51:09 -08:00
										 |  |  |             config=CustomPipelineConnection(type=CustomPipelineType.CustomPipeline) | 
					
						
							|  |  |  |         ), | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-01-25 11:16:22 +05:30
										 |  |  | @create_service_registry.add(DatabaseService) | 
					
						
							|  |  |  | def _(name: EntityName) -> C: | 
					
						
							|  |  |  |     """Prepare a Create service request""" | 
					
						
							|  |  |  |     return CreateDatabaseServiceRequest( | 
					
						
							|  |  |  |         name=name, | 
					
						
							|  |  |  |         serviceType=DatabaseServiceType.Mysql, | 
					
						
							|  |  |  |         connection=DatabaseConnection( | 
					
						
							|  |  |  |             config=MysqlConnection( | 
					
						
							|  |  |  |                 username="username", | 
					
						
							|  |  |  |                 authType=BasicAuth( | 
					
						
							|  |  |  |                     password="password", | 
					
						
							|  |  |  |                 ), | 
					
						
							|  |  |  |                 hostPort="http://localhost:1234", | 
					
						
							|  |  |  |             ) | 
					
						
							|  |  |  |         ), | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-23 09:56:24 +02:00
										 |  |  | @create_service_registry.add(DashboardService) | 
					
						
							|  |  |  | def _(name: EntityName) -> C: | 
					
						
							|  |  |  |     """Prepare a Create service request""" | 
					
						
							|  |  |  |     return CreateDashboardServiceRequest( | 
					
						
							|  |  |  |         name=name, | 
					
						
							|  |  |  |         serviceType=DashboardServiceType.Looker, | 
					
						
							|  |  |  |         connection=DashboardConnection( | 
					
						
							|  |  |  |             config=LookerConnection( | 
					
						
							|  |  |  |                 hostPort="http://hostPort", clientId="id", clientSecret="secret" | 
					
						
							|  |  |  |             ) | 
					
						
							|  |  |  |         ), | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-12-22 15:43:41 +01:00
										 |  |  | create_entity_registry = class_register() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def get_create_entity( | 
					
						
							| 
									
										
										
										
											2024-01-25 11:16:22 +05:30
										 |  |  |     entity: Type[T], | 
					
						
							|  |  |  |     reference: Any, | 
					
						
							|  |  |  |     name: Optional[EntityName] = None, | 
					
						
							| 
									
										
										
										
											2023-12-22 15:43:41 +01:00
										 |  |  | ) -> C: | 
					
						
							|  |  |  |     """Create a vanilla entity based on the input type""" | 
					
						
							|  |  |  |     func = create_entity_registry.registry.get(entity.__name__) | 
					
						
							|  |  |  |     if not func: | 
					
						
							|  |  |  |         raise ValueError( | 
					
						
							|  |  |  |             f"Create Service for type {entity.__name__} has not yet been implemented. Add it on `integration_base.py`" | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if not name: | 
					
						
							| 
									
										
										
										
											2024-06-05 21:18:37 +02:00
										 |  |  |         name = generate_name().root | 
					
						
							| 
									
										
										
										
											2023-12-22 15:43:41 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     return func(reference, name) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @create_entity_registry.add(Pipeline) | 
					
						
							|  |  |  | def _(reference: FullyQualifiedEntityName, name: EntityName) -> C: | 
					
						
							|  |  |  |     return CreatePipelineRequest( | 
					
						
							|  |  |  |         name=name, | 
					
						
							|  |  |  |         service=reference, | 
					
						
							|  |  |  |         tasks=[ | 
					
						
							|  |  |  |             Task(name="task1"), | 
					
						
							|  |  |  |             Task(name="task2", downstreamTasks=["task1"]), | 
					
						
							|  |  |  |             Task(name="task3", downstreamTasks=["task2"]), | 
					
						
							|  |  |  |             Task(name="task4", downstreamTasks=["task2"]), | 
					
						
							|  |  |  |         ], | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-01-25 11:16:22 +05:30
										 |  |  | @create_entity_registry.add(Database) | 
					
						
							|  |  |  | def _(reference: FullyQualifiedEntityName, name: EntityName) -> C: | 
					
						
							|  |  |  |     return CreateDatabaseRequest( | 
					
						
							|  |  |  |         name=name, | 
					
						
							|  |  |  |         service=reference, | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @create_entity_registry.add(DatabaseSchema) | 
					
						
							|  |  |  | def _(reference: FullyQualifiedEntityName, name: EntityName) -> C: | 
					
						
							|  |  |  |     return CreateDatabaseSchemaRequest( | 
					
						
							|  |  |  |         name=name, | 
					
						
							|  |  |  |         database=reference, | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @create_entity_registry.add(Table) | 
					
						
							|  |  |  | def _(reference: FullyQualifiedEntityName, name: EntityName) -> C: | 
					
						
							|  |  |  |     return CreateTableRequest( | 
					
						
							|  |  |  |         name=name, | 
					
						
							|  |  |  |         databaseSchema=reference, | 
					
						
							| 
									
										
										
										
											2024-04-23 09:56:24 +02:00
										 |  |  |         columns=COLUMNS, | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @create_entity_registry.add(Dashboard) | 
					
						
							|  |  |  | def _(reference: FullyQualifiedEntityName, name: EntityName) -> C: | 
					
						
							|  |  |  |     return CreateDashboardRequest( | 
					
						
							|  |  |  |         name=name, | 
					
						
							|  |  |  |         service=reference, | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @create_entity_registry.add(DashboardDataModel) | 
					
						
							|  |  |  | def _(reference: FullyQualifiedEntityName, name: EntityName) -> C: | 
					
						
							|  |  |  |     return CreateDashboardDataModelRequest( | 
					
						
							|  |  |  |         name=name, | 
					
						
							|  |  |  |         service=reference, | 
					
						
							|  |  |  |         dataModelType=DataModelType.LookMlExplore, | 
					
						
							|  |  |  |         columns=COLUMNS, | 
					
						
							| 
									
										
										
										
											2024-01-25 11:16:22 +05:30
										 |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def get_create_user_entity( | 
					
						
							|  |  |  |     name: Optional[EntityName] = None, email: Optional[str] = None | 
					
						
							|  |  |  | ): | 
					
						
							|  |  |  |     if not name: | 
					
						
							| 
									
										
										
										
											2024-06-05 21:18:37 +02:00
										 |  |  |         name = generate_name().root | 
					
						
							| 
									
										
										
										
											2024-01-25 11:16:22 +05:30
										 |  |  |     if not email: | 
					
						
							| 
									
										
										
										
											2024-06-05 21:18:37 +02:00
										 |  |  |         email = f"{generate_name().root}@getcollate.io" | 
					
						
							|  |  |  |     return CreateUserRequest(name=name, email=Email(root=email)) | 
					
						
							| 
									
										
										
										
											2024-01-25 11:16:22 +05:30
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def get_create_team_entity(name: Optional[EntityName] = None, users=List[str]): | 
					
						
							|  |  |  |     if not name: | 
					
						
							| 
									
										
										
										
											2024-06-05 21:18:37 +02:00
										 |  |  |         name = generate_name().root | 
					
						
							|  |  |  |     return CreateTeamRequest(name=name, teamType=TeamType.Group, users=users) | 
					
						
							| 
									
										
										
										
											2024-01-25 11:16:22 +05:30
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def get_create_test_definition( | 
					
						
							|  |  |  |     parameter_definition: List[TestCaseParameterDefinition], | 
					
						
							|  |  |  |     entity_type: [T], | 
					
						
							|  |  |  |     name: Optional[EntityName] = None, | 
					
						
							|  |  |  |     description: Optional[str] = None, | 
					
						
							|  |  |  | ): | 
					
						
							|  |  |  |     if not name: | 
					
						
							| 
									
										
										
										
											2024-06-05 21:18:37 +02:00
										 |  |  |         name = generate_name().root | 
					
						
							| 
									
										
										
										
											2024-01-25 11:16:22 +05:30
										 |  |  |     if not description: | 
					
						
							| 
									
										
										
										
											2024-06-05 21:18:37 +02:00
										 |  |  |         description = generate_name().root | 
					
						
							| 
									
										
										
										
											2024-01-25 11:16:22 +05:30
										 |  |  |     return CreateTestDefinitionRequest( | 
					
						
							| 
									
										
										
										
											2024-06-05 21:18:37 +02:00
										 |  |  |         name=TestCaseEntityName(name), | 
					
						
							|  |  |  |         description=Markdown(description), | 
					
						
							| 
									
										
										
										
											2024-01-25 11:16:22 +05:30
										 |  |  |         entityType=entity_type, | 
					
						
							|  |  |  |         testPlatforms=[TestPlatform.GreatExpectations], | 
					
						
							|  |  |  |         parameterDefinition=parameter_definition, | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def get_create_test_suite( | 
					
						
							|  |  |  |     executable_entity_reference: str, | 
					
						
							|  |  |  |     name: Optional[EntityName] = None, | 
					
						
							|  |  |  |     description: Optional[str] = None, | 
					
						
							|  |  |  | ): | 
					
						
							|  |  |  |     if not name: | 
					
						
							| 
									
										
										
										
											2024-06-05 21:18:37 +02:00
										 |  |  |         name = generate_name().root | 
					
						
							| 
									
										
										
										
											2024-01-25 11:16:22 +05:30
										 |  |  |     if not description: | 
					
						
							| 
									
										
										
										
											2024-06-05 21:18:37 +02:00
										 |  |  |         description = generate_name().root | 
					
						
							| 
									
										
										
										
											2024-01-25 11:16:22 +05:30
										 |  |  |     return CreateTestSuiteRequest( | 
					
						
							| 
									
										
										
										
											2024-06-05 21:18:37 +02:00
										 |  |  |         name=TestSuiteEntityName(name), | 
					
						
							|  |  |  |         description=Markdown(description), | 
					
						
							| 
									
										
										
										
											2025-01-07 17:59:54 +01:00
										 |  |  |         basicEntityReference=FullyQualifiedEntityName(executable_entity_reference), | 
					
						
							| 
									
										
										
										
											2024-01-25 11:16:22 +05:30
										 |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def get_create_test_case( | 
					
						
							|  |  |  |     entity_link: str, | 
					
						
							|  |  |  |     test_definition: FullyQualifiedEntityName, | 
					
						
							|  |  |  |     parameter_values: List[TestCaseParameterValue], | 
					
						
							|  |  |  |     name: Optional[EntityName] = None, | 
					
						
							|  |  |  | ): | 
					
						
							|  |  |  |     if not name: | 
					
						
							| 
									
										
										
										
											2024-06-05 21:18:37 +02:00
										 |  |  |         name = generate_name().root | 
					
						
							| 
									
										
										
										
											2024-01-25 11:16:22 +05:30
										 |  |  |     return CreateTestCaseRequest( | 
					
						
							| 
									
										
										
										
											2024-06-05 21:18:37 +02:00
										 |  |  |         name=TestCaseEntityName(name), | 
					
						
							|  |  |  |         entityLink=EntityLink(entity_link), | 
					
						
							| 
									
										
										
										
											2024-01-25 11:16:22 +05:30
										 |  |  |         testDefinition=test_definition, | 
					
						
							|  |  |  |         parameterValues=parameter_values, | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-12-22 15:43:41 +01:00
										 |  |  | def get_test_dag(name: str) -> DAG: | 
					
						
							|  |  |  |     """Get a DAG with the tasks created in the CreatePipelineRequest""" | 
					
						
							|  |  |  |     with DAG(name, start_date=datetime(2021, 1, 1)) as dag: | 
					
						
							|  |  |  |         tasks = [ | 
					
						
							|  |  |  |             BashOperator( | 
					
						
							|  |  |  |                 task_id=task_id, | 
					
						
							|  |  |  |                 bash_command="date", | 
					
						
							|  |  |  |             ) | 
					
						
							|  |  |  |             for task_id in ("task1", "task2", "task3", "task4") | 
					
						
							|  |  |  |         ] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         tasks[0] >> tasks[1] >> [tasks[2], tasks[3]] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return dag |