Coverage for jutil/templatetags/jutil_admin.py: 14%

41 statements  

« prev     ^ index     » next       coverage.py v6.5.0, created at 2022-10-07 16:40 -0500

1import json 

2from gettext import gettext 

3from django.contrib.admin.models import LogEntry 

4from django.utils.text import get_text_list 

5from django.template.defaultfilters import register 

6 

7 

8@register.filter 

9def format_change_message_ex(action: LogEntry) -> str: 

10 """ 

11 Formats extended admin change message which contains new values as well. 

12 See jutil.admin.ModelAdminBase. 

13 """ 

14 if action.change_message and action.change_message[0] == "[": 14 ↛ 15line 14 didn't jump to line 15, because the condition on line 14 was never true

15 try: 

16 change_message = json.loads(action.change_message) 

17 except json.JSONDecodeError: 

18 return action.change_message 

19 messages = [] 

20 for sub_message in change_message: 

21 if "added" in sub_message: 

22 if sub_message["added"]: 

23 sub_message["added"]["name"] = gettext(sub_message["added"]["name"]) 

24 messages.append(gettext("Added {name} “{object}”.").format(**sub_message["added"])) 

25 if "values" in sub_message["added"]: 

26 messages.append("Initial values: {}.".format(list(sub_message["added"]["values"].values()))) 

27 if "ip" in sub_message["added"]: 

28 messages.append("User IP: {}.".format(sub_message["added"]["ip"])) 

29 else: 

30 messages.append(gettext("Added.")) 

31 

32 elif "changed" in sub_message: 

33 sub_message["changed"]["fields"] = get_text_list( 

34 [gettext(field_name) for field_name in sub_message["changed"]["fields"]], 

35 gettext("and"), 

36 ) 

37 if "name" in sub_message["changed"]: 

38 sub_message["changed"]["name"] = gettext(sub_message["changed"]["name"]) 

39 messages.append(gettext("Changed {fields} for {name} “{object}”.").format(**sub_message["changed"])) 

40 else: 

41 messages.append(gettext("Changed {fields}.").format(**sub_message["changed"])) 

42 if "values" in sub_message["changed"]: 

43 messages.append("New values: {}.".format(list(sub_message["changed"]["values"].values()))) 

44 if "ip" in sub_message["changed"]: 

45 messages.append("User IP: {}.".format(sub_message["changed"]["ip"])) 

46 

47 elif "deleted" in sub_message: 

48 sub_message["deleted"]["name"] = gettext(sub_message["deleted"]["name"]) 

49 messages.append(gettext("Deleted {name} “{object}”.").format(**sub_message["deleted"])) 

50 if sub_message["deleted"] and "ip" in sub_message["deleted"]: 

51 messages.append("User IP: {}.".format(sub_message["deleted"]["ip"])) 

52 

53 change_message = " ".join(msg[0].upper() + msg[1:] for msg in messages) 

54 return change_message or gettext("No fields changed.") 

55 return action.change_message