diff --git a/config.py b/config.py index de5e530..5a41f2b 100644 --- a/config.py +++ b/config.py @@ -1,3 +1,58 @@ -from config.config import * +""" +Robust shim for project configuration. + +This file attempts to locate a real configuration module named either +- a package module at `config/config.py` (importable as `config.config`), or +- a standalone `config.py` file elsewhere on `sys.path`. + +It then imports that module and re-exports its public names so existing +`import config` usages continue to work regardless of whether the +configuration was moved into a `config/` directory or left as a file. +""" + +import sys +import os +import importlib +import importlib.util + + +def _find_real_config(): + # Try the straightforward import first (works when `config` is a package) + try: + return importlib.import_module('config.config') + except Exception: + pass + + # Search sys.path for a candidate `config/config.py` or another `config.py` (not this file) + this_path = os.path.abspath(__file__) + for p in sys.path: + if not p: + p = os.getcwd() + # candidate package file + cand = os.path.join(p, 'config', 'config.py') + if os.path.isfile(cand): + spec = importlib.util.spec_from_file_location('config_real', cand) + mod = importlib.util.module_from_spec(spec) + spec.loader.exec_module(mod) + return mod + + # candidate standalone config.py (avoid loading this shim file) + cand2 = os.path.join(p, 'config.py') + if os.path.isfile(cand2) and os.path.abspath(cand2) != this_path: + spec = importlib.util.spec_from_file_location('config_real', cand2) + mod = importlib.util.module_from_spec(spec) + spec.loader.exec_module(mod) + return mod + + return None + + +_real = _find_real_config() +if _real is None: + raise ImportError('Could not locate real configuration (config/config.py or another config.py)') + +# Re-export public names from the real config module +for _k, _v in _real.__dict__.items(): + if not _k.startswith('_'): + globals()[_k] = _v -# shim re-exporting the real config module in config/config.py