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

30 statements  

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

1from django import template 

2from django.contrib.admin.models import LogEntry 

3 

4register = template.Library() 

5 

6 

7class AdminLogNode(template.Node): 

8 def __init__(self, limit, varname, user): 

9 self.limit, self.varname, self.user = limit, varname, user 

10 

11 def __repr__(self): 

12 return "<GetAdminLog Node>" 

13 

14 def render(self, context): 

15 if self.user is None: 

16 entries = LogEntry.objects.all() 

17 else: 

18 user_id = self.user 

19 if not user_id.isdigit(): 

20 user_id = context[self.user].pk 

21 entries = LogEntry.objects.filter(user__pk=user_id) 

22 context[self.varname] = entries.select_related("content_type", "user")[ 

23 : int(self.limit) 

24 ] 

25 return "" 

26 

27 

28@register.tag 

29def get_admin_log(parser, token): 

30 """ 

31 Populate a template variable with the admin log for the given criteria. 

32 

33 Usage:: 

34 

35 {% get_admin_log [limit] as [varname] for_user [context_var_with_user_obj] %} 

36 

37 Examples:: 

38 

39 {% get_admin_log 10 as admin_log for_user 23 %} 

40 {% get_admin_log 10 as admin_log for_user user %} 

41 {% get_admin_log 10 as admin_log %} 

42 

43 Note that ``context_var_containing_user_obj`` can be a hard-coded integer 

44 (user ID) or the name of a template context variable containing the user 

45 object whose ID you want. 

46 """ 

47 tokens = token.contents.split() 

48 if len(tokens) < 4: 

49 raise template.TemplateSyntaxError( 

50 "'get_admin_log' statements require two arguments" 

51 ) 

52 if not tokens[1].isdigit(): 

53 raise template.TemplateSyntaxError( 

54 "First argument to 'get_admin_log' must be an integer" 

55 ) 

56 if tokens[2] != "as": 

57 raise template.TemplateSyntaxError( 

58 "Second argument to 'get_admin_log' must be 'as'" 

59 ) 

60 if len(tokens) > 4: 

61 if tokens[4] != "for_user": 

62 raise template.TemplateSyntaxError( 

63 "Fourth argument to 'get_admin_log' must be 'for_user'" 

64 ) 

65 return AdminLogNode( 

66 limit=tokens[1], 

67 varname=tokens[3], 

68 user=(tokens[5] if len(tokens) > 5 else None), 

69 )