|
5 | 5 | from werkzeug.datastructures import Headers
|
6 | 6 | from werkzeug.datastructures import ImmutableMultiDict
|
7 | 7 |
|
8 |
| -from openapi_core.validation.request.datatypes import OpenAPIRequest |
9 | 8 | from openapi_core.validation.request.datatypes import RequestParameters
|
10 | 9 |
|
11 | 10 | # https://docs.djangoproject.com/en/2.2/topics/http/urls/
|
|
21 | 20 | PATH_PARAMETER_PATTERN = r"(?:[^\/]*?)<(?:(?:.*?:))*?(\w+)>(?:[^\/]*)"
|
22 | 21 |
|
23 | 22 |
|
24 |
| -class DjangoOpenAPIRequestFactory: |
| 23 | +class DjangoOpenAPIRequest: |
25 | 24 |
|
26 | 25 | path_regex = re.compile(PATH_PARAMETER_PATTERN)
|
27 | 26 |
|
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 |
| - ) |
| 27 | + def __init__(self, request): |
| 28 | + self.request = request |
36 | 29 |
|
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), |
| 30 | + self.parameters = RequestParameters( |
| 31 | + path=self.request.resolver_match |
| 32 | + and self.request.resolver_match.kwargs |
| 33 | + or {}, |
| 34 | + query=ImmutableMultiDict(self.request.GET), |
| 35 | + header=Headers(self.request.headers.items()), |
| 36 | + cookie=ImmutableMultiDict(dict(self.request.COOKIES)), |
43 | 37 | )
|
44 | 38 |
|
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()) |
53 |
| - |
54 |
| - def _get_cookie(self, request): |
55 |
| - return ImmutableMultiDict(dict(request.COOKIES)) |
56 |
| - |
57 |
| - def _get_full_url_pattern(self, request): |
58 |
| - if request.resolver_match is None: |
59 |
| - path_pattern = request.path |
60 |
| - else: |
61 |
| - route = self.path_regex.sub(r"{\1}", request.resolver_match.route) |
62 |
| - # Delete start and end marker to allow concatenation. |
63 |
| - if route[:1] == "^": |
64 |
| - route = route[1:] |
65 |
| - if route[-1:] == "$": |
66 |
| - route = route[:-1] |
67 |
| - path_pattern = "/" + route |
68 |
| - |
69 |
| - current_scheme_host = request._current_scheme_host |
70 |
| - return urljoin(current_scheme_host, path_pattern) |
71 |
| - |
72 |
| - def _get_method(self, request): |
73 |
| - return request.method.lower() |
74 |
| - |
75 |
| - def _get_body(self, request): |
76 |
| - return request.body |
77 |
| - |
78 |
| - def _get_mimetype(self, request): |
79 |
| - return request.content_type |
| 39 | + @property |
| 40 | + def host_url(self): |
| 41 | + return self.request._current_scheme_host |
| 42 | + |
| 43 | + @property |
| 44 | + def path(self): |
| 45 | + return self.request.path |
| 46 | + |
| 47 | + @property |
| 48 | + def path_pattern(self): |
| 49 | + if self.request.resolver_match is None: |
| 50 | + return None |
| 51 | + |
| 52 | + route = self.path_regex.sub(r"{\1}", self.request.resolver_match.route) |
| 53 | + # Delete start and end marker to allow concatenation. |
| 54 | + if route[:1] == "^": |
| 55 | + route = route[1:] |
| 56 | + if route[-1:] == "$": |
| 57 | + route = route[:-1] |
| 58 | + return "/" + route |
| 59 | + |
| 60 | + @property |
| 61 | + def method(self): |
| 62 | + return self.request.method.lower() |
| 63 | + |
| 64 | + @property |
| 65 | + def body(self): |
| 66 | + return self.request.body |
| 67 | + |
| 68 | + @property |
| 69 | + def mimetype(self): |
| 70 | + return self.request.content_type |
0 commit comments