@@ -178,7 +178,7 @@ def record_detail(
178
178
)
179
179
except ValidationError :
180
180
abort (404 )
181
- # inject parent doi format for new drafts so we can show in preview
181
+ # inject parent doi format for new drafts so we can show in preview if parent doi is required
182
182
if current_app .config ["DATACITE_ENABLED" ]:
183
183
service = current_rdm_records .records_service
184
184
datacite_provider = [
@@ -187,11 +187,27 @@ def record_detail(
187
187
if p == "doi" and "datacite" in v
188
188
]
189
189
if datacite_provider :
190
- datacite_provider = datacite_provider [0 ]
191
- parent_doi = datacite_provider .client .generate_doi (
192
- record ._record .parent
190
+ should_mint_parent_doi = True
191
+ is_doi_required = (
192
+ current_app .config .get ("RDM_PARENT_PERSISTENT_IDENTIFIERS" , {})
193
+ .get ("doi" , {})
194
+ .get ("required" )
193
195
)
194
- record_ui ["ui" ]["new_draft_parent_doi" ] = parent_doi
196
+ if not is_doi_required :
197
+ # check if the draft has a reserved doi and mint parent doi only in that case
198
+ record_doi = record ._record .pids .get ("doi" , {})
199
+ is_doi_reserved = record_doi .get (
200
+ "provider" , ""
201
+ ) == "datacite" and record_doi .get ("identifier" )
202
+ if not is_doi_reserved :
203
+ should_mint_parent_doi = False
204
+
205
+ if should_mint_parent_doi :
206
+ datacite_provider = datacite_provider [0 ]
207
+ parent_doi = datacite_provider .client .generate_doi (
208
+ record ._record .parent
209
+ )
210
+ record_ui ["ui" ]["new_draft_parent_doi" ] = parent_doi
195
211
196
212
# emit a record view stats event
197
213
emitter = current_stats .get_event_emitter ("record-view" )
0 commit comments