aboutsummaryrefslogtreecommitdiffstats
path: root/github3
diff options
context:
space:
mode:
Diffstat (limited to 'github3')
-rw-r--r--github3/core/__init__.py0
-rw-r--r--github3/core/client.py96
-rw-r--r--github3/core/resources/__init__.py81
-rw-r--r--github3/core/resources/user/__init__.py2
-rw-r--r--github3/core/resources/user/emails.py8
-rw-r--r--github3/core/resources/user/followers.py0
-rw-r--r--github3/core/resources/user/keys.py0
-rw-r--r--github3/core/resources/user/user.py23
-rw-r--r--github3/errors.py41
-rw-r--r--github3/models/__init__.py0
-rw-r--r--github3/models/base.py57
-rw-r--r--github3/models/user.py20
-rw-r--r--github3/services/__init__.py0
-rw-r--r--github3/services/base.py41
-rw-r--r--github3/services/user.py48
-rw-r--r--github3/tests/__init__.py0
-rw-r--r--github3/tests/test_errors.py36
17 files changed, 0 insertions, 453 deletions
diff --git a/github3/core/__init__.py b/github3/core/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/github3/core/__init__.py
+++ /dev/null
diff --git a/github3/core/client.py b/github3/core/client.py
deleted file mode 100644
index 99a88f0..0000000
--- a/github3/core/client.py
+++ /dev/null
@@ -1,96 +0,0 @@
-#!/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)
diff --git a/github3/core/resources/__init__.py b/github3/core/resources/__init__.py
deleted file mode 100644
index c5dee18..0000000
--- a/github3/core/resources/__init__.py
+++ /dev/null
@@ -1,81 +0,0 @@
-#!/usr/bin/env python
-# -*- encoding: utf-8 -*-
-
-import re
-
-class UriNotFound(Exception):
- pass
-
-
-class UriInvalid(Exception):
- pass
-
-
-class Resource(object):
- """ """
-
- def __init__(self, args):
- """ """
- self.args = args
- self.validate()
- self.uri = self.set_uri()
-
- def validate(self, args):
- raise NotImplementedError
-
- def set_uri(self):
- raise NotImplementedError
-
- def get_uri(self):
- return str(self.uri).strip('/')
-
- def get_model(self):
- return getattr(self, 'model', '')
-
- def __getattr__(self, name):
- return self.args.get(name)
-
- def __str__(self):
- return self.get_uri()
-
-
-class Factory(object):
- """ """
- import_pattern = re.compile(r'^(\w+\.)+\w+$')
-
- def __init__(self, **kwargs):
- self.args = kwargs
-
- def __validate(func):
- """ """
-
- def wrapper(self, resource_path):
- if not Factory.import_pattern.match(resource_path):
- raise UriInvalid("'%s' isn't valid form" % resource_path)
- return func(self, resource_path.lower())
- return wrapper
-
- def __dispatch(func):
- """ """
-
- from importlib import import_module
- def wrapper(self, resource_path):
- module_chunk, s, uri_chunk = resource_path.rpartition('.')
- try:
- # TODO: CamelCase and under_score support, now only Class Name
- module = import_module('core.resources.%s' % module_chunk)
- uri = getattr(module, uri_chunk.capitalize())
- except ImportError:
- raise UriNotFound("'%s' module does not exists" % module_chunk)
- except AttributeError:
- raise UriNotFound("'%s' uri doesn't exists into '%s' module"
- % (uri_chunk.capitalize(), module_chunk))
- return func(self, uri)
- return wrapper
-
- @__validate
- @__dispatch
- def __call__(self, resource_class=''):
- resource = resource_class(self.args)
- assert isinstance(resource, Resource)
- return resource
diff --git a/github3/core/resources/user/__init__.py b/github3/core/resources/user/__init__.py
deleted file mode 100644
index 8248571..0000000
--- a/github3/core/resources/user/__init__.py
+++ /dev/null
@@ -1,2 +0,0 @@
-from core.resources import Resource
-from user import *
diff --git a/github3/core/resources/user/emails.py b/github3/core/resources/user/emails.py
deleted file mode 100644
index 83644db..0000000
--- a/github3/core/resources/user/emails.py
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/usr/bin/env python
-# -*- encoding: utf-8 -*-
-
-from core.uris import Manager
-from models.base import Model
-
-class List(Manager):
- pass
diff --git a/github3/core/resources/user/followers.py b/github3/core/resources/user/followers.py
deleted file mode 100644
index e69de29..0000000
--- a/github3/core/resources/user/followers.py
+++ /dev/null
diff --git a/github3/core/resources/user/keys.py b/github3/core/resources/user/keys.py
deleted file mode 100644
index e69de29..0000000
--- a/github3/core/resources/user/keys.py
+++ /dev/null
diff --git a/github3/core/resources/user/user.py b/github3/core/resources/user/user.py
deleted file mode 100644
index 4308f01..0000000
--- a/github3/core/resources/user/user.py
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/usr/bin/env python
-# -*- encoding: utf-8 -*-
-
-from . import Resource
-from models.user import User
-
-__all__ = ('Get', 'Update')
-
-class Get(Resource):
-
- model = User
-
- def validate(self):
- pass
-
- def set_uri(self):
- if self.user:
- return 'users/%s' % self.user
- else:
- return 'user'
-
-class Update(Resource):
- pass
diff --git a/github3/errors.py b/github3/errors.py
deleted file mode 100644
index 0d58c16..0000000
--- a/github3/errors.py
+++ /dev/null
@@ -1,41 +0,0 @@
-#!/usr/bin/env python
-# -*- encoding: utf-8 -*-
-
-import json
-
-
-class BadRequest(Exception):
- pass
-
-
-class UnprocessableEntity(Exception):
- pass
-
-
-class GithubError(object):
- """ Handler for API errors """
-
- def __init__(self, response):
- self.response = response
- self.status_code = response.status_code
- try:
- self.debug = json.loads(response.content)
- except (ValueError, TypeError):
- self.debug = {'message': response.content}
-
- def error_400(self):
- return BadRequest("400 - %s" % self.debug.get('message'))
-
- def error_422(self):
- errors = self.debug.get('errors')
- if errors:
- errors = ['{resource}: {code} => {field}'.format(**error)
- for error in errors]
- return UnprocessableEntity(
- '422 - %s %s' % (self.debug.get('message'), errors))
-
- def process(self):
- raise_error = getattr(self, 'error_%s' % self.status_code, False)
- if raise_error:
- raise raise_error()
- self.response.raise_for_status()
diff --git a/github3/models/__init__.py b/github3/models/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/github3/models/__init__.py
+++ /dev/null
diff --git a/github3/models/base.py b/github3/models/base.py
deleted file mode 100644
index a2c3ac7..0000000
--- a/github3/models/base.py
+++ /dev/null
@@ -1,57 +0,0 @@
-#!/usr/bin/env python
-# -*- encoding: utf-8 -*-
-
-class Model(object):
-
- dates = ()
- maps = {}
- collection_maps = {}
-
- def __init__(self, attrs):
- """ """
- self.attrs = attrs
-
- def __getattr__(self, name):
- try:
- return self.attrs[name]
- except KeyError:
- raise AttributeError
-
- @classmethod
- def loads(self, raw_resource):
- def parse_date(string_date):
- from datetime import datetime
- try:
- date = datetime.strptime(string_date, '%Y-%m-%dT%H:%M:%SZ')
- except TypeError:
- date = None
- return date
-
- def parse_map(model, raw_resource):
- if hasattr(raw_resource, 'items'):
- return model.loads(raw_resource)
-
- def parse_collection_map(model, raw_resources):
- # Dict of resources (Ex: Gist file)
- if hasattr(raw_resources, 'items'):
- dict_map = {}
- for key, raw_resource in raw_resources.items():
- dict_map[key] = model.loads(raw_resource)
- return dict_map
- # list of resources
- elif hasattr(raw_resources, '__iter__'):
- return [model.loads(raw_resource)
- for raw_resource in raw_resources]
- raw_resource.update(
- {attr: parse_date(raw_resource[attr])
- for attr in self.dates if attr in raw_resource})
- raw_resource.update(
- {attr: parse_map(model, raw_resource[attr])
- for attr, model in self.maps.items()
- if attr in raw_resource})
- raw_resource.update(
- {attr: parse_collection_map(model, raw_resource[attr])
- for attr, model in self.collection_maps.items()
- if attr in raw_resource})
-
- return self(raw_resource)
diff --git a/github3/models/user.py b/github3/models/user.py
deleted file mode 100644
index c87afc3..0000000
--- a/github3/models/user.py
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/usr/bin/env python
-# -*- encoding: utf-8 -*-
-
-from base import Model
-
-
-class Plan(Model):
-
- def __str__(self):
- return '<Plan (%s)>' % getattr(self, 'name', '')
-
-
-class User(Model):
- """ """
-
- maps = {'plan': Plan}
- dates = ('created_at', )
-
- def __str__(self):
- return '<User (%s)>' % getattr(self, 'login', '')
diff --git a/github3/services/__init__.py b/github3/services/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/github3/services/__init__.py
+++ /dev/null
diff --git a/github3/services/base.py b/github3/services/base.py
deleted file mode 100644
index c74aa2e..0000000
--- a/github3/services/base.py
+++ /dev/null
@@ -1,41 +0,0 @@
-#!/usr/bin/env python
-# -*- encoding: utf-8 -*-
-
-from core.client import Client
-
-class Base(object):
-
- def __init__(self, **config):
- self.client = Client(**config)
-
- def get_user(self):
- return self.client.user
-
- def set_user(self, user):
- self.client.user = user
-
- def get_repo(self):
- return self.client.repo
-
- def set_repo(self, repo):
- self.client.repo = repo
-
- def _get_result(self, resource, **kwargs):
- return Result(self.client.get, resource, **kwargs)
-
-class Result(object): # move
-
- def __init__(self, method, resource, **kwargs):
- self.method = method
- self.resource= resource
- self.args = kwargs
-
- def __repr__(self):
- pass
-
- def process(self):
- model = self.resource.get_model()
- raw = self.method(self.resource, **self.args)
- if model:
- import json
- return model.loads(json.loads(raw.content))
diff --git a/github3/services/user.py b/github3/services/user.py
deleted file mode 100644
index 0a7e740..0000000
--- a/github3/services/user.py
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/usr/bin/env python
-# -*- encoding: utf-8 -*-
-
-from base import Base
-from core.resources import Factory
-
-
-class Keys(Base):
-
- def list(self):
- return self.get_resource('user/keys')
-
-
-class Followers(Base):
-
- def list(self, user):
- user = user or self.client.user
- if user:
- return self.get_resource('users/%s/followers' % user)
- else:
- return self.get_resource('user/followers')
-
-
-class Emails(Base):
-
- def list(self):
- return self.get_resource('user/emails')
-
- def add(self):
- pass
-
- def delete(self):
- pass
-
-class User(Base):
-
- def __init__(self, **kwargs):
- self.keys = Keys(**kwargs)
- self.emails = Emails(**kwargs)
- self.followers = Followers(**kwargs)
- super(User, self).__init__(**kwargs)
-
- def get(self, user):
- resource = Factory(user=user or self.client.user)
- return self._get_result(resource('user.Get'))
-
- def update(self):
- pass
diff --git a/github3/tests/__init__.py b/github3/tests/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/github3/tests/__init__.py
+++ /dev/null
diff --git a/github3/tests/test_errors.py b/github3/tests/test_errors.py
deleted file mode 100644
index 36f33d9..0000000
--- a/github3/tests/test_errors.py
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/usr/bin/env python
-# -*- encoding: utf-8 -*-
-
-from unittest import TestCase
-from requests.exceptions import HTTPError
-from core import client
-import errors
-import json
-
-class TestErrorsWithoutAuth(TestCase):
- """docstring for TestRequestsLibrary"""
-
- def setUp(self):
- self.client = client.Client()
-
- def test_malformed_url(self):
- self.assertRaises(HTTPError, self.client.request, 'get', 'fake')
-
-class TestErrorsAuthenticated(TestCase):
- """docstring for TestErrorsAuthenticaed"""
-
- def setUp(self):
- self.client = client.Client(
- login='pygit',
- password='pygithub3'
- )
-
- def test_400_parsing_json(self):
- data = 'strinf'
- self.assertRaises(errors.BadRequest, self.client.request,
- 'post', 'user/repos', data=data)
-
- def test_400_json_hash(self):
- data = json.dumps({'names': 'david'})
- with self.assertRaises(errors.UnprocessableEntity) as cm:
- self.client.request('post', 'user/repos', data=data)