Skip to content

Commit 9b05d7b

Browse files
committed
Wrapper restructure
1 parent bd1b011 commit 9b05d7b

File tree

9 files changed

+153
-146
lines changed

9 files changed

+153
-146
lines changed

openapi_core/wrappers.py

Lines changed: 0 additions & 142 deletions
This file was deleted.

openapi_core/wrappers/__init__.py

Whitespace-only changes.

openapi_core/wrappers/base.py

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
"""OpenAPI core wrappers module"""
2+
import warnings
3+
4+
from six.moves.urllib.parse import urljoin
5+
6+
7+
class BaseOpenAPIRequest(object):
8+
9+
host_url = NotImplemented
10+
path = NotImplemented
11+
path_pattern = NotImplemented
12+
method = NotImplemented
13+
14+
parameters = NotImplemented
15+
body = NotImplemented
16+
17+
mimetype = NotImplemented
18+
19+
@property
20+
def full_url_pattern(self):
21+
return urljoin(self.host_url, self.path_pattern)
22+
23+
def get_body(self, spec):
24+
warnings.warn(
25+
"`get_body` method is deprecated. "
26+
"Use RequestValidator instead.",
27+
DeprecationWarning,
28+
)
29+
# backward compatibility
30+
from openapi_core.shortcuts import validate_body
31+
return validate_body(spec, self, wrapper_class=None)
32+
33+
def get_parameters(self, spec):
34+
warnings.warn(
35+
"`get_parameters` method is deprecated. "
36+
"Use RequestValidator instead.",
37+
DeprecationWarning,
38+
)
39+
# backward compatibility
40+
from openapi_core.shortcuts import validate_parameters
41+
return validate_parameters(spec, self, wrapper_class=None)
42+
43+
44+
class BaseOpenAPIResponse(object):
45+
46+
body = NotImplemented
47+
status_code = NotImplemented
48+
49+
mimetype = NotImplemented

openapi_core/wrappers/flask.py

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
"""OpenAPI core wrappers module"""
2+
from openapi_core.wrappers.base import BaseOpenAPIRequest, BaseOpenAPIResponse
3+
4+
5+
class FlaskOpenAPIRequest(BaseOpenAPIRequest):
6+
7+
def __init__(self, request):
8+
self.request = request
9+
10+
@property
11+
def host_url(self):
12+
return self.request.host_url
13+
14+
@property
15+
def path(self):
16+
return self.request.path
17+
18+
@property
19+
def method(self):
20+
return self.request.method.lower()
21+
22+
@property
23+
def path_pattern(self):
24+
if self.request.url_rule is None:
25+
return self.path
26+
27+
return self.request.url_rule.rule
28+
29+
@property
30+
def parameters(self):
31+
return {
32+
'path': self.request.view_args,
33+
'query': self.request.args,
34+
'headers': self.request.headers,
35+
'cookies': self.request.cookies,
36+
}
37+
38+
@property
39+
def body(self):
40+
return self.request.data
41+
42+
@property
43+
def mimetype(self):
44+
return self.request.mimetype
45+
46+
47+
class FlaskOpenAPIResponse(BaseOpenAPIResponse):
48+
49+
def __init__(self, response):
50+
self.response = response
51+
52+
@property
53+
def data(self):
54+
return self.response.data
55+
56+
@property
57+
def status_code(self):
58+
return self.response._status_code
59+
60+
@property
61+
def mimetype(self):
62+
return self.response.mimetype

openapi_core/wrappers/mock.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
"""OpenAPI core wrappers module"""
2+
from werkzeug.datastructures import ImmutableMultiDict
3+
4+
from openapi_core.wrappers.base import BaseOpenAPIRequest, BaseOpenAPIResponse
5+
6+
7+
class MockRequest(BaseOpenAPIRequest):
8+
9+
def __init__(
10+
self, host_url, method, path, path_pattern=None, args=None,
11+
view_args=None, headers=None, cookies=None, data=None,
12+
mimetype='application/json'):
13+
self.host_url = host_url
14+
self.path = path
15+
self.path_pattern = path_pattern or path
16+
self.method = method.lower()
17+
18+
self.parameters = {
19+
'path': view_args or {},
20+
'query': ImmutableMultiDict(args or []),
21+
'header': headers or {},
22+
'cookie': cookies or {},
23+
}
24+
25+
self.body = data or ''
26+
27+
self.mimetype = mimetype
28+
29+
30+
class MockResponse(BaseOpenAPIResponse):
31+
32+
def __init__(self, data, status_code=200, mimetype='application/json'):
33+
self.data = data
34+
35+
self.status_code = status_code
36+
self.mimetype = mimetype

tests/integration/test_minimal.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from openapi_core.exceptions import InvalidOperation
44
from openapi_core.shortcuts import create_spec
55
from openapi_core.validation.request.validators import RequestValidator
6-
from openapi_core.wrappers import MockRequest
6+
from openapi_core.wrappers.mock import MockRequest
77

88

99
class TestMinimal(object):

tests/integration/test_petstore.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
from openapi_core.shortcuts import create_spec
1919
from openapi_core.validation.request.validators import RequestValidator
2020
from openapi_core.validation.response.validators import ResponseValidator
21-
from openapi_core.wrappers import MockRequest, MockResponse
21+
from openapi_core.wrappers.mock import MockRequest, MockResponse
2222

2323

2424
class TestPetstore(object):

tests/integration/test_validators.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from openapi_core.shortcuts import create_spec
1010
from openapi_core.validation.request.validators import RequestValidator
1111
from openapi_core.validation.response.validators import ResponseValidator
12-
from openapi_core.wrappers import MockRequest, MockResponse
12+
from openapi_core.wrappers.mock import MockRequest, MockResponse
1313

1414

1515
class TestRequestValidator(object):

tests/integration/test_wrappers.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55
from werkzeug.routing import Map, Rule, Subdomain
66
from werkzeug.test import create_environ
77

8-
from openapi_core.wrappers import FlaskOpenAPIRequest, FlaskOpenAPIResponse
8+
from openapi_core.wrappers.flask import (
9+
FlaskOpenAPIRequest, FlaskOpenAPIResponse,
10+
)
911

1012

1113
class TestFlaskOpenAPIRequest(object):

0 commit comments

Comments
 (0)