aboutsummaryrefslogtreecommitdiffstats
path: root/pygithub3/core/client.py
diff options
context:
space:
mode:
authorDavid Medina <davidmedina9@gmail.com>2012-02-03 14:45:32 +0100
committerDavid Medina <davidmedina9@gmail.com>2012-02-03 14:46:54 +0100
commitf01bc94a33d8644da65b5fa895c222e9ee057b50 (patch)
tree3bfc837901a54f97a30f1d24431d8322906de192 /pygithub3/core/client.py
parentPypi environment by setuptools (diff)
downloadpython-github3-f01bc94a33d8644da65b5fa895c222e9ee057b50.tar.xz
python-github3-f01bc94a33d8644da65b5fa895c222e9ee057b50.zip
Fix imports to new environment
Absolute imports as PEP8 tells
Diffstat (limited to 'pygithub3/core/client.py')
-rw-r--r--pygithub3/core/client.py96
1 files changed, 96 insertions, 0 deletions
diff --git a/pygithub3/core/client.py b/pygithub3/core/client.py
new file mode 100644
index 0000000..d4247af
--- /dev/null
+++ b/pygithub3/core/client.py
@@ -0,0 +1,96 @@
+#!/usr/bin/env python
+# -*- encoding: utf-8 -*-
+
+import requests
+
+from .errors import GithubError
+
+VALID_REQUEST_ARGS = set((
+ 'params', 'data', 'headers', 'cookies', 'files', 'auth', 'timeout',
+ 'allow_redirects', 'proxies', 'return_response', 'config',
+ 'prefetch', 'verify'))
+
+
+class Client(object):
+ """ Client to send configurated requests"""
+
+ def __init__(self, **kwargs):
+ """
+ It can be configurated
+
+ :login, :password, :user, :repo, :token, :per_page, :base_url
+ """
+
+ self.requester = requests.session()
+ self.config = {
+ 'per_page': 100,
+ 'base_url': 'https://api.github.com/'
+ }
+ self.config.update(kwargs)
+ self.set_credentials(self.config.get('login'),
+ self.config.get('password'))
+ self.set_token(self.config.get('token'))
+ self.__set_params(self.config)
+
+ @property
+ def user(self):
+ return self.config.get('user')
+
+ @user.setter
+ def set_user(self, user):
+ self.config['user'] = user
+
+ @property
+ def repo(self):
+ return self.config.get('repo')
+
+ @repo.setter
+ def set_repo(self, repo):
+ self.config['repo'] = repo
+
+ def set_credentials(self, login, password):
+ if login and password:
+ self.requester.auth = (login, password)
+
+ def set_token(self, token):
+ if token:
+ self.requester.params['access_token'] = token
+
+ def __set_params(self, config):
+ self.requester.params['per_page'] = config.get('per_page')
+
+ def __parse_kwargs(func):
+ """ Decorator to put extra args into requests.params """
+
+ def wrapper(self, verb, resource, **kwargs):
+ diffs = kwargs.viewkeys() - VALID_REQUEST_ARGS
+ new_params = kwargs.get('params') or {}
+ new_params.update({key: kwargs[key] for key in diffs})
+ kwargs['params'] = new_params
+ return func(self, verb, resource, **kwargs)
+ return wrapper
+
+ @__parse_kwargs
+ def request(self, verb, resource, **kwargs):
+ resource = "%s%s" % (self.config['base_url'], resource)
+ response = self.requester.request(verb, resource, **kwargs)
+ GithubError(response).process()
+ return response
+
+ def get(self, resource, **kwargs):
+ return self.request('get', resource, **kwargs)
+
+ def post(self, resource, **kwargs):
+ return self.request('post', resource, **kwargs)
+
+ def patch(self, resource, **kwargs):
+ return self.request('patch', resource, **kwargs)
+
+ def put(self, resource, **kwargs):
+ return self.request('put', resource, **kwargs)
+
+ def delete(self, resource, **kwargs):
+ return self.request('delete', resource, **kwargs)
+
+ def head(self, resource, **kwargs):
+ return self.request('head', resource, **kwargs)