From 5074f6588f625859c29a6658915b29db4fe39cf9 Mon Sep 17 00:00:00 2001 From: Pere Miquel Brull Date: Fri, 18 Oct 2024 09:40:06 +0200 Subject: [PATCH] MINOR - Validate app runner init (#18316) --- .../src/metadata/workflow/application.py | 11 ++-- .../workflow/test_application_workflow.py | 51 +++++++++++++++++++ 2 files changed, 57 insertions(+), 5 deletions(-) create mode 100644 ingestion/tests/unit/workflow/test_application_workflow.py diff --git a/ingestion/src/metadata/workflow/application.py b/ingestion/src/metadata/workflow/application.py index 17ff0654070..b22d4b1bd78 100644 --- a/ingestion/src/metadata/workflow/application.py +++ b/ingestion/src/metadata/workflow/application.py @@ -78,23 +78,24 @@ class ApplicationWorkflow(BaseWorkflow, ABC): config: OpenMetadataApplicationConfig runner: Optional[AppRunner] - def __init__(self, config_dict: dict): + def __init__(self, config: OpenMetadataApplicationConfig): self.runner = None # Will be passed in post-init - # TODO: Create a parse_gracefully method - self.config = OpenMetadataApplicationConfig.model_validate(config_dict) + self.config = config # Applications are associated to the OpenMetadata Service self.service_type: ServiceType = ServiceType.Metadata super().__init__( config=self.config, - workflow_config=self.workflow_config, + workflow_config=config.workflowConfig, service_type=self.service_type, ) @classmethod def create(cls, config_dict: dict): - return cls(config_dict) + # TODO: Create a parse_gracefully method + config = OpenMetadataApplicationConfig.model_validate(config_dict) + return cls(config) def post_init(self) -> None: """ diff --git a/ingestion/tests/unit/workflow/test_application_workflow.py b/ingestion/tests/unit/workflow/test_application_workflow.py new file mode 100644 index 00000000000..df725f4d493 --- /dev/null +++ b/ingestion/tests/unit/workflow/test_application_workflow.py @@ -0,0 +1,51 @@ +# 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. +""" +Validate the initialization of the App Workflow +""" +import yaml + +from metadata.workflow.application import ApplicationWorkflow, AppRunner + + +class TestApp(AppRunner): + """Test App class""" + + def close(self) -> None: + """I am a test""" + + def run(self) -> None: + """I am a test""" + + +def test_init_app() -> None: + """We can properly instantiate the app""" + + config = f""" + sourcePythonClass: "{__name__}.TestApp" + appConfig: + type: Automator + resources: + type: [table] + queryFilter: "..." + actions: + - type: LineagePropagationAction + overwriteMetadata: false + workflowConfig: + openMetadataServerConfig: + hostPort: "http://localhost:8585/api" + authProvider: "openmetadata" + securityConfig: + jwtToken: "..." + """ + + workflow = ApplicationWorkflow.create(yaml.safe_load(config)) + assert isinstance(workflow, ApplicationWorkflow)