platypush/platypush/procedure/__init__.py

51 lines
1.4 KiB
Python
Raw Normal View History

import logging
from ..config import Config
from ..message.request import Request
class Procedure(object):
""" Procedure class. A procedure is a pre-configured list of requests """
def __init__(self, name, requests, backend=None):
"""
Params:
name -- Procedure name
requests -- List of platylist.message.request.Request objects
"""
self.name = name
self.requests = requests
self.backend = backend
for req in requests:
req.backend = self.backend
@classmethod
def build(cls, name, requests, backend=None, id=None, **kwargs):
reqs = []
for request_config in requests:
request_config['origin'] = Config.get('device_id')
request_config['id'] = id
if 'target' not in request_config:
request_config['target'] = request_config['origin']
request = Request.build(request_config)
reqs.append(request)
return cls(name=name, requests=reqs, backend=backend, **kwargs)
def execute(self, n_tries=1):
"""
Execute the requests in the procedure
Params:
n_tries -- Number of tries in case of failure before raising a RuntimeError
"""
logging.info('Executing request {}'.format(self.name))
for request in self.requests:
request.execute(n_tries)
# vim:sw=4:ts=4:et: