Skip to content

Commit

Permalink
Merge pull request #353 from OP-TED/feature/TED-943
Browse files Browse the repository at this point in the history
add env_property for minimize inspect stack calls
  • Loading branch information
CaptainOfHacks authored Nov 10, 2022
2 parents 33cc7e6 + 46b0a5c commit 1bb31dd
Show file tree
Hide file tree
Showing 11 changed files with 237 additions and 175 deletions.
260 changes: 127 additions & 133 deletions ted_sws/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

import dotenv

from ted_sws.core.adapters.config_resolver import EnvConfigResolver, AirflowAndEnvConfigResolver
from ted_sws.core.adapters.config_resolver import EnvConfigResolver, AirflowAndEnvConfigResolver, env_property

dotenv.load_dotenv(verbose=True, override=os.environ.get('IS_PRIME_ENV') != 'true')

Expand All @@ -38,174 +38,168 @@

class MongoDBConfig:

@property
def MONGO_DB_AUTH_URL(self) -> str:
@env_property()
def MONGO_DB_AUTH_URL(self, config_value: str) -> str:
if self.ENVIRONMENT == "dev" and self.AIRFLOW__CORE__EXECUTOR:
return self.MONGO_DB_AUTH_URL_DEV_CONTAINER
return EnvConfigResolver().config_resolve()
return config_value

@property
def MONGO_DB_AUTH_URL_DEV_CONTAINER(self) -> str:
@env_property()
def MONGO_DB_AUTH_URL_DEV_CONTAINER(self, config_value: str) -> str:
"""
This variable is to be used only on dev environment when execution is done from a docker container as oppose to
development host environment
"""
return EnvConfigResolver().config_resolve()
return config_value

@property
def ENVIRONMENT(self) -> str:
return EnvConfigResolver().config_resolve()
@env_property()
def ENVIRONMENT(self, config_value: str) -> str:
return config_value

@property
def AIRFLOW__CORE__EXECUTOR(self) -> str:
return EnvConfigResolver().config_resolve()
@env_property()
def AIRFLOW__CORE__EXECUTOR(self, config_value: str) -> str:
return config_value

@property
def MONGO_DB_PORT(self) -> int:
return int(EnvConfigResolver().config_resolve())
@env_property()
def MONGO_DB_PORT(self, config_value: str) -> int:
return int(config_value)

@property
def MONGO_DB_AGGREGATES_DATABASE_NAME(self) -> str:
return EnvConfigResolver().config_resolve()
@env_property()
def MONGO_DB_AGGREGATES_DATABASE_NAME(self, config_value: str) -> str:
return config_value


class RMLMapperConfig:
@property
def RML_MAPPER_PATH(self) -> str:
return EnvConfigResolver().config_resolve()
@env_property()
def RML_MAPPER_PATH(self, config_value: str) -> str:
return config_value


class LimesAlignmentConfig:
@property
def LIMES_ALIGNMENT_PATH(self) -> str:
return EnvConfigResolver().config_resolve()
@env_property()
def LIMES_ALIGNMENT_PATH(self, config_value: str) -> str:
return config_value


class AllegroConfig:
@property
def AGRAPH_SUPER_USER(self) -> str:
return EnvConfigResolver().config_resolve()
@env_property()
def AGRAPH_SUPER_USER(self, config_value: str) -> str:
return config_value

@property
def AGRAPH_SUPER_PASSWORD(self) -> str:
return EnvConfigResolver().config_resolve()
@env_property()
def AGRAPH_SUPER_PASSWORD(self, config_value: str) -> str:
return config_value

@property
def ALLEGRO_HOST(self) -> str:
return EnvConfigResolver().config_resolve()
@env_property()
def ALLEGRO_HOST(self, config_value: str) -> str:
return config_value

@property
def TRIPLE_STORE_ENDPOINT_URL(self) -> str:
return EnvConfigResolver().config_resolve()
@env_property()
def TRIPLE_STORE_ENDPOINT_URL(self, config_value: str) -> str:
return config_value


class ELKConfig:

@property
def ELK_HOST(self) -> str:
return EnvConfigResolver().config_resolve()
@env_property()
def ELK_HOST(self, config_value: str) -> str:
return config_value

@property
def ELK_PORT(self) -> int:
v: str = EnvConfigResolver().config_resolve()
return int(v) if v is not None else None
@env_property()
def ELK_PORT(self, config_value: str) -> int:
return int(config_value) if config_value is not None else None

@property
def ELK_VERSION(self) -> int:
v: str = EnvConfigResolver().config_resolve()
return int(v) if v is not None else None
@env_property()
def ELK_VERSION(self, config_value: str) -> int:
return int(config_value) if config_value is not None else None


