[Django] #35090: Enforce uniqueness on custom path converters

47 views
Skip to first unread message

Django

unread,
Jan 5, 2024, 5:09:36 PM1/5/24
to django-...@googlegroups.com
#35090: Enforce uniqueness on custom path converters
----------------------------------------+------------------------
Reporter: Adam Johnson | Owner: nobody
Type: Bug | Status: new
Component: Core (URLs) | Version: dev
Severity: Normal | Keywords:
Triage Stage: Unreviewed | Has patch: 0
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 0
UI/UX: 0 |
----------------------------------------+------------------------
`register_converter()` allows
[https://docs.djangoproject.com/en/5.0/topics/http/urls/#registering-
custom-path-converters custom path converters] to silently replace
existing converters. This could lead to surprising behaviour, both when
two places accidentally use the same custom name or when replacing a
default converter. This could be particularly hard to debug if a third-
party package uses a custom converter.

For example, say two modules register path converters named “year”. The
first allows 1-4 digits:

{{{
class YearConverter:
regex = r"[0-9]{1,4}"
...

register_converter(YearConverter, "year")
}}}

Whilst the second requires exactly four digits:

{{{
class YearConverter:
regex = r"[0-9]{4}"
...

register_converter(YearConverter, "year")
}}}

Whichever module is loaded last will silently overwrite the other’s
converter. URLs will then only be interpreted with that converter, leading
to fewer URLs being matched than intended. This can be particularly
difficult to spot as import order may change accidentally due to other
code being rearranged.

--
Ticket URL: <https://code.djangoproject.com/ticket/35090>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

Django

unread,
Jan 5, 2024, 5:15:15 PM1/5/24
to django-...@googlegroups.com
#35090: Enforce uniqueness on custom path converters
------------------------------+--------------------------------------

Reporter: Adam Johnson | Owner: nobody
Type: Bug | Status: new
Component: Core (URLs) | Version: dev
Severity: Normal | Resolution:

Keywords: | Triage Stage: Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
------------------------------+--------------------------------------
Description changed by Adam Johnson:

Old description:

> `register_converter()` allows
> [https://docs.djangoproject.com/en/5.0/topics/http/urls/#registering-
> custom-path-converters custom path converters] to silently replace
> existing converters. This could lead to surprising behaviour, both when
> two places accidentally use the same custom name or when replacing a
> default converter. This could be particularly hard to debug if a third-
> party package uses a custom converter.
>
> For example, say two modules register path converters named “year”. The
> first allows 1-4 digits:
>
> {{{
> class YearConverter:
> regex = r"[0-9]{1,4}"
> ...
>
> register_converter(YearConverter, "year")
> }}}
>
> Whilst the second requires exactly four digits:
>
> {{{
> class YearConverter:
> regex = r"[0-9]{4}"
> ...
>
> register_converter(YearConverter, "year")
> }}}
>
> Whichever module is loaded last will silently overwrite the other’s
> converter. URLs will then only be interpreted with that converter,
> leading to fewer URLs being matched than intended. This can be
> particularly difficult to spot as import order may change accidentally
> due to other code being rearranged.

New description:

`register_converter()` allows
[https://docs.djangoproject.com/en/5.0/topics/http/urls/#registering-
custom-path-converters custom path converters] to silently replace
existing converters. This could lead to surprising behaviour, both when
two places accidentally use the same custom name or when replacing a
default converter. This could be particularly hard to debug if a third-
party package uses a custom converter.

For example, say two modules register path converters named “year”. The
first allows 1-4 digits:

{{{
class YearConverter:
regex = r"[0-9]{1,4}"
...

register_converter(YearConverter, "year")
}}}

Whilst the second requires exactly four digits:

{{{
class YearConverter:
regex = r"[0-9]{4}"
...

register_converter(YearConverter, "year")
}}}

Whichever module is loaded last will silently overwrite the other’s
converter. URLs will then only be interpreted with that converter, leading
to fewer URLs being matched than intended. This can be particularly
difficult to spot as import order may change accidentally due to other
code being rearranged.

See the full example project at https://github.com/adamchainz/django-
ticket-35090

--

--
Ticket URL: <https://code.djangoproject.com/ticket/35090#comment:1>

Django

unread,
Jan 5, 2024, 5:33:17 PM1/5/24
to django-...@googlegroups.com

Old description:

New description:

register_converter(YearConverter, "year")
}}}

register_converter(YearConverter, "year")
}}}

I propose that support for reusing path converter names be deprecated,
eventually raising an exception. I think this should include the default
names (`int` etc.) as replacing them can break URLs from third-party
packages.

