From 1f5b590d5a91a529989959940a75d9cb27f7333e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Joga?= Date: Sat, 18 Nov 2023 03:10:10 +0100 Subject: [PATCH] Python-server workflow fixes + pytest (#17060) * Fix referenced path for tests * Explicit dependencies Flask 2.3 has breaking changes * Marks all async tests with pytest.mark.asyncio Otherwise they are skipped by pytest and coverage is zero * Fix path for pytest On suggestion from https://github.com/OpenAPITools/openapi-generator/pull/17060#discussion_r1392666369 --- .github/workflows/samples-python-server.yaml | 6 +++--- .../main/resources/python-aiohttp/controller_test.mustache | 2 ++ .../src/main/resources/python-aiohttp/requirements.mustache | 3 ++- .../src/main/resources/python-aiohttp/tox.mustache | 2 +- .../petstore/python-aiohttp-srclayout/requirements.txt | 3 ++- .../petstore/python-aiohttp-srclayout/test_python3.sh | 2 +- .../python-aiohttp-srclayout/tests/test_pet_controller.py | 1 + .../python-aiohttp-srclayout/tests/test_store_controller.py | 1 + .../python-aiohttp-srclayout/tests/test_user_controller.py | 1 + samples/server/petstore/python-aiohttp-srclayout/tox.ini | 2 +- 10 files changed, 15 insertions(+), 8 deletions(-) diff --git a/.github/workflows/samples-python-server.yaml b/.github/workflows/samples-python-server.yaml index 4ff5ca98c62..9c751cde5d6 100644 --- a/.github/workflows/samples-python-server.yaml +++ b/.github/workflows/samples-python-server.yaml @@ -3,10 +3,10 @@ name: Python Server on: push: paths: - - samples/server/petstore/python-aiohttp/** + - samples/server/petstore/python-aiohttp-srclayout/** pull_request: paths: - - samples/server/petstore/python-aiohttp/** + - samples/server/petstore/python-aiohttp-srclayout/** jobs: build: name: Test Python server @@ -16,7 +16,7 @@ jobs: matrix: sample: # servers - - samples/server/petstore/python-aiohttp/ + - samples/server/petstore/python-aiohttp-srclayout/ steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v4 diff --git a/modules/openapi-generator/src/main/resources/python-aiohttp/controller_test.mustache b/modules/openapi-generator/src/main/resources/python-aiohttp/controller_test.mustache index 7b89e168eb7..b0360ee0a90 100644 --- a/modules/openapi-generator/src/main/resources/python-aiohttp/controller_test.mustache +++ b/modules/openapi-generator/src/main/resources/python-aiohttp/controller_test.mustache @@ -17,6 +17,8 @@ from aiohttp import FormData {{#operations}} {{#operation}} +pytestmark = pytest.mark.asyncio + {{#vendorExtensions.x-skip-test}} @pytest.mark.skip("{{reason}}") {{/vendorExtensions.x-skip-test}} diff --git a/modules/openapi-generator/src/main/resources/python-aiohttp/requirements.mustache b/modules/openapi-generator/src/main/resources/python-aiohttp/requirements.mustache index e2ef30b1d41..ae81351135d 100644 --- a/modules/openapi-generator/src/main/resources/python-aiohttp/requirements.mustache +++ b/modules/openapi-generator/src/main/resources/python-aiohttp/requirements.mustache @@ -1,4 +1,4 @@ -connexion[aiohttp,swagger-ui] >= 2.6.0; python_version>="3.6" +connexion[aiohttp,swagger-ui] >= 2.6.0, <3; python_version>="3.6" # 2.3 is the last version that supports python 3.5 connexion[aiohttp,swagger-ui] <= 2.3.0; python_version=="3.5" or python_version=="3.4" # connexion requires werkzeug but connexion < 2.4.0 does not install werkzeug @@ -10,3 +10,4 @@ aiohttp_jinja2 == 1.5.0 {{#featureCORS}} aiohttp_cors >= 0.7.0 {{/featureCORS}} +Flask < 2.3 \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/python-aiohttp/tox.mustache b/modules/openapi-generator/src/main/resources/python-aiohttp/tox.mustache index dfebe7024ae..994b6210b45 100644 --- a/modules/openapi-generator/src/main/resources/python-aiohttp/tox.mustache +++ b/modules/openapi-generator/src/main/resources/python-aiohttp/tox.mustache @@ -8,4 +8,4 @@ deps=-r{toxinidir}/requirements.txt {toxinidir} commands= - {{^useNose}}pytest --cov={{#lambda.forwardslash}}{{{pythonSrcRoot}}}{{/lambda.forwardslash}}{{{packageName}}}{{/useNose}}{{#useNose}}nosetests{{/useNose}} + {{^useNose}}pytest --cov={{{packageName}}}{{/useNose}}{{#useNose}}nosetests{{/useNose}} diff --git a/samples/server/petstore/python-aiohttp-srclayout/requirements.txt b/samples/server/petstore/python-aiohttp-srclayout/requirements.txt index 70c264978d3..aaaaeb756ea 100644 --- a/samples/server/petstore/python-aiohttp-srclayout/requirements.txt +++ b/samples/server/petstore/python-aiohttp-srclayout/requirements.txt @@ -1,4 +1,4 @@ -connexion[aiohttp,swagger-ui] >= 2.6.0; python_version>="3.6" +connexion[aiohttp,swagger-ui] >= 2.6.0, <3; python_version>="3.6" # 2.3 is the last version that supports python 3.5 connexion[aiohttp,swagger-ui] <= 2.3.0; python_version=="3.5" or python_version=="3.4" # connexion requires werkzeug but connexion < 2.4.0 does not install werkzeug @@ -7,3 +7,4 @@ connexion[aiohttp,swagger-ui] <= 2.3.0; python_version=="3.5" or python_version= werkzeug == 0.16.1; python_version=="3.5" or python_version=="3.4" swagger-ui-bundle == 0.0.9 aiohttp_jinja2 == 1.5.0 +Flask < 2.3 \ No newline at end of file diff --git a/samples/server/petstore/python-aiohttp-srclayout/test_python3.sh b/samples/server/petstore/python-aiohttp-srclayout/test_python3.sh index 43fab931f00..95b8f7173f0 100755 --- a/samples/server/petstore/python-aiohttp-srclayout/test_python3.sh +++ b/samples/server/petstore/python-aiohttp-srclayout/test_python3.sh @@ -23,7 +23,7 @@ pip install -r $REQUIREMENTS_FILE | tee -a $REQUIREMENTS_OUT tox || exit 1 ### static analysis of code -flake8 --show-source petstore_api/ +flake8 --show-source ./src ### deactivate virtualenv if [ $DEACTIVE == true ]; then diff --git a/samples/server/petstore/python-aiohttp-srclayout/tests/test_pet_controller.py b/samples/server/petstore/python-aiohttp-srclayout/tests/test_pet_controller.py index 3cac35cc24c..898181839f4 100644 --- a/samples/server/petstore/python-aiohttp-srclayout/tests/test_pet_controller.py +++ b/samples/server/petstore/python-aiohttp-srclayout/tests/test_pet_controller.py @@ -8,6 +8,7 @@ from aiohttp import FormData from openapi_server.models.api_response import ApiResponse from openapi_server.models.pet import Pet +pytestmark = pytest.mark.asyncio @pytest.mark.skip("Connexion does not support multiple consumes. See https://github.com/zalando/connexion/pull/760") async def test_add_pet(client): diff --git a/samples/server/petstore/python-aiohttp-srclayout/tests/test_store_controller.py b/samples/server/petstore/python-aiohttp-srclayout/tests/test_store_controller.py index 9d376a5f7a5..9cbe796815f 100644 --- a/samples/server/petstore/python-aiohttp-srclayout/tests/test_store_controller.py +++ b/samples/server/petstore/python-aiohttp-srclayout/tests/test_store_controller.py @@ -6,6 +6,7 @@ from aiohttp import web from openapi_server.models.order import Order +pytestmark = pytest.mark.asyncio async def test_delete_order(client): """Test case for delete_order diff --git a/samples/server/petstore/python-aiohttp-srclayout/tests/test_user_controller.py b/samples/server/petstore/python-aiohttp-srclayout/tests/test_user_controller.py index 6564329315e..ae97db8ea41 100644 --- a/samples/server/petstore/python-aiohttp-srclayout/tests/test_user_controller.py +++ b/samples/server/petstore/python-aiohttp-srclayout/tests/test_user_controller.py @@ -6,6 +6,7 @@ from aiohttp import web from openapi_server.models.user import User +pytestmark = pytest.mark.asyncio @pytest.mark.skip("*/* not supported by Connexion. Use application/json instead. See https://github.com/zalando/connexion/pull/760") async def test_create_user(client): diff --git a/samples/server/petstore/python-aiohttp-srclayout/tox.ini b/samples/server/petstore/python-aiohttp-srclayout/tox.ini index 25d12bb84c0..f66b2d84cda 100644 --- a/samples/server/petstore/python-aiohttp-srclayout/tox.ini +++ b/samples/server/petstore/python-aiohttp-srclayout/tox.ini @@ -8,4 +8,4 @@ deps=-r{toxinidir}/requirements.txt {toxinidir} commands= - pytest --cov=src/openapi_server + pytest --cov=openapi_server