12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- # -*- coding: utf-8 -*-
- # !/usr/bin/env python
- import requests
- import simplejson as json
- class IDGenService(object):
- def __init__(self, server_ip):
- self.url = 'http://{}:18080/id'.format(server_ip)
- def get_id(self):
- return str(self._get())
- def _get(self, **kwargs):
- return self._request(
- method = 'get',
- **kwargs
- )
- def _decode_result(self, res):
- try:
- result = json.loads(res.content.decode('utf-8', 'ignore'), strict = False)
- except (TypeError, ValueError):
- return res
- return result
- def _handle_result(self, res, method = None, url = None,
- result_processor = None, **kwargs):
- if not isinstance(res, dict):
- result = self._decode_result(res)
- else:
- result = res
- return result if not result_processor else result_processor(result)
- def _request(self, method, **kwargs):
- headers = {'Content-Type': 'application/json;charset=utf-8'}
- if isinstance(kwargs.get('data', ''), dict):
- body = json.dumps(kwargs['data'], ensure_ascii = False)
- body = body.encode('utf-8')
- kwargs['data'] = body
- kwargs['timeout'] = kwargs.get('timeout', 5)
- result_processor = kwargs.pop('result_processor', None)
- with requests.sessions.Session() as session:
- res = session.request(
- url = self.url,
- method = method,
- headers = headers,
- **kwargs
- )
- res.raise_for_status()
- return self._handle_result(
- res, method, self.url, result_processor, **kwargs
- )
|