--

--
Ticket URL: <https://code.djangoproject.com/ticket/35090#comment:2>

Django

unread,
Jan 6, 2024, 5:28:12 AM1/6/24
to django-...@googlegroups.com
#35090: Enforce uniqueness on custom path converters
------------------------------+--------------------------------------
Reporter: Adam Johnson | Owner: nobody
Type: Bug | Status: new
Component: Core (URLs) | Version: dev
Severity: Normal | Resolution:
Keywords: | Triage Stage: Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
------------------------------+--------------------------------------

Comment (by Salvo Polizzi):

I've submitted a PR for this bug:
https://github.com/django/django/pull/17703

--
Ticket URL: <https://code.djangoproject.com/ticket/35090#comment:3>

Django

unread,
Jan 6, 2024, 7:48:15 AM1/6/24
to django-...@googlegroups.com
#35090: Enforce uniqueness on custom path converters
-------------------------------------+-------------------------------------

Reporter: Adam Johnson | Owner: nobody
Type: | Status: new
Cleanup/optimization |

Component: Core (URLs) | Version: dev
Severity: Normal | Resolution:
Keywords: | Triage Stage:
| Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Mariusz Felisiak):

* type: Bug => Cleanup/optimization


Comment:

As for it's a cleanup not a bug. If someone registers converters with the
same name as builtin converters, they will get what they deserve. What if
they do it on purpose?

--
Ticket URL: <https://code.djangoproject.com/ticket/35090#comment:4>

Django

unread,
Jan 7, 2024, 3:44:26 PM1/7/24
to django-...@googlegroups.com
#35090: Enforce uniqueness on custom path converters
-------------------------------------+-------------------------------------
Reporter: Adam Johnson | Owner: nobody
Type: | Status: new
Cleanup/optimization |
Component: Core (URLs) | Version: dev
Severity: Normal | Resolution:
Keywords: | Triage Stage:
| Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------

Comment (by Adam Johnson):

> If someone registers converters with the same name as builtin
converters, they will get what they deserve. What if they do it on
purpose?

Even if done on purpose, users can break URLs in other parts of their
project or packages unwittingly. If you need a modified `int` converter,
for example, there’s little harm in requiring it to have a different name,
but potential harm in allowing silent replacement.

--
Ticket URL: <https://code.djangoproject.com/ticket/35090#comment:5>

Django

unread,
Jan 7, 2024, 3:44:43 PM1/7/24
to django-...@googlegroups.com
#35090: Enforce uniqueness on custom path converters
-------------------------------------+-------------------------------------
Reporter: Adam Johnson | Owner: nobody
Type: | Status: new
Cleanup/optimization |
Component: Core (URLs) | Version: dev
Severity: Normal | Resolution:
Keywords: | Triage Stage:
| Unreviewed
Has patch: 1 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 1

Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Adam Johnson):

* needs_better_patch: 0 => 1
* has_patch: 0 => 1


--
Ticket URL: <https://code.djangoproject.com/ticket/35090#comment:6>

Django

unread,
Jan 8, 2024, 4:31:13 AM1/8/24
to django-...@googlegroups.com
#35090: Enforce uniqueness on custom path converters
--------------------------------------+------------------------------------

Reporter: Adam Johnson | Owner: nobody
Type: Cleanup/optimization | Status: new

Component: Core (URLs) | Version: dev
Severity: Normal | Resolution:
Keywords: | Triage Stage: Accepted

Has patch: 1 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 1
Easy pickings: 0 | UI/UX: 0
--------------------------------------+------------------------------------
Changes (by Mariusz Felisiak):

* stage: Unreviewed => Accepted


Comment:

OK, let's have it.

--
Ticket URL: <https://code.djangoproject.com/ticket/35090#comment:7>

Django

unread,
Jan 8, 2024, 7:59:33 AM1/8/24
to django-...@googlegroups.com
#35090: Enforce uniqueness on custom path converters
--------------------------------------+------------------------------------
Reporter: Adam Johnson | Owner: nobody
Type: Cleanup/optimization | Status: new
Component: Core (URLs) | Version: dev
Severity: Normal | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 1 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 1
Easy pickings: 0 | UI/UX: 0
--------------------------------------+------------------------------------

Comment (by Natalia Bidart):

I'm not sure I understand the desired fix: is it to prevent any converter
registered name overlap (ie a dynamic check at the time of project load)?
or just a check against the Django/default's converters?

Would there be a way to override registered converters?

