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
« 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
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 }
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]
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
77 @classmethod
78 def form2obj(cls, form):
79 application = models.Application()
80 bibjson = application.bibjson()
82 cls.form2bibjson(form, bibjson)
83 cls.form2admin(form, application)
85 # admin stuff
86 if getattr(form, 'application_status', None):
87 application.set_application_status(form.application_status.data)
89 return application
91 @classmethod
92 def obj2formdata(cls, obj):
93 forminfo = cls.obj2form(obj)
94 return cls.forminfo2multidict(forminfo)
96 @classmethod
97 def obj2form(cls, obj):
98 forminfo = {}
99 bibjson = obj.bibjson()
101 cls.bibjson2form(bibjson, forminfo)
102 cls.admin2form(obj, forminfo)
104 forminfo['application_status'] = obj.application_status
106 return forminfo
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
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)
132 return diff, cj