diff --git a/openapi_core/wrappers.py b/openapi_core/wrappers.py index 019e242d..70f986c0 100644 --- a/openapi_core/wrappers.py +++ b/openapi_core/wrappers.py @@ -1,7 +1,7 @@ """OpenAPI core wrappers module""" import warnings -from six.moves.urllib.parse import urljoin +from six.moves.urllib.parse import urljoin, urlparse, parse_qsl from werkzeug.datastructures import ImmutableMultiDict @@ -107,6 +107,45 @@ def mimetype(self): return self.request.mimetype +class RequestsOpenAPIRequest(BaseOpenAPIRequest): + def __init__(self, request): + self.request = request + self.url = urlparse(request.url) + + @property + def host_url(self): + return self.url.scheme + '://' + self.url.netloc + + @property + def path(self): + return self.url.path + + @property + def method(self): + return self.request.method.lower() + + @property + def path_pattern(self): + return self.url.path + + @property + def parameters(self): + return { + 'path': self.url.path, + 'query': ImmutableMultiDict(parse_qsl(self.url.query)), + 'headers': self.request.headers, + 'cookies': self.request.cookies, + } + + @property + def body(self): + return self.request.data + + @property + def mimetype(self): + return self.request.headers.get('content-type') + + class BaseOpenAPIResponse(object): body = NotImplemented @@ -140,3 +179,21 @@ def status_code(self): @property def mimetype(self): return self.response.mimetype + + +class RequestsOpenAPIResponse(BaseOpenAPIResponse): + + def __init__(self, response): + self.response = response + + @property + def data(self): + return self.response.text + + @property + def status_code(self): + return self.response.status_code + + @property + def mimetype(self): + return self.response.headers.get('content-type')