--
Ticket URL: <https://code.djangoproject.com/ticket/35090#comment:8>

Django

unread,
Jan 10, 2024, 7:35:01 AM1/10/24
to django-...@googlegroups.com
#35090: Enforce uniqueness on custom path converters
--------------------------------------+------------------------------------
Reporter: Adam Johnson | Owner: nobody
Type: Cleanup/optimization | Status: new
Component: Core (URLs) | Version: dev
Severity: Normal | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 1 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0

Easy pickings: 0 | UI/UX: 0
--------------------------------------+------------------------------------
Changes (by Salvo Polizzi):

* needs_better_patch: 1 => 0


--
Ticket URL: <https://code.djangoproject.com/ticket/35090#comment:9>

Django

unread,
Jan 12, 2024, 3:28:45 AM1/12/24
to django-...@googlegroups.com
#35090: Enforce uniqueness on custom path converters
-------------------------------------+-------------------------------------
Reporter: Adam Johnson | Owner: Salvo
Type: | Polizzi
Cleanup/optimization | Status: assigned

Component: Core (URLs) | Version: dev
Severity: Normal | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 1 | Needs documentation: 1
Needs tests: 0 | Patch needs improvement: 1

Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Mariusz Felisiak):

* owner: nobody => Salvo Polizzi


* needs_better_patch: 0 => 1

* status: new => assigned
* needs_docs: 0 => 1


--
Ticket URL: <https://code.djangoproject.com/ticket/35090#comment:10>

Django

unread,
Jan 12, 2024, 5:09:55 AM1/12/24
to django-...@googlegroups.com
#35090: Enforce uniqueness on custom path converters
-------------------------------------+-------------------------------------
Reporter: Adam Johnson | Owner: Salvo
Type: | Polizzi
Cleanup/optimization | Status: assigned
Component: Core (URLs) | Version: dev
Severity: Normal | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 1 | Needs documentation: 1
Needs tests: 0 | Patch needs improvement: 1
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------

Comment (by Salvo Polizzi):

Replying to [comment:8 Natalia Bidart]:


> I'm not sure I understand the desired fix: is it to prevent any
converter registered name overlap (ie a dynamic check at the time of
project load)? or just a check against the Django/default's converters?

I interpreted it as an issue to avoid overlapping among different
registered converters, but please correct me if I misunderstood.

> Would there be a way to override registered converters?

I honestly don't know if there is a possibility to override

--
Ticket URL: <https://code.djangoproject.com/ticket/35090#comment:11>

Django

unread,
Jan 12, 2024, 8:11:18 AM1/12/24
to django-...@googlegroups.com
#35090: Enforce uniqueness on custom path converters
-------------------------------------+-------------------------------------
Reporter: Adam Johnson | Owner: Salvo
Type: | Polizzi
Cleanup/optimization | Status: assigned
Component: Core (URLs) | Version: dev
Severity: Normal | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 1 | Needs documentation: 0

Needs tests: 0 | Patch needs improvement: 1
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Salvo Polizzi):

* needs_docs: 1 => 0


--
Ticket URL: <https://code.djangoproject.com/ticket/35090#comment:12>

Django

unread,
Jan 14, 2024, 1:07:17 PM1/14/24
to django-...@googlegroups.com
#35090: Enforce uniqueness on custom path converters
-------------------------------------+-------------------------------------
Reporter: Adam Johnson | Owner: Salvo
Type: | Polizzi
Cleanup/optimization | Status: assigned
Component: Core (URLs) | Version: dev
Severity: Normal | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 1 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0

Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Salvo Polizzi):

* needs_better_patch: 1 => 0


--
Ticket URL: <https://code.djangoproject.com/ticket/35090#comment:13>

Django

unread,
Jan 21, 2024, 3:13:40 PM1/21/24
to django-...@googlegroups.com
#35090: Enforce uniqueness on custom path converters
-------------------------------------+-------------------------------------
Reporter: Adam Johnson | Owner: Salvo
Type: | Polizzi
Cleanup/optimization | Status: assigned
Component: Core (URLs) | Version: dev
Severity: Normal | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 1 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------

Comment (by Adam Johnson):

Natalia, I propose preventing *any* overlap, that is, blocking the
overriding of both the default and custom converters. Replacing a
converter opens the possibility of “action at a distance” and a hard-to-
debug lack of correct URL resolution. Unique names prevent that.

--
Ticket URL: <https://code.djangoproject.com/ticket/35090#comment:14>

Django