class LoggingConfig:
@property
def MONGO_DB_LOGS_DATABASE_NAME(self) -> str:
return EnvConfigResolver().config_resolve()
@env_property()
def MONGO_DB_LOGS_DATABASE_NAME(self, config_value: str) -> str:
return config_value

@property
def DAG_LOGGER_CONFIG_HANDLERS(self) -> str:
return EnvConfigResolver().config_resolve()
@env_property()
def DAG_LOGGER_CONFIG_HANDLERS(self, config_value: str) -> str:
return config_value

@property
def CLI_LOGGER_CONFIG_HANDLERS(self) -> str:
return EnvConfigResolver().config_resolve()
@env_property()
def CLI_LOGGER_CONFIG_HANDLERS(self, config_value: str) -> str:
return config_value

@property
def LOGGER_LOG_FILENAME(self) -> str:
return EnvConfigResolver().config_resolve()
@env_property()
def LOGGER_LOG_FILENAME(self, config_value: str) -> str:
return config_value


class XMLProcessorConfig:

@property
def XML_PROCESSOR_PATH(self) -> str:
return EnvConfigResolver().config_resolve()
@env_property()
def XML_PROCESSOR_PATH(self, config_value: str) -> str:
return config_value


class GitHubArtefacts:

@property
def GITHUB_TED_SWS_ARTEFACTS_URL(self) -> str:
return EnvConfigResolver().config_resolve()
@env_property()
def GITHUB_TED_SWS_ARTEFACTS_URL(self, config_value: str) -> str:
return config_value


class API:
@property
def ID_MANAGER_PROD_API_HOST(self) -> str:
v: str = EnvConfigResolver().config_resolve()
return v if v else "localhost"
@env_property(default_value="localhost")
def ID_MANAGER_PROD_API_HOST(self, config_value: str) -> str:
return config_value

@property
def ID_MANAGER_DEV_API_HOST(self) -> str:
v: str = EnvConfigResolver().config_resolve()
return v if v else "localhost"
@env_property(default_value="local_host")
def ID_MANAGER_DEV_API_HOST(self, config_value: str) -> str:
return config_value

@property
def ID_MANAGER_API_PORT(self) -> int:
v: str = EnvConfigResolver().config_resolve()
return int(v) if v else 8000
@env_property(default_value="8000")
def ID_MANAGER_API_PORT(self, config_value: str) -> int:
return int(config_value)


class TedAPIConfig:
@property
def TED_API_URL(self) -> str:
return EnvConfigResolver().config_resolve()
@env_property()
def TED_API_URL(self, config_value: str) -> str:
return config_value


class FusekiConfig:
@property
def FUSEKI_ADMIN_USER(self) -> str:
return EnvConfigResolver().config_resolve()
@env_property()
def FUSEKI_ADMIN_USER(self, config_value: str) -> str:
return config_value

@property
def FUSEKI_ADMIN_PASSWORD(self) -> str:
return EnvConfigResolver().config_resolve()
@env_property()
def FUSEKI_ADMIN_PASSWORD(self, config_value: str) -> str:
return config_value

@property
def FUSEKI_ADMIN_HOST(self) -> str:
return EnvConfigResolver().config_resolve()
@env_property()
def FUSEKI_ADMIN_HOST(self, config_value: str) -> str:
return config_value


class SFTPConfig:
@property
def SFTP_PUBLISH_HOST(self) -> str:
return AirflowAndEnvConfigResolver().config_resolve()
@env_property(config_resolver_class=AirflowAndEnvConfigResolver)
def SFTP_PUBLISH_HOST(self, config_value: str) -> str:
return config_value

@property
def SFTP_PUBLISH_PORT(self) -> int:
v = AirflowAndEnvConfigResolver().config_resolve()
return int(v) if v is not None else 22
@env_property(config_resolver_class=AirflowAndEnvConfigResolver, default_value="22")
def SFTP_PUBLISH_PORT(self, config_value: str) -> int:
return int(config_value)

@property
def SFTP_PUBLISH_USER(self) -> str:
return AirflowAndEnvConfigResolver().config_resolve()
@env_property(config_resolver_class=AirflowAndEnvConfigResolver)
def SFTP_PUBLISH_USER(self, config_value: str) -> str:
return config_value

@property
def SFTP_PUBLISH_PASSWORD(self) -> str:
return AirflowAndEnvConfigResolver().config_resolve()
@env_property(config_resolver_class=AirflowAndEnvConfigResolver)
def SFTP_PUBLISH_PASSWORD(self, config_value: str) -> str:
return config_value

@property
def SFTP_PUBLISH_PATH(self) -> str:
return AirflowAndEnvConfigResolver().config_resolve()
@env_property(config_resolver_class=AirflowAndEnvConfigResolver)
def SFTP_PUBLISH_PATH(self, config_value: str) -> str:
return config_value


