diff options
Diffstat (limited to 'pygithub3/core')
-rw-r--r-- | pygithub3/core/client.py | 34 | ||||
-rw-r--r-- | pygithub3/core/ghrequests/__init__.py | 99 | ||||
-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.py | 42 | ||||
-rw-r--r-- | pygithub3/core/ghrequests/users/followers.py | 46 | ||||
-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__.py | 87 | ||||
-rw-r--r-- | pygithub3/core/resources/users/emails.py | 16 | ||||
-rw-r--r-- | pygithub3/core/resources/users/followers.py | 0 | ||||
-rw-r--r-- | pygithub3/core/result.py | 14 |
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): |