#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 <https://code.djangoproject.com/> The Web framework for perfectionists with deadlines. -- You received this message because you are subscribed to the Google Groups "Django updates" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-updates+unsubscr...@googlegroups.com. To view this discussion visit https://groups.google.com/d/msgid/django-updates/010701946ef2a72f-c4dad7ef-b02e-40a6-ba19-2efef6c63aaf-000000%40eu-central-1.amazonses.com.