From 550765d096bb91fa7a9eb7b711ab67a6dbd1ccaa Mon Sep 17 00:00:00 2001 From: zewelor Date: Tue, 28 Nov 2017 22:53:10 +0100 Subject: [PATCH] Make gateway executable --- gateway.py | 8 ++++++-- workers_manager.py | 44 ++++++++++++++++++++------------------------ 2 files changed, 26 insertions(+), 26 deletions(-) mode change 100644 => 100755 gateway.py diff --git a/gateway.py b/gateway.py old mode 100644 new mode 100755 index 1f27c7d..4b27e7d --- a/gateway.py +++ b/gateway.py @@ -1,5 +1,8 @@ +#!/usr/bin/python + import logging import sys + if sys.version_info < (3,4): print("To use this script you need python 3.4 or newer! got %s" % sys.version_info) sys.exit(1) @@ -20,10 +23,10 @@ if parsed.debug: else: _LOGGER.setLevel(logging.INFO) -_LOGGER.info('Starting') +_LOGGER.debug('Starting') mqtt = MqttClient(settings['mqtt']) -manager = WorkersManager(settings['workers'], mqtt) +WorkersManager.start(mqtt, settings['workers']) running = True @@ -38,3 +41,4 @@ try: except KeyboardInterrupt: running = False _LOGGER.info('Exiting allowing jobs to finish. If you need force exit use kill') + diff --git a/workers_manager.py b/workers_manager.py index 6e65261..2f0a6eb 100644 --- a/workers_manager.py +++ b/workers_manager.py @@ -7,7 +7,7 @@ from workers_queue import _WORKERS_QUEUE class WorkersManager: class Command: - def __init__(self, callback, args=[], options={}): + def __init__(self, callback, args=(), options=dict()): self._callback = callback self._args = args self._options = options @@ -20,43 +20,39 @@ class WorkersManager: _LOGGER.debug(messages) return messages - def __init__(self, config, mqtt): - self._mqtt = mqtt - self._workers = self._register_klasses(config) - - @property - def workers(self): - return self._workers - - def _register_klasses(self, config): - arr = {} + @classmethod + def start(cls, mqtt, config): scheduler = BackgroundScheduler() mqtt_callbacks = [] for (worker_name, worker_config) in config.items(): - moduleObj = importlib.import_module("workers.%s" % worker_name) - klass = getattr(moduleObj, "%sWorker" % worker_name.title()) + module_obj = importlib.import_module("workers.%s" % worker_name) + klass = getattr(module_obj, "%sWorker" % worker_name.title()) worker_obj = klass(**worker_config['args']) - if moduleObj.REQUIREMENTS is not None: - self._pip_install_helper(moduleObj.REQUIREMENTS) + if module_obj.REQUIREMENTS is not None: + cls._pip_install_helper(module_obj.REQUIREMENTS) if 'update_interval' in worker_config: _LOGGER.debug("Added: %s with %d seconds interval" % (worker_name, worker_config['update_interval'])) - _WORKERS_QUEUE.put(self.Command(worker_obj.status_update, [])) - scheduler.add_job(lambda x: _WORKERS_QUEUE.put(self.Command(worker_obj.status_update, [])), 'interval', seconds=worker_config['update_interval'], args=[worker_name]) + _WORKERS_QUEUE.put(cls.Command(worker_obj.status_update, [])) + scheduler.add_job( + lambda x: _WORKERS_QUEUE.put(cls.Command(worker_obj.status_update, [])), 'interval', + seconds=worker_config['update_interval'], + args=[worker_name] + ) if 'topic_subscription' in worker_config: _LOGGER.debug("Subscribing to: %s" % worker_config['topic_subscription'] + '/#') - mqtt_callbacks.append((worker_config['topic_subscription'] + '/#', lambda client, _ , c: _WORKERS_QUEUE.put(self.Command(worker_obj.on_command, [c.topic, c.payload])))) - - arr[worker_name] = worker_obj + mqtt_callbacks.append(( + worker_config['topic_subscription'] + '/#', + lambda client, _ , c: _WORKERS_QUEUE.put(cls.Command(worker_obj.on_command, [c.topic, c.payload])) + )) scheduler.start() - self._mqtt.callbacks_subscription(mqtt_callbacks) + mqtt.callbacks_subscription(mqtt_callbacks) - return arr - - def _pip_install_helper(self, package_names): + @staticmethod + def _pip_install_helper(package_names): for package in package_names: pip.main(['install', '-q', package])