| 
									
										
										
										
											2025-04-03 10:39:47 +05:30
										 |  |  | #  Copyright 2025 Collate | 
					
						
							|  |  |  | #  Licensed under the Collate Community License, Version 1.0 (the "License"); | 
					
						
							| 
									
										
										
										
											2022-04-11 18:38:26 +02: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 | 
					
						
							| 
									
										
										
										
											2022-04-11 18:38:26 +02: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. | 
					
						
							|  |  |  | import json | 
					
						
							| 
									
										
										
										
											2022-04-19 09:54:10 -07:00
										 |  |  | from typing import Optional, Union | 
					
						
							| 
									
										
										
										
											2022-04-11 18:38:26 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-04-13 18:08:09 +02:00
										 |  |  | from airflow.models import DagRun | 
					
						
							| 
									
										
										
										
											2022-04-11 18:38:26 +02:00
										 |  |  | from flask import Response | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-04-19 09:54:10 -07:00
										 |  |  | from metadata.generated.schema.entity.services.ingestionPipelines.ingestionPipeline import ( | 
					
						
							|  |  |  |     PipelineStatus, | 
					
						
							|  |  |  | ) | 
					
						
							| 
									
										
										
										
											2022-08-03 08:13:55 +02:00
										 |  |  | from metadata.utils.helpers import datetime_to_ts | 
					
						
							| 
									
										
										
										
											2022-04-19 09:54:10 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-04-11 18:38:26 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | class ApiResponse: | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Helper class to respond API calls | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     STATUS_OK = 200 | 
					
						
							|  |  |  |     STATUS_BAD_REQUEST = 400 | 
					
						
							|  |  |  |     STATUS_UNAUTHORIZED = 401 | 
					
						
							|  |  |  |     STATUS_NOT_FOUND = 404 | 
					
						
							|  |  |  |     STATUS_SERVER_ERROR = 500 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @staticmethod | 
					
						
							|  |  |  |     def standard_response(status, response_obj): | 
					
						
							|  |  |  |         json_data = json.dumps(response_obj) | 
					
						
							|  |  |  |         resp = Response(json_data, status=status, mimetype="application/json") | 
					
						
							|  |  |  |         return resp | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @staticmethod | 
					
						
							| 
									
										
										
										
											2022-04-19 09:54:10 -07:00
										 |  |  |     def success(response_obj: Union[Optional[dict], Optional[list]] = None): | 
					
						
							| 
									
										
										
										
											2022-05-09 15:24:58 +02:00
										 |  |  |         response_body = response_obj if response_obj is not None else {} | 
					
						
							|  |  |  |         return ApiResponse.standard_response(ApiResponse.STATUS_OK, response_body) | 
					
						
							| 
									
										
										
										
											2022-04-11 18:38:26 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     @staticmethod | 
					
						
							|  |  |  |     def error(status, error): | 
					
						
							|  |  |  |         return ApiResponse.standard_response(status, {"error": error}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @staticmethod | 
					
						
							|  |  |  |     def bad_request(error): | 
					
						
							|  |  |  |         return ApiResponse.error(ApiResponse.STATUS_BAD_REQUEST, error) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @staticmethod | 
					
						
							|  |  |  |     def not_found(error="Resource not found"): | 
					
						
							|  |  |  |         return ApiResponse.error(ApiResponse.STATUS_NOT_FOUND, error) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @staticmethod | 
					
						
							|  |  |  |     def unauthorized(error="Not authorized to access this resource"): | 
					
						
							|  |  |  |         return ApiResponse.error(ApiResponse.STATUS_UNAUTHORIZED, error) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @staticmethod | 
					
						
							|  |  |  |     def server_error(error="An unexpected problem occurred"): | 
					
						
							|  |  |  |         return ApiResponse.error(ApiResponse.STATUS_SERVER_ERROR, error) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class ResponseFormat: | 
					
						
							| 
									
										
										
										
											2022-07-28 14:46:25 +02:00
										 |  |  |     """
 | 
					
						
							|  |  |  |     Handle how to manage responses | 
					
						
							|  |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2022-04-11 18:38:26 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     @staticmethod | 
					
						
							| 
									
										
										
										
											2022-04-19 09:54:10 -07:00
										 |  |  |     def format_dag_run_state(dag_run: DagRun) -> PipelineStatus: | 
					
						
							| 
									
										
										
										
											2022-07-28 14:46:25 +02:00
										 |  |  |         """
 | 
					
						
							|  |  |  |         Build the pipeline status | 
					
						
							|  |  |  |         """
 | 
					
						
							| 
									
										
										
										
											2022-04-19 09:54:10 -07:00
										 |  |  |         return PipelineStatus( | 
					
						
							| 
									
										
										
										
											2022-11-03 14:37:26 +05:30
										 |  |  |             pipelineState=dag_run.get_state(), | 
					
						
							| 
									
										
										
										
											2022-04-19 09:54:10 -07:00
										 |  |  |             runId=dag_run.run_id, | 
					
						
							| 
									
										
										
										
											2022-08-03 08:13:55 +02:00
										 |  |  |             startDate=datetime_to_ts(dag_run.start_date), | 
					
						
							|  |  |  |             endDate=datetime_to_ts(dag_run.end_date), | 
					
						
							| 
									
										
										
										
											2022-08-04 07:22:47 -07:00
										 |  |  |             timestamp=datetime_to_ts(dag_run.execution_date), | 
					
						
							| 
									
										
										
										
											2022-04-19 09:54:10 -07:00
										 |  |  |         ) |