aboutsummaryrefslogtreecommitdiffstats
path: root/python_openapi_client/fatcat_openapi_client/api_client.py
diff options
context:
space:
mode:
Diffstat (limited to 'python_openapi_client/fatcat_openapi_client/api_client.py')
-rw-r--r--python_openapi_client/fatcat_openapi_client/api_client.py105
1 files changed, 61 insertions, 44 deletions
diff --git a/python_openapi_client/fatcat_openapi_client/api_client.py b/python_openapi_client/fatcat_openapi_client/api_client.py
index 6ece8a9a..12cb98ca 100644
--- a/python_openapi_client/fatcat_openapi_client/api_client.py
+++ b/python_openapi_client/fatcat_openapi_client/api_client.py
@@ -4,9 +4,9 @@
Fatcat is a scalable, versioned, API-oriented catalog of bibliographic entities and file metadata. # noqa: E501
- OpenAPI spec version: 0.3.1
+ The version of the OpenAPI document: 0.3.1
Contact: webservices@archive.org
- Generated by: https://github.com/swagger-api/swagger-codegen.git
+ Generated by: https://openapi-generator.tech
"""
from __future__ import absolute_import
@@ -26,18 +26,19 @@ from six.moves.urllib.parse import quote
from fatcat_openapi_client.configuration import Configuration
import fatcat_openapi_client.models
from fatcat_openapi_client import rest
+from fatcat_openapi_client.exceptions import ApiValueError
class ApiClient(object):
- """Generic API client for Swagger client library builds.
+ """Generic API client for OpenAPI client library builds.
- Swagger generic API client. This client handles the client-
+ OpenAPI generic API client. This client handles the client-
server communication, and is invariant across implementations. Specifics of
- the methods and models for each application are generated from the Swagger
+ the methods and models for each application are generated from the OpenAPI
templates.
- NOTE: This class is auto generated by the swagger code generator program.
- Ref: https://github.com/swagger-api/swagger-codegen
+ NOTE: This class is auto generated by OpenAPI Generator.
+ Ref: https://openapi-generator.tech
Do not edit the class manually.
:param configuration: .Configuration object for this client
@@ -46,6 +47,8 @@ class ApiClient(object):
the API.
:param cookie: a cookie to include in the header when making calls
to the API
+ :param pool_threads: The number of threads to use for async requests
+ to the API. More threads means more concurrent API requests.
"""
PRIMITIVE_TYPES = (float, bool, bytes, six.text_type) + six.integer_types
@@ -59,28 +62,37 @@ class ApiClient(object):
'datetime': datetime.datetime,
'object': object,
}
+ _pool = None
def __init__(self, configuration=None, header_name=None, header_value=None,
- cookie=None):
+ cookie=None, pool_threads=1):
if configuration is None:
configuration = Configuration()
self.configuration = configuration
+ self.pool_threads = pool_threads
- self.pool = ThreadPool()
self.rest_client = rest.RESTClientObject(configuration)
self.default_headers = {}
if header_name is not None:
self.default_headers[header_name] = header_value
self.cookie = cookie
# Set default User-Agent.
- self.user_agent = 'Swagger-Codegen/1.0.0/python'
+ self.user_agent = 'OpenAPI-Generator/0.3.1/python'
def __del__(self):
- try:
- self.pool.close()
- self.pool.join()
- except:
- pass
+ if self._pool:
+ self._pool.close()
+ self._pool.join()
+ self._pool = None
+
+ @property
+ def pool(self):
+ """Create thread pool on first request
+ avoids instantiating unused threadpool for blocking clients.
+ """
+ if self._pool is None:
+ self._pool = ThreadPool(self.pool_threads)
+ return self._pool
@property
def user_agent(self):
@@ -99,7 +111,7 @@ class ApiClient(object):
query_params=None, header_params=None, body=None, post_params=None,
files=None, response_type=None, auth_settings=None,
_return_http_data_only=None, collection_formats=None,
- _preload_content=True, _request_timeout=None):
+ _preload_content=True, _request_timeout=None, _host=None):
config = self.configuration
@@ -133,10 +145,11 @@ class ApiClient(object):
# post parameters
if post_params or files:
- post_params = self.prepare_post_parameters(post_params, files)
+ post_params = post_params if post_params else []
post_params = self.sanitize_for_serialization(post_params)
post_params = self.parameters_to_tuples(post_params,
collection_formats)
+ post_params.extend(self.files_parameters(files))
# auth setting
self.update_params_for_auth(header_params, query_params, auth_settings)
@@ -146,7 +159,11 @@ class ApiClient(object):
body = self.sanitize_for_serialization(body)
# request url
- url = self.configuration.host + resource_path
+ if _host is None:
+ url = self.configuration.host + resource_path
+ else:
+ # use server/host defined in path or operation instead
+ url = _host + resource_path
# perform request and return response
response_data = self.request(
@@ -180,7 +197,7 @@ class ApiClient(object):
convert to string in iso8601 format.
If obj is list, sanitize each element in the list.
If obj is dict, return the dict.
- If obj is swagger model, return the properties dict.
+ If obj is OpenAPI model, return the properties dict.
:param obj: The data to serialize.
:return: The serialized form of data.
@@ -202,12 +219,12 @@ class ApiClient(object):
obj_dict = obj
else:
# Convert model obj to dict except
- # attributes `swagger_types`, `attribute_map`
+ # attributes `openapi_types`, `attribute_map`
# and attributes which value is not None.
# Convert attribute name to json key in
# model definition for request.
obj_dict = {obj.attribute_map[attr]: getattr(obj, attr)
- for attr, _ in six.iteritems(obj.swagger_types)
+ for attr, _ in six.iteritems(obj.openapi_types)
if getattr(obj, attr) is not None}
return {key: self.sanitize_for_serialization(val)
@@ -248,12 +265,12 @@ class ApiClient(object):
if type(klass) == str:
if klass.startswith('list['):
- sub_kls = re.match('list\[(.*)\]', klass).group(1)
+ sub_kls = re.match(r'list\[(.*)\]', klass).group(1)
return [self.__deserialize(sub_data, sub_kls)
for sub_data in data]
if klass.startswith('dict('):
- sub_kls = re.match('dict\(([^,]*), (.*)\)', klass).group(2)
+ sub_kls = re.match(r'dict\(([^,]*), (.*)\)', klass).group(2)
return {k: self.__deserialize(v, sub_kls)
for k, v in six.iteritems(data)}
@@ -277,12 +294,12 @@ class ApiClient(object):
def call_api(self, resource_path, method,
path_params=None, query_params=None, header_params=None,
body=None, post_params=None, files=None,
- response_type=None, auth_settings=None, async=None,
+ response_type=None, auth_settings=None, async_req=None,
_return_http_data_only=None, collection_formats=None,
- _preload_content=True, _request_timeout=None):
+ _preload_content=True, _request_timeout=None, _host=None):
"""Makes the HTTP request (synchronous) and returns deserialized data.
- To make an async request, set the async parameter.
+ To make an async_req request, set the async_req parameter.
:param resource_path: Path to method endpoint.
:param method: Method to call.
@@ -297,7 +314,7 @@ class ApiClient(object):
:param response: Response data type.
:param files dict: key -> filename, value -> filepath,
for `multipart/form-data`.
- :param async bool: execute request asynchronously
+ :param async_req bool: execute request asynchronously
:param _return_http_data_only: response data without head status code
and headers
:param collection_formats: dict of collection formats for path, query,
@@ -310,19 +327,19 @@ class ApiClient(object):
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:return:
- If async parameter is True,
+ If async_req parameter is True,
the request will be called asynchronously.
The method will return the request thread.
- If parameter async is False or missing,
+ If parameter async_req is False or missing,
then the method will return the response directly.
"""
- if not async:
+ if not async_req:
return self.__call_api(resource_path, method,
path_params, query_params, header_params,
body, post_params, files,
response_type, auth_settings,
_return_http_data_only, collection_formats,
- _preload_content, _request_timeout)
+ _preload_content, _request_timeout, _host)
else:
thread = self.pool.apply_async(self.__call_api, (resource_path,
method, path_params, query_params,
@@ -331,7 +348,9 @@ class ApiClient(object):
response_type, auth_settings,
_return_http_data_only,
collection_formats,
- _preload_content, _request_timeout))
+ _preload_content,
+ _request_timeout,
+ _host))
return thread
def request(self, method, url, query_params=None, headers=None,
@@ -390,7 +409,7 @@ class ApiClient(object):
_request_timeout=_request_timeout,
body=body)
else:
- raise ValueError(
+ raise ApiValueError(
"http method must be `GET`, `HEAD`, `OPTIONS`,"
" `POST`, `PATCH`, `PUT` or `DELETE`."
)
@@ -425,18 +444,14 @@ class ApiClient(object):
new_params.append((k, v))
return new_params
- def prepare_post_parameters(self, post_params=None, files=None):
+ def files_parameters(self, files=None):
"""Builds form parameters.
- :param post_params: Normal form parameters.
:param files: File parameters.
:return: Form parameters with files.
"""
params = []
- if post_params:
- params = post_params
-
if files:
for k, v in six.iteritems(files):
if not v:
@@ -500,12 +515,14 @@ class ApiClient(object):
if auth_setting:
if not auth_setting['value']:
continue
+ elif auth_setting['in'] == 'cookie':
+ headers['Cookie'] = auth_setting['value']
elif auth_setting['in'] == 'header':
headers[auth_setting['key']] = auth_setting['value']
elif auth_setting['in'] == 'query':
querys.append((auth_setting['key'], auth_setting['value']))
else:
- raise ValueError(
+ raise ApiValueError(
'Authentication token must be in `query` or `header`'
)
@@ -544,12 +561,12 @@ class ApiClient(object):
try:
return klass(data)
except UnicodeEncodeError:
- return six.u(data)
+ return six.text_type(data)
except TypeError:
return data
def __deserialize_object(self, value):
- """Return a original value.
+ """Return an original value.
:return: object.
"""
@@ -602,13 +619,13 @@ class ApiClient(object):
:return: model object.
"""
- if not klass.swagger_types and not hasattr(klass,
+ if not klass.openapi_types and not hasattr(klass,
'get_real_child_model'):
return data
kwargs = {}
- if klass.swagger_types is not None:
- for attr, attr_type in six.iteritems(klass.swagger_types):
+ if klass.openapi_types is not None:
+ for attr, attr_type in six.iteritems(klass.openapi_types):
if (data is not None and
klass.attribute_map[attr] in data and
isinstance(data, (list, dict))):