12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- #
-
- import logging
- import inspect
-
- try:
- from config import APP_NAME as ROOT_LOGGER_NAME
- except ImportError:
- ROOT_LOGGER_NAME = 'root'
- logger = logging.getLogger(ROOT_LOGGER_NAME).getChild(__name__)
-
-
- class room(object):
- def __init__(self, mqtt_client, pd, vd):
- self.mqtt_client = mqtt_client
- self.pd = pd
- self.vd = vd
-
- def all_off(self, device=None, key=None, data=None):
- logger.info("Switching all off \"%s\"", type(self).__name__)
- for name, obj in inspect.getmembers(self):
- try:
- if obj.__module__ == 'devices':
- obj.all_off()
- except AttributeError:
- pass # not a module or has no method all_off
-
-
- class room_collection(object):
- ALLOWED_CLASSES = ("room", "room_collection")
-
- def __init__(self, mqtt_client, pd, vd):
- self.mqtt_client = mqtt_client
- self.pd = pd
- self.vd = vd
-
- def all_off(self, device=None, key=None, data=None):
- logger.info("Switching all off \"%s\"", type(self).__name__)
- for sub_name in dir(self):
- # attribute name is not private
- if not sub_name.startswith("__"):
- sub = getattr(self, sub_name)
- if sub.__class__.__bases__[0].__name__ in self.ALLOWED_CLASSES:
- sub.all_off()
-
- def all_devices(self, object_to_analyse=None, depth=0):
- target = object_to_analyse or self
- #
- devices = []
- for name, obj in inspect.getmembers(target):
- if not callable(obj): # sort out methods
- try:
- if obj.__module__.startswith('function.') and not obj.__module__.endswith('.videv'):
- devices.extend(self.all_devices(obj, depth+1)) # rekurse in function instances
- elif obj.__module__ == "devices":
- devices.append(obj)
- except AttributeError:
- pass # sort out non modules
- return devices
|