From b86a15dcd07bcd8bfa19f4ab4773d21b94d4837e Mon Sep 17 00:00:00 2001 From: andyceo Date: Fri, 13 Apr 2018 16:26:50 +0300 Subject: [PATCH 1/5] Add RequestsOpenAPIRequest to wrappers.py to integrate requests python library to openapi-core --- openapi_core/wrappers.py | 45 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/openapi_core/wrappers.py b/openapi_core/wrappers.py index 019e242d..0645353e 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 from werkzeug.datastructures import ImmutableMultiDict @@ -107,6 +107,49 @@ 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 { + # List of parameters from path (url string) + 'path': [], + + # MultiDict, список параметров после ? в url + 'query': [], + + 'headers': self.request.headers, + 'cookies': self.request.cookies, + } + + @property + def body(self): + return '' + + @property + def mimetype(self): + return '' + + class BaseOpenAPIResponse(object): body = NotImplemented From 4d240066d0b4be28c767c6b68ec5814af3fee52b Mon Sep 17 00:00:00 2001 From: andyceo Date: Fri, 13 Apr 2018 16:28:48 +0300 Subject: [PATCH 2/5] Add RequestsOpenAPIResponse to wrappers.py to integrate requests python library to openapi-core --- openapi_core/wrappers.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/openapi_core/wrappers.py b/openapi_core/wrappers.py index 0645353e..9cbd665c 100644 --- a/openapi_core/wrappers.py +++ b/openapi_core/wrappers.py @@ -183,3 +183,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') From d97df1286cae7954def93f22a3264338994b5217 Mon Sep 17 00:00:00 2001 From: andyceo Date: Fri, 13 Apr 2018 16:50:16 +0300 Subject: [PATCH 3/5] Cleanup for Request object --- openapi_core/wrappers.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/openapi_core/wrappers.py b/openapi_core/wrappers.py index 9cbd665c..0f8db23e 100644 --- a/openapi_core/wrappers.py +++ b/openapi_core/wrappers.py @@ -131,12 +131,8 @@ def path_pattern(self): @property def parameters(self): return { - # List of parameters from path (url string) 'path': [], - - # MultiDict, список параметров после ? в url 'query': [], - 'headers': self.request.headers, 'cookies': self.request.cookies, } From 375aeed3260b9e2255bce45365a7ca9144c0963c Mon Sep 17 00:00:00 2001 From: andyceo Date: Tue, 17 Apr 2018 15:50:40 +0300 Subject: [PATCH 4/5] Bugfix for RequestsOpenAPIRequest.parameters(): path and query now correctly calculated from request --- openapi_core/wrappers.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/openapi_core/wrappers.py b/openapi_core/wrappers.py index 0f8db23e..b3582769 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, urlparse +from six.moves.urllib.parse import urljoin, urlparse, parse_qsl from werkzeug.datastructures import ImmutableMultiDict @@ -131,8 +131,8 @@ def path_pattern(self): @property def parameters(self): return { - 'path': [], - 'query': [], + 'path': self.url.path, + 'query': ImmutableMultiDict(parse_qsl(self.url.query)), 'headers': self.request.headers, 'cookies': self.request.cookies, } From 05a844dac167823e6cf5f6bc018f11b4a4b1a2da Mon Sep 17 00:00:00 2001 From: andyceo Date: Tue, 24 Apr 2018 20:06:50 +0300 Subject: [PATCH 5/5] Add implementation of RequestsOpenAPIRequest.body and RequestsOpenAPIRequest.mimetype properties --- openapi_core/wrappers.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openapi_core/wrappers.py b/openapi_core/wrappers.py index b3582769..70f986c0 100644 --- a/openapi_core/wrappers.py +++ b/openapi_core/wrappers.py @@ -139,11 +139,11 @@ def parameters(self): @property def body(self): - return '' + return self.request.data @property def mimetype(self): - return '' + return self.request.headers.get('content-type') class BaseOpenAPIResponse(object):