24
24
datacite_client = DataCiteClient ()
25
25
26
26
27
- def generate_doi_data (
28
- version : Version , version_doi : bool = True , event : str | None = None
29
- ) -> tuple [str , dict ]:
30
- """
31
- Generate DOI data for a version or dandiset.
32
-
33
- Args:
34
- version: Version object containing metadata.
35
- version_doi: If True, generate a Version DOI, otherwise generate a Dandiset DOI.
36
- event: The DOI event type.
37
- - None: Creates a Draft DOI.
38
- - "publish": Creates or promotes to a Findable DOI.
39
- - "hide": Converts to a Registered DOI.
40
-
41
- Returns:
42
- Tuple of (doi_string, datacite_payload)
43
- """
44
- return datacite_client .generate_doi_data (version , version_doi , event )
45
-
46
-
47
- def create_or_update_doi (datacite_payload : dict ) -> str | None :
48
- """
49
- Create or update a DOI with the DataCite API.
50
-
51
- Args:
52
- datacite_payload: The DOI payload to send to DataCite.
53
-
54
- Returns:
55
- The DOI string on success, None on failure when not configured.
56
-
57
- Raises:
58
- requests.exceptions.HTTPError: If the API request fails.
59
- """
60
- return datacite_client .create_or_update_doi (datacite_payload )
61
-
62
-
63
27
def delete_or_hide_doi (doi : str ) -> None :
64
28
"""
65
29
Delete a draft DOI or hide a findable DOI depending on its state.
@@ -87,14 +51,14 @@ def _create_dandiset_draft_doi(draft_version: Version) -> None:
87
51
draft_version: The draft version of the dandiset.
88
52
"""
89
53
# Generate a Draft DOI (event=None)
90
- dandiset_doi , dandiset_doi_payload = generate_doi_data (
54
+ dandiset_doi , dandiset_doi_payload = datacite_client . generate_doi_data (
91
55
draft_version ,
92
56
version_doi = False ,
93
57
event = None , # Draft DOI
94
58
)
95
59
96
60
# Create the DOI
97
- create_or_update_doi (dandiset_doi_payload )
61
+ datacite_client . create_or_update_doi (dandiset_doi_payload )
98
62
99
63
# Store the DOI in the draft version
100
64
draft_version .doi = dandiset_doi
@@ -116,14 +80,14 @@ def _update_draft_version_doi(draft_version: Version) -> None:
116
80
return
117
81
118
82
# Generate DOI payload with updated metadata
119
- dandiset_doi , dandiset_doi_payload = generate_doi_data (
83
+ dandiset_doi , dandiset_doi_payload = datacite_client . generate_doi_data (
120
84
draft_version ,
121
85
version_doi = False , # Generate a Dandiset DOI, not a Version DOI
122
86
event = None , # Keep as Draft DOI
123
87
)
124
88
125
89
# Create or update the DOI
126
- create_or_update_doi (dandiset_doi_payload )
90
+ datacite_client . create_or_update_doi (dandiset_doi_payload )
127
91
128
92
# If the version doesn't have a DOI yet, store it
129
93
if draft_version .doi is None :
@@ -152,30 +116,30 @@ def _handle_publication_dois(version_id: int) -> None:
152
116
is_first_publication = draft_version .doi is None
153
117
154
118
# Create Version DOI as Findable
155
- version_doi , version_doi_payload = generate_doi_data (
119
+ version_doi , version_doi_payload = datacite_client . generate_doi_data (
156
120
version , version_doi = True , event = 'publish'
157
121
)
158
122
159
123
# Either create or update the Dandiset DOI based on whether it's the first publication
160
124
if is_first_publication :
161
125
# For first publication: generate Dandiset DOI and promote from Draft to Findable
162
- dandiset_doi , dandiset_doi_payload = generate_doi_data (
126
+ dandiset_doi , dandiset_doi_payload = datacite_client . generate_doi_data (
163
127
version ,
164
128
version_doi = False ,
165
129
event = 'publish' , # Promote to Findable on first publication
166
130
)
167
131
else :
168
132
# For subsequent publications: update the metadata but keep as Findable
169
- dandiset_doi , dandiset_doi_payload = generate_doi_data (
133
+ dandiset_doi , dandiset_doi_payload = datacite_client . generate_doi_data (
170
134
version ,
171
135
version_doi = False ,
172
136
event = 'publish' , # Update existing Findable DOI
173
137
)
174
138
175
139
# Create or update the DOIs
176
140
# TODO(asmacdo) we need to try:except here, so dandiset doi doesnt block version doi
177
- create_or_update_doi (dandiset_doi_payload )
178
- create_or_update_doi (version_doi_payload )
141
+ datacite_client . create_or_update_doi (dandiset_doi_payload )
142
+ datacite_client . create_or_update_doi (version_doi_payload )
179
143
180
144
# Store the DOI values
181
145
version .doi = version_doi
0 commit comments