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

1from flask import request 

2 

3 

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 ] 

21 

22 return {field: request.form.get(field, "").strip() for field in FIELDS} 

23 

24 

25def extract_charms_data(): 

26 return request.form.getlist("charms[]") 

27 

28 

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 = [] 

33 

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()}) 

37 

38 return useful_links 

39 

40 

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 = [] 

45 

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 ) 

51 

52 return use_cases 

53 

54 

55def extract_maintainers_data(): 

56 maintainers_emails = request.form.getlist("maintainers_email[]") 

57 return [email.strip() for email in maintainers_emails if email.strip()] 

58 

59 

60def extract_categories_data(): 

61 categories = request.form.getlist("categories") 

62 return [slug.strip() for slug in categories if slug.strip()] 

63 

64 

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 ] 

72 

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 } 

79 

80 

81def process_solution_form_data(): 

82 form_data = extract_basic_form_fields() 

83 

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() 

89 

90 platform_data = extract_platform_data() 

91 form_data.update(platform_data) 

92 

93 return form_data 

94 

95 

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 }