diff options
author | 2012-02-03 03:02:37 +0100 | |
---|---|---|
committer | 2012-02-03 03:02:37 +0100 | |
commit | 2e2e8bf5b75c28321ebe5c08fa077d431c408952 (patch) | |
tree | ed2e82884f1e0281a9ac8a3820a17e4c71e16681 /github3/core/client.py | |
parent | Reset project (diff) | |
download | python-github3-2e2e8bf5b75c28321ebe5c08fa077d431c408952.tar.xz python-github3-2e2e8bf5b75c28321ebe5c08fa077d431c408952.zip |
Complete new redesign trying to code less coupled
and I think that I'm getting it :P
Log from another repo (rebase hell if I'd try)
-------------------------------------------------
d64647909aa3ddde6532994f3bd895e297dd1c1d +Model mapper prototype
53fa5c47c14ebf405ac11af0b21b3bc4f1251558 Complete client
0af9075da9fddd14f0c04cb3ad5a74f33a6dcaf7 Fix exceptions typo
eae8232b4235451bac344f0114895dcf159d3af5 +ResouceFactory (renamed from
uris)
14c66bea1bf0a68fd540d1b73a8c25aa69c854ce WIP on Uri Factory
8012908b795d598510a7e4d288f40b324e751aab Fix client instance
3e97153664365146ac558ada22bb9d3fc1a3189d Fast night services prototype
785a0bdc2ddd815d911255ba7e91c5d71cc82a74 fix typo
84f03a039fb2413f2e156d3ec0bd226e65bcae31 WIP on client
f53076153d96b492f23e01f91debe8fafbc4cfe0 Trying wrapping requests
library for our needs
52ea9f888048853760990053211c9e0c4440b810 Initial commit
Diffstat (limited to 'github3/core/client.py')
-rw-r--r-- | github3/core/client.py | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/github3/core/client.py b/github3/core/client.py new file mode 100644 index 0000000..99a88f0 --- /dev/null +++ b/github3/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) |