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:
Jonathan Ballet
2024-01-09 09:45:05 +01:00
committed by GitHub
parent c041d7e12f
commit df7976c1a3
234 changed files with 992 additions and 628 deletions

View File

@@ -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

View File

@@ -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'):

View File

@@ -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):