commands.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. # -*- coding: utf-8 -*-
  2. #!/usr/bin/env python
  3. import json
  4. import logging
  5. from apps.web.core.exceptions import InvalidParameter
  6. from apps.dispatch.common import get_result_topic, get_query_topic
  7. logger = logging.getLogger(__name__)
  8. class TopicCommand(object):
  9. def __init__(self, cmdNo, devNo, params=None, prefix=''):
  10. self.cmdNo = cmdNo
  11. self.devNo = devNo
  12. if params is None:
  13. self.params = {}
  14. elif isinstance(params, list):
  15. self.params = { _["name"] : {_["key"]: _["value"]} for _ in params }
  16. else:
  17. self.params = params
  18. self.prefix = prefix
  19. def __str__(self):
  20. return '{prefix}/{devNo}/{cmdNo}'.format(prefix = self.prefix,
  21. devNo = self.devNo,
  22. cmdNo = self.cmdNo)
  23. @property
  24. def result_topic(self):
  25. return get_result_topic(prefix=self.prefix, cmdNo=self.cmdNo, devNo=self.devNo)
  26. @property
  27. def query_topic(self):
  28. return get_query_topic(prefix=self.prefix, cmdNo=self.cmdNo, devNo=self.devNo)
  29. @property
  30. def query_payload(self):
  31. return json.dumps(self.params)
  32. @property
  33. def result_payload(self):
  34. try:
  35. payload = self.params
  36. payload['IMEI'] = self.devNo
  37. return payload
  38. except ValueError:
  39. raise InvalidParameter('params has to be json-like, params was = %s' % (self.params,))