Merge in RR/pyinfra from prometheus-tunneling to pika_encapsulation
Squashed commit of the following:
commit 350448ec0f14849844deaa1a86ba4397ab3ebf3c
Author: Julius Unverfehrt <julius.unverfehrt@iqser.com>
Date: Wed Mar 9 16:52:02 2022 +0100
quickfix
commit ee88be4c80abdf597013c743ce2d490ad2b3e029
Author: Julius Unverfehrt <julius.unverfehrt@iqser.com>
Date: Wed Mar 9 15:26:19 2022 +0100
added prometheus endpoint to tunnel metrics from analysis endpoint
56 lines
1.3 KiB
Python
56 lines
1.3 KiB
Python
"""Implements a config object with dot-indexing syntax."""
|
|
|
|
from envyaml import EnvYAML
|
|
|
|
from pyinfra.locations import CONFIG_FILE
|
|
|
|
|
|
def make_art():
|
|
return """
|
|
______ _____ __
|
|
| ___ \ |_ _| / _|
|
|
| |_/ / _ | | _ __ | |_ _ __ __ _
|
|
| __/ | | || || '_ \| _| '__/ _` |
|
|
| | | |_| || || | | | | | | | (_| |
|
|
\_| \__, \___/_| |_|_| |_| \__,_|
|
|
__/ |
|
|
|___/
|
|
"""
|
|
|
|
|
|
def _get_item_and_maybe_make_dotindexable(container, item):
|
|
ret = container[item]
|
|
return DotIndexable(ret) if isinstance(ret, dict) else ret
|
|
|
|
|
|
class DotIndexable:
|
|
def __init__(self, x):
|
|
self.x = x
|
|
|
|
def __getattr__(self, item):
|
|
return _get_item_and_maybe_make_dotindexable(self.x, item)
|
|
|
|
def __setitem__(self, key, value):
|
|
self.x[key] = value
|
|
|
|
def __repr__(self):
|
|
return self.x.__repr__()
|
|
|
|
def __getitem__(self, item):
|
|
return self.__getattr__(item)
|
|
|
|
|
|
class Config:
|
|
def __init__(self, config_path):
|
|
self.__config = EnvYAML(config_path)
|
|
|
|
def __getattr__(self, item):
|
|
if item in self.__config:
|
|
return _get_item_and_maybe_make_dotindexable(self.__config, item)
|
|
|
|
def __getitem__(self, item):
|
|
return self.__getattr__(item)
|
|
|
|
|
|
CONFIG = Config(CONFIG_FILE)
|