aboutsummaryrefslogtreecommitdiffstats
path: root/github3/models.py
diff options
context:
space:
mode:
authorKenneth Reitz <me@kennethreitz.com>2011-07-23 15:43:57 -0400
committerKenneth Reitz <me@kennethreitz.com>2011-07-23 15:43:57 -0400
commitae2919241314dc22aaee304561e4765a21ee20dd (patch)
treec97ecaffb078b2e5c0a12d7ba5339ab7fc749f5d /github3/models.py
parentget a user (diff)
downloadpython-github3-ae2919241314dc22aaee304561e4765a21ee20dd.tar.xz
python-github3-ae2919241314dc22aaee304561e4765a21ee20dd.zip
awesome pattern!
Diffstat (limited to 'github3/models.py')
-rw-r--r--github3/models.py70
1 files changed, 70 insertions, 0 deletions
diff --git a/github3/models.py b/github3/models.py
index e69de29..38a2ea1 100644
--- a/github3/models.py
+++ b/github3/models.py
@@ -0,0 +1,70 @@
+"""
+github3.models
+~~~~~~~~~~~~~~
+
+This module provides the Github3 object model.
+"""
+
+from .helpers import to_python, to_api
+
+
+class BaseResource(object):
+ """A BaseResource object."""
+
+ _strings = []
+ _ints = []
+ _datetimes = []
+ _booleans = []
+ _map = {}
+
+
+ def __init__(self):
+ self._bootstrap()
+ super(BaseResource, self).__init__()
+
+
+ def __dir__(self):
+ d = self.__dict__.copy()
+
+ try:
+ del d['_gh']
+ except KeyError:
+ pass
+
+ return d.keys()
+
+
+ def _bootstrap(self):
+ """Bootstraps the model object based on configured values."""
+
+ for attr in (self._strings + self._ints + self._datetimes + self._booleans + self._map.keys()):
+ setattr(self, attr, None)
+
+ @classmethod
+ def new_from_dict(cls, d, gh=None):
+
+ return to_python(
+ obj=cls(), in_dict=d,
+ string_keys = cls._strings,
+ date_keys = cls._datetimes,
+ _gh = gh
+ )
+
+
+class User(BaseResource):
+ """Github User object model."""
+
+ _strings = ['login', 'gravatar_url', 'url', 'name', 'company',
+ 'blog', 'location', 'email', 'bio', 'html_url']
+
+ _ints = ['id', 'public_repos', 'public_gists', 'followers', 'following']
+ _datetimes = ['created_at',]
+ _booleans = ['hireable', ]
+ _map = {}
+
+
+ def __init__(self):
+ super(User, self).__init__()
+
+ def __repr__(self):
+ return '<user {0}>'.format(self.login) \ No newline at end of file