Fix #4758: Add support for yaml configuration in Ingestion connectors (#4759)

* Fix #4758: Add support for yaml configuration in Ingestion connectors

* Fix #4758: Add support for yaml configuration in Ingestion connectors

* Fix #4758: Add support for yaml configuration in Ingestion connectors

* Fix #4758: Add support for yaml configuration in Ingestion connectors
This commit is contained in:
Sriharsha Chintalapani 2022-05-05 23:12:09 -07:00 committed by GitHub
parent ebf329dd7e
commit d2eef5ec0e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 41 additions and 6 deletions

View File

@ -0,0 +1,16 @@
---
source:
type: sample-data
serviceName: sample_data
serviceConnection:
config:
type: SampleData
sampleDataFolder: "./examples/sample_data"
sourceConfig: {}
sink:
type: metadata-rest
config: {}
workflowConfig:
openMetadataServerConfig:
hostPort: http://localhost:8585/api
authProvider: no-auth

View File

@ -16,6 +16,7 @@ import pathlib
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
from typing import IO, Any, Optional from typing import IO, Any, Optional
import yaml
from pydantic import BaseModel from pydantic import BaseModel
FQDN_SEPARATOR: str = "." FQDN_SEPARATOR: str = "."
@ -45,22 +46,40 @@ class ConfigurationMechanism(ABC):
pass pass
class YamlConfigurationMechanism(ConfigurationMechanism):
"""load configuration from yaml files"""
def load_config(self, config_fp: IO) -> dict:
config = yaml.safe_load(config_fp)
return config
class JsonConfigurationMechanism(ConfigurationMechanism):
"""load configuration from json files"""
def load_config(self, config_fp: IO) -> dict:
config = json.load(config_fp)
return config
def load_config_file(config_file: pathlib.Path) -> dict: def load_config_file(config_file: pathlib.Path) -> dict:
if not config_file.is_file(): if not config_file.is_file():
raise ConfigurationError(f"Cannot open config file {config_file}") raise ConfigurationError(f"Cannot open config file {config_file}")
if config_file.suffix not in [".json"]: config_mech: ConfigurationMechanism
if config_file.suffix in [".yaml", ".yml"]:
config_mech = YamlConfigurationMechanism()
elif config_file.suffix == ".json":
config_mech = JsonConfigurationMechanism()
else:
raise ConfigurationError( raise ConfigurationError(
"Only json are supported. Cannot process file type {}".format( "Only .json and .yml are supported. Cannot process file type {}".format(
config_file.suffix config_file.suffix
) )
) )
with config_file.open() as raw_config_file: with config_file.open() as raw_config_file:
raw_config = raw_config_file.read() raw_config = raw_config_file.read()
expanded_config_file = os.path.expandvars(raw_config) expanded_config_file = os.path.expandvars(raw_config)
config_fp = io.StringIO(expanded_config_file) config_fp = io.StringIO(expanded_config_file)
config = json.load(config_fp) config = config_mech.load_config(config_fp)
return config return config