diff options
Diffstat (limited to 'src/home/temphum/__init__.py')
-rw-r--r-- | src/home/temphum/__init__.py | 38 |
1 files changed, 29 insertions, 9 deletions
diff --git a/src/home/temphum/__init__.py b/src/home/temphum/__init__.py index 55a7e1f..30a459e 100644 --- a/src/home/temphum/__init__.py +++ b/src/home/temphum/__init__.py @@ -1,18 +1,38 @@ -from .base import SensorType, TempHumSensor -from .si7021 import Si7021 -from .dht12 import DHT12 +from importlib import import_module __all__ = [ 'SensorType', 'TempHumSensor', + 'TempHumNodes', 'create_sensor' ] -def create_sensor(type: SensorType, bus: int) -> TempHumSensor: - if type == SensorType.Si7021: - return Si7021(bus) - elif type == SensorType.DHT12: - return DHT12(bus) +def __import_sensor(name): + if name == 'si7021': + return import_module('.si7021', __name__).Si7021 + elif name == 'dht12': + return import_module('.dht12', __name__).DHT12 else: - raise ValueError('unexpected sensor type') + raise ValueError(f'unexpected sensor type: {name}') + + +def __getattr__(name): + if name == 'create_sensor': + base = import_module('.base', __name__) + + def create_sensor(type: base.SensorType, bus: int) -> base.TempHumSensor: + if type == base.SensorType.Si7021: + return __import_sensor('si7021')(bus) + elif type == base.SensorType.DHT12: + return __import_sensor('dht12')(bus) + else: + raise ValueError(f'unexpected sensor type: {type}') + + return create_sensor + + elif name in ('SensorType', 'TempHumSensor'): + return getattr(import_module('.base', __name__), name) + + elif name == 'TempHumNodes': + return import_module('.nodes', __name__).TempHumNodes |