aboutsummaryrefslogtreecommitdiffstats
path: root/pygithub3/core
diff options
context:
space:
mode:
Diffstat (limited to 'pygithub3/core')
-rw-r--r--pygithub3/core/client.py34
-rw-r--r--pygithub3/core/ghrequests/__init__.py99
-rw-r--r--pygithub3/core/ghrequests/users/__init__.py (renamed from pygithub3/core/resources/users/__init__.py)2
-rw-r--r--pygithub3/core/ghrequests/users/emails.py42
-rw-r--r--pygithub3/core/ghrequests/users/followers.py46
-rw-r--r--pygithub3/core/ghrequests/users/keys.py (renamed from pygithub3/core/resources/users/keys.py)0
-rw-r--r--pygithub3/core/ghrequests/users/user.py (renamed from pygithub3/core/resources/users/user.py)10
-rw-r--r--pygithub3/core/resources/__init__.py87
-rw-r--r--pygithub3/core/resources/users/emails.py16
-rw-r--r--pygithub3/core/resources/users/followers.py0
-rw-r--r--pygithub3/core/result.py14
11 files changed, 217 insertions, 133 deletions
diff --git a/pygithub3/core/client.py b/pygithub3/core/client.py
index 83d2d79..b4f276c 100644
--- a/pygithub3/core/client.py
+++ b/pygithub3/core/client.py
@@ -62,37 +62,37 @@ class Client(object):
def __parse_kwargs(func):
""" Decorator to put extra args into requests.params """
- def wrapper(self, verb, resource, **kwargs):
+ def wrapper(self, verb, request, **kwargs):
diffs = kwargs.viewkeys() - VALID_REQUEST_ARGS
new_params = kwargs.get('params', {})
for key in diffs: # Put each key in new_params and delete it
new_params[key] = kwargs[key]
del kwargs[key]
kwargs['params'] = new_params
- return func(self, verb, resource, **kwargs)
+ return func(self, verb, request, **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)
+ def request(self, verb, request, **kwargs):
+ request = "%s%s" % (self.config['base_url'], request)
+ response = self.requester.request(verb, request, **kwargs)
GithubError(response).process()
return response
- def get(self, resource, **kwargs):
- return self.request('get', resource, **kwargs)
+ def get(self, request, **kwargs):
+ return self.request('get', request, **kwargs)
- def post(self, resource, **kwargs):
- return self.request('post', resource, **kwargs)
+ def post(self, request, **kwargs):
+ return self.request('post', request, **kwargs)
- def patch(self, resource, **kwargs):
- return self.request('patch', resource, **kwargs)
+ def patch(self, request, **kwargs):
+ return self.request('patch', request, **kwargs)
- def put(self, resource, **kwargs):
- return self.request('put', resource, **kwargs)
+ def put(self, request, **kwargs):
+ return self.request('put', request, **kwargs)
- def delete(self, resource, **kwargs):
- return self.request('delete', resource, **kwargs)
+ def delete(self, request, **kwargs):
+ return self.request('delete', request, **kwargs)
- def head(self, resource, **kwargs):
- return self.request('head', resource, **kwargs)
+ def head(self, request, **kwargs):
+ return self.request('head', request, **kwargs)
diff --git a/pygithub3/core/ghrequests/__init__.py b/pygithub3/core/ghrequests/__init__.py
new file mode 100644
index 0000000..b3b7c28
--- /dev/null
+++ b/pygithub3/core/ghrequests/__init__.py
@@ -0,0 +1,99 @@
+#!/usr/bin/env python
+# -*- encoding: utf-8 -*-
+
+import re
+from importlib import import_module
+try:
+ import simplejson as json
+except ImportError:
+ import json
+
+ABS_IMPORT_PREFIX = 'pygithub3.core.ghrequests'
+
+
+class RequestNotFound(Exception):
+ pass
+
+
+class RequestUriInvalid(Exception):
+ pass
+
+
+class Request(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_resource(self):
+ return getattr(self, 'resource', '')
+
+ 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):
+ """ """
+ self.args = {}
+
+ def config_with(self, **kwargs):
+ self.args = kwargs
+
+ def clear_config(self):
+ self.args = {}
+
+ def __validate(func):
+ """ """
+
+ def wrapper(self, request_uri):
+ if not Factory.import_pattern.match(request_uri):
+ raise RequestUriInvalid("'%s' isn't valid form" % request_uri)
+ return func(self, request_uri.lower())
+ return wrapper
+
+ def __dispatch(func):
+ """ """
+
+ def wrapper(self, request_uri):
+ module_chunk, s, request_chunk = request_uri.rpartition('.')
+ try:
+ # TODO: CamelCase and under_score support, now only Class Name
+ module = import_module('%s.%s'
+ % (ABS_IMPORT_PREFIX, module_chunk))
+ request = getattr(module, request_chunk.capitalize())
+ except ImportError:
+ raise RequestNotFound("'%s' module does not exists"
+ % module_chunk)
+ except AttributeError:
+ raise RequestNotFound(
+ "'%s' request doesn't exists into '%s' module"
+ % (request_chunk.capitalize(), module_chunk))
+ return func(self, request)
+ return wrapper
+
+ @__validate
+ @__dispatch
+ def __call__(self, request=''):
+ request = request(self.args)
+ assert isinstance(request, Request)
+ return request
diff --git a/pygithub3/core/resources/users/__init__.py b/pygithub3/core/ghrequests/users/__init__.py
index 84759a2..08986f6 100644
--- a/pygithub3/core/resources/users/__init__.py
+++ b/pygithub3/core/ghrequests/users/__init__.py
@@ -1,4 +1,4 @@
# -*- encoding: utf-8 -*-
-from pygithub3.core.resources import Resource
+from pygithub3.core.ghrequests import Request
from user import *
diff --git a/pygithub3/core/ghrequests/users/emails.py b/pygithub3/core/ghrequests/users/emails.py
new file mode 100644
index 0000000..991abc6
--- /dev/null
+++ b/pygithub3/core/ghrequests/users/emails.py
@@ -0,0 +1,42 @@
+#!/usr/bin/env python
+# -*- encoding: utf-8 -*-
+
+from . import Request, json
+from pygithub3.resources.base import Raw
+
+
+class List(Request):
+
+ resource = Raw
+
+ def validate(self):
+ pass
+
+ def set_uri(self):
+ return 'user/emails'
+
+class Add(Request):
+
+ resource = Raw
+
+ def validate(self):
+ pass
+
+ def get_data(self):
+ return json.dumps(self.emails)
+
+ def set_uri(self):
+ return 'user/emails'
+
+class Delete(Request):
+
+ resource = Raw
+
+ def validate(self):
+ pass
+
+ def get_data(self):
+ return json.dumps(self.emails)
+
+ def set_uri(self):
+ return 'user/emails'
diff --git a/pygithub3/core/ghrequests/users/followers.py b/pygithub3/core/ghrequests/users/followers.py
new file mode 100644
index 0000000..e71313d
--- /dev/null
+++ b/pygithub3/core/ghrequests/users/followers.py
@@ -0,0 +1,46 @@
+#!/usr/bin/env python
+# -*- encoding: utf-8 -*-
+
+from . import Request
+from pygithub3.resources.users import User
+
+__all__ = ('List',)
+
+
+class List(Request):
+
+ resource = User
+
+ def validate(self):
+ pass
+
+ def set_uri(self):
+ if self.user:
+ return 'users/%s/followers' % self.user
+ else:
+ return 'user/followers'
+
+
+class Listfollowing(Request):
+
+ resource = User
+
+ def validate(self):
+ pass
+
+ def set_uri(self):
+ if self.user:
+ return 'users/%s/following' % self.user
+ else:
+ return 'user/following'
+
+class Unfollow(Request):
+
+ resource = User
+
+ def validate(self):
+ if not self.user:
+ raise Exception('unfollow ened user') # TODO: validate exception
+
+ def set_uri(self):
+ return 'user/following/%s' % self.user
diff --git a/pygithub3/core/resources/users/keys.py b/pygithub3/core/ghrequests/users/keys.py
index e69de29..e69de29 100644
--- a/pygithub3/core/resources/users/keys.py
+++ b/pygithub3/core/ghrequests/users/keys.py
diff --git a/pygithub3/core/resources/users/user.py b/pygithub3/core/ghrequests/users/user.py
index 1399ff8..18a356e 100644
--- a/pygithub3/core/resources/users/user.py
+++ b/pygithub3/core/ghrequests/users/user.py
@@ -1,15 +1,15 @@
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
-from . import Resource
-from pygithub3.models.users import User
+from . import Request
+from pygithub3.resources.users import User
__all__ = ('Get', 'Update')
-class Get(Resource):
+class Get(Request):
- model = User
+ resource = User
def validate(self):
pass
@@ -21,5 +21,5 @@ class Get(Resource):
return 'user'
-class Update(Resource):
+class Update(Request):
pass
diff --git a/pygithub3/core/resources/__init__.py b/pygithub3/core/resources/__init__.py
deleted file mode 100644
index bca9607..0000000
--- a/pygithub3/core/resources/__init__.py
+++ /dev/null
@@ -1,87 +0,0 @@
-#!/usr/bin/env python
-# -*- encoding: utf-8 -*-
-
-import re
-
-ABS_IMPORT_PREFIX = 'pygithub3.core.resources'
-
-
-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('%s.%s'
- % (ABS_IMPORT_PREFIX, 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/pygithub3/core/resources/users/emails.py b/pygithub3/core/resources/users/emails.py
deleted file mode 100644
index 9523977..0000000
--- a/pygithub3/core/resources/users/emails.py
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/usr/bin/env python
-# -*- encoding: utf-8 -*-
-
-from . import Resource
-from pygithub3.models.base import Raw
-
-
-class List(Resource):
-
- model = Raw
-
- def validate(self):
- pass
-
- def set_uri(self):
- return 'user/emails'
diff --git a/pygithub3/core/resources/users/followers.py b/pygithub3/core/resources/users/followers.py
deleted file mode 100644
index e69de29..0000000
--- a/pygithub3/core/resources/users/followers.py
+++ /dev/null
diff --git a/pygithub3/core/result.py b/pygithub3/core/result.py
index 5c1466d..1c8181e 100644
--- a/pygithub3/core/result.py
+++ b/pygithub3/core/result.py
@@ -8,9 +8,9 @@ from .third_libs.link_header import parse_link_value
class Method(object):
- def __init__(self, method, resource, **method_args):
+ def __init__(self, method, request, **method_args):
self.method = method
- self.resource = resource
+ self.request = request
self.args = method_args
self.cache = {}
@@ -47,10 +47,10 @@ class Method(object):
def __call__(self, page=1):
all_args = self.args.copy()
all_args.update(page=page)
- response = self.method(self.resource, **all_args)
+ response = self.method(self.request, **all_args)
self.__set_last_page_from(response)
- model = self.resource.get_model()
- self.cache[str(page)] = model.loads(response.content)
+ resource = self.request.get_resource()
+ self.cache[str(page)] = resource.loads(response.content)
return self.cache[str(page)]
@property
@@ -137,9 +137,9 @@ class Page(object):
class Result(object):
""" """
- def __init__(self, client, resource, **kwargs):
+ def __init__(self, client, request, **kwargs):
""" """
- self.getter = Method(client.get, resource, **kwargs)
+ self.getter = Method(client.get, request, **kwargs)
self.page = Page(self.getter)
def __iter__(self):