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

1from pathlib import Path 

2 

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 

8 

9 

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 

18 

19 items.update(Path.cwd() / to_path(dir) for dir in backend.engine.dirs if dir) 

20 

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 

30 

31 

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() 

38 

39 

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, "**/*") 

44 

45 

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