1 changed files with 0 additions and 62 deletions
@ -1,62 +0,0 @@ |
|||
from urlparse import urljoin |
|||
import logging |
|||
|
|||
log = logging.getLogger(__name__) |
|||
|
|||
|
|||
class Base(object): |
|||
properties = {} |
|||
|
|||
def __init__(self, url, session, client=None): |
|||
self._client = client |
|||
self._url = url |
|||
self._session = session |
|||
|
|||
@staticmethod |
|||
def _convert(response, response_type): |
|||
if response_type == 'json': |
|||
try: |
|||
return response.json() |
|||
except ValueError: |
|||
pass |
|||
|
|||
return response |
|||
|
|||
def _get(self, path='', response_type='json', **kwargs): |
|||
r = self._session.get(urljoin(self._url, path), **kwargs) |
|||
return self._convert(r, response_type) |
|||
|
|||
def _post(self, path='', response_type='json', data=None, **kwargs): |
|||
r = self._session.post(urljoin(self._url, path), data, **kwargs) |
|||
return self._convert(r, response_type) |
|||
|
|||
def _fill(self, data): |
|||
for key, value in data.items(): |
|||
if self.set_property(self, key, value): |
|||
continue |
|||
|
|||
log.debug('%s is missing item with key "%s" and value %s', self.__class__, key, repr(value)) |
|||
|
|||
@classmethod |
|||
def parse(cls, client, data): |
|||
obj = cls(client._url, client._session, client) |
|||
obj._fill(data) |
|||
|
|||
return obj |
|||
|
|||
@classmethod |
|||
def set_property(cls, obj, key, value): |
|||
prop = cls.properties.get(key, {}) |
|||
|
|||
if prop.get('key'): |
|||
key = prop['key'] |
|||
|
|||
if not hasattr(obj, key): |
|||
return False |
|||
|
|||
|
|||
if prop.get('parse'): |
|||
value = prop['parse'](value) |
|||
|
|||
setattr(obj, key, value) |
|||
return True |
Loading…
Reference in new issue