aboutsummaryrefslogtreecommitdiffstats
path: root/pygithub3/requests
diff options
context:
space:
mode:
authorDavid Medina <davidmedina9@gmail.com>2012-02-06 20:19:42 +0100
committerDavid Medina <davidmedina9@gmail.com>2012-02-06 20:19:42 +0100
commit29d7c5641ce8a4099e23f50e965f1c483e993f39 (patch)
tree17c3e03c153beea88f213e3ae2fde80d4a67a473 /pygithub3/requests
parentUser service complete (diff)
downloadpython-github3-29d7c5641ce8a4099e23f50e965f1c483e993f39.tar.xz
python-github3-29d7c5641ce8a4099e23f50e965f1c483e993f39.zip
Rename ghrequest to requests
I think it's a redundant name. Only needs to move out from core module to avoid imports problems with `requests` library * Also change some in setup.py
Diffstat (limited to 'pygithub3/requests')
-rw-r--r--pygithub3/requests/__init__.py117
-rw-r--r--pygithub3/requests/users/__init__.py4
-rw-r--r--pygithub3/requests/users/emails.py44
-rw-r--r--pygithub3/requests/users/followers.py76
-rw-r--r--pygithub3/requests/users/keys.py79
-rw-r--r--pygithub3/requests/users/user.py36
6 files changed, 356 insertions, 0 deletions
diff --git a/pygithub3/requests/__init__.py b/pygithub3/requests/__init__.py
new file mode 100644
index 0000000..725ea12
--- /dev/null
+++ b/pygithub3/requests/__init__.py
@@ -0,0 +1,117 @@
+#!/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.requests'
+
+
+class RequestNotFound(Exception):
+ pass
+
+
+class RequestUriInvalid(Exception):
+ pass
+
+
+class RequestValidationError(Exception):
+ pass
+
+
+class Request(object):
+ """ """
+
+ def __init__(self, args):
+ """ """
+ self.args = args
+ self.validate()
+ self.uri = self.set_uri()
+
+ def validate(self):
+ raise NotImplementedError
+
+ def set_uri(self):
+ raise NotImplementedError
+
+ def get_data(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()
+
+ def _parse_simple_dict(self, to_parse):
+ if not hasattr(to_parse, 'items'):
+ raise RequestValidationError("'%s' needs a data dictionary"
+ % self.__class__.__name__)
+ update_params = {
+ valid_key: to_parse[valid_key]
+ for valid_key in self.valid
+ if valid_key in to_parse}
+ return update_params
+
+
+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)
+ self.clear_config()
+ assert isinstance(request, Request)
+ return request
diff --git a/pygithub3/requests/users/__init__.py b/pygithub3/requests/users/__init__.py
new file mode 100644
index 0000000..93ab7b6
--- /dev/null
+++ b/pygithub3/requests/users/__init__.py
@@ -0,0 +1,4 @@
+# -*- encoding: utf-8 -*-
+
+from pygithub3.requests import Request, json, RequestValidationError
+from user import *
diff --git a/pygithub3/requests/users/emails.py b/pygithub3/requests/users/emails.py
new file mode 100644
index 0000000..f7fb284
--- /dev/null
+++ b/pygithub3/requests/users/emails.py
@@ -0,0 +1,44 @@
+#!/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/requests/users/followers.py b/pygithub3/requests/users/followers.py
new file mode 100644
index 0000000..f2bfc1a
--- /dev/null
+++ b/pygithub3/requests/users/followers.py
@@ -0,0 +1,76 @@
+#!/usr/bin/env python
+# -*- encoding: utf-8 -*-
+
+from . import Request, RequestValidationError
+from pygithub3.resources.users import User
+from pygithub3.resources.base import Raw
+
+
+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 Isfollowing(Request):
+
+ resource = Raw
+
+ def validate(self):
+ if not self.user:
+ raise RequestValidationError(
+ "'%s' request needs a user" % self.__class__.__name__)
+
+ def set_uri(self):
+ return 'user/following/%s' % self.user
+
+
+class Follow(Request):
+
+ resource = Raw
+
+ def validate(self):
+ if not self.user:
+ raise RequestValidationError(
+ "'%s' request needs a user" % self.__class__.__name__)
+
+ def set_uri(self):
+ return 'user/following/%s' % self.user
+
+
+class Unfollow(Request):
+
+ resource = User
+
+ def validate(self):
+ if not self.user:
+ raise RequestValidationError(
+ "'%s' request needs a user" % self.__class__.__name__)
+
+ def set_uri(self):
+ return 'user/following/%s' % self.user
+
+ def get_data(self):
+ pass
diff --git a/pygithub3/requests/users/keys.py b/pygithub3/requests/users/keys.py
new file mode 100644
index 0000000..f5bb386
--- /dev/null
+++ b/pygithub3/requests/users/keys.py
@@ -0,0 +1,79 @@
+#!/usr/bin/env python
+# -*- encoding: utf-8 -*-
+
+from . import Request, json, RequestValidationError
+from pygithub3.resources.users import Key
+from pygithub3.resources.base import Raw
+
+
+class List(Request):
+
+ resource = Key
+
+ def validate(self):
+ pass
+
+ def set_uri(self):
+ return 'user/keys'
+
+
+class Get(Request):
+
+ resource = Key
+
+ def validate(self):
+ if not self.key_id:
+ raise RequestValidationError("'%s' needs key_id"
+ % self.__class__.__name__)
+
+ def set_uri(self):
+ return 'user/keys/%s' % self.key_id
+
+
+class Add(Request):
+
+ resource = Key
+ valid = ('title', 'key')
+
+ def validate(self):
+ self.add_data = self._parse_simple_dict(self.add_data)
+
+ def set_uri(self):
+ return 'user/keys'
+
+ def get_data(self):
+ return json.dumps(self.add_data)
+
+
+class Update(Request):
+
+ resource = Key
+ valid = ('title', 'key')
+
+ def validate(self):
+ if not self.key_id:
+ raise RequestValidationError("'%s' needs key_id"
+ % self.__class__.__name__)
+ self.update_params = self._parse_simple_dict(self.update_with)
+
+ def set_uri(self):
+ return 'user/keys/%s' % self.key_id
+
+ def get_data(self):
+ return json.dumps(self.update_params)
+
+
+class Delete(Request):
+
+ resource = Raw
+
+ def validate(self):
+ if not self.key_id:
+ raise RequestValidationError("'%s' needs key_id"
+ % self.__class__.__name__)
+
+ def set_uri(self):
+ return 'user/keys/%s' % self.key_id
+
+ def get_data(self):
+ return None
diff --git a/pygithub3/requests/users/user.py b/pygithub3/requests/users/user.py
new file mode 100644
index 0000000..d4b3667
--- /dev/null
+++ b/pygithub3/requests/users/user.py
@@ -0,0 +1,36 @@
+#!/usr/bin/env python
+# -*- encoding: utf-8 -*-
+
+from . import Request, json
+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):
+
+ resource = User
+ valid = ('name', 'email', 'blog', 'company', 'location', 'hireable', 'bio')
+
+ def validate(self):
+ self.update_params = self._parse_simple_dict(self.update_with)
+
+ def get_data(self):
+ return json.dumps(self.update_params)
+
+ def set_uri(self):
+ return 'user'