diff options
-rw-r--r-- | pygithub3/core/resources/users/emails.py | 11 | ||||
-rw-r--r-- | pygithub3/models/base.py | 52 | ||||
-rw-r--r-- | pygithub3/models/users.py | 4 |
3 files changed, 47 insertions, 20 deletions
diff --git a/pygithub3/core/resources/users/emails.py b/pygithub3/core/resources/users/emails.py index 18d520c..9523977 100644 --- a/pygithub3/core/resources/users/emails.py +++ b/pygithub3/core/resources/users/emails.py @@ -2,8 +2,15 @@ # -*- encoding: utf-8 -*- from . import Resource -#from pygithub3.models. +from pygithub3.models.base import Raw class List(Resource): - pass + + model = Raw + + def validate(self): + pass + + def set_uri(self): + return 'user/emails' diff --git a/pygithub3/models/base.py b/pygithub3/models/base.py index 2f0cbd7..722d545 100644 --- a/pygithub3/models/base.py +++ b/pygithub3/models/base.py @@ -1,25 +1,38 @@ #!/usr/bin/env python # -*- encoding: utf-8 -*- +try: + import simplejson as json +except ImportError: + import json + class Model(object): - dates = () - maps = {} - collection_maps = {} + _dates = () + _maps = {} + _collection_maps = {} def __init__(self, attrs): """ """ - self.attrs = attrs + self._attrs = attrs + self.__set_attrs() + + def __set_attrs(self): + for attr in self._attrs: + setattr(self, attr, self._attrs[attr]) - def __getattr__(self, name): - try: - return self.attrs[name] - except KeyError: - raise AttributeError + @classmethod + def loads(self, json_content): + resource_chunk = json.loads(json_content) + if not hasattr(resource_chunk, 'items'): + return [self.__load(raw_resource) + for raw_resource in resource_chunk] + else: + return self.__load(resource_chunk) @classmethod - def loads(self, raw_resource): + def __load(self, raw_resource): def parse_date(string_date): from datetime import datetime try: @@ -30,29 +43,36 @@ class Model(object): def parse_map(model, raw_resource): if hasattr(raw_resource, 'items'): - return model.loads(raw_resource) + return model.__load(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) + dict_map[key] = model.__load(raw_resource) return dict_map # list of resources elif hasattr(raw_resources, '__iter__'): - return [model.loads(raw_resource) + return [model.__load(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}) + 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() + 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() + for attr, model in self._collection_maps.items() if attr in raw_resource}) return self(raw_resource) + + +class Raw(Model): + + @classmethod + def loads(self, json_content): + return json.loads(json_content) diff --git a/pygithub3/models/users.py b/pygithub3/models/users.py index 0ceef90..c94a704 100644 --- a/pygithub3/models/users.py +++ b/pygithub3/models/users.py @@ -15,8 +15,8 @@ class Plan(Model): class User(Model): """ """ - maps = {'plan': Plan} - dates = ('created_at', ) + _maps = {'plan': Plan} + _dates = ('created_at', ) def __str__(self): return '<User (%s)>' % getattr(self, 'login', '') |