From 5b9b5af4842f7c995fbdd80ed0172cff620137dc Mon Sep 17 00:00:00 2001 From: Peter Braun Date: Wed, 4 Dec 2024 14:32:33 +0100 Subject: [PATCH] fix: reset state before evaluating named urls --- awx/main/middleware.py | 2 ++ awx/main/tests/functional/test_named_url.py | 11 +++++++++++ 2 files changed, 13 insertions(+) diff --git a/awx/main/middleware.py b/awx/main/middleware.py index 3fc54bc2465e..1d05ddbcdc40 100644 --- a/awx/main/middleware.py +++ b/awx/main/middleware.py @@ -20,6 +20,7 @@ from awx.main.utils.profiling import AWXProfiler from awx.main.utils.common import memoize from awx.urls import get_urlpatterns +from awx.main.utils.named_url_graph import reset_counters logger = logging.getLogger('awx.main.middleware') @@ -112,6 +113,7 @@ def _hijack_for_old_jt_name(node, kwargs, named_url): @classmethod def _named_url_to_pk(cls, node, resource, named_url): kwargs = {} + reset_counters() if node.populate_named_url_query_kwargs(kwargs, named_url): match = node.model.objects.filter(**kwargs).first() if match: diff --git a/awx/main/tests/functional/test_named_url.py b/awx/main/tests/functional/test_named_url.py index 557fdb8e9276..5bf12653ac04 100644 --- a/awx/main/tests/functional/test_named_url.py +++ b/awx/main/tests/functional/test_named_url.py @@ -265,3 +265,14 @@ def test_named_sub_resource(self, prefix, settings): URLModificationMiddleware._convert_named_url(f'/api/{prefix}v2/organizations/test_org/inventories/') == f'/api/{prefix}v2/organizations/{test_org.pk}/inventories/' ) + + def test_named_job_template(self): + org = Organization.objects.create(name='test_org') + tpl = JobTemplate.objects.create(name='test_tpl', organization=org) + + # first, cause a '404' - we want to verify that no state from previous requests is carried over when named + # urls are resolved + assert URLModificationMiddleware._convert_named_url('/api/v2/job_templates/test/tpl++test_org/') == '/api/v2/job_templates/test/tpl++test_org/' + + # try to resolve a valid url - it should succeed + assert URLModificationMiddleware._convert_named_url('/api/v2/job_templates/test_tpl++test_org/') == f'/api/v2/job_templates/{tpl.pk}/'