2017-11-03 04:08:47 +01:00
|
|
|
import sys
|
2017-12-11 03:53:26 +01:00
|
|
|
import logging
|
2018-07-06 02:08:38 +02:00
|
|
|
import traceback
|
2017-12-13 03:37:28 +01:00
|
|
|
|
2017-12-18 01:10:51 +01:00
|
|
|
from platypush.config import Config
|
2017-12-13 04:21:26 +01:00
|
|
|
from platypush.message.response import Response
|
2018-07-06 02:08:38 +02:00
|
|
|
from platypush.utils import get_decorators
|
2017-11-03 04:08:47 +01:00
|
|
|
|
2018-06-06 20:09:18 +02:00
|
|
|
|
2018-07-05 09:15:53 +02:00
|
|
|
def action(f):
|
|
|
|
def _execute_action(*args, **kwargs):
|
2018-07-06 02:08:38 +02:00
|
|
|
output = None
|
|
|
|
errors = []
|
|
|
|
|
|
|
|
try:
|
|
|
|
output = f(*args, **kwargs)
|
2018-07-15 02:02:27 +02:00
|
|
|
if output and isinstance(output, Response):
|
|
|
|
errors = output.errors
|
|
|
|
output = output.output
|
2018-07-06 02:08:38 +02:00
|
|
|
except Exception as e:
|
|
|
|
if isinstance(args[0], Plugin):
|
|
|
|
args[0].logger.exception(e)
|
|
|
|
errors.append(str(e) + '\n' + traceback.format_exc())
|
|
|
|
|
|
|
|
return Response(output=output, errors=errors)
|
|
|
|
|
2018-07-05 09:15:53 +02:00
|
|
|
return _execute_action
|
|
|
|
|
|
|
|
|
2017-10-31 09:20:35 +01:00
|
|
|
class Plugin(object):
|
2017-12-18 01:10:51 +01:00
|
|
|
""" Base plugin class """
|
2017-11-03 15:06:29 +01:00
|
|
|
|
2017-12-18 01:10:51 +01:00
|
|
|
def __init__(self, **kwargs):
|
2018-06-14 02:19:55 +02:00
|
|
|
self.logger = logging.getLogger(self.__class__.__name__)
|
2018-06-06 20:09:18 +02:00
|
|
|
if 'logging' in kwargs:
|
|
|
|
self.logger.setLevel(getattr(logging, kwargs['logging'].upper()))
|
2017-11-03 04:08:47 +01:00
|
|
|
|
2018-07-06 02:08:38 +02:00
|
|
|
self.registered_actions = set(get_decorators(self.__class__).get('action', []))
|
|
|
|
|
2017-11-04 12:28:15 +01:00
|
|
|
def run(self, method, *args, **kwargs):
|
2018-07-06 02:08:38 +02:00
|
|
|
if method not in self.registered_actions:
|
|
|
|
raise RuntimeError('{} is not a registered action on {}'.format(
|
|
|
|
method, self.__class__.__name__))
|
|
|
|
|
2017-12-13 04:14:46 +01:00
|
|
|
return getattr(self, method)(*args, **kwargs)
|
2017-12-13 03:37:28 +01:00
|
|
|
|
2017-10-31 09:20:35 +01:00
|
|
|
|
|
|
|
# vim:sw=4:ts=4:et:
|
|
|
|
|