12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- # -*- 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,))
|