| 
									
										
										
										
											2022-04-12 17:06:49 +02:00
										 |  |  | #  Copyright 2021 Collate | 
					
						
							|  |  |  | #  Licensed under the Apache License, Version 2.0 (the "License"); | 
					
						
							|  |  |  | #  you may not use this file except in compliance with the License. | 
					
						
							|  |  |  | #  You may obtain a copy of the License at | 
					
						
							|  |  |  | #  http://www.apache.org/licenses/LICENSE-2.0 | 
					
						
							|  |  |  | #  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. | 
					
						
							|  |  |  | """
 | 
					
						
							|  |  |  | Module containing the logic to test a connection | 
					
						
							|  |  |  | from a WorkflowSource | 
					
						
							|  |  |  | """
 | 
					
						
							| 
									
										
										
										
											2022-08-26 07:29:38 +02:00
										 |  |  | import traceback | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-04-12 17:06:49 +02:00
										 |  |  | from flask import Response | 
					
						
							| 
									
										
										
										
											2022-07-28 14:46:25 +02:00
										 |  |  | from openmetadata_managed_apis.api.response import ApiResponse | 
					
						
							| 
									
										
										
										
											2022-08-26 07:29:38 +02:00
										 |  |  | from openmetadata_managed_apis.utils.logger import operations_logger | 
					
						
							| 
									
										
										
										
											2022-08-22 08:43:23 +02:00
										 |  |  | from openmetadata_managed_apis.workflows.ingestion.credentials_builder import ( | 
					
						
							|  |  |  |     build_secrets_manager_credentials, | 
					
						
							|  |  |  | ) | 
					
						
							| 
									
										
										
										
											2022-04-12 17:06:49 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-04-19 09:54:10 -07:00
										 |  |  | from metadata.generated.schema.api.services.ingestionPipelines.testServiceConnection import ( | 
					
						
							|  |  |  |     TestServiceConnectionRequest, | 
					
						
							|  |  |  | ) | 
					
						
							| 
									
										
										
										
											2022-04-22 11:30:59 +05:30
										 |  |  | from metadata.utils.connections import ( | 
					
						
							| 
									
										
										
										
											2022-04-12 17:06:49 +02:00
										 |  |  |     SourceConnectionException, | 
					
						
							| 
									
										
										
										
											2022-04-22 11:30:59 +05:30
										 |  |  |     get_connection, | 
					
						
							| 
									
										
										
										
											2022-04-12 17:06:49 +02:00
										 |  |  |     test_connection, | 
					
						
							|  |  |  | ) | 
					
						
							| 
									
										
										
										
											2022-11-11 09:59:15 +01:00
										 |  |  | from metadata.utils.secrets.secrets_manager_factory import SecretsManagerFactory | 
					
						
							| 
									
										
										
										
											2022-04-12 17:06:49 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-26 07:29:38 +02:00
										 |  |  | logger = operations_logger() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-04-12 17:06:49 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-04-19 09:54:10 -07:00
										 |  |  | def test_source_connection( | 
					
						
							|  |  |  |     test_service_connection: TestServiceConnectionRequest, | 
					
						
							|  |  |  | ) -> Response: | 
					
						
							| 
									
										
										
										
											2022-04-12 17:06:49 +02:00
										 |  |  |     """
 | 
					
						
							|  |  |  |     Create the engine and test the connection | 
					
						
							| 
									
										
										
										
											2022-08-22 08:43:23 +02:00
										 |  |  |     :param test_service_connection: Service connection to test | 
					
						
							| 
									
										
										
										
											2022-04-12 17:06:49 +02:00
										 |  |  |     :return: None or exception | 
					
						
							|  |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2022-11-11 09:59:15 +01:00
										 |  |  |     # we need to instantiate the secret manager in case secrets are passed | 
					
						
							|  |  |  |     SecretsManagerFactory( | 
					
						
							| 
									
										
										
										
											2022-08-22 08:43:23 +02:00
										 |  |  |         test_service_connection.secretsManagerProvider, | 
					
						
							|  |  |  |         build_secrets_manager_credentials( | 
					
						
							|  |  |  |             test_service_connection.secretsManagerProvider | 
					
						
							|  |  |  |         ), | 
					
						
							|  |  |  |     ) | 
					
						
							| 
									
										
										
										
											2022-04-22 11:30:59 +05:30
										 |  |  |     connection = get_connection(test_service_connection.connection.config) | 
					
						
							| 
									
										
										
										
											2022-04-12 17:06:49 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     try: | 
					
						
							| 
									
										
										
										
											2022-04-22 11:30:59 +05:30
										 |  |  |         test_connection(connection) | 
					
						
							| 
									
										
										
										
											2022-04-12 17:06:49 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-26 07:29:38 +02:00
										 |  |  |     except SourceConnectionException as exc: | 
					
						
							|  |  |  |         msg = f"Connection error from [{connection}]: {exc}" | 
					
						
							|  |  |  |         logger.debug(traceback.format_exc()) | 
					
						
							|  |  |  |         logger.error(msg) | 
					
						
							| 
									
										
										
										
											2022-04-12 17:06:49 +02:00
										 |  |  |         return ApiResponse.error( | 
					
						
							|  |  |  |             status=ApiResponse.STATUS_SERVER_ERROR, | 
					
						
							| 
									
										
										
										
											2022-08-26 07:29:38 +02:00
										 |  |  |             error=msg, | 
					
						
							| 
									
										
										
										
											2022-04-12 17:06:49 +02:00
										 |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-04-22 11:30:59 +05:30
										 |  |  |     return ApiResponse.success({"message": f"Connection with {connection} successful!"}) |