From efb4f9ef0466e7bf6284ab06026e0d749d725d3f Mon Sep 17 00:00:00 2001 From: Anis Date: Mon, 21 Aug 2023 13:01:18 +0000 Subject: [PATCH 1/3] adopt python3.5+ syntax removing some residual python2 code, since it is not supported anymore, like: - no need for `six` anymore - no need for encoding utf8 in top file - remove `object` inheritance in base model - remove absolute import `__future__` --- .../main/resources/python-flask/__init__model.mustache | 3 --- .../src/main/resources/python-flask/base_model.mustache | 5 ++--- .../src/main/resources/python-flask/controller.mustache | 7 +++---- .../main/resources/python-flask/controller_test.mustache | 4 ---- .../src/main/resources/python-flask/encoder.mustache | 3 +-- .../src/main/resources/python-flask/model.mustache | 3 --- .../src/main/resources/python-flask/setup.mustache | 2 -- .../main/resources/python-flask/typing_utils.mustache | 2 -- .../src/main/resources/python-flask/util.mustache | 9 ++++----- 9 files changed, 10 insertions(+), 28 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/python-flask/__init__model.mustache b/modules/openapi-generator/src/main/resources/python-flask/__init__model.mustache index 98b56e3d1540..e39abfcf4631 100644 --- a/modules/openapi-generator/src/main/resources/python-flask/__init__model.mustache +++ b/modules/openapi-generator/src/main/resources/python-flask/__init__model.mustache @@ -1,7 +1,4 @@ -# coding: utf-8 - # flake8: noqa -from __future__ import absolute_import # import models into model package {{#models}}{{#model}}from {{modelPackage}}.{{classFilename}} import {{classname}}{{/model}} {{/models}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/python-flask/base_model.mustache b/modules/openapi-generator/src/main/resources/python-flask/base_model.mustache index c771c9e58d5c..33b96e27b55b 100644 --- a/modules/openapi-generator/src/main/resources/python-flask/base_model.mustache +++ b/modules/openapi-generator/src/main/resources/python-flask/base_model.mustache @@ -1,6 +1,5 @@ import pprint -import six import typing from {{packageName}} import util @@ -8,7 +7,7 @@ from {{packageName}} import util T = typing.TypeVar('T') -class Model(object): +class Model: # openapiTypes: The key is attribute name and the # value is attribute type. openapi_types: typing.Dict[str, type] = {} @@ -29,7 +28,7 @@ class Model(object): """ result = {} - for attr, _ in six.iteritems(self.openapi_types): + for attr in self.openapi_types: value = getattr(self, attr) if isinstance(value, list): result[attr] = list(map( diff --git a/modules/openapi-generator/src/main/resources/python-flask/controller.mustache b/modules/openapi-generator/src/main/resources/python-flask/controller.mustache index 9422589cc7c5..ad276a661ad3 100644 --- a/modules/openapi-generator/src/main/resources/python-flask/controller.mustache +++ b/modules/openapi-generator/src/main/resources/python-flask/controller.mustache @@ -1,5 +1,4 @@ import connexion -import six from typing import Dict from typing import Tuple from typing import Union @@ -97,15 +96,15 @@ def {{operationId}}({{#allParams}}{{paramName}}{{^required}}=None{{/required}}{{ {{#items}} {{#isDate}} if connexion.request.is_json: - {{paramName}} = {k: util.deserialize_date(v) for k, v in six.iteritems(connexion.request.get_json())} # noqa: E501 + {{paramName}} = {k: util.deserialize_date(v) for k, v in connexion.request.get_json().items()} # noqa: E501 {{/isDate}} {{#isDateTime}} if connexion.request.is_json: - {{paramName}} = {k: util.deserialize_datetime(v) for k, v in six.iteritems(connexion.request.get_json())} # noqa: E501 + {{paramName}} = {k: util.deserialize_datetime(v) for k, v in connexion.request.get_json().items()} # noqa: E501 {{/isDateTime}} {{#complexType}} if connexion.request.is_json: - {{paramName}} = {k: {{baseType}}.from_dict(v) for k, v in six.iteritems(connexion.request.get_json())} # noqa: E501 + {{paramName}} = {k: {{baseType}}.from_dict(v) for k, v in connexion.request.get_json().items()} # noqa: E501 {{/complexType}} {{/items}} {{/isMap}} diff --git a/modules/openapi-generator/src/main/resources/python-flask/controller_test.mustache b/modules/openapi-generator/src/main/resources/python-flask/controller_test.mustache index f8b8beff559c..e98fbd307006 100644 --- a/modules/openapi-generator/src/main/resources/python-flask/controller_test.mustache +++ b/modules/openapi-generator/src/main/resources/python-flask/controller_test.mustache @@ -1,10 +1,6 @@ -# coding: utf-8 - -from __future__ import absolute_import import unittest from flask import json -from six import BytesIO {{#imports}}{{import}} # noqa: E501 {{/imports}} diff --git a/modules/openapi-generator/src/main/resources/python-flask/encoder.mustache b/modules/openapi-generator/src/main/resources/python-flask/encoder.mustache index 0021509ffc47..4d27ad24866a 100644 --- a/modules/openapi-generator/src/main/resources/python-flask/encoder.mustache +++ b/modules/openapi-generator/src/main/resources/python-flask/encoder.mustache @@ -1,5 +1,4 @@ from connexion.apps.flask_app import FlaskJSONEncoder -import six from {{modelPackage}}.base_model import Model @@ -10,7 +9,7 @@ class JSONEncoder(FlaskJSONEncoder): def default(self, o): if isinstance(o, Model): dikt = {} - for attr, _ in six.iteritems(o.openapi_types): + for attr in o.openapi_types: value = getattr(o, attr) if value is None and not self.include_nulls: continue diff --git a/modules/openapi-generator/src/main/resources/python-flask/model.mustache b/modules/openapi-generator/src/main/resources/python-flask/model.mustache index b790e80f1874..4e7ecde8ef20 100644 --- a/modules/openapi-generator/src/main/resources/python-flask/model.mustache +++ b/modules/openapi-generator/src/main/resources/python-flask/model.mustache @@ -1,6 +1,3 @@ -# coding: utf-8 - -from __future__ import absolute_import from datetime import date, datetime # noqa: F401 from typing import List, Dict # noqa: F401 diff --git a/modules/openapi-generator/src/main/resources/python-flask/setup.mustache b/modules/openapi-generator/src/main/resources/python-flask/setup.mustache index ec06a7798b2e..00dd770077be 100644 --- a/modules/openapi-generator/src/main/resources/python-flask/setup.mustache +++ b/modules/openapi-generator/src/main/resources/python-flask/setup.mustache @@ -1,5 +1,3 @@ -# coding: utf-8 - import sys from setuptools import setup, find_packages diff --git a/modules/openapi-generator/src/main/resources/python-flask/typing_utils.mustache b/modules/openapi-generator/src/main/resources/python-flask/typing_utils.mustache index 0563f81fd534..74e3c913a7db 100644 --- a/modules/openapi-generator/src/main/resources/python-flask/typing_utils.mustache +++ b/modules/openapi-generator/src/main/resources/python-flask/typing_utils.mustache @@ -1,5 +1,3 @@ -# coding: utf-8 - import sys if sys.version_info < (3, 7): diff --git a/modules/openapi-generator/src/main/resources/python-flask/util.mustache b/modules/openapi-generator/src/main/resources/python-flask/util.mustache index 60ebebac8e13..5f2f4539e228 100644 --- a/modules/openapi-generator/src/main/resources/python-flask/util.mustache +++ b/modules/openapi-generator/src/main/resources/python-flask/util.mustache @@ -1,6 +1,5 @@ import datetime -import six import typing from {{packageName}} import typing_utils @@ -16,7 +15,7 @@ def _deserialize(data, klass): if data is None: return None - if klass in six.integer_types or klass in (float, str, bool, bytearray): + if klass in (int, float, str, bool, bytearray): return _deserialize_primitive(data, klass) elif klass == object: return _deserialize_object(data) @@ -45,7 +44,7 @@ def _deserialize_primitive(data, klass): try: value = klass(data) except UnicodeEncodeError: - value = six.u(data) + value = data except TypeError: value = data return value @@ -110,7 +109,7 @@ def deserialize_model(data, klass): if not instance.openapi_types: return data - for attr, attr_type in six.iteritems(instance.openapi_types): + for attr, attr_type in instance.openapi_types.items(): if data is not None \ and instance.attribute_map[attr] in data \ and isinstance(data, (list, dict)): @@ -145,4 +144,4 @@ def _deserialize_dict(data, boxed_type): :rtype: dict """ return {k: _deserialize(v, boxed_type) - for k, v in six.iteritems(data)} + for k, v in data.items() } From ffc97d956f959f7cd11e1c9f55da6c275a66d1d2 Mon Sep 17 00:00:00 2001 From: Anis Campos Date: Tue, 22 Aug 2023 13:22:24 +0200 Subject: [PATCH 2/3] generate samples applying the new templates --- .../controllers/pet_controller.py | 1 - .../controllers/store_controller.py | 1 - .../controllers/user_controller.py | 1 - .../python-flask/openapi_server/encoder.py | 3 +- .../openapi_server/models/__init__.py | 3 -- .../openapi_server/models/api_response.py | 3 -- .../openapi_server/models/base_model.py | 5 +-- .../openapi_server/models/category.py | 3 -- .../openapi_server/models/order.py | 3 -- .../python-flask/openapi_server/models/pet.py | 3 -- .../python-flask/openapi_server/models/tag.py | 3 -- .../openapi_server/models/user.py | 3 -- .../test/test_pet_controller.py | 42 ++----------------- .../test/test_store_controller.py | 6 +-- .../test/test_user_controller.py | 4 -- .../openapi_server/typing_utils.py | 2 - .../python-flask/openapi_server/util.py | 9 ++-- samples/server/petstore/python-flask/setup.py | 2 - 18 files changed, 11 insertions(+), 86 deletions(-) diff --git a/samples/server/petstore/python-flask/openapi_server/controllers/pet_controller.py b/samples/server/petstore/python-flask/openapi_server/controllers/pet_controller.py index e31e316a07e8..89086c54bd41 100644 --- a/samples/server/petstore/python-flask/openapi_server/controllers/pet_controller.py +++ b/samples/server/petstore/python-flask/openapi_server/controllers/pet_controller.py @@ -1,5 +1,4 @@ import connexion -import six from typing import Dict from typing import Tuple from typing import Union diff --git a/samples/server/petstore/python-flask/openapi_server/controllers/store_controller.py b/samples/server/petstore/python-flask/openapi_server/controllers/store_controller.py index 21bc29621fed..62887e7adac0 100644 --- a/samples/server/petstore/python-flask/openapi_server/controllers/store_controller.py +++ b/samples/server/petstore/python-flask/openapi_server/controllers/store_controller.py @@ -1,5 +1,4 @@ import connexion -import six from typing import Dict from typing import Tuple from typing import Union diff --git a/samples/server/petstore/python-flask/openapi_server/controllers/user_controller.py b/samples/server/petstore/python-flask/openapi_server/controllers/user_controller.py index 8cd4edf68a27..0acef4751501 100644 --- a/samples/server/petstore/python-flask/openapi_server/controllers/user_controller.py +++ b/samples/server/petstore/python-flask/openapi_server/controllers/user_controller.py @@ -1,5 +1,4 @@ import connexion -import six from typing import Dict from typing import Tuple from typing import Union diff --git a/samples/server/petstore/python-flask/openapi_server/encoder.py b/samples/server/petstore/python-flask/openapi_server/encoder.py index 1ec9cb99b838..60f4fa67e7dc 100644 --- a/samples/server/petstore/python-flask/openapi_server/encoder.py +++ b/samples/server/petstore/python-flask/openapi_server/encoder.py @@ -1,5 +1,4 @@ from connexion.apps.flask_app import FlaskJSONEncoder -import six from openapi_server.models.base_model import Model @@ -10,7 +9,7 @@ class JSONEncoder(FlaskJSONEncoder): def default(self, o): if isinstance(o, Model): dikt = {} - for attr, _ in six.iteritems(o.openapi_types): + for attr in o.openapi_types: value = getattr(o, attr) if value is None and not self.include_nulls: continue diff --git a/samples/server/petstore/python-flask/openapi_server/models/__init__.py b/samples/server/petstore/python-flask/openapi_server/models/__init__.py index 962f6f34936d..24ea9866d7bf 100644 --- a/samples/server/petstore/python-flask/openapi_server/models/__init__.py +++ b/samples/server/petstore/python-flask/openapi_server/models/__init__.py @@ -1,7 +1,4 @@ -# coding: utf-8 - # flake8: noqa -from __future__ import absolute_import # import models into model package from openapi_server.models.api_response import ApiResponse from openapi_server.models.category import Category diff --git a/samples/server/petstore/python-flask/openapi_server/models/api_response.py b/samples/server/petstore/python-flask/openapi_server/models/api_response.py index a795a0a22246..87801d39e324 100644 --- a/samples/server/petstore/python-flask/openapi_server/models/api_response.py +++ b/samples/server/petstore/python-flask/openapi_server/models/api_response.py @@ -1,6 +1,3 @@ -# coding: utf-8 - -from __future__ import absolute_import from datetime import date, datetime # noqa: F401 from typing import List, Dict # noqa: F401 diff --git a/samples/server/petstore/python-flask/openapi_server/models/base_model.py b/samples/server/petstore/python-flask/openapi_server/models/base_model.py index 916e582ec27f..c01b423a7432 100644 --- a/samples/server/petstore/python-flask/openapi_server/models/base_model.py +++ b/samples/server/petstore/python-flask/openapi_server/models/base_model.py @@ -1,6 +1,5 @@ import pprint -import six import typing from openapi_server import util @@ -8,7 +7,7 @@ T = typing.TypeVar('T') -class Model(object): +class Model: # openapiTypes: The key is attribute name and the # value is attribute type. openapi_types: typing.Dict[str, type] = {} @@ -29,7 +28,7 @@ def to_dict(self): """ result = {} - for attr, _ in six.iteritems(self.openapi_types): + for attr in self.openapi_types: value = getattr(self, attr) if isinstance(value, list): result[attr] = list(map( diff --git a/samples/server/petstore/python-flask/openapi_server/models/category.py b/samples/server/petstore/python-flask/openapi_server/models/category.py index 5e068634926b..222a30f6f280 100644 --- a/samples/server/petstore/python-flask/openapi_server/models/category.py +++ b/samples/server/petstore/python-flask/openapi_server/models/category.py @@ -1,6 +1,3 @@ -# coding: utf-8 - -from __future__ import absolute_import from datetime import date, datetime # noqa: F401 from typing import List, Dict # noqa: F401 diff --git a/samples/server/petstore/python-flask/openapi_server/models/order.py b/samples/server/petstore/python-flask/openapi_server/models/order.py index b9b11b2b35a5..b0df0613cccd 100644 --- a/samples/server/petstore/python-flask/openapi_server/models/order.py +++ b/samples/server/petstore/python-flask/openapi_server/models/order.py @@ -1,6 +1,3 @@ -# coding: utf-8 - -from __future__ import absolute_import from datetime import date, datetime # noqa: F401 from typing import List, Dict # noqa: F401 diff --git a/samples/server/petstore/python-flask/openapi_server/models/pet.py b/samples/server/petstore/python-flask/openapi_server/models/pet.py index 1473099c5f8e..57cbb673879e 100644 --- a/samples/server/petstore/python-flask/openapi_server/models/pet.py +++ b/samples/server/petstore/python-flask/openapi_server/models/pet.py @@ -1,6 +1,3 @@ -# coding: utf-8 - -from __future__ import absolute_import from datetime import date, datetime # noqa: F401 from typing import List, Dict # noqa: F401 diff --git a/samples/server/petstore/python-flask/openapi_server/models/tag.py b/samples/server/petstore/python-flask/openapi_server/models/tag.py index c4dfa927b864..1088ad716549 100644 --- a/samples/server/petstore/python-flask/openapi_server/models/tag.py +++ b/samples/server/petstore/python-flask/openapi_server/models/tag.py @@ -1,6 +1,3 @@ -# coding: utf-8 - -from __future__ import absolute_import from datetime import date, datetime # noqa: F401 from typing import List, Dict # noqa: F401 diff --git a/samples/server/petstore/python-flask/openapi_server/models/user.py b/samples/server/petstore/python-flask/openapi_server/models/user.py index 8ed94b32f48a..e8e311699545 100644 --- a/samples/server/petstore/python-flask/openapi_server/models/user.py +++ b/samples/server/petstore/python-flask/openapi_server/models/user.py @@ -1,6 +1,3 @@ -# coding: utf-8 - -from __future__ import absolute_import from datetime import date, datetime # noqa: F401 from typing import List, Dict # noqa: F401 diff --git a/samples/server/petstore/python-flask/openapi_server/test/test_pet_controller.py b/samples/server/petstore/python-flask/openapi_server/test/test_pet_controller.py index d1eb1d326681..a62cb03709c8 100644 --- a/samples/server/petstore/python-flask/openapi_server/test/test_pet_controller.py +++ b/samples/server/petstore/python-flask/openapi_server/test/test_pet_controller.py @@ -1,10 +1,6 @@ -# coding: utf-8 - -from __future__ import absolute_import import unittest from flask import json -from six import BytesIO from openapi_server.models.api_response import ApiResponse # noqa: E501 from openapi_server.models.pet import Pet # noqa: E501 @@ -20,23 +16,7 @@ def test_add_pet(self): Add a new pet to the store """ - body = { - "photoUrls" : [ "photoUrls", "photoUrls" ], - "name" : "doggie", - "id" : 0, - "category" : { - "name" : "name", - "id" : 6 - }, - "tags" : [ { - "name" : "name", - "id" : 1 - }, { - "name" : "name", - "id" : 1 - } ], - "status" : "available" -} + body = {"photoUrls":["photoUrls","photoUrls"],"name":"doggie","id":0,"category":{"name":"name","id":6},"tags":[{"name":"name","id":1},{"name":"name","id":1}],"status":"available"} headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer special-key', @@ -71,7 +51,7 @@ def test_find_pets_by_status(self): Finds Pets by status """ - query_string = [('status', 'available')] + query_string = [('status', ['status_example'])] headers = { 'Accept': 'application/json', 'Authorization': 'Bearer special-key', @@ -124,23 +104,7 @@ def test_update_pet(self): Update an existing pet """ - body = { - "photoUrls" : [ "photoUrls", "photoUrls" ], - "name" : "doggie", - "id" : 0, - "category" : { - "name" : "name", - "id" : 6 - }, - "tags" : [ { - "name" : "name", - "id" : 1 - }, { - "name" : "name", - "id" : 1 - } ], - "status" : "available" -} + body = {"photoUrls":["photoUrls","photoUrls"],"name":"doggie","id":0,"category":{"name":"name","id":6},"tags":[{"name":"name","id":1},{"name":"name","id":1}],"status":"available"} headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer special-key', diff --git a/samples/server/petstore/python-flask/openapi_server/test/test_store_controller.py b/samples/server/petstore/python-flask/openapi_server/test/test_store_controller.py index 43867b1d98e9..36b656cd827d 100644 --- a/samples/server/petstore/python-flask/openapi_server/test/test_store_controller.py +++ b/samples/server/petstore/python-flask/openapi_server/test/test_store_controller.py @@ -1,10 +1,6 @@ -# coding: utf-8 - -from __future__ import absolute_import import unittest from flask import json -from six import BytesIO from openapi_server.models.order import Order # noqa: E501 from openapi_server.test import BaseTestCase @@ -52,7 +48,7 @@ def test_get_order_by_id(self): 'Accept': 'application/json', } response = self.client.open( - '/v2/store/order/{order_id}'.format(order_id=1), + '/v2/store/order/{order_id}'.format(order_id=56), method='GET', headers=headers) self.assert200(response, diff --git a/samples/server/petstore/python-flask/openapi_server/test/test_user_controller.py b/samples/server/petstore/python-flask/openapi_server/test/test_user_controller.py index 010a72b03069..a991011b3166 100644 --- a/samples/server/petstore/python-flask/openapi_server/test/test_user_controller.py +++ b/samples/server/petstore/python-flask/openapi_server/test/test_user_controller.py @@ -1,10 +1,6 @@ -# coding: utf-8 - -from __future__ import absolute_import import unittest from flask import json -from six import BytesIO from openapi_server.models.user import User # noqa: E501 from openapi_server.test import BaseTestCase diff --git a/samples/server/petstore/python-flask/openapi_server/typing_utils.py b/samples/server/petstore/python-flask/openapi_server/typing_utils.py index 0563f81fd534..74e3c913a7db 100644 --- a/samples/server/petstore/python-flask/openapi_server/typing_utils.py +++ b/samples/server/petstore/python-flask/openapi_server/typing_utils.py @@ -1,5 +1,3 @@ -# coding: utf-8 - import sys if sys.version_info < (3, 7): diff --git a/samples/server/petstore/python-flask/openapi_server/util.py b/samples/server/petstore/python-flask/openapi_server/util.py index 2a63f2109ba5..bd83c5b330bb 100644 --- a/samples/server/petstore/python-flask/openapi_server/util.py +++ b/samples/server/petstore/python-flask/openapi_server/util.py @@ -1,6 +1,5 @@ import datetime -import six import typing from openapi_server import typing_utils @@ -16,7 +15,7 @@ def _deserialize(data, klass): if data is None: return None - if klass in six.integer_types or klass in (float, str, bool, bytearray): + if klass in (int, float, str, bool, bytearray): return _deserialize_primitive(data, klass) elif klass == object: return _deserialize_object(data) @@ -45,7 +44,7 @@ def _deserialize_primitive(data, klass): try: value = klass(data) except UnicodeEncodeError: - value = six.u(data) + value = data except TypeError: value = data return value @@ -110,7 +109,7 @@ def deserialize_model(data, klass): if not instance.openapi_types: return data - for attr, attr_type in six.iteritems(instance.openapi_types): + for attr, attr_type in instance.openapi_types.items(): if data is not None \ and instance.attribute_map[attr] in data \ and isinstance(data, (list, dict)): @@ -145,4 +144,4 @@ def _deserialize_dict(data, boxed_type): :rtype: dict """ return {k: _deserialize(v, boxed_type) - for k, v in six.iteritems(data)} + for k, v in data.items() } diff --git a/samples/server/petstore/python-flask/setup.py b/samples/server/petstore/python-flask/setup.py index 1cd2660efd67..802848855890 100644 --- a/samples/server/petstore/python-flask/setup.py +++ b/samples/server/petstore/python-flask/setup.py @@ -1,5 +1,3 @@ -# coding: utf-8 - import sys from setuptools import setup, find_packages From c8fccfb4178e87d7aed515d0deb127498126af57 Mon Sep 17 00:00:00 2001 From: Anis Campos Date: Tue, 22 Aug 2023 14:17:20 +0200 Subject: [PATCH 3/3] update python ignore pattern ignore all the `.venv` folders --- .gitignore | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 1be33afa8852..c9bf3b41fec8 100644 --- a/.gitignore +++ b/.gitignore @@ -173,14 +173,13 @@ samples/client/petstore/csharp-refactor/OpenAPIClient/nuget.exe # Python *.pyc __pycache__ +.venv/ samples/client/petstore/python/dev-requirements.txt.log samples/client/petstore/python/swagger_client.egg-info/SOURCES.txt samples/client/petstore/python/.coverage samples/client/petstore/python/.projectile -samples/client/petstore/python/.venv/ -samples/client/petstore/python-asyncio/.venv/ samples/client/petstore/python-asyncio/.pytest_cache/ -samples/client/petstore/python-tornado/.venv/ + # PHP samples/client/petstore/php/OpenAPIClient-php/composer.lock