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