22# -*- encoding: utf-8 -*-
33
44import re
5- try :
6- import simplejson as json
7- except ImportError :
8- import json
95
10- from pygithub3 .exceptions import (DoesNotExists , UriInvalid , ValidationError ,
11- InvalidBodySchema )
6+ from pygithub3 .core .utils import import_module , json
7+ from pygithub3 .exceptions import (RequestDoesNotExist , UriInvalid ,
8+ ValidationError , InvalidBodySchema )
129from pygithub3 .resources .base import Raw
13- from pygithub3 .core .utils import import_module
1410
1511ABS_IMPORT_PREFIX = 'pygithub3.requests'
1612
1713
1814class Body (object ):
15+ """ Input's request handler """
1916
2017 def __init__ (self , content , schema , required ):
2118 self .content = content
@@ -28,6 +25,7 @@ def dumps(self):
2825 return json .dumps (self .parse ())
2926
3027 def parse (self ):
28+ """ Parse body with schema-required rules """
3129 if not hasattr (self .content , 'items' ):
3230 raise ValidationError ("'%s' needs a content dictionary"
3331 % self .__class__ .__name__ )
@@ -44,29 +42,42 @@ def parse(self):
4442
4543
4644class Request (object ):
47- """ """
4845
4946 uri = ''
5047 resource = Raw
5148 body_schema = {}
5249
5350 def __init__ (self , ** kwargs ):
54- """ """
55- self .body = kwargs .pop ('body' , None )
51+ self .body = kwargs .pop ('body' , {})
5652 self .args = kwargs
5753 self .clean ()
5854
55+ def __getattr__ (self , name ):
56+ return self .args .get (name )
57+
58+ def __str__ (self ):
59+ return self .populate_uri ()
60+
61+ def populate_uri (self ):
62+ try :
63+ populated_uri = self .uri .format (** self .args )
64+ except KeyError :
65+ raise ValidationError (
66+ "'%s' request wasn't be able to populate the uri '%s' with "
67+ "'%s' args" % (self .__class__ .__name__ , self .uri , self .args ))
68+ return str (populated_uri ).strip ('/' )
69+
5970 def clean (self ):
6071 self .uri = self .clean_uri () or self .uri
61- self .body = Body (self .clean_body (), ** self .clean_valid_body ())
72+ self .body = Body (self .clean_body (), ** self ._clean_valid_body ())
6273
6374 def clean_body (self ):
6475 return self .body
6576
6677 def clean_uri (self ):
6778 return None
6879
69- def clean_valid_body (self ):
80+ def _clean_valid_body (self ):
7081 schema = set (self .body_schema .get ('schema' , ()))
7182 required = set (self .body_schema .get ('required' , ()))
7283 if not required .issubset (schema ):
@@ -76,21 +87,6 @@ def clean_valid_body(self):
7687 self .__class__ .__name__ , required , schema ))
7788 return dict (schema = schema , required = required )
7889
79- def __getattr__ (self , name ):
80- return self .args .get (name )
81-
82- def __str__ (self ):
83- return self .populate_uri ()
84-
85- def populate_uri (self ):
86- try :
87- populated_uri = self .uri .format (** self .args )
88- except KeyError :
89- raise ValidationError (
90- "'%s' request wasn't be able to populate the uri '%s' with "
91- "'%s' args" % (self .__class__ .__name__ , self .uri , self .args ))
92- return str (populated_uri ).strip ('/' )
93-
9490 def get_body (self ):
9591 return self .body .dumps ()
9692
@@ -110,28 +106,21 @@ def wrapper(self, request_uri, **kwargs):
110106 return func (self , request_uri .lower (), ** kwargs )
111107 return wrapper
112108
113- def dispatch (func ):
114- def wrapper (self , request_uri , ** kwargs ):
115- module_chunk , s , request_chunk = request_uri .rpartition ('.' )
116- request_chunk = request_chunk .capitalize ()
117- try :
118- # TODO: CamelCase and under_score support, now only Class Name
119- module = import_module ('%s.%s'
120- % (ABS_IMPORT_PREFIX , module_chunk ))
121- request = getattr (module , request_chunk )
122- except ImportError :
123- raise DoesNotExists ("'%s' module does not exists"
124- % module_chunk )
125- except AttributeError :
126- raise DoesNotExists (
127- "'%s' request doesn't exists into '%s' module"
128- % (request_chunk , module_chunk ))
129- return func (self , request , ** kwargs )
130- return wrapper
131-
132109 @validate
133- @dispatch
134- def __call__ (self , request = '' , ** kwargs ):
135- request = request (** kwargs )
136- assert isinstance (request , Request )
137- return request
110+ def __call__ (self , request_uri , ** kwargs ):
111+ module_chunk , s , request_chunk = request_uri .rpartition ('.' )
112+ request_chunk = request_chunk .capitalize ()
113+ try :
114+ # TODO: CamelCase and under_score support, now only Class Name
115+ module = import_module ('%s.%s' % (ABS_IMPORT_PREFIX , module_chunk ))
116+ request_class = getattr (module , request_chunk )
117+ request = request_class (** kwargs )
118+ assert isinstance (request , Request )
119+ return request
120+ except ImportError :
121+ raise RequestDoesNotExist ("'%s' module does not exist"
122+ % module_chunk )
123+ except AttributeError :
124+ raise RequestDoesNotExist ("'%s' request does not exist in "
125+ "'%s' module" % (request_chunk ,
126+ module_chunk ))
0 commit comments