forked from loafle/openapi-generator-original
Merge branch '2.3.0' of https://github.com/swagger-api/swagger-codegen into 2.3.0
This commit is contained in:
commit
bf7a2b22cd
@ -14,5 +14,3 @@ from __future__ import absolute_import
|
||||
from .api_client import ApiClient
|
||||
|
||||
from .configuration import Configuration
|
||||
|
||||
configuration = Configuration()
|
||||
|
@ -11,7 +11,6 @@ import re
|
||||
# python 2 and python 3 compatibility library
|
||||
from six import iteritems
|
||||
|
||||
from ..configuration import Configuration
|
||||
from ..api_client import ApiClient
|
||||
|
||||
|
||||
@ -24,13 +23,9 @@ class {{classname}}(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
|
||||
{{#operation}}
|
||||
|
||||
def {{operationId}}(self, {{#sortParamsByRequiredFlag}}{{#allParams}}{{#required}}{{paramName}}, {{/required}}{{/allParams}}{{/sortParamsByRequiredFlag}}**kwargs):
|
||||
|
@ -50,18 +50,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 = '{{#httpUserAgent}}{{{.}}}{{/httpUserAgent}}{{^httpUserAgent}}Swagger-Codegen/{{{packageVersion}}}/python{{/httpUserAgent}}'
|
||||
@ -130,7 +127,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,
|
||||
@ -487,13 +484,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
|
||||
@ -514,9 +509,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)
|
||||
|
||||
|
@ -26,20 +26,30 @@ from {{{packageName}}}.rest import ApiException
|
||||
from pprint import pprint
|
||||
{{#hasAuthMethods}}{{#authMethods}}{{#isBasic}}
|
||||
# Configure HTTP basic authorization: {{{name}}}
|
||||
{{{packageName}}}.configuration.username = 'YOUR_USERNAME'
|
||||
{{{packageName}}}.configuration.password = 'YOUR_PASSWORD'{{/isBasic}}{{#isApiKey}}
|
||||
configuration = {{{packageName}}}.Configuration()
|
||||
configuration.username = 'YOUR_USERNAME'
|
||||
configuration.password = 'YOUR_PASSWORD'{{/isBasic}}{{#isApiKey}}
|
||||
# Configure API key authorization: {{{name}}}
|
||||
{{{packageName}}}.configuration.api_key['{{{keyParamName}}}'] = 'YOUR_API_KEY'
|
||||
configuration = {{{packageName}}}.Configuration()
|
||||
configuration.api_key['{{{keyParamName}}}'] = 'YOUR_API_KEY'
|
||||
# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed
|
||||
# {{{packageName}}}.configuration.api_key_prefix['{{{keyParamName}}}'] = 'Bearer'{{/isApiKey}}{{#isOAuth}}
|
||||
# configuration.api_key_prefix['{{{keyParamName}}}'] = 'Bearer'{{/isApiKey}}{{#isOAuth}}
|
||||
# Configure OAuth2 access token for authorization: {{{name}}}
|
||||
{{{packageName}}}.configuration.access_token = 'YOUR_ACCESS_TOKEN'{{/isOAuth}}{{/authMethods}}
|
||||
configuration = {{{packageName}}}.Configuration()
|
||||
configuration.access_token = 'YOUR_ACCESS_TOKEN'{{/isOAuth}}{{/authMethods}}
|
||||
|
||||
# create an instance of the API class
|
||||
api_instance = {{{packageName}}}.{{{classname}}}({{{packageName}}}.ApiClient(configuration))
|
||||
{{#allParams}}{{paramName}} = {{{example}}} # {{{dataType}}} | {{{description}}}{{^required}} (optional){{/required}}{{#defaultValue}} (default to {{{.}}}){{/defaultValue}}
|
||||
{{/allParams}}
|
||||
{{/hasAuthMethods}}
|
||||
{{^hasAuthMethods}}
|
||||
|
||||
# create an instance of the API class
|
||||
api_instance = {{{packageName}}}.{{{classname}}}()
|
||||
{{#allParams}}{{paramName}} = {{{example}}} # {{{dataType}}} | {{{description}}}{{^required}} (optional){{/required}}{{#defaultValue}} (default to {{{.}}}){{/defaultValue}}
|
||||
{{/allParams}}
|
||||
{{/hasAuthMethods}}
|
||||
|
||||
try:
|
||||
{{#summary}} # {{{.}}}
|
||||
|
@ -13,17 +13,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.
|
||||
@ -37,8 +26,6 @@ class Configuration(object):
|
||||
"""
|
||||
# Default Base url
|
||||
self.host = "{{{basePath}}}"
|
||||
# Default api client
|
||||
self.api_client = None
|
||||
# Temp file folder for downloading files
|
||||
self.temp_folder_path = None
|
||||
|
||||
|
@ -42,7 +42,7 @@ class {{classname}}(object):
|
||||
def {{name}}(self):
|
||||
"""
|
||||
Gets the {{name}} of this {{classname}}.
|
||||
{{#description}}
|
||||
{{#description}}
|
||||
{{{description}}}
|
||||
{{/description}}
|
||||
|
||||
|
@ -15,8 +15,6 @@ import re
|
||||
from six import PY3
|
||||
from six.moves.urllib.parse import urlencode
|
||||
|
||||
from .configuration import Configuration
|
||||
|
||||
try:
|
||||
import urllib3
|
||||
except ImportError:
|
||||
@ -49,7 +47,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
|
||||
@ -58,37 +56,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(
|
||||
@ -96,11 +85,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):
|
||||
"""
|
||||
|
@ -23,5 +23,3 @@ from .apis.fake_api import FakeApi
|
||||
from .api_client import ApiClient
|
||||
|
||||
from .configuration import Configuration
|
||||
|
||||
configuration = Configuration()
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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_code_inject____end__rn_n_r(self, **kwargs):
|
||||
"""
|
||||
|
@ -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 = "https://petstore.swagger.io */ ' \" =end -- \\r\\n \\n \\r/v2 */ ' \" =end -- \\r\\n \\n \\r"
|
||||
# Default api client
|
||||
self.api_client = None
|
||||
|
||||
# Temp file folder for downloading files
|
||||
self.temp_folder_path = None
|
||||
|
||||
|
@ -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,19 +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
|
||||
)
|
||||
|
||||
# https pool manager
|
||||
self.pool_manager = urllib3.PoolManager(
|
||||
num_pools=pools_size,
|
||||
cert_reqs=cert_reqs,
|
||||
ca_certs=ca_certs,
|
||||
cert_file=cert_file,
|
||||
key_file=key_file
|
||||
)
|
||||
|
||||
def request(self, method, url, query_params=None, headers=None,
|
||||
body=None, post_params=None, _preload_content=True, _request_timeout=None):
|
||||
"""
|
||||
|
@ -104,7 +104,6 @@ Class | Method | HTTP request | Description
|
||||
- [ArrayOfArrayOfNumberOnly](docs/ArrayOfArrayOfNumberOnly.md)
|
||||
- [ArrayOfNumberOnly](docs/ArrayOfNumberOnly.md)
|
||||
- [ArrayTest](docs/ArrayTest.md)
|
||||
- [Capitalization](docs/Capitalization.md)
|
||||
- [Cat](docs/Cat.md)
|
||||
- [Category](docs/Category.md)
|
||||
- [ClassModel](docs/ClassModel.md)
|
||||
|
@ -73,11 +73,12 @@ from petstore_api.rest import ApiException
|
||||
from pprint import pprint
|
||||
|
||||
# Configure HTTP basic authorization: http_basic_test
|
||||
petstore_api.configuration.username = 'YOUR_USERNAME'
|
||||
petstore_api.configuration.password = 'YOUR_PASSWORD'
|
||||
configuration = petstore_api.Configuration()
|
||||
configuration.username = 'YOUR_USERNAME'
|
||||
configuration.password = 'YOUR_PASSWORD'
|
||||
|
||||
# create an instance of the API class
|
||||
api_instance = petstore_api.FakeApi()
|
||||
api_instance = petstore_api.FakeApi(petstore_api.ApiClient(configuration))
|
||||
number = 3.4 # float | None
|
||||
double = 1.2 # float | None
|
||||
pattern_without_delimiter = 'pattern_without_delimiter_example' # str | None
|
||||
|
@ -30,10 +30,11 @@ from petstore_api.rest import ApiException
|
||||
from pprint import pprint
|
||||
|
||||
# Configure OAuth2 access token for authorization: petstore_auth
|
||||
petstore_api.configuration.access_token = 'YOUR_ACCESS_TOKEN'
|
||||
configuration = petstore_api.Configuration()
|
||||
configuration.access_token = 'YOUR_ACCESS_TOKEN'
|
||||
|
||||
# create an instance of the API class
|
||||
api_instance = petstore_api.PetApi()
|
||||
api_instance = petstore_api.PetApi(petstore_api.ApiClient(configuration))
|
||||
body = petstore_api.Pet() # Pet | Pet object that needs to be added to the store
|
||||
|
||||
try:
|
||||
@ -80,10 +81,11 @@ from petstore_api.rest import ApiException
|
||||
from pprint import pprint
|
||||
|
||||
# Configure OAuth2 access token for authorization: petstore_auth
|
||||
petstore_api.configuration.access_token = 'YOUR_ACCESS_TOKEN'
|
||||
configuration = petstore_api.Configuration()
|
||||
configuration.access_token = 'YOUR_ACCESS_TOKEN'
|
||||
|
||||
# create an instance of the API class
|
||||
api_instance = petstore_api.PetApi()
|
||||
api_instance = petstore_api.PetApi(petstore_api.ApiClient(configuration))
|
||||
pet_id = 789 # int | Pet id to delete
|
||||
api_key = 'api_key_example' # str | (optional)
|
||||
|
||||
@ -132,10 +134,11 @@ from petstore_api.rest import ApiException
|
||||
from pprint import pprint
|
||||
|
||||
# Configure OAuth2 access token for authorization: petstore_auth
|
||||
petstore_api.configuration.access_token = 'YOUR_ACCESS_TOKEN'
|
||||
configuration = petstore_api.Configuration()
|
||||
configuration.access_token = 'YOUR_ACCESS_TOKEN'
|
||||
|
||||
# create an instance of the API class
|
||||
api_instance = petstore_api.PetApi()
|
||||
api_instance = petstore_api.PetApi(petstore_api.ApiClient(configuration))
|
||||
status = ['status_example'] # list[str] | Status values that need to be considered for filter
|
||||
|
||||
try:
|
||||
@ -183,10 +186,11 @@ from petstore_api.rest import ApiException
|
||||
from pprint import pprint
|
||||
|
||||
# Configure OAuth2 access token for authorization: petstore_auth
|
||||
petstore_api.configuration.access_token = 'YOUR_ACCESS_TOKEN'
|
||||
configuration = petstore_api.Configuration()
|
||||
configuration.access_token = 'YOUR_ACCESS_TOKEN'
|
||||
|
||||
# create an instance of the API class
|
||||
api_instance = petstore_api.PetApi()
|
||||
api_instance = petstore_api.PetApi(petstore_api.ApiClient(configuration))
|
||||
tags = ['tags_example'] # list[str] | Tags to filter by
|
||||
|
||||
try:
|
||||
@ -234,12 +238,13 @@ from petstore_api.rest import ApiException
|
||||
from pprint import pprint
|
||||
|
||||
# Configure API key authorization: api_key
|
||||
petstore_api.configuration.api_key['api_key'] = 'YOUR_API_KEY'
|
||||
configuration = petstore_api.Configuration()
|
||||
configuration.api_key['api_key'] = 'YOUR_API_KEY'
|
||||
# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed
|
||||
# petstore_api.configuration.api_key_prefix['api_key'] = 'Bearer'
|
||||
# configuration.api_key_prefix['api_key'] = 'Bearer'
|
||||
|
||||
# create an instance of the API class
|
||||
api_instance = petstore_api.PetApi()
|
||||
api_instance = petstore_api.PetApi(petstore_api.ApiClient(configuration))
|
||||
pet_id = 789 # int | ID of pet to return
|
||||
|
||||
try:
|
||||
@ -287,10 +292,11 @@ from petstore_api.rest import ApiException
|
||||
from pprint import pprint
|
||||
|
||||
# Configure OAuth2 access token for authorization: petstore_auth
|
||||
petstore_api.configuration.access_token = 'YOUR_ACCESS_TOKEN'
|
||||
configuration = petstore_api.Configuration()
|
||||
configuration.access_token = 'YOUR_ACCESS_TOKEN'
|
||||
|
||||
# create an instance of the API class
|
||||
api_instance = petstore_api.PetApi()
|
||||
api_instance = petstore_api.PetApi(petstore_api.ApiClient(configuration))
|
||||
body = petstore_api.Pet() # Pet | Pet object that needs to be added to the store
|
||||
|
||||
try:
|
||||
@ -337,10 +343,11 @@ from petstore_api.rest import ApiException
|
||||
from pprint import pprint
|
||||
|
||||
# Configure OAuth2 access token for authorization: petstore_auth
|
||||
petstore_api.configuration.access_token = 'YOUR_ACCESS_TOKEN'
|
||||
configuration = petstore_api.Configuration()
|
||||
configuration.access_token = 'YOUR_ACCESS_TOKEN'
|
||||
|
||||
# create an instance of the API class
|
||||
api_instance = petstore_api.PetApi()
|
||||
api_instance = petstore_api.PetApi(petstore_api.ApiClient(configuration))
|
||||
pet_id = 789 # int | ID of pet that needs to be updated
|
||||
name = 'name_example' # str | Updated name of the pet (optional)
|
||||
status = 'status_example' # str | Updated status of the pet (optional)
|
||||
@ -391,10 +398,11 @@ from petstore_api.rest import ApiException
|
||||
from pprint import pprint
|
||||
|
||||
# Configure OAuth2 access token for authorization: petstore_auth
|
||||
petstore_api.configuration.access_token = 'YOUR_ACCESS_TOKEN'
|
||||
configuration = petstore_api.Configuration()
|
||||
configuration.access_token = 'YOUR_ACCESS_TOKEN'
|
||||
|
||||
# create an instance of the API class
|
||||
api_instance = petstore_api.PetApi()
|
||||
api_instance = petstore_api.PetApi(petstore_api.ApiClient(configuration))
|
||||
pet_id = 789 # int | ID of pet to update
|
||||
additional_metadata = 'additional_metadata_example' # str | Additional data to pass to server (optional)
|
||||
file = '/path/to/file.txt' # file | file to upload (optional)
|
||||
|
@ -73,12 +73,13 @@ from petstore_api.rest import ApiException
|
||||
from pprint import pprint
|
||||
|
||||
# Configure API key authorization: api_key
|
||||
petstore_api.configuration.api_key['api_key'] = 'YOUR_API_KEY'
|
||||
configuration = petstore_api.Configuration()
|
||||
configuration.api_key['api_key'] = 'YOUR_API_KEY'
|
||||
# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed
|
||||
# petstore_api.configuration.api_key_prefix['api_key'] = 'Bearer'
|
||||
# configuration.api_key_prefix['api_key'] = 'Bearer'
|
||||
|
||||
# create an instance of the API class
|
||||
api_instance = petstore_api.StoreApi()
|
||||
api_instance = petstore_api.StoreApi(petstore_api.ApiClient(configuration))
|
||||
|
||||
try:
|
||||
# Returns pet inventories by status
|
||||
|
@ -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()
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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
|
||||
|
@ -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):
|
||||
"""
|
||||
|
@ -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,
|
@ -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):
|
||||
"""
|
||||
|
@ -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 = {}
|
||||
|
||||
|
@ -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):
|
||||
"""
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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):
|
||||
"""
|
||||
|
@ -8,20 +8,9 @@
|
||||
OpenAPI spec version: 1.0.0
|
||||
Contact: apiteam@swagger.io
|
||||
Generated by: https://github.com/swagger-api/swagger-codegen.git
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
"""
|
||||
|
||||
|
||||
from __future__ import absolute_import
|
||||
|
||||
import os
|
||||
@ -30,14 +19,14 @@ import unittest
|
||||
|
||||
import petstore_api
|
||||
from petstore_api.rest import ApiException
|
||||
from petstore_api.apis.fake_classname_tags_123_api import FakeClassnameTags123Api
|
||||
from petstore_api.apis.fake_classname_tags123_api import FakeClassnameTags123Api
|
||||
|
||||
|
||||
class TestFakeClassnameTags123Api(unittest.TestCase):
|
||||
""" FakeClassnameTags123Api unit test stubs """
|
||||
|
||||
def setUp(self):
|
||||
self.api = petstore_api.apis.fake_classname_tags_123_api.FakeClassnameTags123Api()
|
||||
self.api = petstore_api.apis.fake_classname_tags123_api.FakeClassnameTags123Api()
|
||||
|
||||
def tearDown(self):
|
||||
pass
|
@ -21,23 +21,28 @@ HOST = 'http://petstore.swagger.io/v2'
|
||||
class ApiClientTests(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.api_client = petstore_api.ApiClient(HOST)
|
||||
self.api_client = petstore_api.ApiClient()
|
||||
|
||||
def test_configuration(self):
|
||||
petstore_api.configuration.api_key['api_key'] = '123456'
|
||||
petstore_api.configuration.api_key_prefix['api_key'] = 'PREFIX'
|
||||
petstore_api.configuration.username = 'test_username'
|
||||
petstore_api.configuration.password = 'test_password'
|
||||
config = petstore_api.Configuration()
|
||||
config.host = 'http://localhost/'
|
||||
|
||||
config.api_key['api_key'] = '123456'
|
||||
config.api_key_prefix['api_key'] = 'PREFIX'
|
||||
config.username = 'test_username'
|
||||
config.password = 'test_password'
|
||||
|
||||
header_params = {'test1': 'value1'}
|
||||
query_params = {'test2': 'value2'}
|
||||
auth_settings = ['api_key', 'unknown']
|
||||
|
||||
client = petstore_api.ApiClient(config)
|
||||
|
||||
# test prefix
|
||||
self.assertEqual('PREFIX', petstore_api.configuration.api_key_prefix['api_key'])
|
||||
self.assertEqual('PREFIX', client.configuration.api_key_prefix['api_key'])
|
||||
|
||||
# update parameters based on auth setting
|
||||
self.api_client.update_params_for_auth(header_params, query_params, auth_settings)
|
||||
client.update_params_for_auth(header_params, query_params, auth_settings)
|
||||
|
||||
# test api key auth
|
||||
self.assertEqual(header_params['test1'], 'value1')
|
||||
@ -45,8 +50,8 @@ class ApiClientTests(unittest.TestCase):
|
||||
self.assertEqual(query_params['test2'], 'value2')
|
||||
|
||||
# test basic auth
|
||||
self.assertEqual('test_username', petstore_api.configuration.username)
|
||||
self.assertEqual('test_password', petstore_api.configuration.password)
|
||||
self.assertEqual('test_username', client.configuration.username)
|
||||
self.assertEqual('test_password', client.configuration.password)
|
||||
|
||||
def test_select_header_accept(self):
|
||||
accepts = ['APPLICATION/JSON', 'APPLICATION/XML']
|
||||
|
@ -11,6 +11,7 @@ import os
|
||||
import unittest
|
||||
|
||||
import petstore_api
|
||||
from petstore_api import Configuration
|
||||
from petstore_api.rest import ApiException
|
||||
|
||||
from .util import id_gen
|
||||
@ -50,7 +51,9 @@ class MockPoolManager(object):
|
||||
class PetApiTests(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.api_client = petstore_api.ApiClient(HOST)
|
||||
config = Configuration()
|
||||
config.host = HOST
|
||||
self.api_client = petstore_api.ApiClient(config)
|
||||
self.pet_api = petstore_api.PetApi(self.api_client)
|
||||
self.setUpModels()
|
||||
self.setUpFiles()
|
||||
@ -117,25 +120,24 @@ class PetApiTests(unittest.TestCase):
|
||||
self.pet_api.add_pet(body=self.pet, _request_timeout=5)
|
||||
self.pet_api.add_pet(body=self.pet, _request_timeout=(1, 2))
|
||||
|
||||
def test_create_api_instance(self):
|
||||
def test_separate_default_client_instances(self):
|
||||
pet_api = petstore_api.PetApi()
|
||||
pet_api2 = petstore_api.PetApi()
|
||||
api_client3 = petstore_api.ApiClient()
|
||||
api_client3.user_agent = 'api client 3'
|
||||
api_client4 = petstore_api.ApiClient()
|
||||
api_client4.user_agent = 'api client 4'
|
||||
pet_api3 = petstore_api.PetApi(api_client3)
|
||||
self.assertNotEqual(pet_api.api_client, pet_api2.api_client)
|
||||
|
||||
# same default api client
|
||||
self.assertEqual(pet_api.api_client, pet_api2.api_client)
|
||||
# confirm using the default api client in the config module
|
||||
self.assertEqual(pet_api.api_client, petstore_api.configuration.api_client)
|
||||
# 2 different api clients are not the same
|
||||
self.assertNotEqual(api_client3, api_client4)
|
||||
# customized pet api not using the default api client
|
||||
self.assertNotEqual(pet_api3.api_client, petstore_api.configuration.api_client)
|
||||
# customized pet api not using the old pet api's api client
|
||||
self.assertNotEqual(pet_api3.api_client, pet_api2.api_client)
|
||||
pet_api.api_client.user_agent = 'api client 3'
|
||||
pet_api2.api_client.user_agent = 'api client 4'
|
||||
|
||||
self.assertNotEqual(pet_api.api_client.user_agent, pet_api2.api_client.user_agent)
|
||||
|
||||
def test_separate_default_config_instances(self):
|
||||
pet_api = petstore_api.PetApi()
|
||||
pet_api2 = petstore_api.PetApi()
|
||||
self.assertNotEqual(pet_api.api_client.configuration, pet_api2.api_client.configuration)
|
||||
|
||||
pet_api.api_client.configuration.host = 'somehost'
|
||||
pet_api2.api_client.configuration.host = 'someotherhost'
|
||||
self.assertNotEqual(pet_api.api_client.configuration.host, pet_api2.api_client.configuration.host)
|
||||
|
||||
def test_async_request(self):
|
||||
self.pet_api.add_pet(body=self.pet)
|
||||
|
Loading…
x
Reference in New Issue
Block a user