1
0
mirror of https://github.com/django/django.git synced 2025-09-15 21:49:24 +00:00

Refs #35667 -- Cached Django file prefixes for warnings.

This commit is contained in:
Adam Johnson 2025-09-12 09:35:01 +01:00 committed by GitHub
parent 41bc48ac1e
commit 7b26b64a63
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 38 additions and 5 deletions

View File

@ -52,13 +52,12 @@ times with multiple contexts)
import inspect import inspect
import logging import logging
import os
import re import re
import warnings import warnings
from enum import Enum from enum import Enum
import django
from django.template.context import BaseContext from django.template.context import BaseContext
from django.utils.deprecation import django_file_prefixes
from django.utils.formats import localize from django.utils.formats import localize
from django.utils.html import conditional_escape from django.utils.html import conditional_escape
from django.utils.regex_helper import _lazy_re_compile from django.utils.regex_helper import _lazy_re_compile
@ -329,7 +328,7 @@ class PartialTemplate:
"PartialTemplate.source is only available when template " "PartialTemplate.source is only available when template "
"debugging is enabled.", "debugging is enabled.",
RuntimeWarning, RuntimeWarning,
skip_file_prefixes=(os.path.dirname(django.__file__),), skip_file_prefixes=django_file_prefixes(),
) )
return self.find_partial_source(template.source) return self.find_partial_source(template.source)

View File

@ -9,6 +9,15 @@ from asgiref.sync import iscoroutinefunction, markcoroutinefunction, sync_to_asy
import django import django
@functools.cache
def django_file_prefixes():
try:
file = django.__file__
except AttributeError:
return ()
return (os.path.dirname(file),)
class RemovedInDjango61Warning(DeprecationWarning): class RemovedInDjango61Warning(DeprecationWarning):
pass pass
@ -237,7 +246,7 @@ def deprecate_posargs(deprecation_warning, remappable_names, /):
f"Passing positional argument(s) {remapped_names_str} to {func_name}() " f"Passing positional argument(s) {remapped_names_str} to {func_name}() "
"is deprecated. Use keyword arguments instead.", "is deprecated. Use keyword arguments instead.",
deprecation_warning, deprecation_warning,
skip_file_prefixes=(os.path.dirname(django.__file__),), skip_file_prefixes=django_file_prefixes(),
) )
return remaining_args, updated_kwargs return remaining_args, updated_kwargs

View File

@ -1,7 +1,32 @@
import os
import warnings import warnings
import django
from django.test import SimpleTestCase from django.test import SimpleTestCase
from django.utils.deprecation import RemovedAfterNextVersionWarning, RenameMethodsBase from django.utils.deprecation import (
RemovedAfterNextVersionWarning,
RenameMethodsBase,
django_file_prefixes,
)
class DjangoFilePrefixesTests(SimpleTestCase):
def setUp(self):
django_file_prefixes.cache_clear()
def test_no_file(self):
orig_file = django.__file__
try:
del django.__file__
self.assertEqual(django_file_prefixes(), ())
finally:
django.__file__ = orig_file
def test_with_file(self):
prefixes = django_file_prefixes()
self.assertIsInstance(prefixes, tuple)
self.assertEqual(len(prefixes), 1)
self.assertTrue(prefixes[0].endswith(f"{os.path.sep}django"))
class RenameManagerMethods(RenameMethodsBase): class RenameManagerMethods(RenameMethodsBase):