Coverage for portality / crosswalks / application_form.py: 61%

56 statements  

« prev     ^ index     » next       coverage.py v7.13.5, created at 2026-05-04 09:41 +0100

1from portality import models, lcc 

2from portality.crosswalks.journal_form import JournalGenericXWalk, JournalFormXWalk 

3 

4 

5class ApplicationFormXWalk(JournalGenericXWalk): 

6 """ 

7 ~~ApplicationForm:Crosswalk->Application:Model~~ 

8 ~~->Application:Form~~ 

9 """ 

10 _formFields2objectFields = { 

11 "alternative_title" : "bibjson.alternative_title", 

12 "apc_charges.apc_max" : "bibjson.apc.max.price", 

13 "apc_charges.apc_currency" : "bibjson.apc.max.currency", 

14 "apc_url" : "bibjson.apc.url", 

15 "preservation_service" : "bibjson.preservation.service", 

16 "preservation_service_other" : "bibjson.preservation.service", 

17 "preservation_service_library" : "bibjson.preservation.national_library", 

18 "preservation_service_url" : "bibjson.preservation.url", 

19 "copyright_author_retains" : "bibjson.copyright.author_retains", 

20 "copyright_url" : "bibjson.copyright.url", 

21 "publisher.publisher_country" : "bibjson.publisher.country", 

22 "deposit_policy" : "bibjson.deposit_policy.service", 

23 "deposit_policy_other" : "bibjson.deposit_policy.service", 

24 "review_process" : "bibjson.editorial.review_process", 

25 "review_process_other" : "bibjson.editorial.review_process", 

26 "review_url" : "bibjson.editorial.review_url", 

27 "pissn" : "bibjson.pissn", 

28 "eissn" : "bibjson.eissn", 

29 "institution.institution_name" : "bibjson.institution.name", 

30 "keywords" : "bibjson.keywords", 

31 "language" : "bibjson.language", 

32 "license_attributes" : (["bibjson.license.BY", "bibjson.license.NC", "bibjson.license.ND", "bibjson.license.SA"], 

33 "bibjson.license[].BY, NC, ND and SA"), 

34 "license_display" : "bibjson.article.license_display", 

35 "license_display_example_url" : "bibjson.article.license_display_example_url", 

36 "boai" : "bibjson.boai", 

37 "license" : "bibjson.license.type", 

38 "license_terms_url" : "bibjson.license.url", 

39 "oa_start": "bibjson.oa_start", 

40 "oa_statement_url" : "bibjson.ref.oa_statement", 

41 "journal_url" : "bibjson.ref.journal", 

42 "aims_scope_url" : "bibjson.ref.aims_scope", 

43 "editorial_board_url" : "bibjson.editorial.board_url", 

44 "author_instructions_url" : "bibjson.ref.author_instructions", 

45 "waiver_url" : "bibjson.waiver.url", 

46 "persistent_identifiers" : "bibjson.pid_scheme.scheme", 

47 "persistent_identifiers_other" : "bibjson.pid_scheme.scheme", 

48 "plagiarism_detection" : "bibjson.plagiarism.detection", 

49 "plagiarism_url" : "bibjson.plagiarism.url", 

50 "publication_time_weeks" : "bibjson.publication_time_weeks", 

51 "other_charges_url" : "bibjson.other_charges_url", 

52 "title" : "bibjson.title", 

53 "institution.institution_country" : "bibjson.institution.country", 

54 "apc" : "bibjson.apc.has_apc", 

55 "has_other_charges" : "bibjson.other_charges.has_other_charges", 

56 "has_waiver" : "bibjson.waiver.has_waiver", 

57 "deposit_policy_url" : "bibjson.deposit_policy.url" 

58 } 

59 

60 @classmethod 

61 def formField2objectField(cls, field): 

62 data = cls._formFields2objectFields.get(field, field) 

63 if isinstance(data, str): 

64 return data 

65 return data[1] 

66 

67 @classmethod 

68 def formField2objectFields(cls, field): 

69 data = cls._formFields2objectFields.get(field, field) 

70 if isinstance(data, str): 

71 return [data] 

72 fields = data[0] 

73 if not isinstance(fields, list): 

74 return [fields] 

75 return fields 

76 

77 @classmethod 

78 def form2obj(cls, form): 

79 application = models.Application() 

80 bibjson = application.bibjson() 

81 

82 cls.form2bibjson(form, bibjson) 

83 cls.form2admin(form, application) 

84 

85 # admin stuff 

86 if getattr(form, 'application_status', None): 

87 application.set_application_status(form.application_status.data) 

88 

89 return application 

90 

91 @classmethod 

92 def obj2formdata(cls, obj): 

93 forminfo = cls.obj2form(obj) 

94 return cls.forminfo2multidict(forminfo) 

95 

96 @classmethod 

97 def obj2form(cls, obj): 

98 forminfo = {} 

99 bibjson = obj.bibjson() 

100 

101 cls.bibjson2form(bibjson, forminfo) 

102 cls.admin2form(obj, forminfo) 

103 

104 forminfo['application_status'] = obj.application_status 

105 

106 return forminfo 

107 

108 @classmethod 

109 def update_request_diff(cls, source): 

110 """ 

111 ~~->Journal:Model~~ 

112 ~~->JournalForm:Crosswalk~~ 

113 ~~->UpdateRequest:Feature~~ 

114 :param source: 

115 :return: 

116 """ 

117 diff = None 

118 cj = None 

119 

120 current_journal = source.current_journal 

121 if current_journal is not None: 

122 cj = models.Journal.pull(current_journal) 

123 if cj is not None: 

124 jform = JournalFormXWalk.obj2form(cj) 

125 if "notes" in jform: 

126 del jform["notes"] 

127 aform = ApplicationFormXWalk.obj2form(source) 

128 if "notes" in aform: 

129 del aform["notes"] 

130 diff = cls.form_diff(jform, aform) 

131 

132 return diff, cj