Coverage for /var/srv/projects/api.amasfac.comuna18.com/tmp/venv/lib/python3.9/site-packages/django/contrib/admin/templatetags/admin_urls.py: 25%

40 statements  

« prev     ^ index     » next       coverage.py v6.4.4, created at 2023-07-17 14:22 -0600

1from urllib.parse import parse_qsl, unquote, urlparse, urlunparse 

2 

3from django import template 

4from django.contrib.admin.utils import quote 

5from django.urls import Resolver404, get_script_prefix, resolve 

6from django.utils.http import urlencode 

7 

8register = template.Library() 

9 

10 

11@register.filter 

12def admin_urlname(value, arg): 

13 return "admin:%s_%s_%s" % (value.app_label, value.model_name, arg) 

14 

15 

16@register.filter 

17def admin_urlquote(value): 

18 return quote(value) 

19 

20 

21@register.simple_tag(takes_context=True) 

22def add_preserved_filters(context, url, popup=False, to_field=None): 

23 opts = context.get("opts") 

24 preserved_filters = context.get("preserved_filters") 

25 

26 parsed_url = list(urlparse(url)) 

27 parsed_qs = dict(parse_qsl(parsed_url[4])) 

28 merged_qs = {} 

29 

30 if opts and preserved_filters: 

31 preserved_filters = dict(parse_qsl(preserved_filters)) 

32 

33 match_url = "/%s" % unquote(url).partition(get_script_prefix())[2] 

34 try: 

35 match = resolve(match_url) 

36 except Resolver404: 

37 pass 

38 else: 

39 current_url = "%s:%s" % (match.app_name, match.url_name) 

40 changelist_url = "admin:%s_%s_changelist" % ( 

41 opts.app_label, 

42 opts.model_name, 

43 ) 

44 if ( 

45 changelist_url == current_url 

46 and "_changelist_filters" in preserved_filters 

47 ): 

48 preserved_filters = dict( 

49 parse_qsl(preserved_filters["_changelist_filters"]) 

50 ) 

51 

52 merged_qs.update(preserved_filters) 

53 

54 if popup: 

55 from django.contrib.admin.options import IS_POPUP_VAR 

56 

57 merged_qs[IS_POPUP_VAR] = 1 

58 if to_field: 

59 from django.contrib.admin.options import TO_FIELD_VAR 

60 

61 merged_qs[TO_FIELD_VAR] = to_field 

62 

63 merged_qs.update(parsed_qs) 

64 

65 parsed_url[4] = urlencode(merged_qs) 

66 return urlunparse(parsed_url)