You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I tried to run the test suite locally using Python 3.13 but there is a test failure in tests/test_utils.py::test_sort_routes:
=================================== test session starts ====================================
platform linux -- Python 3.13.1, pytest-8.3.4, pluggy-1.5.0 -- …/workspace/connexion/.tox/py313-pypi/bin/python
cachedir: .pytest_cache
rootdir: …/workspace/connexion
configfile: pyproject.toml
plugins: anyio-4.5.2, Faker-33.1.0, asyncio-0.18.3, cov-2.12.1
asyncio: mode=Mode.AUTO
collected 1 item
tests/test_utils.py::test_sort_routes FAILED
========================================= FAILURES =========================================
_____________________________________ test_sort_routes _____________________________________
tests/test_utils.py:114: in test_sort_routes
assert utils.sort_routes(routes) == expected
E AssertionError: assert ['/users/{username}/items/{item}', '/users/me', '/users/{username}/items', '/users/{username}'] == ['/users/me', '/users/{username}/items/{item}', '/users/{username}/items', '/users/{username}']
E
E At index 0 diff: '/users/{username}/items/{item}' != '/users/me'
E
E Full diff:
E [
E + '/users/{username}/items/{item}',
E '/users/me',
E - '/users/{username}/items/{item}',
E '/users/{username}/items',
E '/users/{username}',
E ]
================================= short test summary info ==================================
FAILED tests/test_utils.py::test_sort_routes - AssertionError: assert ['/users/{username}/items/{item}', '/users/me', '/users/{username}/items', '/users/{username}'] == ['/users/me', '/users/{username}/items/{item}', '/users/{username}/items', '/users/{username}']
At index 0 diff: '/users/{username}/items/{item}' != '/users/me'
Full diff:
[
+ '/users/{username}/items/{item}',
'/users/me',
- '/users/{username}/items/{item}',
'/users/{username}/items',
'/users/{username}',
]
==================================== 1 failed in 0.13s =====================================
I am not sure if this is actually a problem with starlette routing or just a insignificant different but I guess, /users/me should really be the first route.
My current guess is that Python 3.13 changed its sorting behavior.
Python 3.12 calls /users/{username}/items/{path:path} < /users/me/{path:path} which results in False so /users/me is first in the final result.
Python 3.13 does the call as well but checks /users/me/{path:path} < /users/{username}/items/{path:path} immediately after (returns also False) which means there is no real order.
So my questions are:
Can you reproduce the Python 3.13 problem as well or is it just something on my side?
Is the different route sorting an actual problem?
If so, any ideas how to fix it?
The text was updated successfully, but these errors were encountered:
I haven't been able to test it yet, but as long as the result is deterministic, I don't think this is an issue. As you mention there is no real order between these paths.
There are two things this sorting should achieve:
More specific paths are sorted before less specific paths. eg:
users/me should come before users/{username}
/users/{username}/items/special should come before /users/{username}/items/{item}
The sorting should be deterministic, so the result is the same if we use it in multiple places
So 2 questions for you:
Do you always get the same sorting error when running the test suite on 3.13?
Is this the only error when running into 3.13?
If so, we can add a test suite for 3.13 and change the test to just validate the two requirements I listed above instead of checking against a fixed sorting order.
Do you always get the same sorting error when running the test suite on 3.13?
Yes.
Is this the only error when running into 3.13?
I don't think so but this was the clearest issue for me. If I am a bit lucky, I can work on this issue over the next days/few weeks.
Afterwards I'd try to clear all warnings and then proceed with Python 3.14 so we stay ahead of the curve. We already had the first rebuilds for 3.14 (alpha obviously) in Fedora which should help adapting the code of dependencies which in turn should make it easier to support 3.14 in Connexion.
I tried to run the test suite locally using Python 3.13 but there is a test failure in
tests/test_utils.py::test_sort_routes
:I am not sure if this is actually a problem with starlette routing or just a insignificant different but I guess,
/users/me
should really be the first route.My current guess is that Python 3.13 changed its sorting behavior.
Python 3.12 calls
/users/{username}/items/{path:path} < /users/me/{path:path}
which results inFalse
so/users/me
is first in the final result.Python 3.13 does the call as well but checks
/users/me/{path:path} < /users/{username}/items/{path:path}
immediately after (returns alsoFalse
) which means there is no real order.So my questions are:
The text was updated successfully, but these errors were encountered: