commonmeta-py 0.39__py3-none-any.whl → 0.41__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
commonmeta/__init__.py CHANGED
@@ -10,7 +10,7 @@ commonmeta-py is a Python library to convert scholarly metadata
10
10
  """
11
11
 
12
12
  __title__ = "commonmeta-py"
13
- __version__ = "0.39"
13
+ __version__ = "0.41"
14
14
  __author__ = "Martin Fenner"
15
15
  __license__ = "MIT"
16
16
 
commonmeta/constants.py CHANGED
@@ -623,3 +623,13 @@ CROSSREF_FUNDER_ID_TO_ROR_TRANSLATIONS = {
623
623
  "https://doi.org/10.13039/501100001711": "https://ror.org/00yjd3n13",
624
624
  "https://doi.org/10.13039/501100003043": "https://ror.org/04wfr2810",
625
625
  }
626
+
627
+
628
+ ROR_TO_CROSSREF_FUNDER_ID_TRANSLATIONS = {
629
+ "https://ror.org/021nxhr62": "https://doi.org/10.13039/100000001",
630
+ "https://ror.org/00k4n6c32": "https://doi.org/10.13039/501100000780",
631
+ "https://ror.org/018mejw64": "https://doi.org/10.13039/501100001659",
632
+ "https://ror.org/019whta54": "https://doi.org/10.13039/501100006390",
633
+ "https://ror.org/00yjd3n13": "https://doi.org/10.13039/501100001711",
634
+ "https://ror.org/04wfr2810": "https://doi.org/10.13039/501100003043",
635
+ }
@@ -8,7 +8,7 @@ import uuid
8
8
  import pydash as py_
9
9
  from furl import furl
10
10
 
11
- from .constants import Commonmeta
11
+ from .constants import Commonmeta, ROR_TO_CROSSREF_FUNDER_ID_TRANSLATIONS
12
12
  from .utils import wrap, compact, normalize_orcid, normalize_id, validate_url
13
13
  from .doi_utils import doi_from_url, validate_doi
14
14
 
@@ -362,11 +362,16 @@ def insert_funding_references(metadata, xml):
362
362
  {"name": "funder_name"},
363
363
  )
364
364
  if funding_reference.get("funderIdentifier", None) is not None:
365
+ funder_identifier = funding_reference.get("funderIdentifier", None)
366
+
367
+ # translate ROR to Crossref funder ID until Crossref supports ROR
368
+ funder_identifier = ROR_TO_CROSSREF_FUNDER_ID_TRANSLATIONS.get(funder_identifier, funder_identifier)
369
+
365
370
  etree.SubElement(
366
371
  funder_name,
367
372
  "assertion",
368
373
  {"name": "funder_identifier"},
369
- ).text = funding_reference.get("funderIdentifier", None)
374
+ ).text = funder_identifier
370
375
  if funding_reference.get("awardNumber", None) is not None:
371
376
  etree.SubElement(
372
377
  assertion,
@@ -214,13 +214,15 @@ def get_funding_references(meta: Optional[dict]) -> Optional[list]:
214
214
  or furl(urls[0]).host == "cordis.europa.eu"
215
215
  ):
216
216
  return [
217
- {
218
- "funderName": "European Commission",
219
- "funderIdentifier": "https://doi.org/10.13039/501100000780",
220
- "funderIdentifierType": "Crossref Funder ID",
221
- "awardUri": urls[0],
222
- "awardNumber": urls[0].split("/")[-1],
223
- }
217
+ compact(
218
+ {
219
+ "funderName": "European Commission",
220
+ "funderIdentifier": "https://ror.org/00k4n6c32",
221
+ "funderIdentifierType": "ROR",
222
+ "awardUri": urls[0],
223
+ "awardNumber": urls[0].split("/")[-1],
224
+ }
225
+ )
224
226
  ]
225
227
  # Prefix 10.13039 means funder ID from Open Funder registry.
226
228
  elif len(urls) == 2 and validate_prefix(urls[0]) == "10.13039":
@@ -235,29 +237,24 @@ def get_funding_references(meta: Optional[dict]) -> Optional[list]:
235
237
  else:
236
238
  award_number = f.path.segments[-1]
237
239
  return [
238
- {
240
+ compact({
239
241
  "funderName": funder_name,
240
242
  "funderIdentifier": urls[0],
241
243
  "funderIdentifierType": "Crossref Funder ID",
242
244
  "awardUri": urls[1],
243
245
  "awardNumber": award_number,
244
- }
246
+ })
245
247
  ]
246
- # URL is ROR ID for funder. Need to transform to Crossref Funder ID
247
- # until Crossref production service supports ROR IDs.
248
+ # URL is ROR ID for funder.
248
249
  elif len(urls) == 2 and validate_ror(urls[0]):
249
250
  f = furl(urls[0])
250
251
  _id = f.path.segments[-1]
251
252
  response = httpx.get(f"https://api.ror.org/organizations/{_id}", timeout=10)
252
253
  ror = response.json()
253
254
  funder_name = ror.get("name", None)
254
- funder_identifier = py_.get(ror, "external_ids.FUNDREF.all.0")
255
- if funder_identifier is not None:
256
- funder_identifier = f"https://doi.org/{funder_identifier}"
257
- funder_identifier_type = "Crossref Funder ID"
258
- else:
259
- funder_identifier = urls[0]
260
- funder_identifier_type = "ROR"
255
+ funder_identifier = urls[0]
256
+ funder_identifier_type = "ROR"
257
+
261
258
  f = furl(urls[1])
262
259
  # url is for NSF grant
263
260
  if f.args["awd_id"] is not None:
@@ -266,13 +263,13 @@ def get_funding_references(meta: Optional[dict]) -> Optional[list]:
266
263
  award_number = f.path.segments[-1]
267
264
  return [
268
265
  compact(
269
- {
266
+ compact({
270
267
  "funderName": funder_name,
271
268
  "funderIdentifier": funder_identifier,
272
269
  "funderIdentifierType": funder_identifier_type,
273
270
  "awardUri": urls[1],
274
271
  "awardNumber": award_number,
275
- }
272
+ })
276
273
  )
277
274
  ]
278
275
 
@@ -290,7 +287,6 @@ def get_funding_references(meta: Optional[dict]) -> Optional[list]:
290
287
  "funderName": funding.get("funder_name", None),
291
288
  "funderIdentifier": funding.get("funder_id", None),
292
289
  "funderIdentifierType": "Crossref Funder ID",
293
- "awardTitle": funding.get("award", None),
294
290
  "awardNumber": funding.get("award_number", None),
295
291
  }
296
292
  ]
@@ -49,7 +49,7 @@ def write_inveniordm(metadata):
49
49
  relations = [
50
50
  to_inveniordm_related_identifier(i)
51
51
  for i in wrap(metadata.relations)
52
- if i.get("id", None) and i.get("type", None)
52
+ if i.get("id", None) and i.get("type", None) != "IsPartOf"
53
53
  ]
54
54
  related_identifiers = references + relations
55
55
  funding = compact(
@@ -212,12 +212,6 @@ def to_inveniordm_related_identifier(relation: dict) -> dict:
212
212
  if normalize_doi(relation.get("id", None)):
213
213
  identifier = doi_from_url(relation.get("id", None))
214
214
  scheme = "doi"
215
- elif (
216
- relation.get("type", None) == "IsPartOf"
217
- and furl(relation.get("id", None)).host == "portal.issn.org"
218
- ):
219
- identifier = issn_from_url(relation.get("id", None))
220
- scheme = "issn"
221
215
  else:
222
216
  identifier = relation.get("id", None)
223
217
  scheme = "url"
@@ -243,7 +237,7 @@ def to_inveniordm_related_identifier(relation: dict) -> dict:
243
237
  def to_inveniordm_funding(funding: dict) -> Optional[dict]:
244
238
  """Convert funding to inveniordm funding"""
245
239
  if funding.get("funderIdentifierType", None) == "ROR":
246
- funder_identifier = id_from_url(funder_identifier)
240
+ funder_identifier = id_from_url(funding.get("funderIdentifier", None))
247
241
  elif funding.get("funderIdentifierType", None) == "Crossref Funder ID":
248
242
  # convert to ROR
249
243
  funder_identifier = id_from_url(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: commonmeta-py
3
- Version: 0.39
3
+ Version: 0.41
4
4
  Summary: Library for conversions to/from the Commonmeta scholarly metadata format
5
5
  Home-page: https://python.commonmeta.org
6
6
  License: MIT
@@ -1,10 +1,10 @@
1
- commonmeta/__init__.py,sha256=Yb35HxY9mUSmG9MYb6v3qVEfQF7Zt6PWJr8hehffPNU,1779
1
+ commonmeta/__init__.py,sha256=p-9XQa_lbjKjoWcroP_4xCUpiuGwBdhjbY21Wx2YJiw,1779
2
2
  commonmeta/api_utils.py,sha256=-ZHGVZZhJqnjnsLtp4-PoeHYbDqL0cQme7W70BEjo4U,2677
3
3
  commonmeta/author_utils.py,sha256=zBIPTgP5n7Zx57xomJ2h7x0dvC0AV8gJ2gPoYeDy5Lo,8348
4
4
  commonmeta/base_utils.py,sha256=0t6fr9XGeeTBoMlKSAMI7p_EmKsA6wYRW0roEBXVcc8,3722
5
5
  commonmeta/cli.py,sha256=0IJF1SQ1sKPg7M0Gb8fpX2nBps-G0L13o01__M6c5Z0,6104
6
- commonmeta/constants.py,sha256=aMD7vG_kJD5ja5YOqDjsfuokWcRMnWOF7jv0YV3-OXw,16973
7
- commonmeta/crossref_utils.py,sha256=xyS8jFXO8unzumCC6YXK45kzz16PQAAOkWUHgjqawAo,22063
6
+ commonmeta/constants.py,sha256=cank4niDCO-VvjjRIgCxOAqFEnV1R8xyGC6xEL1iDsw,17461
7
+ commonmeta/crossref_utils.py,sha256=LBYfmhIldYryaBUYohfLnv870aWGMDm043Ny8Wav6Bg,22370
8
8
  commonmeta/date_utils.py,sha256=amF3E0ZJlh8yY5eY3aVXQyAO1x2WuZHJXw-ajOEcdUQ,5808
9
9
  commonmeta/doi_utils.py,sha256=Dt6K9ADD2ga2WNsOzfX9f29gnubhn7xqeKL7U5pEpBs,8209
10
10
  commonmeta/metadata.py,sha256=dqqk4IW-_OwtS_PVs0i7AuxrkNqOYjJCqhQJ2X-I1DQ,12398
@@ -19,7 +19,7 @@ commonmeta/readers/csl_reader.py,sha256=5V_sHSJwcAWJmhB8SYk199nB96BWYX1Sq9vkQ3iE
19
19
  commonmeta/readers/datacite_reader.py,sha256=CdOtxhthrakBoQMsLTdPx6sUCmqtEWo5ICYE6ZsWDdo,12026
20
20
  commonmeta/readers/datacite_xml_reader.py,sha256=nhnO92fZihr1HZlbXjyem-HJXc9_DWLgJ2zeltuPMIg,13041
21
21
  commonmeta/readers/inveniordm_reader.py,sha256=jzv0rXzT8OCdPD_MShBXTnlwD-F9tpTX7OKZGn8smzs,7480
22
- commonmeta/readers/json_feed_reader.py,sha256=x7TjLq5nJsYw-MpDfYeiAWn2RbvqrIVkdOjQFW_Y7EE,13403
22
+ commonmeta/readers/json_feed_reader.py,sha256=y-sX_l9AD0I71pSZSZWr2x2tLTlD4mxoB2eF0vf0rWk,13034
23
23
  commonmeta/readers/kbase_reader.py,sha256=ehKXQsJyPCtaq2FmBxNb2Jb5Nktpx8pNscpmEM6N0A4,6763
24
24
  commonmeta/readers/ris_reader.py,sha256=v6qOd-i2OcMTEFy5RGd3MlYthJcYSU6yzmZ5yHDzmII,3677
25
25
  commonmeta/readers/schema_org_reader.py,sha256=xyWzO2XAWlI2pYVl2EbVRsUmfiWXEwP64CHRBQNRN-M,16835
@@ -49,7 +49,7 @@ commonmeta/resources/datacite-v4.5pr.json,sha256=2A1fKDid_hNfKc5YLjOjtXUobJovU3s
49
49
  commonmeta/resources/ietf-bcp-47.json,sha256=QQUmtIleKwywDfilVLlxzhf7XA4T46LdtLZic5XwDco,228225
50
50
  commonmeta/resources/iso-8601.json,sha256=SJpMPOyep2ujMnTw7PeL_KjF4tNPjx5E0n7KslCm2_I,246361
51
51
  commonmeta/resources/spdx/licenses.json,sha256=acWuaiWFY35GOht9uXgX20vdG-QH7ISrqTL_D0mf2bY,172114
52
- commonmeta/resources/spdx-schema..json,sha256=Zq3_ad54nFivIkbnnqGPXEcXcDHJ_KuA6WIBSjmeJq8,47334
52
+ commonmeta/resources/spdx-schema.json,sha256=Zq3_ad54nFivIkbnnqGPXEcXcDHJ_KuA6WIBSjmeJq8,47334
53
53
  commonmeta/resources/styles/apa.csl,sha256=2KSBL2rUz55nJj5ulA9w9E-GLSL8dX0nfCBVUdRP45o,63244
54
54
  commonmeta/resources/styles/chicago-author-date.csl,sha256=e577X6ZqwhajOsrJLXMiOALuwk5_wkLb-Y5BeBB8gW8,23208
55
55
  commonmeta/resources/styles/harvard-cite-them-right.csl,sha256=XmLVFDrfsgkECYaAbdqM7CtPnxoigqfGKhyX9qnYTJ0,10723
@@ -66,11 +66,11 @@ commonmeta/writers/commonmeta_writer.py,sha256=2qlttCfYpGhfVjrYkjzbIra7AywssRLT3
66
66
  commonmeta/writers/crossref_xml_writer.py,sha256=0Ds494RnXfdfjWw5CLX1kwV2zP7gqffdVqO-X74Uc6c,492
67
67
  commonmeta/writers/csl_writer.py,sha256=rlCeShkvC6ui9By0yVfNCMay_JfaZ4AooUPOPg-g-2M,2819
68
68
  commonmeta/writers/datacite_writer.py,sha256=G7Lr0aZ4sAEdbfXe3dG4Y6AyGUKA9UWr_iiaQRDnV24,6233
69
- commonmeta/writers/inveniordm_writer.py,sha256=zPGji-ccaGwTmXM0uYUQYi0SWCkJxijz3g974d8QkAk,9622
69
+ commonmeta/writers/inveniordm_writer.py,sha256=phizoSJVVHfP_wABXTKCIi7HpG7mSZbNDYVbNWoW4UQ,9435
70
70
  commonmeta/writers/ris_writer.py,sha256=AcnCszS3WY9lF594NbFBtLylsA8ownnYp_XLQJ84Ios,2093
71
71
  commonmeta/writers/schema_org_writer.py,sha256=5j002uCNLdlScZMNQmPjodcVWqaBh2z38zL1H4lo2hY,5741
72
- commonmeta_py-0.39.dist-info/LICENSE,sha256=746hEF2wZCKkcckk5-_DcBLtHewfaEMS4iXTlA1PVwk,1074
73
- commonmeta_py-0.39.dist-info/METADATA,sha256=00-S7EqflCWSm8Db0wNxmoXkVRC5AR7CMBEXt1MZI-Q,8331
74
- commonmeta_py-0.39.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
75
- commonmeta_py-0.39.dist-info/entry_points.txt,sha256=vbcDw3_2lMTKdcAL2VUF4DRYRpKuzXVYLMCdgKVf88U,49
76
- commonmeta_py-0.39.dist-info/RECORD,,
72
+ commonmeta_py-0.41.dist-info/LICENSE,sha256=746hEF2wZCKkcckk5-_DcBLtHewfaEMS4iXTlA1PVwk,1074
73
+ commonmeta_py-0.41.dist-info/METADATA,sha256=c0f4bEW3LY-00aqohuS0MYIuBgl7mMxkDrTwRmaGrcA,8331
74
+ commonmeta_py-0.41.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
75
+ commonmeta_py-0.41.dist-info/entry_points.txt,sha256=vbcDw3_2lMTKdcAL2VUF4DRYRpKuzXVYLMCdgKVf88U,49
76
+ commonmeta_py-0.41.dist-info/RECORD,,