mirror of
				https://github.com/open-metadata/OpenMetadata.git
				synced 2025-10-31 10:39:30 +00:00 
			
		
		
		
	redash-test-connection-completed (#4672)
* redash-test-connection-completed * code-smell-removed * docstring-added-for-non-sqlalchemy-service-client
This commit is contained in:
		
							parent
							
								
									6cff9620b2
								
							
						
					
					
						commit
						6bd587be8d
					
				| @ -24,6 +24,9 @@ from metadata.generated.schema.entity.services.connections.metadata.openMetadata | |||||||
|     OpenMetadataConnection, |     OpenMetadataConnection, | ||||||
| ) | ) | ||||||
| from metadata.generated.schema.entity.services.dashboardService import DashboardService | from metadata.generated.schema.entity.services.dashboardService import DashboardService | ||||||
|  | from metadata.generated.schema.metadataIngestion.dashboardServiceMetadataPipeline import ( | ||||||
|  |     DashboardServiceMetadataPipeline, | ||||||
|  | ) | ||||||
| from metadata.generated.schema.metadataIngestion.workflow import ( | from metadata.generated.schema.metadataIngestion.workflow import ( | ||||||
|     Source as WorkflowSource, |     Source as WorkflowSource, | ||||||
| ) | ) | ||||||
| @ -33,6 +36,7 @@ from metadata.ingestion.api.source import InvalidSourceException, Source, Source | |||||||
| from metadata.ingestion.models.table_metadata import Chart as ModelChart | from metadata.ingestion.models.table_metadata import Chart as ModelChart | ||||||
| from metadata.ingestion.models.table_metadata import Dashboard | from metadata.ingestion.models.table_metadata import Dashboard | ||||||
| from metadata.ingestion.ometa.ometa_api import OpenMetadata | from metadata.ingestion.ometa.ometa_api import OpenMetadata | ||||||
|  | from metadata.utils.connections import get_connection, test_connection | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @dataclass | @dataclass | ||||||
| @ -63,12 +67,14 @@ class RedashSource(Source[Entity]): | |||||||
|         self.config = config |         self.config = config | ||||||
|         self.metadata_config = metadata_config |         self.metadata_config = metadata_config | ||||||
|         self.metadata = OpenMetadata(metadata_config) |         self.metadata = OpenMetadata(metadata_config) | ||||||
| 
 |         self.source_config: DashboardServiceMetadataPipeline = ( | ||||||
|  |             self.config.sourceConfig.config | ||||||
|  |         ) | ||||||
|         self.connection_config = self.config.serviceConnection.__root__.config |         self.connection_config = self.config.serviceConnection.__root__.config | ||||||
|         self.status = RedashSourceStatus() |         self.status = RedashSourceStatus() | ||||||
|         self.client = Redash( |         self.connection = get_connection(self.connection_config) | ||||||
|             self.connection_config.hostPort, self.connection_config.apiKey |         self.client = self.connection.client | ||||||
|         ) | 
 | ||||||
|         self.service = self.metadata.get_service_or_create( |         self.service = self.metadata.get_service_or_create( | ||||||
|             entity=DashboardService, config=config |             entity=DashboardService, config=config | ||||||
|         ) |         ) | ||||||
|  | |||||||
| @ -11,6 +11,12 @@ | |||||||
| 
 | 
 | ||||||
| from dataclasses import dataclass | from dataclasses import dataclass | ||||||
| 
 | 
 | ||||||
|  | """ | ||||||
|  | Creating client for non-sqlalchemy package is neccessary,  | ||||||
|  | Importing a Class directly in connection.py will break the ingestion, | ||||||
|  | if non-sqlalchemy package is not installed | ||||||
|  | """ | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| @dataclass | @dataclass | ||||||
| class GlueClient: | class GlueClient: | ||||||
| @ -46,3 +52,9 @@ class KafkaClient: | |||||||
| class MetabaseClient: | class MetabaseClient: | ||||||
|     def __init__(self, client) -> None: |     def __init__(self, client) -> None: | ||||||
|         self.client = client |         self.client = client | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | @dataclass | ||||||
|  | class RedashClient: | ||||||
|  |     def __init__(self, client) -> None: | ||||||
|  |         self.client = client | ||||||
|  | |||||||
| @ -31,6 +31,9 @@ from metadata.generated.schema.entity.services.connections.connectionBasicType i | |||||||
| from metadata.generated.schema.entity.services.connections.dashboard.metabaseConnection import ( | from metadata.generated.schema.entity.services.connections.dashboard.metabaseConnection import ( | ||||||
|     MetabaseConnection, |     MetabaseConnection, | ||||||
| ) | ) | ||||||
|  | from metadata.generated.schema.entity.services.connections.dashboard.redashConnection import ( | ||||||
|  |     RedashConnection, | ||||||
|  | ) | ||||||
| from metadata.generated.schema.entity.services.connections.database.bigQueryConnection import ( | from metadata.generated.schema.entity.services.connections.database.bigQueryConnection import ( | ||||||
|     BigQueryConnection, |     BigQueryConnection, | ||||||
| ) | ) | ||||||
| @ -58,6 +61,7 @@ from metadata.utils.connection_clients import ( | |||||||
|     GlueClient, |     GlueClient, | ||||||
|     KafkaClient, |     KafkaClient, | ||||||
|     MetabaseClient, |     MetabaseClient, | ||||||
|  |     RedashClient, | ||||||
|     SalesforceClient, |     SalesforceClient, | ||||||
| ) | ) | ||||||
| from metadata.utils.credentials import set_google_credentials | from metadata.utils.credentials import set_google_credentials | ||||||
| @ -364,7 +368,31 @@ def _(connection: MetabaseClient) -> None: | |||||||
|             connection.client["connection"].hostPort + "/api/dashboard", |             connection.client["connection"].hostPort + "/api/dashboard", | ||||||
|             headers=connection.client["metabase_session"], |             headers=connection.client["metabase_session"], | ||||||
|         ) |         ) | ||||||
| 
 |     except Exception as err: | ||||||
|  |         raise SourceConnectionException( | ||||||
|  |             f"Unknown error connecting with {connection} - {err}." | ||||||
|  |         ) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | @get_connection.register | ||||||
|  | def _(connection: RedashConnection, verbose: bool = False): | ||||||
|  | 
 | ||||||
|  |     from redash_toolbelt import Redash | ||||||
|  | 
 | ||||||
|  |     try: | ||||||
|  |         redash = Redash(connection.hostPort, connection.apiKey) | ||||||
|  |         redash_client = RedashClient(redash) | ||||||
|  |         return redash_client | ||||||
|  | 
 | ||||||
|  |     except Exception as err: | ||||||
|  |         logger.error(f"Failed to connect with error :  {err}") | ||||||
|  |         logger.error(err) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | @test_connection.register | ||||||
|  | def _(connection: RedashClient) -> None: | ||||||
|  |     try: | ||||||
|  |         connection.client.dashboards() | ||||||
|     except Exception as err: |     except Exception as err: | ||||||
|         raise SourceConnectionException( |         raise SourceConnectionException( | ||||||
|             f"Unknown error connecting with {connection} - {err}." |             f"Unknown error connecting with {connection} - {err}." | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 codingwithabhi
						codingwithabhi