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
« 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
4register = template.Library()
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}
108@register.inclusion_tag("components/action_button.html")
109def action_button(action, *args, **kwargs):
110 config = ACTION_BUTTONS[action]
112 url_name = config["url_name"]
113 url_arg_keys = config.get("url_args", [])
115 resolved_args = []
117 context_map = kwargs.get("context_map", {})
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}")
128 url = reverse(url_name, args=resolved_args)
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 }