idgen.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. # -*- coding: utf-8 -*-
  2. # !/usr/bin/env python
  3. import requests
  4. import simplejson as json
  5. class IDGenService(object):
  6. def __init__(self, server_ip):
  7. self.url = 'http://{}:18080/id'.format(server_ip)
  8. def get_id(self):
  9. return str(self._get())
  10. def _get(self, **kwargs):
  11. return self._request(
  12. method = 'get',
  13. **kwargs
  14. )
  15. def _decode_result(self, res):
  16. try:
  17. result = json.loads(res.content.decode('utf-8', 'ignore'), strict = False)
  18. except (TypeError, ValueError):
  19. return res
  20. return result
  21. def _handle_result(self, res, method = None, url = None,
  22. result_processor = None, **kwargs):
  23. if not isinstance(res, dict):
  24. result = self._decode_result(res)
  25. else:
  26. result = res
  27. return result if not result_processor else result_processor(result)
  28. def _request(self, method, **kwargs):
  29. headers = {'Content-Type': 'application/json;charset=utf-8'}
  30. if isinstance(kwargs.get('data', ''), dict):
  31. body = json.dumps(kwargs['data'], ensure_ascii = False)
  32. body = body.encode('utf-8')
  33. kwargs['data'] = body
  34. kwargs['timeout'] = kwargs.get('timeout', 5)
  35. result_processor = kwargs.pop('result_processor', None)
  36. with requests.sessions.Session() as session:
  37. res = session.request(
  38. url = self.url,
  39. method = method,
  40. headers = headers,
  41. **kwargs
  42. )
  43. res.raise_for_status()
  44. return self._handle_result(
  45. res, method, self.url, result_processor, **kwargs
  46. )