unread,
Feb 22, 2024, 4:38:17 AM2/22/24
to django-...@googlegroups.com
#35090: Enforce uniqueness on custom path converters
-------------------------------------+-------------------------------------
Reporter: Adam Johnson | Owner: Salvo
Type: | Polizzi
Cleanup/optimization | Status: assigned
Component: Core (URLs) | Version: dev
Severity: Normal | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 1 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 1
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Mariusz Felisiak):

* needs_better_patch: 0 => 1

--
Ticket URL: <https://code.djangoproject.com/ticket/35090#comment:15>

Django

unread,
Feb 22, 2024, 12:38:39 PM2/22/24
to django-...@googlegroups.com
#35090: Enforce uniqueness on custom path converters
-------------------------------------+-------------------------------------
Reporter: Adam Johnson | Owner: Salvo
Type: | Polizzi
Cleanup/optimization | Status: assigned
Component: Core (URLs) | Version: dev
Severity: Normal | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 1 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Salvo Polizzi):

* needs_better_patch: 1 => 0

Comment:

I don't know why javascript tests are failing. If anyone can review the
PR, please give me an advice on how to fix that problem.
--
Ticket URL: <https://code.djangoproject.com/ticket/35090#comment:16>

Django

unread,
Feb 23, 2024, 12:23:30 AM2/23/24
to django-...@googlegroups.com
#35090: Enforce uniqueness on custom path converters
-------------------------------------+-------------------------------------
Reporter: Adam Johnson | Owner: Salvo
Type: | Polizzi
Cleanup/optimization | Status: assigned
Component: Core (URLs) | Version: dev
Severity: Normal | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 1 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 1
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Mariusz Felisiak):

* needs_better_patch: 0 => 1

--
Ticket URL: <https://code.djangoproject.com/ticket/35090#comment:17>

Django

unread,
Feb 23, 2024, 3:54:07 AM2/23/24
to django-...@googlegroups.com
#35090: Enforce uniqueness on custom path converters
-------------------------------------+-------------------------------------
Reporter: Adam Johnson | Owner: Salvo
Type: | Polizzi
Cleanup/optimization | Status: assigned
Component: Core (URLs) | Version: dev
Severity: Normal | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 1 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Salvo Polizzi):

* needs_better_patch: 1 => 0

--
Ticket URL: <https://code.djangoproject.com/ticket/35090#comment:18>

Django

unread,
Feb 23, 2024, 9:56:46 AM2/23/24
to django-...@googlegroups.com
#35090: Enforce uniqueness on custom path converters
-------------------------------------+-------------------------------------
Reporter: Adam Johnson | Owner: Salvo
Type: | Polizzi
Cleanup/optimization | Status: assigned
Component: Core (URLs) | Version: dev
Severity: Normal | Resolution:
Keywords: | Triage Stage: Ready for
| checkin
Has patch: 1 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Mariusz Felisiak):

* stage: Accepted => Ready for checkin

--
Ticket URL: <https://code.djangoproject.com/ticket/35090#comment:19>

Django

unread,
Feb 23, 2024, 11:58:39 AM2/23/24
to django-...@googlegroups.com
#35090: Enforce uniqueness on custom path converters
-------------------------------------+-------------------------------------
Reporter: Adam Johnson | Owner: Salvo
Type: | Polizzi
Cleanup/optimization | Status: closed
Component: Core (URLs) | Version: dev
Severity: Normal | Resolution: fixed
Keywords: | Triage Stage: Ready for
| checkin
Has patch: 1 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Mariusz Felisiak <felisiak.mariusz@…>):

* resolution: => fixed
* status: assigned => closed

Comment:

