Coverage for webapp/publisher/form_processors.py: 23%
44 statements
« prev ^ index » next coverage.py v7.16.1, created at 2026-09-18 22:11 +0000
« prev ^ index » next coverage.py v7.16.1, created at 2026-09-18 22:11 +0000
1from flask import request
4def extract_basic_form_fields():
5 FIELDS = [
6 "title",
7 "summary",
8 "description",
9 "creator_email",
10 "mattermost_handle",
11 "icon",
12 "terraform_modules",
13 "documentation_main",
14 "documentation_source",
15 "get_started_url",
16 "submit_bug_url",
17 "community_discussion_url",
18 "architecture_diagram_url",
19 "architecture_explanation",
20 ]
22 return {field: request.form.get(field, "").strip() for field in FIELDS}
25def extract_charms_data():
26 return request.form.getlist("charms[]")
29def extract_useful_links_data():
30 useful_links_titles = request.form.getlist("useful_links_title[]")
31 useful_links_urls = request.form.getlist("useful_links_url[]")
32 useful_links = []
34 for title, url in zip(useful_links_titles, useful_links_urls):
35 if title.strip() and url.strip():
36 useful_links.append({"title": title.strip(), "url": url.strip()})
38 return useful_links
41def extract_use_cases_data():
42 use_cases_titles = request.form.getlist("use_cases_title[]")
43 use_cases_descriptions = request.form.getlist("use_cases_description[]")
44 use_cases = []
46 for title, description in zip(use_cases_titles, use_cases_descriptions):
47 if title.strip() and description.strip():
48 use_cases.append(
49 {"title": title.strip(), "description": description.strip()}
50 )
52 return use_cases
55def extract_maintainers_data():
56 maintainers_emails = request.form.getlist("maintainers_email[]")
57 return [email.strip() for email in maintainers_emails if email.strip()]
60def extract_categories_data():
61 categories = request.form.getlist("categories")
62 return [slug.strip() for slug in categories if slug.strip()]
65def extract_platform_data():
66 def clean_list(field_name):
67 return [
68 item.strip()
69 for item in request.form.getlist(field_name)
70 if item.strip()
71 ]
73 return {
74 "platform": request.form.get("platform").strip(),
75 "platform_version": clean_list("platform_version[]"),
76 "platform_prerequisites": clean_list("platform_prerequisites[]"),
77 "juju_versions": clean_list("juju_versions[]"),
78 }
81def process_solution_form_data():
82 form_data = extract_basic_form_fields()
84 form_data["charms"] = extract_charms_data()
85 form_data["useful_links"] = extract_useful_links_data()
86 form_data["use_cases"] = extract_use_cases_data()
87 form_data["maintainers"] = extract_maintainers_data()
88 form_data["categories"] = extract_categories_data()
90 platform_data = extract_platform_data()
91 form_data.update(platform_data)
93 return form_data
96def create_error_context(errors, solution, user_teams, form_data=None):
97 return {
98 "has_solutions": True,
99 "user_teams": user_teams,
100 "solution": solution,
101 "form_data": form_data,
102 "errors": errors,
103 }