mirror of
https://github.com/OpenAPITools/openapi-generator.git
synced 2025-07-04 06:30:52 +00:00
Merge pull request #806 from geekerzp/develop_2.0_python_https
[Python] Verified HTTPS with SSL/TLS cert.
This commit is contained in:
commit
496e06a373
@ -2,6 +2,8 @@
|
|||||||
import sys
|
import sys
|
||||||
import io
|
import io
|
||||||
import json
|
import json
|
||||||
|
import ssl
|
||||||
|
import certifi
|
||||||
|
|
||||||
# python 2 and python 3 compatibility library
|
# python 2 and python 3 compatibility library
|
||||||
from six import iteritems
|
from six import iteritems
|
||||||
@ -42,10 +44,30 @@ class RESTResponse(io.IOBase):
|
|||||||
class RESTClientObject(object):
|
class RESTClientObject(object):
|
||||||
|
|
||||||
def __init__(self, pools_size=4):
|
def __init__(self, pools_size=4):
|
||||||
|
# http pool manager
|
||||||
self.pool_manager = urllib3.PoolManager(
|
self.pool_manager = urllib3.PoolManager(
|
||||||
num_pools=pools_size
|
num_pools=pools_size
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# https pool manager
|
||||||
|
# certificates validated using Mozilla’s root certificates
|
||||||
|
self.ssl_pool_manager = urllib3.PoolManager(
|
||||||
|
num_pools=pools_size,
|
||||||
|
cert_reqs=ssl.CERT_REQUIRED,
|
||||||
|
ca_certs=certifi.where()
|
||||||
|
)
|
||||||
|
|
||||||
|
def agent(self, url):
|
||||||
|
"""
|
||||||
|
Return proper pool manager for the http\https schemes.
|
||||||
|
"""
|
||||||
|
url = urllib3.util.url.parse_url(url)
|
||||||
|
scheme = url.scheme
|
||||||
|
if scheme == 'https':
|
||||||
|
return self.ssl_pool_manager
|
||||||
|
else:
|
||||||
|
return self.pool_manager
|
||||||
|
|
||||||
def request(self, method, url, query_params=None, headers=None,
|
def request(self, method, url, query_params=None, headers=None,
|
||||||
body=None, post_params=None):
|
body=None, post_params=None):
|
||||||
"""
|
"""
|
||||||
@ -56,7 +78,6 @@ class RESTClientObject(object):
|
|||||||
:param body: request json body, for `application/json`
|
:param body: request json body, for `application/json`
|
||||||
:param post_params: request post parameters, `application/x-www-form-urlencode`
|
:param post_params: request post parameters, `application/x-www-form-urlencode`
|
||||||
and `multipart/form-data`
|
and `multipart/form-data`
|
||||||
:param raw_response: if return the raw response
|
|
||||||
"""
|
"""
|
||||||
method = method.upper()
|
method = method.upper()
|
||||||
assert method in ['GET', 'HEAD', 'DELETE', 'POST', 'PUT', 'PATCH']
|
assert method in ['GET', 'HEAD', 'DELETE', 'POST', 'PUT', 'PATCH']
|
||||||
@ -75,27 +96,27 @@ class RESTClientObject(object):
|
|||||||
if query_params:
|
if query_params:
|
||||||
url += '?' + urlencode(query_params)
|
url += '?' + urlencode(query_params)
|
||||||
if headers['Content-Type'] == 'application/json':
|
if headers['Content-Type'] == 'application/json':
|
||||||
r = self.pool_manager.request(method, url,
|
r = self.agent(url).request(method, url,
|
||||||
body=json.dumps(body),
|
body=json.dumps(body),
|
||||||
headers=headers)
|
headers=headers)
|
||||||
if headers['Content-Type'] == 'application/x-www-form-urlencoded':
|
if headers['Content-Type'] == 'application/x-www-form-urlencoded':
|
||||||
r = self.pool_manager.request(method, url,
|
r = self.agent(url).request(method, url,
|
||||||
fields=post_params,
|
fields=post_params,
|
||||||
encode_multipart=False,
|
encode_multipart=False,
|
||||||
headers=headers)
|
headers=headers)
|
||||||
if headers['Content-Type'] == 'multipart/form-data':
|
if headers['Content-Type'] == 'multipart/form-data':
|
||||||
# must del headers['Content-Type'], or the correct Content-Type
|
# must del headers['Content-Type'], or the correct Content-Type
|
||||||
# which generated by urllib3 will be overwritten.
|
# which generated by urllib3 will be overwritten.
|
||||||
del headers['Content-Type']
|
del headers['Content-Type']
|
||||||
r = self.pool_manager.request(method, url,
|
r = self.agent(url).request(method, url,
|
||||||
fields=post_params,
|
fields=post_params,
|
||||||
encode_multipart=True,
|
encode_multipart=True,
|
||||||
headers=headers)
|
headers=headers)
|
||||||
# For `GET`, `HEAD`, `DELETE`
|
# For `GET`, `HEAD`, `DELETE`
|
||||||
else:
|
else:
|
||||||
r = self.pool_manager.request(method, url,
|
r = self.agent(url).request(method, url,
|
||||||
fields=query_params,
|
fields=query_params,
|
||||||
headers=headers)
|
headers=headers)
|
||||||
r = RESTResponse(r)
|
r = RESTResponse(r)
|
||||||
|
|
||||||
if r.status not in range(200, 206):
|
if r.status not in range(200, 206):
|
||||||
|
@ -12,7 +12,7 @@ from setuptools import setup, find_packages
|
|||||||
# Try reading the setuptools documentation:
|
# Try reading the setuptools documentation:
|
||||||
# http://pypi.python.org/pypi/setuptools
|
# http://pypi.python.org/pypi/setuptools
|
||||||
|
|
||||||
REQUIRES = ["urllib3 >= 1.10", "six >= 1.9"]
|
REQUIRES = ["urllib3 >= 1.10", "six >= 1.9", "certifi"]
|
||||||
|
|
||||||
setup(
|
setup(
|
||||||
name="{{module}}",
|
name="{{module}}",
|
||||||
|
@ -2,6 +2,8 @@
|
|||||||
import sys
|
import sys
|
||||||
import io
|
import io
|
||||||
import json
|
import json
|
||||||
|
import ssl
|
||||||
|
import certifi
|
||||||
|
|
||||||
# python 2 and python 3 compatibility library
|
# python 2 and python 3 compatibility library
|
||||||
from six import iteritems
|
from six import iteritems
|
||||||
@ -42,10 +44,30 @@ class RESTResponse(io.IOBase):
|
|||||||
class RESTClientObject(object):
|
class RESTClientObject(object):
|
||||||
|
|
||||||
def __init__(self, pools_size=4):
|
def __init__(self, pools_size=4):
|
||||||
|
# http pool manager
|
||||||
self.pool_manager = urllib3.PoolManager(
|
self.pool_manager = urllib3.PoolManager(
|
||||||
num_pools=pools_size
|
num_pools=pools_size
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# https pool manager
|
||||||
|
# certificates validated using Mozilla’s root certificates
|
||||||
|
self.ssl_pool_manager = urllib3.PoolManager(
|
||||||
|
num_pools=pools_size,
|
||||||
|
cert_reqs=ssl.CERT_REQUIRED,
|
||||||
|
ca_certs=certifi.where()
|
||||||
|
)
|
||||||
|
|
||||||
|
def agent(self, url):
|
||||||
|
"""
|
||||||
|
Return proper pool manager for the http\https schemes.
|
||||||
|
"""
|
||||||
|
url = urllib3.util.url.parse_url(url)
|
||||||
|
scheme = url.scheme
|
||||||
|
if scheme == 'https':
|
||||||
|
return self.ssl_pool_manager
|
||||||
|
else:
|
||||||
|
return self.pool_manager
|
||||||
|
|
||||||
def request(self, method, url, query_params=None, headers=None,
|
def request(self, method, url, query_params=None, headers=None,
|
||||||
body=None, post_params=None):
|
body=None, post_params=None):
|
||||||
"""
|
"""
|
||||||
@ -56,7 +78,6 @@ class RESTClientObject(object):
|
|||||||
:param body: request json body, for `application/json`
|
:param body: request json body, for `application/json`
|
||||||
:param post_params: request post parameters, `application/x-www-form-urlencode`
|
:param post_params: request post parameters, `application/x-www-form-urlencode`
|
||||||
and `multipart/form-data`
|
and `multipart/form-data`
|
||||||
:param raw_response: if return the raw response
|
|
||||||
"""
|
"""
|
||||||
method = method.upper()
|
method = method.upper()
|
||||||
assert method in ['GET', 'HEAD', 'DELETE', 'POST', 'PUT', 'PATCH']
|
assert method in ['GET', 'HEAD', 'DELETE', 'POST', 'PUT', 'PATCH']
|
||||||
@ -75,27 +96,27 @@ class RESTClientObject(object):
|
|||||||
if query_params:
|
if query_params:
|
||||||
url += '?' + urlencode(query_params)
|
url += '?' + urlencode(query_params)
|
||||||
if headers['Content-Type'] == 'application/json':
|
if headers['Content-Type'] == 'application/json':
|
||||||
r = self.pool_manager.request(method, url,
|
r = self.agent(url).request(method, url,
|
||||||
body=json.dumps(body),
|
body=json.dumps(body),
|
||||||
headers=headers)
|
headers=headers)
|
||||||
if headers['Content-Type'] == 'application/x-www-form-urlencoded':
|
if headers['Content-Type'] == 'application/x-www-form-urlencoded':
|
||||||
r = self.pool_manager.request(method, url,
|
r = self.agent(url).request(method, url,
|
||||||
fields=post_params,
|
fields=post_params,
|
||||||
encode_multipart=False,
|
encode_multipart=False,
|
||||||
headers=headers)
|
headers=headers)
|
||||||
if headers['Content-Type'] == 'multipart/form-data':
|
if headers['Content-Type'] == 'multipart/form-data':
|
||||||
# must del headers['Content-Type'], or the correct Content-Type
|
# must del headers['Content-Type'], or the correct Content-Type
|
||||||
# which generated by urllib3 will be overwritten.
|
# which generated by urllib3 will be overwritten.
|
||||||
del headers['Content-Type']
|
del headers['Content-Type']
|
||||||
r = self.pool_manager.request(method, url,
|
r = self.agent(url).request(method, url,
|
||||||
fields=post_params,
|
fields=post_params,
|
||||||
encode_multipart=True,
|
encode_multipart=True,
|
||||||
headers=headers)
|
headers=headers)
|
||||||
# For `GET`, `HEAD`, `DELETE`
|
# For `GET`, `HEAD`, `DELETE`
|
||||||
else:
|
else:
|
||||||
r = self.pool_manager.request(method, url,
|
r = self.agent(url).request(method, url,
|
||||||
fields=query_params,
|
fields=query_params,
|
||||||
headers=headers)
|
headers=headers)
|
||||||
r = RESTResponse(r)
|
r = RESTResponse(r)
|
||||||
|
|
||||||
if r.status not in range(200, 206):
|
if r.status not in range(200, 206):
|
||||||
|
@ -12,7 +12,7 @@ from setuptools import setup, find_packages
|
|||||||
# Try reading the setuptools documentation:
|
# Try reading the setuptools documentation:
|
||||||
# http://pypi.python.org/pypi/setuptools
|
# http://pypi.python.org/pypi/setuptools
|
||||||
|
|
||||||
REQUIRES = ["urllib3 >= 1.10", "six >= 1.9"]
|
REQUIRES = ["urllib3 >= 1.10", "six >= 1.9", "certifi"]
|
||||||
|
|
||||||
setup(
|
setup(
|
||||||
name="SwaggerPetstore",
|
name="SwaggerPetstore",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user