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
« 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
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."))
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"]))
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"]))
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