aboutsummaryrefslogtreecommitdiffstats
path: root/github3/core.py
diff options
context:
space:
mode:
Diffstat (limited to 'github3/core.py')
-rw-r--r--github3/core.py70
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'))