You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
31 lines
1008 B
31 lines
1008 B
import os |
|
import sys |
|
from pathlib import Path |
|
|
|
|
|
class LayeredObject: |
|
def __init__(self, *objects): |
|
self._objects = objects |
|
|
|
def __getattr__(self, item): |
|
for o in self.__dict__['_objects']: |
|
try: |
|
if isinstance(o, dict): |
|
return o[item] |
|
elif isinstance(o, os._Environ): |
|
return o[item.upper()] |
|
else: |
|
return getattr(o, item) |
|
except (AttributeError, KeyError): |
|
pass |
|
raise AttributeError(f"None of the objects contained in '{self.__class__.__name__}' have attribute '{item}'.\n" |
|
f"Objects contained: {[repr(o) for o in self.__dict__['_objects']]}") |
|
|
|
|
|
def import_module(path): |
|
path = Path(path) |
|
assert path.suffix == '.py', f'expected a path to a python module, got {path}' |
|
sys.path.insert(1, str(path.parent)) |
|
mod = __import__(path.stem) |
|
sys.path.remove(str(path.parent)) |
|
return mod
|
|
|