In [changeset:"6e1ece7ed522c904a674966fa985159b7bbf1545" 6e1ece7]:
{{{#!CommitTicketReference repository=""
revision="6e1ece7ed522c904a674966fa985159b7bbf1545"
Fixed #35090 -- Deprecated registering URL converters with the same name.
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/35090#comment:20>

Django

unread,
Feb 29, 2024, 2:22:13 AM2/29/24
to django-...@googlegroups.com
#35090: Enforce uniqueness on custom path converters
-------------------------------------+-------------------------------------
Reporter: Adam Johnson | Owner: Salvo
Type: | Polizzi
Cleanup/optimization | Status: closed
Component: Core (URLs) | Version: dev
Severity: Normal | Resolution: fixed
Keywords: | Triage Stage: Ready for
| checkin
Has patch: 1 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Comment (by GitHub <noreply@…>):

In [changeset:"0e84e70bc8e0140a1e22f25bc6cb852d95a79949" 0e84e70]:
{{{#!CommitTicketReference repository=""
revision="0e84e70bc8e0140a1e22f25bc6cb852d95a79949"
Refs #35090 -- Fixed urlpatterns.tests.SimplifiedURLTests when run in
reverse.
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/35090#comment:21>

Django

unread,
Jan 15, 2025, 4:28:47 PMJan 15
to django-...@googlegroups.com
#35090: Enforce uniqueness on custom path converters
-------------------------------------+-------------------------------------
Reporter: Adam Johnson | Owner: Salvo
Type: | Polizzi
Cleanup/optimization | Status: closed
Component: Core (URLs) | Version: dev
Severity: Normal | Resolution: fixed
Keywords: | Triage Stage: Ready for
| checkin
Has patch: 1 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Comment (by Sarah Boyce <42296566+sarahboyce@…>):

In [changeset:"9cb1ffa67bb0d13f86c2d4627428fcaa4513136d" 9cb1ffa]:
{{{#!CommitTicketReference repository=""
revision="9cb1ffa67bb0d13f86c2d4627428fcaa4513136d"
Refs #35090 -- Removed support for django.urls.register_converter()
overriding existing converters per deprecation timeline.
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/35090#comment:22>

Django

unread,
Jan 16, 2025, 6:49:50 AMJan 16
to django-...@googlegroups.com
#35090: Enforce uniqueness on custom path converters
-------------------------------------+-------------------------------------
Reporter: Adam Johnson | Owner: Salvo
Type: | Polizzi
Cleanup/optimization | Status: closed
Component: Core (URLs) | Version: dev
Severity: Normal | Resolution: fixed
Keywords: | Triage Stage: Ready for
| checkin
Has patch: 1 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Natalia Bidart):

* cc: Salvo Polizzi (added)

Comment:

The removal of the deprecation code is causing failuires when the test
suite is run in reverse:
{{{
======================================================================
ERROR [0.008s]:
test_converter_reverse_with_second_layer_instance_namespace
(urlpatterns.tests.SimplifiedURLTests.test_converter_reverse_with_second_layer_instance_namespace)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/django/test/utils.py",
line 446, in inner
return func(*args, **kwargs)
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/tests/urlpatterns/tests.py",
line 181, in test_converter_reverse_with_second_layer_instance_namespace
url = reverse("instance-ns-base64:subsubpattern-base64",
kwargs=kwargs)
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/django/urls/base.py",
line 64, in reverse
app_list = resolver.app_dict[ns]
^^^^^^^^^^^^^^^^^
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/django/urls/resolvers.py",
line 637, in app_dict
self._populate()
~~~~~~~~~~~~~~^^
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/django/urls/resolvers.py",
line 548, in _populate
for url_pattern in reversed(self.url_patterns):
^^^^^^^^^^^^^^^^^
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/django/utils/functional.py",
line 47, in __get__
res = instance.__dict__[self.name] = self.func(instance)
~~~~~~~~~^^^^^^^^^^
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/django/urls/resolvers.py",
line 718, in url_patterns
patterns = getattr(self.urlconf_module, "urlpatterns",
self.urlconf_module)
^^^^^^^^^^^^^^^^^^^
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/django/utils/functional.py",
line 47, in __get__
res = instance.__dict__[self.name] = self.func(instance)
~~~~~~~~~^^^^^^^^^^
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/django/urls/resolvers.py",
line 711, in urlconf_module
return import_module(self.urlconf_name)
File "/usr/lib/python3.13/importlib/__init__.py", line 88, in
import_module
return _bootstrap._gcd_import(name[level:], package, level)
~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
File "<frozen importlib._bootstrap>", line 1331, in
_find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 1022, in exec_module
File "<frozen importlib._bootstrap>", line 488, in
_call_with_frames_removed
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/tests/urlpatterns/path_base64_urls.py",
line 5, in <module>
register_converter(converters.Base64Converter, "base64")
~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/django/urls/converters.py",
line 57, in register_converter
raise ValueError(f"Converter {type_name!r} is already registered.")
ValueError: Converter 'base64' is already registered.

======================================================================
ERROR [0.000s]: test_converter_reverse
(urlpatterns.tests.SimplifiedURLTests.test_converter_reverse)
(url='base64')
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/tests/urlpatterns/tests.py",
line 174, in test_converter_reverse
url = reverse(url_name, kwargs=kwargs)
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/django/urls/base.py",
line 98, in reverse
resolved_url = resolver._reverse_with_prefix(view, prefix, *args,
**kwargs)
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/django/urls/resolvers.py",
line 749, in _reverse_with_prefix
self._populate()
~~~~~~~~~~~~~~^^
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/django/urls/resolvers.py",
line 548, in _populate
for url_pattern in reversed(self.url_patterns):
^^^^^^^^^^^^^^^^^
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/django/utils/functional.py",
line 47, in __get__
res = instance.__dict__[self.name] = self.func(instance)
~~~~~~~~~^^^^^^^^^^
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/django/urls/resolvers.py",
line 718, in url_patterns
patterns = getattr(self.urlconf_module, "urlpatterns",
self.urlconf_module)
^^^^^^^^^^^^^^^^^^^
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/django/utils/functional.py",
line 47, in __get__
res = instance.__dict__[self.name] = self.func(instance)
~~~~~~~~~^^^^^^^^^^
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/django/urls/resolvers.py",
line 711, in urlconf_module
return import_module(self.urlconf_name)
File "/usr/lib/python3.13/importlib/__init__.py", line 88, in
import_module
return _bootstrap._gcd_import(name[level:], package, level)
~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
File "<frozen importlib._bootstrap>", line 1331, in
_find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 1022, in exec_module
File "<frozen importlib._bootstrap>", line 488, in
_call_with_frames_removed
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/tests/urlpatterns/path_base64_urls.py",
line 5, in <module>
register_converter(converters.Base64Converter, "base64")
~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/django/urls/converters.py",
line 57, in register_converter
raise ValueError(f"Converter {type_name!r} is already registered.")
ValueError: Converter 'base64' is already registered.

======================================================================
ERROR [0.000s]: test_converter_reverse
(urlpatterns.tests.SimplifiedURLTests.test_converter_reverse) (url
='subpattern-base64')
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/tests/urlpatterns/tests.py",
line 174, in test_converter_reverse
url = reverse(url_name, kwargs=kwargs)
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/django/urls/base.py",
line 98, in reverse
resolved_url = resolver._reverse_with_prefix(view, prefix, *args,
**kwargs)
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/django/urls/resolvers.py",
line 749, in _reverse_with_prefix
self._populate()
~~~~~~~~~~~~~~^^
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/django/urls/resolvers.py",
line 548, in _populate
for url_pattern in reversed(self.url_patterns):
^^^^^^^^^^^^^^^^^
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/django/utils/functional.py",
line 47, in __get__
res = instance.__dict__[self.name] = self.func(instance)
~~~~~~~~~^^^^^^^^^^
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/django/urls/resolvers.py",
line 718, in url_patterns
patterns = getattr(self.urlconf_module, "urlpatterns",
self.urlconf_module)
^^^^^^^^^^^^^^^^^^^
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/django/utils/functional.py",
line 47, in __get__
res = instance.__dict__[self.name] = self.func(instance)
~~~~~~~~~^^^^^^^^^^
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/django/urls/resolvers.py",
line 711, in urlconf_module
return import_module(self.urlconf_name)
File "/usr/lib/python3.13/importlib/__init__.py", line 88, in
import_module
return _bootstrap._gcd_import(name[level:], package, level)
~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
File "<frozen importlib._bootstrap>", line 1331, in
_find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 1022, in exec_module
File "<frozen importlib._bootstrap>", line 488, in
_call_with_frames_removed
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/tests/urlpatterns/path_base64_urls.py",
line 5, in <module>
register_converter(converters.Base64Converter, "base64")
~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/django/urls/converters.py",
line 57, in register_converter
raise ValueError(f"Converter {type_name!r} is already registered.")
ValueError: Converter 'base64' is already registered.

======================================================================
ERROR [0.015s]: test_converter_reverse
(urlpatterns.tests.SimplifiedURLTests.test_converter_reverse) (url
='namespaced-base64:subpattern-base64')
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/tests/urlpatterns/tests.py",
line 174, in test_converter_reverse
url = reverse(url_name, kwargs=kwargs)
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/django/urls/base.py",
line 64, in reverse
app_list = resolver.app_dict[ns]
^^^^^^^^^^^^^^^^^
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/django/urls/resolvers.py",
line 637, in app_dict
self._populate()
~~~~~~~~~~~~~~^^
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/django/urls/resolvers.py",
line 548, in _populate
for url_pattern in reversed(self.url_patterns):
^^^^^^^^^^^^^^^^^
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/django/utils/functional.py",
line 47, in __get__
res = instance.__dict__[self.name] = self.func(instance)
~~~~~~~~~^^^^^^^^^^
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/django/urls/resolvers.py",
line 718, in url_patterns
patterns = getattr(self.urlconf_module, "urlpatterns",
self.urlconf_module)
^^^^^^^^^^^^^^^^^^^
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/django/utils/functional.py",
line 47, in __get__
res = instance.__dict__[self.name] = self.func(instance)
~~~~~~~~~^^^^^^^^^^
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/django/urls/resolvers.py",
line 711, in urlconf_module
return import_module(self.urlconf_name)
File "/usr/lib/python3.13/importlib/__init__.py", line 88, in
import_module
return _bootstrap._gcd_import(name[level:], package, level)
~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
File "<frozen importlib._bootstrap>", line 1331, in
_find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 1022, in exec_module
File "<frozen importlib._bootstrap>", line 488, in
_call_with_frames_removed
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/tests/urlpatterns/path_base64_urls.py",
line 5, in <module>
register_converter(converters.Base64Converter, "base64")
~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/django/urls/converters.py",
line 57, in register_converter
raise ValueError(f"Converter {type_name!r} is already registered.")
ValueError: Converter 'base64' is already registered.

======================================================================
ERROR [0.000s]: test_converter_resolve
(urlpatterns.tests.SimplifiedURLTests.test_converter_resolve)
(url='/base64/aGVsbG8=/')
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/tests/urlpatterns/tests.py",
line 163, in test_converter_resolve
match = resolve(url)
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/django/urls/base.py",
line 25, in resolve
return get_resolver(urlconf).resolve(path)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/django/urls/resolvers.py",
line 666, in resolve
for pattern in self.url_patterns:
^^^^^^^^^^^^^^^^^
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/django/utils/functional.py",
line 47, in __get__
res = instance.__dict__[self.name] = self.func(instance)
~~~~~~~~~^^^^^^^^^^
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/django/urls/resolvers.py",
line 718, in url_patterns
patterns = getattr(self.urlconf_module, "urlpatterns",
self.urlconf_module)
^^^^^^^^^^^^^^^^^^^
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/django/utils/functional.py",
line 47, in __get__
res = instance.__dict__[self.name] = self.func(instance)
~~~~~~~~~^^^^^^^^^^
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/django/urls/resolvers.py",
line 711, in urlconf_module
return import_module(self.urlconf_name)
File "/usr/lib/python3.13/importlib/__init__.py", line 88, in
import_module
return _bootstrap._gcd_import(name[level:], package, level)
~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
File "<frozen importlib._bootstrap>", line 1331, in
_find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 1022, in exec_module
File "<frozen importlib._bootstrap>", line 488, in
_call_with_frames_removed
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/tests/urlpatterns/path_base64_urls.py",
line 5, in <module>
register_converter(converters.Base64Converter, "base64")
~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/django/urls/converters.py",
line 57, in register_converter
raise ValueError(f"Converter {type_name!r} is already registered.")
ValueError: Converter 'base64' is already registered.

======================================================================
ERROR [0.000s]: test_converter_resolve
(urlpatterns.tests.SimplifiedURLTests.test_converter_resolve)
(url='/base64/aGVsbG8=/subpatterns/d29ybGQ=/')
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/tests/urlpatterns/tests.py",
line 163, in test_converter_resolve
match = resolve(url)
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/django/urls/base.py",
line 25, in resolve
return get_resolver(urlconf).resolve(path)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/django/urls/resolvers.py",
line 666, in resolve
for pattern in self.url_patterns:
^^^^^^^^^^^^^^^^^
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/django/utils/functional.py",
line 47, in __get__
res = instance.__dict__[self.name] = self.func(instance)
~~~~~~~~~^^^^^^^^^^
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/django/urls/resolvers.py",
line 718, in url_patterns
patterns = getattr(self.urlconf_module, "urlpatterns",
self.urlconf_module)
^^^^^^^^^^^^^^^^^^^
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/django/utils/functional.py",
line 47, in __get__
res = instance.__dict__[self.name] = self.func(instance)
~~~~~~~~~^^^^^^^^^^
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/django/urls/resolvers.py",
line 711, in urlconf_module
return import_module(self.urlconf_name)
File "/usr/lib/python3.13/importlib/__init__.py", line 88, in
import_module
return _bootstrap._gcd_import(name[level:], package, level)
~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
File "<frozen importlib._bootstrap>", line 1331, in
_find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 1022, in exec_module
File "<frozen importlib._bootstrap>", line 488, in
_call_with_frames_removed
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/tests/urlpatterns/path_base64_urls.py",
line 5, in <module>
register_converter(converters.Base64Converter, "base64")
~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/django/urls/converters.py",
line 57, in register_converter
raise ValueError(f"Converter {type_name!r} is already registered.")
ValueError: Converter 'base64' is already registered.

======================================================================
ERROR [0.010s]: test_converter_resolve
(urlpatterns.tests.SimplifiedURLTests.test_converter_resolve)
(url='/base64/aGVsbG8=/namespaced/d29ybGQ=/')
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/tests/urlpatterns/tests.py",
line 163, in test_converter_resolve
match = resolve(url)
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/django/urls/base.py",
line 25, in resolve
return get_resolver(urlconf).resolve(path)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/django/urls/resolvers.py",
line 666, in resolve
for pattern in self.url_patterns:
^^^^^^^^^^^^^^^^^
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/django/utils/functional.py",
line 47, in __get__
res = instance.__dict__[self.name] = self.func(instance)
~~~~~~~~~^^^^^^^^^^
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/django/urls/resolvers.py",
line 718, in url_patterns
patterns = getattr(self.urlconf_module, "urlpatterns",
self.urlconf_module)
^^^^^^^^^^^^^^^^^^^
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/django/utils/functional.py",
line 47, in __get__
res = instance.__dict__[self.name] = self.func(instance)
~~~~~~~~~^^^^^^^^^^
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/django/urls/resolvers.py",
line 711, in urlconf_module
return import_module(self.urlconf_name)
File "/usr/lib/python3.13/importlib/__init__.py", line 88, in
import_module
return _bootstrap._gcd_import(name[level:], package, level)
~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
File "<frozen importlib._bootstrap>", line 1331, in
_find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 1022, in exec_module
File "<frozen importlib._bootstrap>", line 488, in
_call_with_frames_removed
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/tests/urlpatterns/path_base64_urls.py",
line 5, in <module>
register_converter(converters.Base64Converter, "base64")
~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/django/urls/converters.py",
line 57, in register_converter
raise ValueError(f"Converter {type_name!r} is already registered.")
ValueError: Converter 'base64' is already registered.

======================================================================
FAIL [0.002s]: test_warning_override_converter
(urlpatterns.tests.SimplifiedURLTests.test_warning_override_converter)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jenkins/workspace/main-
reverse/database/postgres/label/focal/python/python3.13/tests/urlpatterns/tests.py",
line 212, in test_warning_override_converter
with self.assertRaisesMessage(ValueError, msg):
~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.13/contextlib.py", line 148, in __exit__
next(self.gen)
~~~~^^^^^^^^^^
AssertionError: ValueError not raised
}}}

To reproduce: `./runtests.py --reverse urlpatterns`
--
Ticket URL: <https://code.djangoproject.com/ticket/35090#comment:23>

Django

unread,
Jan 16, 2025, 7:09:32 AMJan 16
to django-...@googlegroups.com
#35090: Enforce uniqueness on custom path converters
-------------------------------------+-------------------------------------
Reporter: Adam Johnson | Owner: Salvo
Type: | Polizzi
Cleanup/optimization | Status: closed
Component: Core (URLs) | Version: dev
Severity: Normal | Resolution: fixed
Keywords: | Triage Stage: Ready for
| checkin
Has patch: 1 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Comment (by Natalia Bidart):

[https://github.com/django/django/pull/19054 Fix for the failing tests],
thanks Mariusz.
--
Ticket URL: <https://code.djangoproject.com/ticket/35090#comment:24>

Django

unread,
Jan 16, 2025, 7:12:42 AMJan 16
to django-...@googlegroups.com
#35090: Enforce uniqueness on custom path converters
-------------------------------------+-------------------------------------
Reporter: Adam Johnson | Owner: Salvo
Type: | Polizzi
Cleanup/optimization | Status: closed
Component: Core (URLs) | Version: dev
Severity: Normal | Resolution: fixed
Keywords: | Triage Stage: Ready for
| checkin
Has patch: 1 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Comment (by Sarah Boyce <42296566+sarahboyce@…>):

In [changeset:"a7af1e2756e99c51d4a43fe85f664be1a30795fe" a7af1e27]:
{{{#!CommitTicketReference repository=""
revision="a7af1e2756e99c51d4a43fe85f664be1a30795fe"
Refs #35090 -- Fixed urlpatterns.tests.SimplifiedURLTests when run in
reverse.

Regression in 9cb1ffa67bb0d13f86c2d4627428fcaa4513136d.
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/35090#comment:25>
Reply all
Reply to author
Forward
0 new messages