Coverage for /var/srv/projects/api.amasfac.comuna18.com/tmp/venv/lib/python3.9/site-packages/django/template/autoreload.py: 21%
33 statements
« prev ^ index » next coverage.py v6.4.4, created at 2023-07-17 14:22 -0600
« prev ^ index » next coverage.py v6.4.4, created at 2023-07-17 14:22 -0600
1from pathlib import Path
3from django.dispatch import receiver
4from django.template import engines
5from django.template.backends.django import DjangoTemplates
6from django.utils._os import to_path
7from django.utils.autoreload import autoreload_started, file_changed, is_django_path
10def get_template_directories():
11 # Iterate through each template backend and find
12 # any template_loader that has a 'get_dirs' method.
13 # Collect the directories, filtering out Django templates.
14 items = set()
15 for backend in engines.all():
16 if not isinstance(backend, DjangoTemplates):
17 continue
19 items.update(Path.cwd() / to_path(dir) for dir in backend.engine.dirs if dir)
21 for loader in backend.engine.template_loaders:
22 if not hasattr(loader, "get_dirs"):
23 continue
24 items.update(
25 Path.cwd() / to_path(directory)
26 for directory in loader.get_dirs()
27 if directory and not is_django_path(directory)
28 )
29 return items
32def reset_loaders():
33 for backend in engines.all():
34 if not isinstance(backend, DjangoTemplates):
35 continue
36 for loader in backend.engine.template_loaders:
37 loader.reset()
40@receiver(autoreload_started, dispatch_uid="template_loaders_watch_changes")
41def watch_for_template_changes(sender, **kwargs):
42 for directory in get_template_directories():
43 sender.watch_dir(directory, "**/*")
46@receiver(file_changed, dispatch_uid="template_loaders_file_changed")
47def template_changed(sender, file_path, **kwargs):
48 for template_dir in get_template_directories():
49 if template_dir in file_path.parents:
50 reset_loaders()
51 return True