Skip to content

Commit d61d25f

Browse files
committed
Improve models
Now the models maps itself from json encoded Then we can inherit it and change behaviour to use polymorphism into resources ;)
1 parent cfcebaf commit d61d25f

File tree

3 files changed

+47
-20
lines changed

3 files changed

+47
-20
lines changed

pygithub3/core/resources/users/emails.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,15 @@
22
# -*- encoding: utf-8 -*-
33

44
from . import Resource
5-
#from pygithub3.models.
5+
from pygithub3.models.base import Raw
66

77

88
class List(Resource):
9-
pass
9+
10+
model = Raw
11+
12+
def validate(self):
13+
pass
14+
15+
def set_uri(self):
16+
return 'user/emails'

pygithub3/models/base.py

Lines changed: 36 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,38 @@
11
#!/usr/bin/env python
22
# -*- encoding: utf-8 -*-
33

4+
try:
5+
import simplejson as json
6+
except ImportError:
7+
import json
8+
49

510
class Model(object):
611

7-
dates = ()
8-
maps = {}
9-
collection_maps = {}
12+
_dates = ()
13+
_maps = {}
14+
_collection_maps = {}
1015

1116
def __init__(self, attrs):
1217
""" """
13-
self.attrs = attrs
18+
self._attrs = attrs
19+
self.__set_attrs()
20+
21+
def __set_attrs(self):
22+
for attr in self._attrs:
23+
setattr(self, attr, self._attrs[attr])
1424

15-
def __getattr__(self, name):
16-
try:
17-
return self.attrs[name]
18-
except KeyError:
19-
raise AttributeError
25+
@classmethod
26+
def loads(self, json_content):
27+
resource_chunk = json.loads(json_content)
28+
if not hasattr(resource_chunk, 'items'):
29+
return [self.__load(raw_resource)
30+
for raw_resource in resource_chunk]
31+
else:
32+
return self.__load(resource_chunk)
2033

2134
@classmethod
22-
def loads(self, raw_resource):
35+
def __load(self, raw_resource):
2336
def parse_date(string_date):
2437
from datetime import datetime
2538
try:
@@ -30,29 +43,36 @@ def parse_date(string_date):
3043

3144
def parse_map(model, raw_resource):
3245
if hasattr(raw_resource, 'items'):
33-
return model.loads(raw_resource)
46+
return model.__load(raw_resource)
3447

3548
def parse_collection_map(model, raw_resources):
3649
# Dict of resources (Ex: Gist file)
3750
if hasattr(raw_resources, 'items'):
3851
dict_map = {}
3952
for key, raw_resource in raw_resources.items():
40-
dict_map[key] = model.loads(raw_resource)
53+
dict_map[key] = model.__load(raw_resource)
4154
return dict_map
4255
# list of resources
4356
elif hasattr(raw_resources, '__iter__'):
44-
return [model.loads(raw_resource)
57+
return [model.__load(raw_resource)
4558
for raw_resource in raw_resources]
4659
raw_resource.update(
4760
{attr: parse_date(raw_resource[attr])
48-
for attr in self.dates if attr in raw_resource})
61+
for attr in self._dates if attr in raw_resource})
4962
raw_resource.update(
5063
{attr: parse_map(model, raw_resource[attr])
51-
for attr, model in self.maps.items()
64+
for attr, model in self._maps.items()
5265
if attr in raw_resource})
5366
raw_resource.update(
5467
{attr: parse_collection_map(model, raw_resource[attr])
55-
for attr, model in self.collection_maps.items()
68+
for attr, model in self._collection_maps.items()
5669
if attr in raw_resource})
5770

5871
return self(raw_resource)
72+
73+
74+
class Raw(Model):
75+
76+
@classmethod
77+
def loads(self, json_content):
78+
return json.loads(json_content)

pygithub3/models/users.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ def __str__(self):
1515
class User(Model):
1616
""" """
1717

18-
maps = {'plan': Plan}
19-
dates = ('created_at', )
18+
_maps = {'plan': Plan}
19+
_dates = ('created_at', )
2020

2121
def __str__(self):
2222
return '<User (%s)>' % getattr(self, 'login', '')

0 commit comments

Comments
 (0)