# -*- coding: utf-8 -*- #!/usr/bin/env python import json import logging from apps.web.core.exceptions import InvalidParameter from apps.dispatch.common import get_result_topic, get_query_topic logger = logging.getLogger(__name__) class TopicCommand(object): def __init__(self, cmdNo, devNo, params=None, prefix=''): self.cmdNo = cmdNo self.devNo = devNo if params is None: self.params = {} elif isinstance(params, list): self.params = { _["name"] : {_["key"]: _["value"]} for _ in params } else: self.params = params self.prefix = prefix def __str__(self): return '{prefix}/{devNo}/{cmdNo}'.format(prefix = self.prefix, devNo = self.devNo, cmdNo = self.cmdNo) @property def result_topic(self): return get_result_topic(prefix=self.prefix, cmdNo=self.cmdNo, devNo=self.devNo) @property def query_topic(self): return get_query_topic(prefix=self.prefix, cmdNo=self.cmdNo, devNo=self.devNo) @property def query_payload(self): return json.dumps(self.params) @property def result_payload(self): try: payload = self.params payload['IMEI'] = self.devNo return payload except ValueError: raise InvalidParameter('params has to be json-like, params was = %s' % (self.params,))