netbox-docker/docker/configuration.docker.py
Christian Mäder 16b567939c Dot character has special meaning in module names
Therefore we esacpe it using the underscore character.
2020-10-20 20:51:43 +02:00

63 lines
1.5 KiB
Python

from os.path import abspath, isfile
from os import scandir
import importlib.util
import sys
_CONFIG_DIR = '/etc/netbox/config/'
_MAIN_CONFIG = 'configuration'
_MODULE = 'netbox.configuration'
_loaded_configurations = []
def __getattr__(name):
for config in _loaded_configurations:
try:
return getattr(config, name)
except:
pass
raise AttributeError
def _filename(f):
return f.name
def _import(module_name, path):
spec = importlib.util.spec_from_file_location('', path)
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)
sys.modules[module_name] = module
_loaded_configurations.insert(0, module)
print(f"🧬 loaded config '{path}'")
_main_config_path = abspath(f'{_CONFIG_DIR}/{_MAIN_CONFIG}.py')
if isfile(_main_config_path):
_import(f'{_MODULE}.configuration', _main_config_path)
else:
print(f"⚠️ Main configuration '{_main_config_path}' not found.")
with scandir(_CONFIG_DIR) as it:
for f in sorted(it, key=_filename):
if not f.is_file():
continue
if f.name.startswith('__'):
continue
if not f.name.endswith('.py'):
continue
if f.name == f'{_MAIN_CONFIG}.py':
continue
module_name = f"{_MODULE}.{f.name[:-len('.py')]}".replace(".", "_")
_import(module_name, f.path)
if len(_loaded_configurations) == 0:
print(f"‼️ No configuration files found in '{_CONFIG_DIR}'.")
raise ImportError(f"No configuration files found in '{_CONFIG_DIR}'.")