Newer
Older
netbox-docker / docker / ldap_config.docker.py
@Christian Mäder Christian Mäder on 21 Oct 2020 1 KB Consistency in namespace name
from os.path import abspath, isfile
from os import scandir
import importlib.util
import sys

_CONFIG_DIR = '/etc/netbox/config/ldap/'
_MAIN_CONFIG = 'ldap_config'
_MODULE = 'netbox.configuration.ldap'
_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}.{_MAIN_CONFIG}', _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}'.")