diff options
Diffstat (limited to 'github3/core.py')
-rw-r--r-- | github3/core.py | 70 |
1 files changed, 11 insertions, 59 deletions
diff --git a/github3/core.py b/github3/core.py index ccc9f7b..5c7343a 100644 --- a/github3/core.py +++ b/github3/core.py @@ -49,65 +49,17 @@ class Paginate: self.page += 1 return content -class Modelizer(object): - """ Converter json into model and vice versa """ +class Converter(object): + """ Abstract converter class """ - def __init__(self, model): - self.model = model - - def _parse_date(self, string_date): - from datetime import datetime - try: - date = datetime.strptime(string_date, '%Y-%m-%dT%H:%M:%SZ') - except TypeError: - date = None - - return date - - def _parse_map(self, model, raw_resource): - if model == 'self': - model = self.model - - return Modelizer(model).loads(raw_resource) - - def _parse_collection_map(self, model, raw_resources): - # Dict of resources (Ex: Gist file) - if getattr(raw_resources, 'items', False): - dict_map = {} - for key, raw_resource in raw_resources.items(): - dict_map[key] = Modelizer(model).loads(raw_resource) - return dict_map - # list of resources - else: - return [Modelizer(model).loads(raw_resource) - for raw_resource in raw_resources] - - def loads(self, raw_resource): - attrs = {} - idl = self.model.idl() - attrs.update( - {attr: raw_resource[attr] for attr in idl.get('strs',()) - if raw_resource.get(attr)}) - attrs.update( - {attr: raw_resource[attr] for attr in idl.get('ints',()) - if raw_resource.get(attr)}) - attrs.update( - {attr: self._parse_date(raw_resource[attr]) - for attr in idl.get('dates',()) if raw_resource.get(attr)}) - attrs.update( - {attr: raw_resource[attr] for attr in idl.get('bools',()) - if raw_resource.get(attr)}) - attrs.update( - {attr: self._parse_map(model, raw_resource[attr]) - for attr, model in idl.get('maps',{}).items() - if raw_resource.get(attr)}) - attrs.update( - {attr: self._parse_collection_map(model, raw_resource[attr]) - for attr, model in idl.get('collection_maps',{}).items() - if raw_resource.get(attr)}) - - return self.model(attrs) + def loads(self): + raise NotImplementedError("%s needs define '%s' method" % + (self.__class__.__name__, 'loads')) def dumps(self): - # return JSON - pass + raise NotImplementedError("%s needs define '%s' method" % + (self.__class__.__name__, 'dumps')) + + def inject(self): + raise NotImplementedError("%s needs define '%s' method" % + (self.__class__.__name__, 'inject')) |