aboutsummaryrefslogtreecommitdiffstats
path: root/github3/handlers/base.py
diff options
context:
space:
mode:
authorDavid Medina <davidmedina9@gmail.com>2011-11-08 12:16:45 +0100
committerDavid Medina <davidmedina9@gmail.com>2011-11-08 23:01:36 +0100
commita7cb909b17704ac46d47c77d8074f9ced2393cfc (patch)
treeafe56e254a36ff5cd59e8caad2d95ed50f102911 /github3/handlers/base.py
parentAdded post_resource to handler (diff)
downloadpython-github3-a7cb909b17704ac46d47c77d8074f9ced2393cfc.tar.xz
python-github3-a7cb909b17704ac46d47c77d8074f9ced2393cfc.zip
Prefix handlers
Also give the possibility of inject converter in requests
Diffstat (limited to 'github3/handlers/base.py')
-rw-r--r--github3/handlers/base.py32
1 files changed, 21 insertions, 11 deletions
diff --git a/github3/handlers/base.py b/github3/handlers/base.py
index 9e5a110..ab9801e 100644
--- a/github3/handlers/base.py
+++ b/github3/handlers/base.py
@@ -13,16 +13,23 @@ class Handler(object):
self._gh = gh
super(Handler, self).__init__()
- def _get_converter(self):
- try:
- return getattr(self, 'converter')
- except AttributeError:
- return Modelizer()
+ def _prefix_resource(self, resource):
+ prefix = getattr(self, 'prefix', '')
+ return '/'.join((prefix, resource))
+
+ def _get_converter(self, kwargs):
+ converter = kwargs.get(
+ 'converter', # 1. in kwargs
+ getattr(self, 'converter', # 2. in handler
+ Modelizer())) # 3. Default
+
+ return converter
def _bool(self, resource, **kwargs):
""" Handler request to boolean response """
from github3.exceptions import NotFound
+ resource = self._prefix_resource(resource)
try:
response = self._gh.head(resource, **kwargs)
except NotFound:
@@ -31,34 +38,37 @@ class Handler(object):
return True
#TODO: if limit is multiple of per_page... it do another request for nothing
- def _get_resources(self, resource, model=None, limit=None):
+ def _get_resources(self, resource, model=None, limit=None, **kwargs):
""" Hander request to multiple resources """
+ resource = self._prefix_resource(resource)
page_resources = Paginate(resource, self._gh.get)
counter = 1
for page in page_resources:
for raw_resource in page:
if limit and counter > limit: break
counter += 1
- converter = self._get_converter()
+ converter = self._get_converter(kwargs)
converter.inject(model)
yield converter.loads(raw_resource)
else:
continue
break
- def _get_resource(self, resource, model=None):
+ def _get_resource(self, resource, model=None, **kwargs):
""" Handler request to single resource """
+ resource = self._prefix_resource(resource)
raw_resource = self._gh.get(resource)
- converter = self._get_converter()
+ converter = self._get_converter(kwargs)
converter.inject(model)
return converter.loads(raw_resource)
- def _post_resource(self, resource, data, model=None):
+ def _post_resource(self, resource, data, model=None, **kwargs):
""" Handler request to create a resource """
+ resource = self._prefix_resource(resource)
raw_resource = self._gh.post(resource, data=data)
- converter = self._get_converter()
+ converter = self._get_converter(kwargs)
converter.inject(model)
return converter.loads(raw_resource)