[Python] remove singleton (#5012)

* updated tests relying on configuration's singleton

* regenerated samples

* removed singleton from templates

* regenerated samples

* removed broken sample and its test

* reverted accidental change

* regenerated security/ samples

* removed singleton from RESTClientObject

* removed unused Configuration import

* reverted unrelated change

* updated usage examples in api_doc template
This commit is contained in:
baartosz
2017-03-22 14:25:46 +00:00
committed by wing328
parent bea9e265e9
commit 8b891be7d7
30 changed files with 171 additions and 298 deletions

View File

@@ -21,7 +21,6 @@ from .models.api_response import ApiResponse
from .models.array_of_array_of_number_only import ArrayOfArrayOfNumberOnly
from .models.array_of_number_only import ArrayOfNumberOnly
from .models.array_test import ArrayTest
from .models.capitalization import Capitalization
from .models.cat import Cat
from .models.category import Category
from .models.class_model import ClassModel
@@ -49,7 +48,7 @@ from .models.user import User
# import apis into sdk package
from .apis.fake_api import FakeApi
from .apis.fake_classname_tags_123_api import FakeClassnameTags123Api
from .apis.fake_classname_tags123_api import FakeClassnameTags123Api
from .apis.pet_api import PetApi
from .apis.store_api import StoreApi
from .apis.user_api import UserApi
@@ -58,5 +57,3 @@ from .apis.user_api import UserApi
from .api_client import ApiClient
from .configuration import Configuration
configuration = Configuration()

View File

@@ -59,18 +59,15 @@ class ApiClient(object):
'object': object,
}
def __init__(self, host=None, header_name=None, header_value=None, cookie=None):
"""
Constructor of the class.
"""
self.rest_client = RESTClientObject()
def __init__(self, configuration=None, header_name=None, header_value=None, cookie=None):
if configuration is None:
configuration = Configuration()
self.configuration = configuration
self.rest_client = RESTClientObject(configuration)
self.default_headers = {}
if header_name is not None:
self.default_headers[header_name] = header_value
if host is None:
self.host = Configuration().host
else:
self.host = host
self.cookie = cookie
# Set default User-Agent.
self.user_agent = 'Swagger-Codegen/1.0.0/python'
@@ -139,7 +136,7 @@ class ApiClient(object):
body = self.sanitize_for_serialization(body)
# request url
url = self.host + resource_path
url = self.configuration.host + resource_path
# perform request and return response
response_data = self.request(method, url,
@@ -496,13 +493,11 @@ class ApiClient(object):
:param querys: Query parameters tuple list to be updated.
:param auth_settings: Authentication setting identifiers list.
"""
config = Configuration()
if not auth_settings:
return
for auth in auth_settings:
auth_setting = config.auth_settings().get(auth)
auth_setting = self.configuration.auth_settings().get(auth)
if auth_setting:
if not auth_setting['value']:
continue
@@ -523,9 +518,7 @@ class ApiClient(object):
:param response: RESTResponse.
:return: file path.
"""
config = Configuration()
fd, path = tempfile.mkstemp(dir=config.temp_folder_path)
fd, path = tempfile.mkstemp(dir=self.configuration.temp_folder_path)
os.close(fd)
os.remove(path)

View File

@@ -2,7 +2,7 @@ from __future__ import absolute_import
# import apis into api package
from .fake_api import FakeApi
from .fake_classname_tags_123_api import FakeClassnameTags123Api
from .fake_classname_tags123_api import FakeClassnameTags123Api
from .pet_api import PetApi
from .store_api import StoreApi
from .user_api import UserApi

View File

@@ -20,7 +20,6 @@ import re
# python 2 and python 3 compatibility library
from six import iteritems
from ..configuration import Configuration
from ..api_client import ApiClient
@@ -32,13 +31,9 @@ class FakeApi(object):
"""
def __init__(self, api_client=None):
config = Configuration()
if api_client:
self.api_client = api_client
else:
if not config.api_client:
config.api_client = ApiClient()
self.api_client = config.api_client
if api_client is None:
api_client = ApiClient()
self.api_client = api_client
def test_client_model(self, body, **kwargs):
"""

View File

@@ -20,7 +20,6 @@ import re
# python 2 and python 3 compatibility library
from six import iteritems
from ..configuration import Configuration
from ..api_client import ApiClient
@@ -32,13 +31,9 @@ class FakeClassnameTags123Api(object):
"""
def __init__(self, api_client=None):
config = Configuration()
if api_client:
self.api_client = api_client
else:
if not config.api_client:
config.api_client = ApiClient()
self.api_client = config.api_client
if api_client is None:
api_client = ApiClient()
self.api_client = api_client
def test_classname(self, body, **kwargs):
"""
@@ -106,6 +101,7 @@ class FakeClassnameTags123Api(object):
collection_formats = {}
resource_path = '/fake_classname_test'.replace('{format}', 'json')
path_params = {}
query_params = {}
@@ -129,7 +125,7 @@ class FakeClassnameTags123Api(object):
# Authentication setting
auth_settings = []
return self.api_client.call_api('/fake_classname_test', 'PATCH',
return self.api_client.call_api(resource_path, 'PATCH',
path_params,
query_params,
header_params,

View File

@@ -20,7 +20,6 @@ import re
# python 2 and python 3 compatibility library
from six import iteritems
from ..configuration import Configuration
from ..api_client import ApiClient
@@ -32,13 +31,9 @@ class PetApi(object):
"""
def __init__(self, api_client=None):
config = Configuration()
if api_client:
self.api_client = api_client
else:
if not config.api_client:
config.api_client = ApiClient()
self.api_client = config.api_client
if api_client is None:
api_client = ApiClient()
self.api_client = api_client
def add_pet(self, body, **kwargs):
"""

View File

@@ -20,7 +20,6 @@ import re
# python 2 and python 3 compatibility library
from six import iteritems
from ..configuration import Configuration
from ..api_client import ApiClient
@@ -32,13 +31,9 @@ class StoreApi(object):
"""
def __init__(self, api_client=None):
config = Configuration()
if api_client:
self.api_client = api_client
else:
if not config.api_client:
config.api_client = ApiClient()
self.api_client = config.api_client
if api_client is None:
api_client = ApiClient()
self.api_client = api_client
def delete_order(self, order_id, **kwargs):
"""
@@ -105,6 +100,8 @@ class StoreApi(object):
if ('order_id' not in params) or (params['order_id'] is None):
raise ValueError("Missing the required parameter `order_id` when calling `delete_order`")
if 'order_id' in params and params['order_id'] < 1.0:
raise ValueError("Invalid value for parameter `order_id` when calling `delete_order`, must be a value greater than or equal to `1.0`")
collection_formats = {}

View File

@@ -20,7 +20,6 @@ import re
# python 2 and python 3 compatibility library
from six import iteritems
from ..configuration import Configuration
from ..api_client import ApiClient
@@ -32,13 +31,9 @@ class UserApi(object):
"""
def __init__(self, api_client=None):
config = Configuration()
if api_client:
self.api_client = api_client
else:
if not config.api_client:
config.api_client = ApiClient()
self.api_client = config.api_client
if api_client is None:
api_client = ApiClient()
self.api_client = api_client
def create_user(self, body, **kwargs):
"""

View File

@@ -22,17 +22,6 @@ from six import iteritems
from six.moves import http_client as httplib
def singleton(cls, *args, **kw):
instances = {}
def _singleton():
if cls not in instances:
instances[cls] = cls(*args, **kw)
return instances[cls]
return _singleton
@singleton
class Configuration(object):
"""
NOTE: This class is auto generated by the swagger code generator program.
@@ -46,8 +35,7 @@ class Configuration(object):
"""
# Default Base url
self.host = "http://petstore.swagger.io/v2"
# Default api client
self.api_client = None
# Temp file folder for downloading files
self.temp_folder_path = None

View File

@@ -21,7 +21,6 @@ from .api_response import ApiResponse
from .array_of_array_of_number_only import ArrayOfArrayOfNumberOnly
from .array_of_number_only import ArrayOfNumberOnly
from .array_test import ArrayTest
from .capitalization import Capitalization
from .cat import Cat
from .category import Category
from .class_model import ClassModel

View File

@@ -24,8 +24,6 @@ import re
from six import PY3
from six.moves.urllib.parse import urlencode
from .configuration import Configuration
try:
import urllib3
except ImportError:
@@ -58,7 +56,7 @@ class RESTResponse(io.IOBase):
class RESTClientObject(object):
def __init__(self, pools_size=4, maxsize=4):
def __init__(self, configuration, pools_size=4, maxsize=4):
# urllib3.PoolManager will pass all kw parameters to connectionpool
# https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/poolmanager.py#L75
# https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/connectionpool.py#L680
@@ -67,37 +65,28 @@ class RESTClientObject(object):
# http://stackoverflow.com/a/23957365/2985775
# cert_reqs
if Configuration().verify_ssl:
if configuration.verify_ssl:
cert_reqs = ssl.CERT_REQUIRED
else:
cert_reqs = ssl.CERT_NONE
# ca_certs
if Configuration().ssl_ca_cert:
ca_certs = Configuration().ssl_ca_cert
if configuration.ssl_ca_cert:
ca_certs = configuration.ssl_ca_cert
else:
# if not set certificate file, use Mozilla's root certificates.
ca_certs = certifi.where()
# cert_file
cert_file = Configuration().cert_file
# key file
key_file = Configuration().key_file
# proxy
proxy = Configuration().proxy
# https pool manager
if proxy:
if configuration.proxy:
self.pool_manager = urllib3.ProxyManager(
num_pools=pools_size,
maxsize=maxsize,
cert_reqs=cert_reqs,
ca_certs=ca_certs,
cert_file=cert_file,
key_file=key_file,
proxy_url=proxy
cert_file=configuration.cert_file,
key_file=configuration.key_file,
proxy_url=configuration.proxy
)
else:
self.pool_manager = urllib3.PoolManager(
@@ -105,11 +94,10 @@ class RESTClientObject(object):
maxsize=maxsize,
cert_reqs=cert_reqs,
ca_certs=ca_certs,
cert_file=cert_file,
key_file=key_file
cert_file=configuration.cert_file,
key_file=configuration.key_file
)
def request(self, method, url, query_params=None, headers=None,
body=None, post_params=None, _preload_content=True, _request_timeout=None):
"""