class SPARQLConfig:
Expand All @@ -216,41 +210,41 @@ def SPARQL_PREFIXES(self) -> dict:


class S3PublishConfig:
@property
def S3_PUBLISH_USER(self) -> str:
return AirflowAndEnvConfigResolver().config_resolve()
@env_property(config_resolver_class=AirflowAndEnvConfigResolver)
def S3_PUBLISH_USER(self, config_value: str) -> str:
return config_value

@property
def S3_PUBLISH_PASSWORD(self) -> str:
return AirflowAndEnvConfigResolver().config_resolve()
@env_property(config_resolver_class=AirflowAndEnvConfigResolver)
def S3_PUBLISH_PASSWORD(self, config_value: str) -> str:
return config_value

@property
def S3_PUBLISH_HOST(self) -> str:
return AirflowAndEnvConfigResolver().config_resolve()
@env_property(config_resolver_class=AirflowAndEnvConfigResolver)
def S3_PUBLISH_HOST(self, config_value: str) -> str:
return config_value

@property
def S3_PUBLISH_SECURE(self) -> bool:
return True if AirflowAndEnvConfigResolver().config_resolve() == "1" else False
@env_property(config_resolver_class=AirflowAndEnvConfigResolver)
def S3_PUBLISH_SECURE(self, config_value: str) -> bool:
return config_value == "1"

@property
def S3_PUBLISH_REGION(self) -> str:
return AirflowAndEnvConfigResolver().config_resolve()
@env_property(config_resolver_class=AirflowAndEnvConfigResolver)
def S3_PUBLISH_REGION(self, config_value: str) -> str:
return config_value

@property
def S3_PUBLISH_SSL_VERIFY(self) -> bool:
return AirflowAndEnvConfigResolver().config_resolve() == "1"
@env_property(config_resolver_class=AirflowAndEnvConfigResolver)
def S3_PUBLISH_SSL_VERIFY(self, config_value: str) -> bool:
return config_value == "1"

@property
def S3_PUBLISH_NOTICE_BUCKET(self) -> str:
return AirflowAndEnvConfigResolver().config_resolve()
@env_property(config_resolver_class=AirflowAndEnvConfigResolver, default_value="notice")
def S3_PUBLISH_NOTICE_BUCKET(self, config_value: str) -> str:
return config_value

@property
def S3_PUBLISH_NOTICE_RDF_BUCKET(self) -> str:
return AirflowAndEnvConfigResolver().config_resolve()
@env_property(config_resolver_class=AirflowAndEnvConfigResolver, default_value="notice-rdf")
def S3_PUBLISH_NOTICE_RDF_BUCKET(self, config_value: str) -> str:
return config_value

@property
def S3_PUBLISH_ENABLED(self) -> bool:
return AirflowAndEnvConfigResolver().config_resolve() == "1"
@env_property(config_resolver_class=AirflowAndEnvConfigResolver)
def S3_PUBLISH_ENABLED(self, config_value: str) -> bool:
return config_value == "1"


class TedConfigResolver(MongoDBConfig, RMLMapperConfig, XMLProcessorConfig, ELKConfig, LoggingConfig,
Expand Down
21 changes: 21 additions & 0 deletions ted_sws/core/adapters/config_resolver.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import logging
import os
from abc import ABC, abstractmethod
from typing import Type

from ted_sws.core.adapters.vault_secrets_store import VaultSecretsStore

Expand Down Expand Up @@ -113,3 +114,23 @@ def concrete_config_resolve(self, config_name: str, default_value: str = None):
else:
value = EnvConfigResolver().concrete_config_resolve(config_name, default_value)
return value


def env_property(config_resolver_class: Type[ConfigResolverABC] = EnvConfigResolver,
default_value: str = None):
"""
This function provide decorator mechanism for config resolver.
:param config_resolver_class:
:param default_value:
:return:
"""
def wrap(func):
@property
def wrapped_f(self, *args, **kwargs):
config_value = config_resolver_class().concrete_config_resolve(config_name=func.__name__,
default_value=default_value)
return func(self, config_value, *args, **kwargs)

return wrapped_f

return wrap
4 changes: 2 additions & 2 deletions ted_sws/core/adapters/xml_preprocessor.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,8 @@ class XMLPreprocessor(XMLPreprocessorABC):
This class provides XML preprocessing
"""

def __init__(self, path_to_processor: pathlib.Path = config.XML_PROCESSOR_PATH):
self.path_to_processor = path_to_processor
def __init__(self, path_to_processor: pathlib.Path = None):
self.path_to_processor = path_to_processor if path_to_processor else config.XML_PROCESSOR_PATH

def _generate_xslt_command(self, xml_path, xslt_path):
"""
Expand Down
Loading

0 comments on commit 1bb31dd

Please sign in to comment.