fixes
This commit is contained in:
59
config.py
59
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
|
||||
|
||||
Reference in New Issue
Block a user