mirror of
https://github.com/OpenAPITools/openapi-generator.git
synced 2025-12-18 20:57:06 +00:00
python: enable more mypy checks 1/n (#17556)
* python: more mypy checks * mypy: check_untyped_defs * mypy: disallow_subclassing_any * mypy: disallow_untyped_decorators * mypy: disallow_any_generics
This commit is contained in:
@@ -20,7 +20,7 @@ from pydantic import Field
|
||||
from typing_extensions import Annotated
|
||||
from petstore_api.models.client import Client
|
||||
|
||||
from petstore_api.api_client import ApiClient
|
||||
from petstore_api.api_client import ApiClient, RequestSerialized
|
||||
from petstore_api.api_response import ApiResponse
|
||||
from petstore_api.rest import RESTResponseType
|
||||
|
||||
@@ -242,7 +242,7 @@ class AnotherFakeApi:
|
||||
_content_type,
|
||||
_headers,
|
||||
_host_index,
|
||||
) -> Tuple:
|
||||
) -> RequestSerialized:
|
||||
|
||||
_host = None
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ from typing_extensions import Annotated
|
||||
|
||||
from petstore_api.models.foo_get_default_response import FooGetDefaultResponse
|
||||
|
||||
from petstore_api.api_client import ApiClient
|
||||
from petstore_api.api_client import ApiClient, RequestSerialized
|
||||
from petstore_api.api_response import ApiResponse
|
||||
from petstore_api.rest import RESTResponseType
|
||||
|
||||
@@ -221,7 +221,7 @@ class DefaultApi:
|
||||
_content_type,
|
||||
_headers,
|
||||
_host_index,
|
||||
) -> Tuple:
|
||||
) -> RequestSerialized:
|
||||
|
||||
_host = None
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@ from petstore_api.models.tag import Tag
|
||||
from petstore_api.models.test_inline_freeform_additional_properties_request import TestInlineFreeformAdditionalPropertiesRequest
|
||||
from petstore_api.models.user import User
|
||||
|
||||
from petstore_api.api_client import ApiClient
|
||||
from petstore_api.api_client import ApiClient, RequestSerialized
|
||||
from petstore_api.api_response import ApiResponse
|
||||
from petstore_api.rest import RESTResponseType
|
||||
|
||||
@@ -250,7 +250,7 @@ class FakeApi:
|
||||
_content_type,
|
||||
_headers,
|
||||
_host_index,
|
||||
) -> Tuple:
|
||||
) -> RequestSerialized:
|
||||
|
||||
_host = None
|
||||
|
||||
@@ -511,7 +511,7 @@ class FakeApi:
|
||||
_content_type,
|
||||
_headers,
|
||||
_host_index,
|
||||
) -> Tuple:
|
||||
) -> RequestSerialized:
|
||||
|
||||
_host = None
|
||||
|
||||
@@ -748,7 +748,7 @@ class FakeApi:
|
||||
_content_type,
|
||||
_headers,
|
||||
_host_index,
|
||||
) -> Tuple:
|
||||
) -> RequestSerialized:
|
||||
|
||||
_host = None
|
||||
|
||||
@@ -1026,7 +1026,7 @@ class FakeApi:
|
||||
_content_type,
|
||||
_headers,
|
||||
_host_index,
|
||||
) -> Tuple:
|
||||
) -> RequestSerialized:
|
||||
|
||||
_host = None
|
||||
|
||||
@@ -1298,7 +1298,7 @@ class FakeApi:
|
||||
_content_type,
|
||||
_headers,
|
||||
_host_index,
|
||||
) -> Tuple:
|
||||
) -> RequestSerialized:
|
||||
|
||||
_host = None
|
||||
|
||||
@@ -1568,7 +1568,7 @@ class FakeApi:
|
||||
_content_type,
|
||||
_headers,
|
||||
_host_index,
|
||||
) -> Tuple:
|
||||
) -> RequestSerialized:
|
||||
|
||||
_host = None
|
||||
|
||||
@@ -1838,7 +1838,7 @@ class FakeApi:
|
||||
_content_type,
|
||||
_headers,
|
||||
_host_index,
|
||||
) -> Tuple:
|
||||
) -> RequestSerialized:
|
||||
|
||||
_host = None
|
||||
|
||||
@@ -2108,7 +2108,7 @@ class FakeApi:
|
||||
_content_type,
|
||||
_headers,
|
||||
_host_index,
|
||||
) -> Tuple:
|
||||
) -> RequestSerialized:
|
||||
|
||||
_host = None
|
||||
|
||||
@@ -2378,7 +2378,7 @@ class FakeApi:
|
||||
_content_type,
|
||||
_headers,
|
||||
_host_index,
|
||||
) -> Tuple:
|
||||
) -> RequestSerialized:
|
||||
|
||||
_host = None
|
||||
|
||||
@@ -2632,7 +2632,7 @@ class FakeApi:
|
||||
_content_type,
|
||||
_headers,
|
||||
_host_index,
|
||||
) -> Tuple:
|
||||
) -> RequestSerialized:
|
||||
|
||||
_host = None
|
||||
|
||||
@@ -2871,7 +2871,7 @@ class FakeApi:
|
||||
_content_type,
|
||||
_headers,
|
||||
_host_index,
|
||||
) -> Tuple:
|
||||
) -> RequestSerialized:
|
||||
|
||||
_host = None
|
||||
|
||||
@@ -3123,7 +3123,7 @@ class FakeApi:
|
||||
_content_type,
|
||||
_headers,
|
||||
_host_index,
|
||||
) -> Tuple:
|
||||
) -> RequestSerialized:
|
||||
|
||||
_host = None
|
||||
|
||||
@@ -3376,7 +3376,7 @@ class FakeApi:
|
||||
_content_type,
|
||||
_headers,
|
||||
_host_index,
|
||||
) -> Tuple:
|
||||
) -> RequestSerialized:
|
||||
|
||||
_host = None
|
||||
|
||||
@@ -3640,7 +3640,7 @@ class FakeApi:
|
||||
_content_type,
|
||||
_headers,
|
||||
_host_index,
|
||||
) -> Tuple:
|
||||
) -> RequestSerialized:
|
||||
|
||||
_host = None
|
||||
|
||||
@@ -3909,7 +3909,7 @@ class FakeApi:
|
||||
_content_type,
|
||||
_headers,
|
||||
_host_index,
|
||||
) -> Tuple:
|
||||
) -> RequestSerialized:
|
||||
|
||||
_host = None
|
||||
|
||||
@@ -4183,7 +4183,7 @@ class FakeApi:
|
||||
_content_type,
|
||||
_headers,
|
||||
_host_index,
|
||||
) -> Tuple:
|
||||
) -> RequestSerialized:
|
||||
|
||||
_host = None
|
||||
|
||||
@@ -4451,7 +4451,7 @@ class FakeApi:
|
||||
_content_type,
|
||||
_headers,
|
||||
_host_index,
|
||||
) -> Tuple:
|
||||
) -> RequestSerialized:
|
||||
|
||||
_host = None
|
||||
|
||||
@@ -4731,7 +4731,7 @@ class FakeApi:
|
||||
_content_type,
|
||||
_headers,
|
||||
_host_index,
|
||||
) -> Tuple:
|
||||
) -> RequestSerialized:
|
||||
|
||||
_host = None
|
||||
|
||||
@@ -4987,7 +4987,7 @@ class FakeApi:
|
||||
_content_type,
|
||||
_headers,
|
||||
_host_index,
|
||||
) -> Tuple:
|
||||
) -> RequestSerialized:
|
||||
|
||||
_host = None
|
||||
|
||||
@@ -5427,7 +5427,7 @@ class FakeApi:
|
||||
_content_type,
|
||||
_headers,
|
||||
_host_index,
|
||||
) -> Tuple:
|
||||
) -> RequestSerialized:
|
||||
|
||||
_host = None
|
||||
|
||||
@@ -5710,7 +5710,7 @@ class FakeApi:
|
||||
_content_type,
|
||||
_headers,
|
||||
_host_index,
|
||||
) -> Tuple:
|
||||
) -> RequestSerialized:
|
||||
|
||||
_host = None
|
||||
|
||||
@@ -6030,7 +6030,7 @@ class FakeApi:
|
||||
_content_type,
|
||||
_headers,
|
||||
_host_index,
|
||||
) -> Tuple:
|
||||
) -> RequestSerialized:
|
||||
|
||||
_host = None
|
||||
|
||||
@@ -6300,7 +6300,7 @@ class FakeApi:
|
||||
_content_type,
|
||||
_headers,
|
||||
_host_index,
|
||||
) -> Tuple:
|
||||
) -> RequestSerialized:
|
||||
|
||||
_host = None
|
||||
|
||||
@@ -6564,7 +6564,7 @@ class FakeApi:
|
||||
_content_type,
|
||||
_headers,
|
||||
_host_index,
|
||||
) -> Tuple:
|
||||
) -> RequestSerialized:
|
||||
|
||||
_host = None
|
||||
|
||||
@@ -6841,7 +6841,7 @@ class FakeApi:
|
||||
_content_type,
|
||||
_headers,
|
||||
_host_index,
|
||||
) -> Tuple:
|
||||
) -> RequestSerialized:
|
||||
|
||||
_host = None
|
||||
|
||||
@@ -7185,7 +7185,7 @@ class FakeApi:
|
||||
_content_type,
|
||||
_headers,
|
||||
_host_index,
|
||||
) -> Tuple:
|
||||
) -> RequestSerialized:
|
||||
|
||||
_host = None
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ from pydantic import Field
|
||||
from typing_extensions import Annotated
|
||||
from petstore_api.models.client import Client
|
||||
|
||||
from petstore_api.api_client import ApiClient
|
||||
from petstore_api.api_client import ApiClient, RequestSerialized
|
||||
from petstore_api.api_response import ApiResponse
|
||||
from petstore_api.rest import RESTResponseType
|
||||
|
||||
@@ -242,7 +242,7 @@ class FakeClassnameTags123Api:
|
||||
_content_type,
|
||||
_headers,
|
||||
_host_index,
|
||||
) -> Tuple:
|
||||
) -> RequestSerialized:
|
||||
|
||||
_host = None
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ from typing_extensions import Annotated
|
||||
from petstore_api.models.model_api_response import ModelApiResponse
|
||||
from petstore_api.models.pet import Pet
|
||||
|
||||
from petstore_api.api_client import ApiClient
|
||||
from petstore_api.api_client import ApiClient, RequestSerialized
|
||||
from petstore_api.api_response import ApiResponse
|
||||
from petstore_api.rest import RESTResponseType
|
||||
|
||||
@@ -247,7 +247,7 @@ class PetApi:
|
||||
_content_type,
|
||||
_headers,
|
||||
_host_index,
|
||||
) -> Tuple:
|
||||
) -> RequestSerialized:
|
||||
|
||||
_host = None
|
||||
|
||||
@@ -530,7 +530,7 @@ class PetApi:
|
||||
_content_type,
|
||||
_headers,
|
||||
_host_index,
|
||||
) -> Tuple:
|
||||
) -> RequestSerialized:
|
||||
|
||||
_host = None
|
||||
|
||||
@@ -787,7 +787,7 @@ class PetApi:
|
||||
_content_type,
|
||||
_headers,
|
||||
_host_index,
|
||||
) -> Tuple:
|
||||
) -> RequestSerialized:
|
||||
|
||||
_host = None
|
||||
|
||||
@@ -1056,7 +1056,7 @@ class PetApi:
|
||||
_content_type,
|
||||
_headers,
|
||||
_host_index,
|
||||
) -> Tuple:
|
||||
) -> RequestSerialized:
|
||||
|
||||
_host = None
|
||||
|
||||
@@ -1325,7 +1325,7 @@ class PetApi:
|
||||
_content_type,
|
||||
_headers,
|
||||
_host_index,
|
||||
) -> Tuple:
|
||||
) -> RequestSerialized:
|
||||
|
||||
_host = None
|
||||
|
||||
@@ -1593,7 +1593,7 @@ class PetApi:
|
||||
_content_type,
|
||||
_headers,
|
||||
_host_index,
|
||||
) -> Tuple:
|
||||
) -> RequestSerialized:
|
||||
|
||||
_host = None
|
||||
|
||||
@@ -1889,7 +1889,7 @@ class PetApi:
|
||||
_content_type,
|
||||
_headers,
|
||||
_host_index,
|
||||
) -> Tuple:
|
||||
) -> RequestSerialized:
|
||||
|
||||
_host = None
|
||||
|
||||
@@ -2184,7 +2184,7 @@ class PetApi:
|
||||
_content_type,
|
||||
_headers,
|
||||
_host_index,
|
||||
) -> Tuple:
|
||||
) -> RequestSerialized:
|
||||
|
||||
_host = None
|
||||
|
||||
@@ -2485,7 +2485,7 @@ class PetApi:
|
||||
_content_type,
|
||||
_headers,
|
||||
_host_index,
|
||||
) -> Tuple:
|
||||
) -> RequestSerialized:
|
||||
|
||||
_host = None
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ from pydantic import Field, StrictStr
|
||||
from typing_extensions import Annotated
|
||||
from petstore_api.models.order import Order
|
||||
|
||||
from petstore_api.api_client import ApiClient
|
||||
from petstore_api.api_client import ApiClient, RequestSerialized
|
||||
from petstore_api.api_response import ApiResponse
|
||||
from petstore_api.rest import RESTResponseType
|
||||
|
||||
@@ -245,7 +245,7 @@ class StoreApi:
|
||||
_content_type,
|
||||
_headers,
|
||||
_host_index,
|
||||
) -> Tuple:
|
||||
) -> RequestSerialized:
|
||||
|
||||
_host = None
|
||||
|
||||
@@ -483,7 +483,7 @@ class StoreApi:
|
||||
_content_type,
|
||||
_headers,
|
||||
_host_index,
|
||||
) -> Tuple:
|
||||
) -> RequestSerialized:
|
||||
|
||||
_host = None
|
||||
|
||||
@@ -745,7 +745,7 @@ class StoreApi:
|
||||
_content_type,
|
||||
_headers,
|
||||
_host_index,
|
||||
) -> Tuple:
|
||||
) -> RequestSerialized:
|
||||
|
||||
_host = None
|
||||
|
||||
@@ -1006,7 +1006,7 @@ class StoreApi:
|
||||
_content_type,
|
||||
_headers,
|
||||
_host_index,
|
||||
) -> Tuple:
|
||||
) -> RequestSerialized:
|
||||
|
||||
_host = None
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ from typing import List
|
||||
from typing_extensions import Annotated
|
||||
from petstore_api.models.user import User
|
||||
|
||||
from petstore_api.api_client import ApiClient
|
||||
from petstore_api.api_client import ApiClient, RequestSerialized
|
||||
from petstore_api.api_response import ApiResponse
|
||||
from petstore_api.rest import RESTResponseType
|
||||
|
||||
@@ -240,7 +240,7 @@ class UserApi:
|
||||
_content_type,
|
||||
_headers,
|
||||
_host_index,
|
||||
) -> Tuple:
|
||||
) -> RequestSerialized:
|
||||
|
||||
_hosts = [
|
||||
'http://petstore.swagger.io/v2',
|
||||
@@ -506,7 +506,7 @@ class UserApi:
|
||||
_content_type,
|
||||
_headers,
|
||||
_host_index,
|
||||
) -> Tuple:
|
||||
) -> RequestSerialized:
|
||||
|
||||
_host = None
|
||||
|
||||
@@ -768,7 +768,7 @@ class UserApi:
|
||||
_content_type,
|
||||
_headers,
|
||||
_host_index,
|
||||
) -> Tuple:
|
||||
) -> RequestSerialized:
|
||||
|
||||
_host = None
|
||||
|
||||
@@ -1036,7 +1036,7 @@ class UserApi:
|
||||
_content_type,
|
||||
_headers,
|
||||
_host_index,
|
||||
) -> Tuple:
|
||||
) -> RequestSerialized:
|
||||
|
||||
_host = None
|
||||
|
||||
@@ -1293,7 +1293,7 @@ class UserApi:
|
||||
_content_type,
|
||||
_headers,
|
||||
_host_index,
|
||||
) -> Tuple:
|
||||
) -> RequestSerialized:
|
||||
|
||||
_host = None
|
||||
|
||||
@@ -1567,7 +1567,7 @@ class UserApi:
|
||||
_content_type,
|
||||
_headers,
|
||||
_host_index,
|
||||
) -> Tuple:
|
||||
) -> RequestSerialized:
|
||||
|
||||
_host = None
|
||||
|
||||
@@ -1815,7 +1815,7 @@ class UserApi:
|
||||
_content_type,
|
||||
_headers,
|
||||
_host_index,
|
||||
) -> Tuple:
|
||||
) -> RequestSerialized:
|
||||
|
||||
_host = None
|
||||
|
||||
@@ -2080,7 +2080,7 @@ class UserApi:
|
||||
_content_type,
|
||||
_headers,
|
||||
_host_index,
|
||||
) -> Tuple:
|
||||
) -> RequestSerialized:
|
||||
|
||||
_host = None
|
||||
|
||||
|
||||
@@ -21,10 +21,10 @@ import re
|
||||
import tempfile
|
||||
|
||||
from urllib.parse import quote
|
||||
from typing import Tuple, Optional, List
|
||||
from typing import Tuple, Optional, List, Dict
|
||||
|
||||
from petstore_api.configuration import Configuration
|
||||
from petstore_api.api_response import ApiResponse
|
||||
from petstore_api.api_response import ApiResponse, T as ApiResponseT
|
||||
import petstore_api.models
|
||||
from petstore_api import rest
|
||||
from petstore_api.exceptions import (
|
||||
@@ -37,6 +37,7 @@ from petstore_api.exceptions import (
|
||||
ServiceException
|
||||
)
|
||||
|
||||
RequestSerialized = Tuple[str, str, Dict[str, str], Optional[str], List[str]]
|
||||
|
||||
class ApiClient:
|
||||
"""Generic API client for OpenAPI client library builds.
|
||||
@@ -149,7 +150,7 @@ class ApiClient:
|
||||
collection_formats=None,
|
||||
_host=None,
|
||||
_request_auth=None
|
||||
) -> Tuple:
|
||||
) -> RequestSerialized:
|
||||
|
||||
"""Builds the HTTP request params needed by the request.
|
||||
:param method: Method to call.
|
||||
@@ -282,8 +283,8 @@ class ApiClient:
|
||||
def response_deserialize(
|
||||
self,
|
||||
response_data: rest.RESTResponse,
|
||||
response_types_map=None
|
||||
) -> ApiResponse:
|
||||
response_types_map: Optional[Dict[str, ApiResponseT]]=None
|
||||
) -> ApiResponse[ApiResponseT]:
|
||||
"""Deserializes response into an object.
|
||||
:param response_data: RESTResponse object to be deserialized.
|
||||
:param response_types_map: dict of response types.
|
||||
@@ -404,12 +405,16 @@ class ApiClient:
|
||||
|
||||
if isinstance(klass, str):
|
||||
if klass.startswith('List['):
|
||||
sub_kls = re.match(r'List\[(.*)]', klass).group(1)
|
||||
m = re.match(r'List\[(.*)]', klass)
|
||||
assert m is not None, "Malformed List type definition"
|
||||
sub_kls = m.group(1)
|
||||
return [self.__deserialize(sub_data, sub_kls)
|
||||
for sub_data in data]
|
||||
|
||||
if klass.startswith('Dict['):
|
||||
sub_kls = re.match(r'Dict\[([^,]*), (.*)]', klass).group(2)
|
||||
m = re.match(r'Dict\[([^,]*), (.*)]', klass)
|
||||
assert m is not None, "Malformed Dict type definition"
|
||||
sub_kls = m.group(2)
|
||||
return {k: self.__deserialize(v, sub_kls)
|
||||
for k, v in data.items()}
|
||||
|
||||
@@ -437,7 +442,7 @@ class ApiClient:
|
||||
:param dict collection_formats: Parameter collection formats
|
||||
:return: Parameters as list of tuples, collections formatted
|
||||
"""
|
||||
new_params = []
|
||||
new_params: List[Tuple[str, str]] = []
|
||||
if collection_formats is None:
|
||||
collection_formats = {}
|
||||
for k, v in params.items() if isinstance(params, dict) else params:
|
||||
@@ -467,7 +472,7 @@ class ApiClient:
|
||||
:param dict collection_formats: Parameter collection formats
|
||||
:return: URL query string (e.g. a=Hello%20World&b=123)
|
||||
"""
|
||||
new_params = []
|
||||
new_params: List[Tuple[str, str]] = []
|
||||
if collection_formats is None:
|
||||
collection_formats = {}
|
||||
for k, v in params.items() if isinstance(params, dict) else params:
|
||||
@@ -659,10 +664,12 @@ class ApiClient:
|
||||
|
||||
content_disposition = response.getheader("Content-Disposition")
|
||||
if content_disposition:
|
||||
filename = re.search(
|
||||
m = re.search(
|
||||
r'filename=[\'"]?([^\'"\s]+)[\'"]?',
|
||||
content_disposition
|
||||
).group(1)
|
||||
)
|
||||
assert m is not None, "Unexpected 'content-disposition' header value"
|
||||
filename = m.group(1)
|
||||
path = os.path.join(os.path.dirname(path), filename)
|
||||
|
||||
with open(path, "wb") as f:
|
||||
|
||||
@@ -14,7 +14,9 @@
|
||||
|
||||
import copy
|
||||
import logging
|
||||
from logging import FileHandler
|
||||
import sys
|
||||
from typing import Optional
|
||||
import urllib3
|
||||
|
||||
import http.client as httplib
|
||||
@@ -197,7 +199,7 @@ conf = petstore_api.Configuration(
|
||||
self.logger_stream_handler = None
|
||||
"""Log stream handler
|
||||
"""
|
||||
self.logger_file_handler = None
|
||||
self.logger_file_handler: Optional[FileHandler] = None
|
||||
"""Log file handler
|
||||
"""
|
||||
self.logger_file = None
|
||||
@@ -234,7 +236,7 @@ conf = petstore_api.Configuration(
|
||||
Default values is 100, None means no-limit.
|
||||
"""
|
||||
|
||||
self.proxy = None
|
||||
self.proxy: Optional[str] = None
|
||||
"""Proxy URL
|
||||
"""
|
||||
self.proxy_headers = None
|
||||
|
||||
@@ -79,7 +79,7 @@ class AdditionalPropertiesAnyType(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of AdditionalPropertiesAnyType from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -72,7 +72,7 @@ class AdditionalPropertiesClass(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of AdditionalPropertiesClass from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -79,7 +79,7 @@ class AdditionalPropertiesObject(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of AdditionalPropertiesObject from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -79,7 +79,7 @@ class AdditionalPropertiesWithDescriptionOnly(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of AdditionalPropertiesWithDescriptionOnly from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -73,7 +73,7 @@ class AllOfWithSingleRef(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of AllOfWithSingleRef from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -46,7 +46,7 @@ class Animal(BaseModel):
|
||||
}
|
||||
|
||||
@classmethod
|
||||
def get_discriminator_value(cls, obj: Dict) -> Optional[str]:
|
||||
def get_discriminator_value(cls, obj: Dict[str, Any]) -> Optional[str]:
|
||||
"""Returns the discriminator value (object type) of the data"""
|
||||
discriminator_value = obj[cls.__discriminator_property_name]
|
||||
if discriminator_value:
|
||||
@@ -89,7 +89,7 @@ class Animal(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Dict) -> Optional[Union[Self, Self]]:
|
||||
def from_dict(cls, obj: Dict[str, Any]) -> Optional[Union[Self, Self]]:
|
||||
"""Create an instance of Animal from a dict"""
|
||||
# look up the object type based on discriminator mapping
|
||||
object_type = cls.get_discriminator_value(obj)
|
||||
|
||||
@@ -87,7 +87,7 @@ class AnyOfColor(BaseModel):
|
||||
return v
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: dict) -> Self:
|
||||
def from_dict(cls, obj: Dict[str, Any]) -> Self:
|
||||
return cls.from_json(json.dumps(obj))
|
||||
|
||||
@classmethod
|
||||
@@ -139,7 +139,7 @@ class AnyOfColor(BaseModel):
|
||||
else:
|
||||
return json.dumps(self.actual_instance)
|
||||
|
||||
def to_dict(self) -> Optional[Union[Dict, List[int], str]]:
|
||||
def to_dict(self) -> Optional[Union[Dict[str, Any], List[int], str]]:
|
||||
"""Returns the dict representation of the actual instance"""
|
||||
if self.actual_instance is None:
|
||||
return None
|
||||
|
||||
@@ -80,7 +80,7 @@ class AnyOfPig(BaseModel):
|
||||
return v
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: dict) -> Self:
|
||||
def from_dict(cls, obj: Dict[str, Any]) -> Self:
|
||||
return cls.from_json(json.dumps(obj))
|
||||
|
||||
@classmethod
|
||||
@@ -117,7 +117,7 @@ class AnyOfPig(BaseModel):
|
||||
else:
|
||||
return json.dumps(self.actual_instance)
|
||||
|
||||
def to_dict(self) -> Optional[Union[Dict, BasquePig, DanishPig]]:
|
||||
def to_dict(self) -> Optional[Union[Dict[str, Any], BasquePig, DanishPig]]:
|
||||
"""Returns the dict representation of the actual instance"""
|
||||
if self.actual_instance is None:
|
||||
return None
|
||||
|
||||
@@ -81,7 +81,7 @@ class ArrayOfArrayOfModel(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of ArrayOfArrayOfModel from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -71,7 +71,7 @@ class ArrayOfArrayOfNumberOnly(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of ArrayOfArrayOfNumberOnly from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -71,7 +71,7 @@ class ArrayOfNumberOnly(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of ArrayOfNumberOnly from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -84,7 +84,7 @@ class ArrayTest(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of ArrayTest from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -72,7 +72,7 @@ class BasquePig(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of BasquePig from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -76,7 +76,7 @@ class Capitalization(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of Capitalization from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -72,7 +72,7 @@ class Cat(Animal):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of Cat from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -72,7 +72,7 @@ class Category(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of Category from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -75,7 +75,7 @@ class CircularReferenceModel(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of CircularReferenceModel from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -71,7 +71,7 @@ class ClassModel(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of ClassModel from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -71,7 +71,7 @@ class Client(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of Client from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -89,11 +89,11 @@ class Color(BaseModel):
|
||||
return v
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: dict) -> Self:
|
||||
def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self:
|
||||
return cls.from_json(json.dumps(obj))
|
||||
|
||||
@classmethod
|
||||
def from_json(cls, json_str: str) -> Self:
|
||||
def from_json(cls, json_str: Optional[str]) -> Self:
|
||||
"""Returns the object represented by the json string"""
|
||||
instance = cls.model_construct()
|
||||
if json_str is None:
|
||||
@@ -149,7 +149,7 @@ class Color(BaseModel):
|
||||
else:
|
||||
return json.dumps(self.actual_instance)
|
||||
|
||||
def to_dict(self) -> Optional[Union[Dict, List[int], str]]:
|
||||
def to_dict(self) -> Optional[Union[Dict[str, Any], List[int], str]]:
|
||||
"""Returns the dict representation of the actual instance"""
|
||||
if self.actual_instance is None:
|
||||
return None
|
||||
|
||||
@@ -76,7 +76,7 @@ class Creature(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of Creature from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -71,7 +71,7 @@ class CreatureInfo(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of CreatureInfo from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -72,7 +72,7 @@ class DanishPig(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of DanishPig from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -71,7 +71,7 @@ class DeprecatedObject(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of DeprecatedObject from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -72,7 +72,7 @@ class Dog(Animal):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of Dog from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -75,7 +75,7 @@ class DummyModel(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of DummyModel from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -93,7 +93,7 @@ class EnumArrays(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of EnumArrays from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -135,7 +135,7 @@ class EnumTest(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of EnumTest from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -71,7 +71,7 @@ class File(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of File from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -83,7 +83,7 @@ class FileSchemaTestClass(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of FileSchemaTestClass from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -75,7 +75,7 @@ class FirstRef(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of FirstRef from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -71,7 +71,7 @@ class Foo(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of Foo from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -75,7 +75,7 @@ class FooGetDefaultResponse(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of FooGetDefaultResponse from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -130,7 +130,7 @@ class FormatTest(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of FormatTest from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -76,7 +76,7 @@ class HasOnlyReadOnly(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of HasOnlyReadOnly from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -76,7 +76,7 @@ class HealthCheckResult(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of HealthCheckResult from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -71,7 +71,7 @@ class InnerDictWithProperty(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of InnerDictWithProperty from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -78,7 +78,7 @@ class IntOrString(BaseModel):
|
||||
return v
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: dict) -> Self:
|
||||
def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self:
|
||||
return cls.from_json(json.dumps(obj))
|
||||
|
||||
@classmethod
|
||||
@@ -126,7 +126,7 @@ class IntOrString(BaseModel):
|
||||
else:
|
||||
return json.dumps(self.actual_instance)
|
||||
|
||||
def to_dict(self) -> Optional[Union[Dict, int, str]]:
|
||||
def to_dict(self) -> Optional[Union[Dict[str, Any], int, str]]:
|
||||
"""Returns the dict representation of the actual instance"""
|
||||
if self.actual_instance is None:
|
||||
return None
|
||||
|
||||
@@ -71,7 +71,7 @@ class ListClass(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of ListClass from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -81,7 +81,7 @@ class MapOfArrayOfModel(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of MapOfArrayOfModel from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -84,7 +84,7 @@ class MapTest(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of MapTest from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -82,7 +82,7 @@ class MixedPropertiesAndAdditionalPropertiesClass(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of MixedPropertiesAndAdditionalPropertiesClass from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -72,7 +72,7 @@ class Model200Response(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of Model200Response from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -73,7 +73,7 @@ class ModelApiResponse(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of ModelApiResponse from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -71,7 +71,7 @@ class ModelReturn(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of ModelReturn from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -78,7 +78,7 @@ class Name(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of Name from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -147,7 +147,7 @@ class NullableClass(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of NullableClass from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -88,7 +88,7 @@ class NullableProperty(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of NullableProperty from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -71,7 +71,7 @@ class NumberOnly(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of NumberOnly from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -71,7 +71,7 @@ class ObjectToTestAdditionalProperties(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of ObjectToTestAdditionalProperties from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -78,7 +78,7 @@ class ObjectWithDeprecatedFields(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of ObjectWithDeprecatedFields from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -77,7 +77,7 @@ class OneOfEnumString(BaseModel):
|
||||
return v
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: dict) -> Self:
|
||||
def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self:
|
||||
return cls.from_json(json.dumps(obj))
|
||||
|
||||
@classmethod
|
||||
@@ -119,7 +119,7 @@ class OneOfEnumString(BaseModel):
|
||||
else:
|
||||
return json.dumps(self.actual_instance)
|
||||
|
||||
def to_dict(self) -> Optional[Union[Dict, EnumString1, EnumString2]]:
|
||||
def to_dict(self) -> Optional[Union[Dict[str, Any], EnumString1, EnumString2]]:
|
||||
"""Returns the dict representation of the actual instance"""
|
||||
if self.actual_instance is None:
|
||||
return None
|
||||
|
||||
@@ -87,7 +87,7 @@ class Order(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of Order from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -73,7 +73,7 @@ class OuterComposite(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of OuterComposite from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -79,7 +79,7 @@ class OuterObjectWithEnumProperty(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of OuterObjectWithEnumProperty from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -79,7 +79,7 @@ class Parent(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of Parent from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -79,7 +79,7 @@ class ParentWithOptionalDict(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of ParentWithOptionalDict from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -99,7 +99,7 @@ class Pet(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of Pet from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -80,7 +80,7 @@ class Pig(BaseModel):
|
||||
return v
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: dict) -> Self:
|
||||
def from_dict(cls, obj: Union[str, Dict[str, Any]]) -> Self:
|
||||
return cls.from_json(json.dumps(obj))
|
||||
|
||||
@classmethod
|
||||
@@ -122,7 +122,7 @@ class Pig(BaseModel):
|
||||
else:
|
||||
return json.dumps(self.actual_instance)
|
||||
|
||||
def to_dict(self) -> Optional[Union[Dict, BasquePig, DanishPig]]:
|
||||
def to_dict(self) -> Optional[Union[Dict[str, Any], BasquePig, DanishPig]]:
|
||||
"""Returns the dict representation of the actual instance"""
|
||||
if self.actual_instance is None:
|
||||
return None
|
||||
|
||||
@@ -73,7 +73,7 @@ class PropertyNameCollision(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of PropertyNameCollision from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -74,7 +74,7 @@ class ReadOnlyFirst(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of ReadOnlyFirst from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -75,7 +75,7 @@ class SecondRef(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of SecondRef from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -75,7 +75,7 @@ class SelfReferenceModel(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of SelfReferenceModel from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -71,7 +71,7 @@ class SpecialModelName(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of SpecialModelName from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -87,7 +87,7 @@ class SpecialName(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of SpecialName from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -72,7 +72,7 @@ class Tag(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of Tag from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -71,7 +71,7 @@ class TestErrorResponsesWithModel400Response(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of TestErrorResponsesWithModel400Response from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -71,7 +71,7 @@ class TestErrorResponsesWithModel404Response(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of TestErrorResponsesWithModel404Response from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -79,7 +79,7 @@ class TestInlineFreeformAdditionalPropertiesRequest(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of TestInlineFreeformAdditionalPropertiesRequest from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -71,7 +71,7 @@ class Tiger(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of Tiger from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -81,7 +81,7 @@ class UnnamedDictWithAdditionalModelListProperties(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of UnnamedDictWithAdditionalModelListProperties from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -71,7 +71,7 @@ class UnnamedDictWithAdditionalStringListProperties(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of UnnamedDictWithAdditionalStringListProperties from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -78,7 +78,7 @@ class User(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of User from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -81,7 +81,7 @@ class WithNestedOneOf(BaseModel):
|
||||
return _dict
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, obj: Optional[Dict]) -> Optional[Self]:
|
||||
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
||||
"""Create an instance of WithNestedOneOf from a dict"""
|
||||
if obj is None:
|
||||
return None
|
||||
|
||||
@@ -16,7 +16,7 @@ import io
|
||||
import json
|
||||
import re
|
||||
import ssl
|
||||
from typing import Optional
|
||||
from typing import Optional, Union
|
||||
|
||||
import aiohttp
|
||||
import aiohttp_retry
|
||||
@@ -199,6 +199,7 @@ class RESTClientObject:
|
||||
declared content type."""
|
||||
raise ApiException(status=0, reason=msg)
|
||||
|
||||
pool_manager: Union[aiohttp.ClientSession, aiohttp_retry.RetryClient]
|
||||
if self.retry_client is not None and method in ALLOW_RETRY_METHODS:
|
||||
pool_manager = self.retry_client
|
||||
else:
|
||||
|
||||
@@ -13,12 +13,16 @@
|
||||
from base64 import b64encode
|
||||
from Crypto.IO import PEM, PKCS8
|
||||
from Crypto.Hash import SHA256, SHA512
|
||||
from Crypto.Hash.SHA512 import SHA512Hash
|
||||
from Crypto.Hash.SHA256 import SHA256Hash
|
||||
from Crypto.PublicKey import RSA, ECC
|
||||
from Crypto.Signature import PKCS1_v1_5, pss, DSS
|
||||
from datetime import timedelta
|
||||
from email.utils import formatdate
|
||||
import os
|
||||
import re
|
||||
from time import time
|
||||
from typing import List, Optional, Union
|
||||
from urllib.parse import urlencode, urlparse
|
||||
|
||||
# The constants below define a subset of HTTP headers that can be included in the
|
||||
@@ -67,18 +71,20 @@ HASH_SHA512 = 'sha512'
|
||||
|
||||
class HttpSigningConfiguration:
|
||||
"""The configuration parameters for the HTTP signature security scheme.
|
||||
|
||||
The HTTP signature security scheme is used to sign HTTP requests with a private key
|
||||
which is in possession of the API client.
|
||||
An 'Authorization' header is calculated by creating a hash of select headers,
|
||||
|
||||
An ``Authorization`` header is calculated by creating a hash of select headers,
|
||||
and optionally the body of the HTTP request, then signing the hash value using
|
||||
a private key. The 'Authorization' header is added to outbound HTTP requests.
|
||||
a private key. The ``Authorization`` header is added to outbound HTTP requests.
|
||||
|
||||
:param key_id: A string value specifying the identifier of the cryptographic key,
|
||||
when signing HTTP requests.
|
||||
:param signing_scheme: A string value specifying the signature scheme, when
|
||||
signing HTTP requests.
|
||||
Supported value are hs2019, rsa-sha256, rsa-sha512.
|
||||
Avoid using rsa-sha256, rsa-sha512 as they are deprecated. These values are
|
||||
Supported value are: ``hs2019``, ``rsa-sha256``, ``rsa-sha512``.
|
||||
Avoid using ``rsa-sha256``, ``rsa-sha512`` as they are deprecated. These values are
|
||||
available for server-side applications that only support the older
|
||||
HTTP signature algorithms.
|
||||
:param private_key_path: A string value specifying the path of the file containing
|
||||
@@ -87,18 +93,19 @@ class HttpSigningConfiguration:
|
||||
the private key.
|
||||
:param signed_headers: A list of strings. Each value is the name of a HTTP header
|
||||
that must be included in the HTTP signature calculation.
|
||||
The two special signature headers '(request-target)' and '(created)' SHOULD be
|
||||
The two special signature headers ``(request-target)`` and ``(created)`` SHOULD be
|
||||
included in SignedHeaders.
|
||||
The '(created)' header expresses when the signature was created.
|
||||
The '(request-target)' header is a concatenation of the lowercased :method, an
|
||||
The ``(created)`` header expresses when the signature was created.
|
||||
The ``(request-target)`` header is a concatenation of the lowercased :method, an
|
||||
ASCII space, and the :path pseudo-headers.
|
||||
When signed_headers is not specified, the client defaults to a single value,
|
||||
'(created)', in the list of HTTP headers.
|
||||
``(created)``, in the list of HTTP headers.
|
||||
When SignedHeaders contains the 'Digest' value, the client performs the
|
||||
following operations:
|
||||
1. Calculate a digest of request body, as specified in RFC3230, section 4.3.2.
|
||||
2. Set the 'Digest' header in the request body.
|
||||
3. Include the 'Digest' header and value in the HTTP signature.
|
||||
1. Calculate a digest of request body, as specified in `RFC3230,
|
||||
section 4.3.2<https://datatracker.ietf.org/doc/html/rfc3230#section-4.3.2>`_.
|
||||
2. Set the ``Digest`` header in the request body.
|
||||
3. Include the ``Digest`` header and value in the HTTP signature.
|
||||
:param signing_algorithm: A string value specifying the signature algorithm, when
|
||||
signing HTTP requests.
|
||||
Supported values are:
|
||||
@@ -116,12 +123,16 @@ class HttpSigningConfiguration:
|
||||
:param signature_max_validity: The signature max validity, expressed as
|
||||
a datetime.timedelta value. It must be a positive value.
|
||||
"""
|
||||
def __init__(self, key_id, signing_scheme, private_key_path,
|
||||
private_key_passphrase=None,
|
||||
signed_headers=None,
|
||||
signing_algorithm=None,
|
||||
hash_algorithm=None,
|
||||
signature_max_validity=None) -> None:
|
||||
def __init__(self,
|
||||
key_id: str,
|
||||
signing_scheme: str,
|
||||
private_key_path: str,
|
||||
private_key_passphrase: Union[None, str]=None,
|
||||
signed_headers: Optional[List[str]]=None,
|
||||
signing_algorithm: Optional[str]=None,
|
||||
hash_algorithm: Optional[str]=None,
|
||||
signature_max_validity: Optional[timedelta]=None,
|
||||
) -> None:
|
||||
self.key_id = key_id
|
||||
if signing_scheme not in {SCHEME_HS2019, SCHEME_RSA_SHA256, SCHEME_RSA_SHA512}:
|
||||
raise Exception("Unsupported security scheme: {0}".format(signing_scheme))
|
||||
@@ -165,11 +176,11 @@ class HttpSigningConfiguration:
|
||||
if HEADER_AUTHORIZATION in signed_headers:
|
||||
raise Exception("'Authorization' header cannot be included in signed headers")
|
||||
self.signed_headers = signed_headers
|
||||
self.private_key = None
|
||||
self.private_key: Optional[Union[ECC.EccKey, RSA.RsaKey]] = None
|
||||
"""The private key used to sign HTTP requests.
|
||||
Initialized when the PEM-encoded private key is loaded from a file.
|
||||
"""
|
||||
self.host = None
|
||||
self.host: Optional[str] = None
|
||||
"""The host name, optionally followed by a colon and TCP port number.
|
||||
"""
|
||||
self._load_private_key()
|
||||
@@ -207,7 +218,7 @@ class HttpSigningConfiguration:
|
||||
def get_public_key(self):
|
||||
"""Returns the public key object associated with the private key.
|
||||
"""
|
||||
pubkey = None
|
||||
pubkey: Optional[Union[ECC.EccKey, RSA.RsaKey]] = None
|
||||
if isinstance(self.private_key, RSA.RsaKey):
|
||||
pubkey = self.private_key.publickey()
|
||||
elif isinstance(self.private_key, ECC.EccKey):
|
||||
@@ -236,8 +247,11 @@ class HttpSigningConfiguration:
|
||||
elif pem_header in {'PRIVATE KEY', 'ENCRYPTED PRIVATE KEY'}:
|
||||
# Key is in PKCS8 format, which is capable of holding many different
|
||||
# types of private keys, not just EC keys.
|
||||
(key_binary, pem_header, is_encrypted) = \
|
||||
PEM.decode(pem_data, self.private_key_passphrase)
|
||||
if self.private_key_passphrase is not None:
|
||||
passphrase = self.private_key_passphrase.encode("utf-8")
|
||||
else:
|
||||
passphrase = None
|
||||
(key_binary, pem_header, is_encrypted) = PEM.decode(pem_data, passphrase)
|
||||
(oid, privkey, params) = \
|
||||
PKCS8.unwrap(key_binary, passphrase=self.private_key_passphrase)
|
||||
if oid == '1.2.840.10045.2.1':
|
||||
@@ -318,8 +332,11 @@ class HttpSigningConfiguration:
|
||||
request_headers_dict[HEADER_DIGEST] = '{0}{1}'.format(
|
||||
digest_prefix, b64_body_digest.decode('ascii'))
|
||||
elif hdr_key == HEADER_HOST.lower():
|
||||
value = target_host
|
||||
request_headers_dict[HEADER_HOST] = '{0}'.format(target_host)
|
||||
if isinstance(target_host, bytes):
|
||||
value = target_host.decode('ascii')
|
||||
else:
|
||||
value = target_host
|
||||
request_headers_dict[HEADER_HOST] = value
|
||||
else:
|
||||
value = next((v for k, v in headers.items() if k.lower() == hdr_key), None)
|
||||
if value is None:
|
||||
@@ -340,6 +357,9 @@ class HttpSigningConfiguration:
|
||||
The prefix is a string that identifies the cryptographic hash. It is used
|
||||
to generate the 'Digest' header as specified in RFC 3230.
|
||||
"""
|
||||
|
||||
digest: Union[SHA256Hash, SHA512Hash]
|
||||
|
||||
if self.hash_algorithm == HASH_SHA512:
|
||||
digest = SHA512.new()
|
||||
prefix = 'SHA-512='
|
||||
|
||||
@@ -42,3 +42,34 @@ files = [
|
||||
#"test", # auto-generated tests
|
||||
"tests", # hand-written tests
|
||||
]
|
||||
# TODO: enable "strict" once all these individual checks are passing
|
||||
# strict = true
|
||||
|
||||
# List from: https://mypy.readthedocs.io/en/stable/existing_code.html#introduce-stricter-options
|
||||
warn_unused_configs = true
|
||||
warn_redundant_casts = true
|
||||
warn_unused_ignores = true
|
||||
|
||||
## Getting these passing should be easy
|
||||
strict_equality = true
|
||||
strict_concatenate = true
|
||||
|
||||
## Strongly recommend enabling this one as soon as you can
|
||||
check_untyped_defs = true
|
||||
|
||||
## These shouldn't be too much additional work, but may be tricky to
|
||||
## get passing if you use a lot of untyped libraries
|
||||
disallow_subclassing_any = true
|
||||
disallow_untyped_decorators = true
|
||||
disallow_any_generics = true
|
||||
|
||||
### These next few are various gradations of forcing use of type annotations
|
||||
#disallow_untyped_calls = true
|
||||
#disallow_incomplete_defs = true
|
||||
#disallow_untyped_defs = true
|
||||
#
|
||||
### This one isn't too hard to get passing, but return on investment is lower
|
||||
#no_implicit_reexport = true
|
||||
#
|
||||
### This one can be tricky to get passing if you use a lot of untyped libraries
|
||||
#warn_return_any = true
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
# flake8: noqa
|
||||
|
||||
|
||||
from datetime import date
|
||||
import os
|
||||
import time
|
||||
import unittest
|
||||
@@ -118,6 +119,7 @@ class ModelTests(unittest.TestCase):
|
||||
|
||||
nested_json = nested.to_json()
|
||||
nested2 = petstore_api.WithNestedOneOf.from_json(nested_json)
|
||||
assert nested2 is not None
|
||||
self.assertEqual(nested2.to_json(), nested_json)
|
||||
|
||||
def test_anyOf(self):
|
||||
@@ -172,6 +174,7 @@ class ModelTests(unittest.TestCase):
|
||||
self.assertEqual(dog.to_dict(), {'breed': 'bulldog', 'className':
|
||||
'dog', 'color': 'white'})
|
||||
dog2 = petstore_api.Dog.from_json(dog.to_json())
|
||||
assert dog2 is not None
|
||||
self.assertEqual(dog2.breed, 'bulldog')
|
||||
self.assertEqual(dog2.class_name, "dog")
|
||||
self.assertEqual(dog2.color, 'white')
|
||||
@@ -180,7 +183,8 @@ class ModelTests(unittest.TestCase):
|
||||
def test_list(self):
|
||||
# should throw exception as var_123_list should be string
|
||||
try:
|
||||
l3 = petstore_api.List(var_123_list=123)
|
||||
# Don't check the typing, because we are actually testing a typing error.
|
||||
l3 = petstore_api.ListClass(**{"123-list": 123}) # type: ignore
|
||||
self.assertTrue(False) # this line shouldn't execute
|
||||
except ValueError as e:
|
||||
#error_message = (
|
||||
@@ -189,13 +193,14 @@ class ModelTests(unittest.TestCase):
|
||||
# " str type expected (type=type_error.str)\n")
|
||||
self.assertTrue("str type expected" in str(e))
|
||||
|
||||
l = petstore_api.List(var_123_list="bulldog")
|
||||
l = petstore_api.ListClass(**{"123-list": "bulldog"})
|
||||
self.assertEqual(l.to_json(), '{"123-list":"bulldog"}')
|
||||
self.assertEqual(l.to_dict(), {'123-list': 'bulldog'})
|
||||
l2 = petstore_api.List.from_json(l.to_json())
|
||||
self.assertEqual(l2.var_123_list, 'bulldog')
|
||||
|
||||
self.assertTrue(isinstance(l2, petstore_api.List))
|
||||
l2 = petstore_api.ListClass.from_json(l.to_json())
|
||||
assert l2 is not None
|
||||
self.assertEqual(l2.var_123_list, 'bulldog')
|
||||
self.assertTrue(isinstance(l2, petstore_api.ListClass))
|
||||
|
||||
def test_enum_ref_property(self):
|
||||
# test enum ref property
|
||||
@@ -204,26 +209,28 @@ class ModelTests(unittest.TestCase):
|
||||
self.assertEqual(d.to_json(), '{"value": 1}')
|
||||
d2 = petstore_api.OuterObjectWithEnumProperty(value=petstore_api.OuterEnumInteger.NUMBER_1, str_value=petstore_api.OuterEnum.DELIVERED)
|
||||
self.assertEqual(d2.to_json(), '{"str_value": "delivered", "value": 1}')
|
||||
|
||||
# test from_json (round trip)
|
||||
d3 = petstore_api.OuterObjectWithEnumProperty.from_json(d2.to_json())
|
||||
assert d3 is not None
|
||||
self.assertEqual(d3.str_value, petstore_api.OuterEnum.DELIVERED)
|
||||
self.assertEqual(d3.value, petstore_api.OuterEnumInteger.NUMBER_1)
|
||||
self.assertEqual(d3.to_json(), '{"str_value": "delivered", "value": 1}')
|
||||
|
||||
@unittest.skip("TODO: pydantic v2: 'float' field alias the 'float' type used by 'number'")
|
||||
def test_float_strict_type(self):
|
||||
# assigning 123 to float shouldn't throw an exception
|
||||
a = petstore_api.FormatTest(number=39.8, float=123, byte=bytes("string", 'utf-8'), date="2013-09-17", password="testing09876")
|
||||
self.assertEqual(a.float, 123.0)
|
||||
a = petstore_api.FormatTest(number=39.8, float=123, byte=bytes("string", 'utf-8'), date=date(2013, 9, 17), password="testing09876")
|
||||
self.assertEqual(a.var_float, 123.0)
|
||||
|
||||
json_str = "{\"number\": 34.5, \"float\": \"456\", \"date\": \"2013-12-08\", \"password\": \"empty1234567\", \"pattern_with_digits\": \"1234567890\", \"pattern_with_digits_and_delimiter\": \"image_123\", \"string_with_double_quote_pattern\": \"this is \\\"something\\\"\", \"string\": \"string\"}"
|
||||
# no exception thrown when assigning 456 (integer) to float type since strict is set to false
|
||||
f = petstore_api.FormatTest.from_json(json_str)
|
||||
self.assertEqual(f.float, 456.0)
|
||||
assert f is not None
|
||||
self.assertEqual(f.var_float, 456.0)
|
||||
|
||||
def test_valdiator(self):
|
||||
# test regular expression
|
||||
a = petstore_api.FormatTest(number=123.45, byte=bytes("string", 'utf-8'), date="2013-09-17", password="testing09876")
|
||||
a = petstore_api.FormatTest(number=123.45, byte=bytes("string", 'utf-8'), date=date(2013, 9, 17), password="testing09876")
|
||||
try:
|
||||
a.pattern_with_digits_and_delimiter = "123"
|
||||
self.assertTrue(False) # this line shouldn't execute
|
||||
|
||||
@@ -71,6 +71,7 @@ class TestPetApiTests(unittest.TestCase):
|
||||
@async_test
|
||||
async def test_async_with_result(self):
|
||||
await self.pet_api.add_pet(self.pet)
|
||||
assert self.pet.id is not None
|
||||
|
||||
tasks = [
|
||||
asyncio.create_task(coro)
|
||||
@@ -100,31 +101,32 @@ class TestPetApiTests(unittest.TestCase):
|
||||
@async_test
|
||||
async def test_add_pet_and_get_pet_by_id(self):
|
||||
await self.pet_api.add_pet(self.pet)
|
||||
assert self.pet.id is not None
|
||||
|
||||
fetched = await self.pet_api.get_pet_by_id(pet_id=self.pet.id)
|
||||
self.assertIsNotNone(fetched)
|
||||
self.assertEqual(self.pet.id, fetched.id)
|
||||
self.assertIsNotNone(fetched.category)
|
||||
assert self.pet.category is not None
|
||||
assert fetched.category is not None
|
||||
self.assertEqual(self.pet.category.name, fetched.category.name)
|
||||
|
||||
@async_test
|
||||
async def test_add_pet_and_get_pet_by_id_with_http_info(self):
|
||||
await self.pet_api.add_pet(self.pet)
|
||||
assert self.pet.id is not None
|
||||
|
||||
fetched = await self.pet_api.get_pet_by_id_with_http_info(pet_id=self.pet.id)
|
||||
self.assertIsNotNone(fetched)
|
||||
self.assertEqual(self.pet.id, fetched.data.id)
|
||||
self.assertIsNotNone(fetched.data.category)
|
||||
assert self.pet.category is not None
|
||||
assert fetched.data.category is not None
|
||||
self.assertEqual(self.pet.category.name, fetched.data.category.name)
|
||||
|
||||
@async_test
|
||||
async def test_add_pet_and_get_pet_by_id_without_preload_content(self):
|
||||
await self.pet_api.add_pet(self.pet)
|
||||
assert self.pet.id is not None
|
||||
|
||||
fetched = await self.pet_api.get_pet_by_id_without_preload_content(pet_id=self.pet.id)
|
||||
self.assertIsInstance(fetched, aiohttp.ClientResponse)
|
||||
# self.assertFalse(fetched.closed)
|
||||
# self.assertFalse(fetched.content._eof)
|
||||
read = await fetched.content.read()
|
||||
self.assertTrue(fetched.closed)
|
||||
self.assertTrue(fetched.content._eof)
|
||||
@@ -136,17 +138,19 @@ class TestPetApiTests(unittest.TestCase):
|
||||
async def test_update_pet(self):
|
||||
self.pet.name = "hello kity with updated"
|
||||
await self.pet_api.update_pet(self.pet)
|
||||
assert self.pet.id is not None
|
||||
|
||||
fetched = await self.pet_api.get_pet_by_id(pet_id=self.pet.id)
|
||||
self.assertIsNotNone(fetched)
|
||||
self.assertEqual(self.pet.id, fetched.id)
|
||||
self.assertEqual(self.pet.name, fetched.name)
|
||||
self.assertIsNotNone(fetched.category)
|
||||
assert self.pet.category is not None
|
||||
assert fetched.category is not None
|
||||
self.assertEqual(fetched.category.name, self.pet.category.name)
|
||||
|
||||
@async_test
|
||||
async def test_find_pets_by_status(self):
|
||||
await self.pet_api.add_pet(self.pet)
|
||||
assert self.pet.status is not None
|
||||
pets = await self.pet_api.find_pets_by_status(status=[self.pet.status])
|
||||
self.assertIn(
|
||||
self.pet.id,
|
||||
@@ -156,6 +160,7 @@ class TestPetApiTests(unittest.TestCase):
|
||||
@async_test
|
||||
async def test_find_pets_by_tags(self):
|
||||
await self.pet_api.add_pet(self.pet)
|
||||
assert self.tag.name is not None
|
||||
pets = await self.pet_api.find_pets_by_tags(tags=[self.tag.name])
|
||||
self.assertIn(
|
||||
self.pet.id,
|
||||
@@ -165,6 +170,7 @@ class TestPetApiTests(unittest.TestCase):
|
||||
@async_test
|
||||
async def test_update_pet_with_form(self):
|
||||
await self.pet_api.add_pet(self.pet)
|
||||
assert self.pet.id is not None
|
||||
|
||||
name = "hello kity with form updated"
|
||||
status = "pending"
|
||||
@@ -180,6 +186,7 @@ class TestPetApiTests(unittest.TestCase):
|
||||
# upload file with form parameter
|
||||
try:
|
||||
additional_metadata = "special"
|
||||
assert self.pet.id is not None
|
||||
await self.pet_api.upload_file(
|
||||
pet_id=self.pet.id,
|
||||
additional_metadata=additional_metadata,
|
||||
@@ -197,6 +204,7 @@ class TestPetApiTests(unittest.TestCase):
|
||||
@async_test
|
||||
async def test_delete_pet(self):
|
||||
await self.pet_api.add_pet(self.pet)
|
||||
assert self.pet.id is not None
|
||||
await self.pet_api.delete_pet(pet_id=self.pet.id, api_key="special-key")
|
||||
|
||||
try:
|
||||
@@ -213,6 +221,7 @@ class TestPetApiTests(unittest.TestCase):
|
||||
config.proxy = 'http://localhost:8080/proxy'
|
||||
async with petstore_api.ApiClient(config) as client:
|
||||
pet_api = petstore_api.PetApi(client)
|
||||
assert self.pet.id is not None
|
||||
|
||||
with self.assertRaisesRegex(petstore_api.rest.aiohttp.client_exceptions.ClientProxyConnectionError,
|
||||
'Cannot connect to host localhost:8080'):
|
||||
|
||||
@@ -72,11 +72,14 @@ class PetModelTests(unittest.TestCase):
|
||||
" \"status\": \"available\",\n"
|
||||
" \"tags\": [{\"id\": 1, \"name\": \"None\"}]}")
|
||||
pet = petstore_api.Pet.from_json(json_str)
|
||||
assert pet is not None
|
||||
self.assertEqual(pet.id, 1)
|
||||
self.assertEqual(pet.status, "available")
|
||||
self.assertEqual(pet.photo_urls, ["string"])
|
||||
assert pet.tags is not None
|
||||
self.assertEqual(pet.tags[0].id, 1)
|
||||
self.assertEqual(pet.tags[0].name, "None")
|
||||
assert pet.category is not None
|
||||
self.assertEqual(pet.category.id, 1)
|
||||
# test to_json
|
||||
self.assertEqual(pet.to_json(),
|
||||
@@ -90,16 +93,22 @@ class PetModelTests(unittest.TestCase):
|
||||
|
||||
# test from_dict
|
||||
pet2 = petstore_api.Pet.from_dict(pet.to_dict())
|
||||
assert pet2 is not None
|
||||
self.assertEqual(pet2.id, 1)
|
||||
self.assertEqual(pet2.status, "available")
|
||||
self.assertEqual(pet2.photo_urls, ["string"])
|
||||
assert pet2.tags is not None
|
||||
self.assertEqual(pet2.tags[0].id, 1)
|
||||
self.assertEqual(pet2.tags[0].name, "None")
|
||||
assert pet2.category is not None
|
||||
self.assertEqual(pet2.category.id, 1)
|
||||
|
||||
def test_unpack_operator(self):
|
||||
d = {"name": "required name", "id": 123, "photoUrls": ["https://a.com", "https://b.com"]}
|
||||
pet = petstore_api.Pet(**d)
|
||||
pet = petstore_api.Pet(
|
||||
name="required name",
|
||||
id=123,
|
||||
photoUrls=["https://a.com", "https://b.com"],
|
||||
)
|
||||
self.assertEqual(pet.to_json(), '{"id": 123, "name": "required name", "photoUrls": ["https://a.com", "https://b.com"]}')
|
||||
self.assertEqual(pet.to_dict(), {"id": 123, "name": "required name", "photoUrls": ["https://a.com", "https://b.com"]})
|
||||
def test_optional_fields(self):
|
||||
|
||||
Reference in New Issue
Block a user