44
55from werkzeug .datastructures import ImmutableMultiDict , Headers
66
7- from openapi_core .contrib .django .compat import (
8- get_request_headers , get_current_scheme_host ,
9- )
107from openapi_core .validation .request .datatypes import (
118 RequestParameters , OpenAPIRequest ,
129)
@@ -28,14 +25,40 @@ class DjangoOpenAPIRequestFactory:
2825
2926 path_regex = re .compile (PATH_PARAMETER_PATTERN )
3027
31- @classmethod
32- def create (cls , request ):
33- method = request .method .lower ()
28+ def create (self , request ):
29+ return OpenAPIRequest (
30+ full_url_pattern = self ._get_full_url_pattern (request ),
31+ method = self ._get_method (request ),
32+ parameters = self ._get_parameters (request ),
33+ body = self ._get_body (request ),
34+ mimetype = self ._get_mimetype (request ),
35+ )
36+
37+ def _get_parameters (self , request ):
38+ return RequestParameters (
39+ path = self ._get_path (request ),
40+ query = self ._get_query (request ),
41+ header = self ._get_header (request ),
42+ cookie = self ._get_cookie (request ),
43+ )
44+
45+ def _get_path (self , request ):
46+ return request .resolver_match and request .resolver_match .kwargs or {}
47+
48+ def _get_query (self , request ):
49+ return ImmutableMultiDict (request .GET )
50+
51+ def _get_header (self , request ):
52+ return Headers (request .headers .items ())
3453
54+ def _get_cookie (self , request ):
55+ return ImmutableMultiDict (dict (request .COOKIES ))
56+
57+ def _get_full_url_pattern (self , request ):
3558 if request .resolver_match is None :
3659 path_pattern = request .path
3760 else :
38- route = cls .path_regex .sub (
61+ route = self .path_regex .sub (
3962 r'{\1}' , request .resolver_match .route )
4063 # Delete start and end marker to allow concatenation.
4164 if route [:1 ] == "^" :
@@ -44,23 +67,14 @@ def create(cls, request):
4467 route = route [:- 1 ]
4568 path_pattern = '/' + route
4669
47- request_headers = get_request_headers (request )
48- path = request .resolver_match and request .resolver_match .kwargs or {}
49- query = ImmutableMultiDict (request .GET )
50- header = Headers (request_headers .items ())
51- cookie = ImmutableMultiDict (dict (request .COOKIES ))
52- parameters = RequestParameters (
53- path = path ,
54- query = query ,
55- header = header ,
56- cookie = cookie ,
57- )
58- current_scheme_host = get_current_scheme_host (request )
59- full_url_pattern = urljoin (current_scheme_host , path_pattern )
60- return OpenAPIRequest (
61- full_url_pattern = full_url_pattern ,
62- method = method ,
63- parameters = parameters ,
64- body = request .body ,
65- mimetype = request .content_type ,
66- )
70+ current_scheme_host = request ._current_scheme_host
71+ return urljoin (current_scheme_host , path_pattern )
72+
73+ def _get_method (self , request ):
74+ return request .method .lower ()
75+
76+ def _get_body (self , request ):
77+ return request .body
78+
79+ def _get_mimetype (self , request ):
80+ return request .content_type
0 commit comments