@@ -57,8 +57,8 @@ def get_link(self) -> pystac.Link:
57
57
return pystac .Link (CITE_AS , doi_to_url (self .doi ))
58
58
59
59
60
- def remove_link (links : List [pystac .Link ], pub : Publication ):
61
- url = doi_to_url (pub . doi )
60
+ def remove_link (links : List [pystac .Link ], doi : str ):
61
+ url = doi_to_url (doi )
62
62
for i , a_link in enumerate (links ):
63
63
if a_link .rel != CITE_AS :
64
64
continue
@@ -123,6 +123,11 @@ def doi(self) -> str:
123
123
124
124
@doi .setter
125
125
def doi (self , v : str ) -> None :
126
+ if DOI in self .item .properties :
127
+ if v == self .item .properties [DOI ]:
128
+ return
129
+ remove_link (self .item .links , self .item .properties [DOI ])
130
+
126
131
self .item .properties [DOI ] = v
127
132
url = doi_to_url (self .doi )
128
133
self .item .add_link (pystac .Link (CITE_AS , url ))
@@ -167,13 +172,13 @@ def remove_publication(self, publication: Optional[Publication] = None) -> None:
167
172
168
173
if not publication :
169
174
for one_pub in self .item .ext .scientific .publications :
170
- remove_link (self .item .links , one_pub )
175
+ remove_link (self .item .links , one_pub . doi )
171
176
172
177
del self .item .properties [PUBLICATIONS ]
173
178
return
174
179
175
180
# One publication and link to remove
176
- remove_link (self .item .links , publication )
181
+ remove_link (self .item .links , publication . doi )
177
182
to_remove = publication .to_dict ()
178
183
self .item .properties [PUBLICATIONS ].remove (to_remove )
179
184
@@ -237,6 +242,10 @@ def doi(self) -> str:
237
242
238
243
@doi .setter
239
244
def doi (self , v : str ) -> None :
245
+ if DOI in self .collection .extra_fields :
246
+ if v == self .collection .extra_fields [DOI ]:
247
+ return
248
+ remove_link (self .collection .links , self .collection .extra_fields [DOI ])
240
249
self .collection .extra_fields [DOI ] = v
241
250
url = doi_to_url (self .doi )
242
251
self .collection .add_link (pystac .Link (CITE_AS , url ))
@@ -283,13 +292,13 @@ def remove_publication(self, publication: Optional[Publication] = None) -> None:
283
292
284
293
if not publication :
285
294
for one_pub in self .collection .ext .scientific .publications :
286
- remove_link (self .collection .links , one_pub )
295
+ remove_link (self .collection .links , one_pub . doi )
287
296
288
297
del self .collection .extra_fields [PUBLICATIONS ]
289
298
return
290
299
291
300
# One publication and link to remove
292
- remove_link (self .collection .links , publication )
301
+ remove_link (self .collection .links , publication . doi )
293
302
to_remove = publication .to_dict ()
294
303
self .collection .extra_fields [PUBLICATIONS ].remove (to_remove )
295
304
0 commit comments