diff options
author | 2012-02-04 19:07:23 +0100 | |
---|---|---|
committer | 2012-02-04 19:07:23 +0100 | |
commit | 8a723b0815841ea9e34c148b06c0fa6529b90e33 (patch) | |
tree | 6161c4aef077d2ac9e2430d935f53e37117a0b9b /pygithub3/core/ghrequests | |
parent | Full support to Result dynamic and lazy iterator (diff) | |
download | python-github3-8a723b0815841ea9e34c148b06c0fa6529b90e33.tar.xz python-github3-8a723b0815841ea9e34c148b06c0fa6529b90e33.zip |
Renaming (What I was thinking?)
resources => ghrequests
models => resources
+ Also it's near to complete user service
Diffstat (limited to 'pygithub3/core/ghrequests')
-rw-r--r-- | pygithub3/core/ghrequests/__init__.py | 99 | ||||
-rw-r--r-- | pygithub3/core/ghrequests/users/__init__.py | 4 | ||||
-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 | 0 | ||||
-rw-r--r-- | pygithub3/core/ghrequests/users/user.py | 25 |
6 files changed, 216 insertions, 0 deletions
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/ghrequests/users/__init__.py b/pygithub3/core/ghrequests/users/__init__.py new file mode 100644 index 0000000..08986f6 --- /dev/null +++ b/pygithub3/core/ghrequests/users/__init__.py @@ -0,0 +1,4 @@ +# -*- encoding: utf-8 -*- + +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/ghrequests/users/keys.py b/pygithub3/core/ghrequests/users/keys.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/pygithub3/core/ghrequests/users/keys.py diff --git a/pygithub3/core/ghrequests/users/user.py b/pygithub3/core/ghrequests/users/user.py new file mode 100644 index 0000000..18a356e --- /dev/null +++ b/pygithub3/core/ghrequests/users/user.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python +# -*- encoding: utf-8 -*- + +from . import Request +from pygithub3.resources.users import User + +__all__ = ('Get', 'Update') + + +class Get(Request): + + resource = User + + def validate(self): + pass + + def set_uri(self): + if self.user: + return 'users/%s' % self.user + else: + return 'user' + + +class Update(Request): + pass |