Skip to content

Commit 59b7dd6

Browse files
author
Kenneth Reitz
committed
cache response data, update patched resources!
1 parent 9a65645 commit 59b7dd6

1 file changed

Lines changed: 38 additions & 13 deletions

File tree

github3/models.py

Lines changed: 38 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55
This module provides the Github3 object model.
66
"""
77

8-
from .helpers import to_python, to_api
8+
import json
9+
10+
from .helpers import to_python, to_api, key_diff
911

1012

1113
class BaseResource(object):
@@ -17,7 +19,7 @@ class BaseResource(object):
1719
_bools = []
1820
_map = {}
1921
_writeable = []
20-
_modified = []
22+
_cache = {}
2123

2224

2325
def __init__(self):
@@ -26,22 +28,23 @@ def __init__(self):
2628

2729

2830
def __dir__(self):
29-
d = self.__dict__.copy()
30-
31-
try:
32-
del d['_gh']
33-
except KeyError:
34-
pass
35-
36-
return d.keys()
37-
31+
return self.keys()
3832

3933
def _bootstrap(self):
4034
"""Bootstraps the model object based on configured values."""
4135

42-
for attr in (self._strs + self._ints + self._dates + self._bools + self._map.keys()):
36+
for attr in self.keys():
4337
setattr(self, attr, None)
4438

39+
def keys(self):
40+
return self._strs + self._ints + self._dates + self._bools + self._map.keys()
41+
42+
def dict(self):
43+
d = dict()
44+
for k in self.keys():
45+
d[k] = self.__dict__.get(k)
46+
47+
return d
4548

4649
@classmethod
4750
def new_from_dict(cls, d, gh=None):
@@ -57,12 +60,21 @@ def new_from_dict(cls, d, gh=None):
5760
)
5861

5962
def update(self):
60-
pass
63+
deploy = key_diff(self._cache, self.dict(), pack=True)
64+
65+
deploy = to_api(deploy, int_keys=self._ints, date_keys=self._dates, bool_keys=self._bools)
66+
deploy = json.dumps(deploy)
67+
68+
r = self._gh._patch_resource(self.ri, deploy)
69+
return r
70+
71+
6172

6273
def setattr(self, k, v):
6374
# TODO: when writable key changed,
6475
pass
6576

77+
6678
class Plan(BaseResource):
6779
"""Github Plan object model."""
6880

@@ -87,6 +99,10 @@ class User(BaseResource):
8799
# _map = {}
88100
# _writeable = []
89101

102+
@property
103+
def ri(self):
104+
return ('users', self.login)
105+
90106
def __repr__(self):
91107
return '<user {0}>'.format(self.login)
92108

@@ -107,6 +123,10 @@ class CurrentUser(User):
107123
_map = {'plan': Plan}
108124
_writeable = ['name', 'email', 'blog', 'company', 'location', 'hireable', 'bio']
109125

126+
@property
127+
def ri(self):
128+
return ('user',)
129+
110130
def __repr__(self):
111131
return '<current-user {0}>'.format(self.login)
112132

@@ -147,6 +167,11 @@ class Repo(BaseResource):
147167
_dates = ['pushed_at', 'created_at']
148168
_map = {'owner': User}
149169

170+
171+
@property
172+
def ri(self):
173+
return ('repos', self.owner.login, self.name)
174+
150175
def __repr__(self):
151176
return '<repo {0}/{1}>'.format(self.owner.login, self.name)
152177
# owner

0 commit comments

Comments
 (0)