Coverage for src / ptf_tools / templatetags / action_buttons.py: 23%

20 statements  

« prev     ^ index     » next       coverage.py v7.13.2, created at 2026-07-23 13:58 +0000

1from django import template 

2from django.urls import reverse 

3 

4register = template.Library() 

5 

6ACTION_BUTTONS = { 

7 "doi_check": { 

8 "label": "Check DOI", 

9 "icon": "bi-arrow-repeat", 

10 "loading_label": "Checking…", 

11 "url_name": "doi_check", 

12 "url_args": ["pid"], 

13 }, 

14 "doi_check_all": { 

15 "label": "Check all DOIs", 

16 "icon": "bi-arrow-repeat", 

17 "loading_label": "Checking…", 

18 "url_name": "doi_check", 

19 "url_args": ["pid"], 

20 }, 

21 "doi_register": { 

22 "label": "Record DOI", 

23 "icon": "bi-record-circle", 

24 "loading_label": "Recording…", 

25 "url_name": "doi_register", 

26 "url_args": ["pid"], 

27 }, 

28 "doi_register_all": { 

29 "label": "Record all DOIs", 

30 "icon": "bi-record-circle", 

31 "loading_label": "Recording…", 

32 "url_name": "doi_register", 

33 "url_args": ["pid"], 

34 }, 

35 "doi_register_force_all": { 

36 "label": "Force record all DOIs", 

37 "icon": "bi-record-circle", 

38 "loading_label": "Recording…", 

39 "url_name": "force_doi_register", 

40 "url_args": ["pid"], 

41 }, 

42 "pubmed_register_form": { 

43 "label": "Record PubMed", 

44 "icon": "bi-record-circle", 

45 "loading_label": "Recording…", 

46 "url_name": "pubmed_register_form", 

47 "url_args": ["pid"], 

48 }, 

49 "pending_publication_register": { 

50 "label": "Record PP", 

51 "icon": "bi-record-circle", 

52 "loading_label": "Recording…", 

53 "url_name": "pending_publication_register", 

54 "url_args": ["pid"], 

55 }, 

56 "cms_apply": { 

57 "label": "Apply changes to production website", 

58 "icon": "bi-arrow-right-circle", 

59 "loading_label": "Applying…", 

60 "url_name": "api_deploy_cms", 

61 "url_args": ["pid", "site"], 

62 }, 

63 "cms_restore": { 

64 "label": "Restore Trammel CMS content from disk", 

65 "icon": "bi-upload", 

66 "loading_label": "Restoring…", 

67 "url_name": "api_restore_cms", 

68 "url_args": ["pid"], 

69 }, 

70 "cms_save": { 

71 "label": "Save test website CMS content on disk", 

72 "icon": "bi-download", 

73 "loading_label": "Saving…", 

74 "url_name": "api_save_cms", 

75 "url_args": ["pid", "site"], 

76 }, 

77 "doaj_register": { 

78 "label": "Send metadata DOAJ", 

79 "icon": "bi-upload", 

80 "loading_label": "Sending…", 

81 "url_name": "doaj_register", 

82 "url_args": ["pid"], 

83 }, 

84 "pdf_add_issue": { 

85 "label": "Add PDF from tex server", 

86 "icon": "bi-filetype-pdf", 

87 "loading_label": "Adding…", 

88 "url_name": "add_issue_pdf", 

89 "url_args": ["pid", "site"], 

90 }, 

91 "pdf_send_issue": { 

92 "label": "Send PDF to prod website", 

93 "icon": "bi-cloud-upload", 

94 "loading_label": "Sending PDF…", 

95 "url_name": "add_issue_pdf", 

96 "url_args": ["pid", "site"], 

97 }, 

98 "add_body_html_from_tex": { 

99 "label": "Add HTML from TeX", 

100 "icon": "bi-shuffle", 

101 "loading_label": "Starting conversion…", 

102 "url_name": "add_body_html_from_tex", 

103 "url_args": ["pid"], 

104 }, 

105} 

106 

107 

108@register.inclusion_tag("components/action_button.html") 

109def action_button(action, *args, **kwargs): 

110 config = ACTION_BUTTONS[action] 

111 

112 url_name = config["url_name"] 

113 url_arg_keys = config.get("url_args", []) 

114 

115 resolved_args = [] 

116 

117 context_map = kwargs.get("context_map", {}) 

118 

119 for key in url_arg_keys: 

120 if key in context_map: 

121 resolved_args.append(context_map[key]) 

122 elif args: 

123 resolved_args.append(args[0]) 

124 args = args[1:] 

125 else: 

126 raise ValueError(f"Missing URL arg: {key} for action {action}") 

127 

128 url = reverse(url_name, args=resolved_args) 

129 

130 return { 

131 "url": url, 

132 "label": config["label"], 

133 "icon": config["icon"], 

134 "loading_label": config.get("loading_label"), 

135 "reload": kwargs.get("reload", False), 

136 "title": kwargs.get("title"), 

137 }