aboutsummaryrefslogtreecommitdiffstats
path: root/pygithub3/models
diff options
context:
space:
mode:
Diffstat (limited to 'pygithub3/models')
-rw-r--r--pygithub3/models/__init__.py1
-rw-r--r--pygithub3/models/base.py58
-rw-r--r--pygithub3/models/users.py22
3 files changed, 81 insertions, 0 deletions
diff --git a/pygithub3/models/__init__.py b/pygithub3/models/__init__.py
new file mode 100644
index 0000000..dae354a
--- /dev/null
+++ b/pygithub3/models/__init__.py
@@ -0,0 +1 @@
+# -*- encoding: utf-8 -*-
diff --git a/pygithub3/models/base.py b/pygithub3/models/base.py
new file mode 100644
index 0000000..2f0cbd7
--- /dev/null
+++ b/pygithub3/models/base.py
@@ -0,0 +1,58 @@
+#!/usr/bin/env python
+# -*- encoding: utf-8 -*-
+
+
+class Model(object):
+
+ dates = ()
+ maps = {}
+ collection_maps = {}
+
+ def __init__(self, attrs):
+ """ """
+ self.attrs = attrs
+
+ def __getattr__(self, name):
+ try:
+ return self.attrs[name]
+ except KeyError:
+ raise AttributeError
+
+ @classmethod
+ def loads(self, raw_resource):
+ def parse_date(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(model, raw_resource):
+ if hasattr(raw_resource, 'items'):
+ return model.loads(raw_resource)
+
+ def parse_collection_map(model, raw_resources):
+ # Dict of resources (Ex: Gist file)
+ if hasattr(raw_resources, 'items'):
+ dict_map = {}
+ for key, raw_resource in raw_resources.items():
+ dict_map[key] = model.loads(raw_resource)
+ return dict_map
+ # list of resources
+ elif hasattr(raw_resources, '__iter__'):
+ return [model.loads(raw_resource)
+ for raw_resource in raw_resources]
+ raw_resource.update(
+ {attr: parse_date(raw_resource[attr])
+ for attr in self.dates if attr in raw_resource})
+ raw_resource.update(
+ {attr: parse_map(model, raw_resource[attr])
+ for attr, model in self.maps.items()
+ if attr in raw_resource})
+ raw_resource.update(
+ {attr: parse_collection_map(model, raw_resource[attr])
+ for attr, model in self.collection_maps.items()
+ if attr in raw_resource})
+
+ return self(raw_resource)
diff --git a/pygithub3/models/users.py b/pygithub3/models/users.py
new file mode 100644
index 0000000..0ceef90
--- /dev/null
+++ b/pygithub3/models/users.py
@@ -0,0 +1,22 @@
+#!/usr/bin/env python
+# -*- encoding: utf-8 -*-
+
+from .base import Model
+
+__all__ = ('Plan', 'User')
+
+
+class Plan(Model):
+
+ def __str__(self):
+ return '<Plan (%s)>' % getattr(self, 'name', '')
+
+
+class User(Model):
+ """ """
+
+ maps = {'plan': Plan}
+ dates = ('created_at', )
+
+ def __str__(self):
+ return '<User (%s)>' % getattr(self, 'login', '')