4
4
5
5
from werkzeug .datastructures import ImmutableMultiDict , Headers
6
6
7
- from openapi_core .contrib .django .compat import (
8
- get_request_headers , get_current_scheme_host ,
9
- )
10
7
from openapi_core .validation .request .datatypes import (
11
8
RequestParameters , OpenAPIRequest ,
12
9
)
@@ -28,14 +25,40 @@ class DjangoOpenAPIRequestFactory:
28
25
29
26
path_regex = re .compile (PATH_PARAMETER_PATTERN )
30
27
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 ())
34
53
54
+ def _get_cookie (self , request ):
55
+ return ImmutableMultiDict (dict (request .COOKIES ))
56
+
57
+ def _get_full_url_pattern (self , request ):
35
58
if request .resolver_match is None :
36
59
path_pattern = request .path
37
60
else :
38
- route = cls .path_regex .sub (
61
+ route = self .path_regex .sub (
39
62
r'{\1}' , request .resolver_match .route )
40
63
# Delete start and end marker to allow concatenation.
41
64
if route [:1 ] == "^" :
@@ -44,23 +67,14 @@ def create(cls, request):
44
67
route = route [:- 1 ]
45
68
path_pattern = '/' + route
46
69
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