diff options
Diffstat (limited to 'pygithub3/models')
-rw-r--r-- | pygithub3/models/__init__.py | 1 | ||||
-rw-r--r-- | pygithub3/models/base.py | 58 | ||||
-rw-r--r-- | pygithub3/models/users.py | 22 |
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', '') |