commonmeta-py 0.103__py3-none-any.whl → 0.105__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.103"
13
+ __version__ = "0.105"
14
14
  __author__ = "Martin Fenner"
15
15
  __license__ = "MIT"
16
16
 
commonmeta/cli.py CHANGED
@@ -1,16 +1,18 @@
1
- import click
2
1
  import time
3
- import pydash as py_
2
+
3
+ import click
4
4
  import orjson as json
5
+ import pydash as py_
5
6
 
6
7
  from commonmeta import Metadata, MetadataList # __version__
7
8
  from commonmeta.api_utils import update_ghost_post_via_api
8
- from commonmeta.doi_utils import validate_prefix, encode_doi, decode_doi
9
+ from commonmeta.doi_utils import decode_doi, encode_doi, validate_prefix
10
+ from commonmeta.readers.crossref_reader import get_random_crossref_id
11
+ from commonmeta.readers.datacite_reader import get_random_datacite_id
9
12
  from commonmeta.readers.json_feed_reader import (
10
13
  get_json_feed_item_uuid,
11
14
  )
12
- from commonmeta.readers.crossref_reader import get_random_crossref_id
13
- from commonmeta.readers.datacite_reader import get_random_datacite_id
15
+ from commonmeta.readers.openalex_reader import get_random_openalex_id
14
16
 
15
17
 
16
18
  @click.group()
@@ -130,6 +132,8 @@ def sample(provider, prefix, type, number, to, style, locale, show_errors):
130
132
  )
131
133
  elif provider == "datacite":
132
134
  string = json.dumps({"items": get_random_datacite_id(number)})
135
+ elif provider == "openalex":
136
+ string = json.dumps({"items": get_random_openalex_id(number)})
133
137
  else:
134
138
  output = "Provider not supported. Use 'crossref' or 'datacite' instead."
135
139
  click.echo(output)
commonmeta/doi_utils.py CHANGED
@@ -302,16 +302,6 @@ def datacite_api_sample_url(number: int = 1, **kwargs) -> str:
302
302
  return f"https://api.datacite.org/dois?random=true&page[size]={number}"
303
303
 
304
304
 
305
- def openalex_api_url(doi: str, **kwargs) -> str:
306
- """Return the OpenAlex API URL for a given DOI"""
307
- return f"https://api.openalex.org/works/{doi}"
308
-
309
-
310
- def openalex_api_sample_url(number: int = 1, **kwargs) -> str:
311
- """Return the OpenAlex API URL for a sample of dois"""
312
- return f"https://api.openalex.org/works?sample={number}"
313
-
314
-
315
305
  def is_rogue_scholar_doi(doi: str) -> bool:
316
306
  """Return True if DOI is from Rogue Scholar"""
317
307
  prefix = validate_prefix(doi)
commonmeta/metadata.py CHANGED
@@ -199,6 +199,7 @@ class Metadata:
199
199
  "codemeta",
200
200
  "kbase",
201
201
  "inveniordm",
202
+ "openalex",
202
203
  ]:
203
204
  return json.loads(string)
204
205
  else:
@@ -237,7 +238,7 @@ class Metadata:
237
238
  elif via == "kbase":
238
239
  return dict(read_kbase(data))
239
240
  elif via == "openalex":
240
- return read_openalex(data)
241
+ return dict(read_openalex(data))
241
242
  elif via == "ris":
242
243
  return dict(read_ris(data["data"] if isinstance(data, dict) else data))
243
244
  else:
@@ -397,6 +398,7 @@ class MetadataList:
397
398
  "crossref",
398
399
  "datacite",
399
400
  "schema_org",
401
+ "openalex",
400
402
  "csl",
401
403
  "json_feed_item",
402
404
  ]:
@@ -425,6 +427,8 @@ class MetadataList:
425
427
  raise ValueError("Schema.org not supported for metadata lists")
426
428
  elif to == "datacite":
427
429
  raise ValueError("Datacite not supported for metadata lists")
430
+ elif to == "openalex":
431
+ raise ValueError("OpenAlex not supported for metadata lists")
428
432
  elif to == "crossref_xml":
429
433
  return write_crossref_xml_list(self)
430
434
  else:
@@ -2,29 +2,30 @@
2
2
 
3
3
  from collections import defaultdict
4
4
  from typing import Optional
5
+
5
6
  import httpx
6
7
  from pydash import py_
7
8
 
8
- from ..utils import (
9
- normalize_url,
10
- normalize_doi,
11
- normalize_cc_url,
12
- dict_to_spdx,
13
- format_name_identifier,
14
- )
15
- from ..base_utils import compact, wrap, presence
16
9
  from ..author_utils import get_authors
10
+ from ..base_utils import compact, presence, wrap
11
+ from ..constants import (
12
+ DC_TO_CM_CONTAINER_TRANSLATIONS,
13
+ DC_TO_CM_TRANSLATIONS,
14
+ Commonmeta,
15
+ )
17
16
  from ..date_utils import normalize_date_dict
18
17
  from ..doi_utils import (
18
+ datacite_api_sample_url,
19
+ datacite_api_url,
19
20
  doi_as_url,
20
21
  doi_from_url,
21
- datacite_api_url,
22
- datacite_api_sample_url,
23
22
  )
24
- from ..constants import (
25
- DC_TO_CM_TRANSLATIONS,
26
- DC_TO_CM_CONTAINER_TRANSLATIONS,
27
- Commonmeta,
23
+ from ..utils import (
24
+ dict_to_spdx,
25
+ format_name_identifier,
26
+ normalize_cc_url,
27
+ normalize_doi,
28
+ normalize_url,
28
29
  )
29
30
 
30
31
 
@@ -15,12 +15,14 @@ from ..constants import (
15
15
  )
16
16
  from ..doi_utils import (
17
17
  normalize_doi,
18
- openalex_api_sample_url,
19
- openalex_api_url,
20
18
  )
21
19
  from ..utils import (
22
20
  dict_to_spdx,
23
21
  normalize_url,
22
+ openalex_api_query_url,
23
+ openalex_api_sample_url,
24
+ openalex_api_url,
25
+ validate_id,
24
26
  validate_openalex,
25
27
  )
26
28
 
@@ -35,15 +37,27 @@ OA_IDENTIFIER_TYPES = {
35
37
  }
36
38
 
37
39
 
40
+ def get_openalex_list(query: dict, **kwargs) -> list[dict]:
41
+ """get_openalex list from OpenAlex API."""
42
+ url = openalex_api_query_url(query, **kwargs)
43
+ response = httpx.get(url, timeout=30, **kwargs)
44
+ if response.status_code != 200:
45
+ return []
46
+ return response.json().get("results", [])
47
+
48
+
38
49
  def get_openalex(pid: str, **kwargs) -> dict:
39
50
  """get_openalex"""
40
- doi = normalize_doi(pid)
41
- if doi is None:
51
+ id, identifier_type = validate_id(pid)
52
+ if identifier_type not in ["DOI", "MAG", "OpenAlex", "PMID", "PMCID"]:
42
53
  return {"state": "not_found"}
43
- url = openalex_api_url(doi)
54
+ url = openalex_api_url(id, identifier_type, **kwargs)
44
55
  response = httpx.get(url, timeout=10, **kwargs)
45
56
  if response.status_code != 200:
46
57
  return {"state": "not_found"}
58
+ # OpenAlex returns record as list
59
+ if identifier_type in ["MAG", "PMID", "PMCID"]:
60
+ return py_.get(response.json(), "results[0]") | {"via": "openalex"}
47
61
  return response.json() | {"via": "openalex"}
48
62
 
49
63
 
@@ -54,8 +68,7 @@ def read_openalex(data: Optional[dict], **kwargs) -> Commonmeta:
54
68
  meta = data
55
69
  read_options = kwargs or {}
56
70
 
57
- doi = meta.get("doi", None)
58
- _id = normalize_doi(doi)
71
+ _id = meta.get("doi", None) or meta.get("id", None)
59
72
  _type = CR_TO_CM_TRANSLATIONS.get(meta.get("type_crossref", None)) or "Other"
60
73
  additional_type = OA_TO_CM_TRANSLATIONS.get(meta.get("type", None))
61
74
  if additional_type == _type:
@@ -315,7 +328,6 @@ def get_files(meta) -> Optional[list]:
315
328
  def get_container(meta: dict) -> dict:
316
329
  """Get container from OpenAlex"""
317
330
  source = get_openalex_source(py_.get(meta, "primary_location.source.id"))
318
- print(source)
319
331
  container_type = py_.get(source, "type")
320
332
  if container_type:
321
333
  container_type = OA_TO_CM_CONTAINER_TRANLATIONS.get(
@@ -364,7 +376,7 @@ def from_openalex_funding(funding_references: list) -> list:
364
376
  return py_.uniq(formatted_funding_references)
365
377
 
366
378
 
367
- def get_random_id_from_openalex(number: int = 1, **kwargs) -> list:
379
+ def get_random_openalex_id(number: int = 1, **kwargs) -> list:
368
380
  """Get random ID from OpenAlex"""
369
381
  number = min(number, 20)
370
382
  url = openalex_api_sample_url(number, **kwargs)
@@ -374,7 +386,6 @@ def get_random_id_from_openalex(number: int = 1, **kwargs) -> list:
374
386
  return []
375
387
 
376
388
  items = py_.get(response.json(), "results")
377
- print(items)
378
- return [i.get("id") for i in items]
389
+ return items
379
390
  except (httpx.ReadTimeout, httpx.ConnectError):
380
391
  return []
@@ -2,12 +2,12 @@
2
2
 
3
3
  from typing import Optional
4
4
 
5
- from ..utils import compact, normalize_url, wrap
6
- from ..base_utils import presence
7
5
  from ..author_utils import get_authors
8
- from ..date_utils import get_date_from_parts
9
- from ..doi_utils import normalize_doi, doi_from_url
6
+ from ..base_utils import presence
10
7
  from ..constants import RIS_TO_CM_TRANSLATIONS, Commonmeta
8
+ from ..date_utils import get_date_from_parts
9
+ from ..doi_utils import doi_from_url, normalize_doi
10
+ from ..utils import compact, normalize_url, wrap
11
11
 
12
12
 
13
13
  def read_ris(data: Optional[str], **kwargs) -> Commonmeta:
@@ -5,8 +5,7 @@
5
5
  "description": "JSON representation of the Commonmeta schema.",
6
6
  "commonmeta": {
7
7
  "anyOf": [
8
- { "$ref": "#/definitions/commonmeta"
9
- },
8
+ { "$ref": "#/definitions/commonmeta" },
10
9
  {
11
10
  "type": "array",
12
11
  "description": "An array of commonmeta objects.",
@@ -196,7 +195,13 @@
196
195
  "type": {
197
196
  "description": "The type of the description.",
198
197
  "type": "string",
199
- "enum": ["Abstract", "Summary", "Methods", "TechnicalInfo", "Other"]
198
+ "enum": [
199
+ "Abstract",
200
+ "Summary",
201
+ "Methods",
202
+ "TechnicalInfo",
203
+ "Other"
204
+ ]
200
205
  },
201
206
  "language": {
202
207
  "description": "The language of the title. Use one of the language codes from the IETF BCP 47 standard.",
@@ -267,7 +272,9 @@
267
272
  "items": { "$ref": "#/definitions/geoLocationPoint" },
268
273
  "minItems": 4
269
274
  },
270
- "inPolygonPoint": { "$ref": "#/definitions/geoLocationPoint" }
275
+ "inPolygonPoint": {
276
+ "$ref": "#/definitions/geoLocationPoint"
277
+ }
271
278
  },
272
279
  "required": ["polygonPoints"]
273
280
  },
@@ -294,6 +301,7 @@
294
301
  "Handle",
295
302
  "ISBN",
296
303
  "ISSN",
304
+ "OpenAlex",
297
305
  "PMID",
298
306
  "PMCID",
299
307
  "PURL",
@@ -323,7 +331,15 @@
323
331
  "provider": {
324
332
  "description": "The provider of the resource. This can be a DOI registration agency or a repository.",
325
333
  "type": "string",
326
- "enum": ["Crossref", "DataCite", "GitHub", "JaLC", "KISTI", "mEDRA", "OP"]
334
+ "enum": [
335
+ "Crossref",
336
+ "DataCite",
337
+ "GitHub",
338
+ "JaLC",
339
+ "KISTI",
340
+ "mEDRA",
341
+ "OP"
342
+ ]
327
343
  },
328
344
  "publisher": {
329
345
  "description": "The publisher of the resource.",
commonmeta/utils.py CHANGED
@@ -353,37 +353,37 @@ def validate_id(id: Optional[str]) -> tuple[Optional[str], Optional[str]]:
353
353
  # Check if it's a DOI
354
354
  doi = validate_doi(id)
355
355
  if doi:
356
- return normalize_doi(id), "DOI"
356
+ return doi, "DOI"
357
357
 
358
358
  # Check if it's an ORCID
359
359
  orcid = validate_orcid(id)
360
360
  if orcid:
361
- return normalize_orcid(id), "ORCID"
361
+ return orcid, "ORCID"
362
362
 
363
363
  # Check if it's a ROR
364
364
  ror = validate_ror(id)
365
365
  if ror:
366
- return normalize_ror(id), "ROR"
366
+ return ror, "ROR"
367
367
 
368
368
  # Check if it's an ISNI
369
369
  isni = validate_isni(id)
370
370
  if isni:
371
- return normalize_isni(id), "ISNI"
371
+ return isni, "ISNI"
372
372
 
373
373
  # Check if it's an OpenAlex ID
374
374
  openalex = validate_openalex(id)
375
375
  if openalex:
376
- return f"https://openalex.org/{openalex}", "OpenAlex"
376
+ return openalex, "OpenAlex"
377
377
 
378
378
  # Check if it's a PubMed ID
379
379
  pmid = validate_pmid(id)
380
380
  if pmid:
381
- return f"https://pubmed.ncbi.nlm.nih.gov/{pmid}", "PMID"
381
+ return pmid, "PMID"
382
382
 
383
383
  # Check if it's a PubMed Central ID
384
384
  pmcid = validate_pmcid(id)
385
385
  if pmcid:
386
- return f"https://www.ncbi.nlm.nih.gov/pmc/articles/{pmcid}", "PMCID"
386
+ return pmcid, "PMCID"
387
387
 
388
388
  # Check if it's a URL
389
389
  url_type = validate_url(id)
@@ -394,6 +394,66 @@ def validate_id(id: Optional[str]) -> tuple[Optional[str], Optional[str]]:
394
394
  return None, None
395
395
 
396
396
 
397
+ def openalex_api_url(id: str, identifier_type: str, **kwargs) -> str:
398
+ """Return the OpenAlex API URL for a given ID"""
399
+ if identifier_type == "DOI":
400
+ return f"https://api.openalex.org/works/{doi_as_url(id)}"
401
+ if identifier_type == "OpenAlex":
402
+ return f"https://api.openalex.org/works/{id}"
403
+ if identifier_type == "PMID":
404
+ return f"https://api.openalex.org/works?filter=ids.pmid:{id}"
405
+ if identifier_type == "PMCID":
406
+ return f"https://api.openalex.org/works?filter=ids.pmcid:{id}"
407
+
408
+
409
+ def openalex_api_query_url(query: dict) -> str:
410
+ """Return the OpenAlex API query URL"""
411
+ url = "https://api.openalex.org/works"
412
+ f = furl(url)
413
+ rows = min(int(query.get("rows", 20)), 1000)
414
+ queries = []
415
+ filters = []
416
+ _query = None
417
+ _filter = None
418
+
419
+ if query.get("query", None) is not None:
420
+ queries += [query.get("query")]
421
+ for key, value in query.items():
422
+ if key in [
423
+ "query.bibliographic",
424
+ "query.author",
425
+ "query.title",
426
+ "query.container-title",
427
+ ]:
428
+ queries += [f"{key}:{value}"]
429
+ if queries:
430
+ _query = ",".join(queries)
431
+
432
+ for key, value in query.items():
433
+ if key in [
434
+ "prefix",
435
+ "member",
436
+ "type",
437
+ "has-full-text",
438
+ "has-references",
439
+ "has-orcid",
440
+ "has-funder",
441
+ "has-license",
442
+ ]:
443
+ filters += [f"{key}:{value}"]
444
+ if filters:
445
+ _filter = ",".join(filters)
446
+
447
+ f.args.update(compact({"rows": rows, "query": _query, "filter": _filter}))
448
+
449
+ return f.url
450
+
451
+
452
+ def openalex_api_sample_url(number: int = 1, **kwargs) -> str:
453
+ """Return the OpenAlex API URL for a sample of dois"""
454
+ return f"https://api.openalex.org/works?sample={number}"
455
+
456
+
397
457
  def normalize_isni(isni: Optional[str]) -> Optional[str]:
398
458
  """Normalize ISNI"""
399
459
  if isni is None or not isinstance(isni, str):
@@ -801,6 +861,20 @@ def find_from_format_by_id(pid: str) -> Optional[str]:
801
861
  is not None
802
862
  ):
803
863
  return "codemeta"
864
+ if re.match(r"\A(http|https):/(/)?openalex\.org/(.+)\Z", pid) is not None:
865
+ return "openalex"
866
+ if (
867
+ re.match(r"\A(http|https):/(/)?pubmed\.ncbi\.nlm\.nih\.gov/(.+)\Z", pid)
868
+ is not None
869
+ ):
870
+ return "openalex" # pmid
871
+ if (
872
+ re.match(
873
+ r"\A(http|https):/(/)?www\.ncbi\.nlm\.nih\.gov/pmc/articles/(.+)\Z", pid
874
+ )
875
+ is not None
876
+ ):
877
+ return "openalex" # pmcid
804
878
  if re.match(r"\A(http|https):/(/)?github\.com/(.+)\Z", pid) is not None:
805
879
  return "cff"
806
880
  if re.match(r"\Ahttps:/(/)?api\.rogue-scholar\.org/posts/(.+)\Z", pid) is not None:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: commonmeta-py
3
- Version: 0.103
3
+ Version: 0.105
4
4
  Summary: Library for conversions to/from the Commonmeta scholarly metadata format
5
5
  Project-URL: Homepage, https://python.commonmeta.org
6
6
  Project-URL: Repository, https://github.com/front-matter/commonmeta-py
@@ -1,16 +1,16 @@
1
- commonmeta/__init__.py,sha256=5sJSfHhI1zKi-tT9a8UaWhlPu74UT4ilgC5MyFtWJYo,1933
1
+ commonmeta/__init__.py,sha256=-CGF2Vsunhb1pTKiRlTsTwhtS4tU9GPGxegTdD8ASkw,1933
2
2
  commonmeta/api_utils.py,sha256=-ZHGVZZhJqnjnsLtp4-PoeHYbDqL0cQme7W70BEjo4U,2677
3
3
  commonmeta/author_utils.py,sha256=4ftyfy0tZRtP8bJ_PYdrNS8Z76FNBJ38sHj5EMhds1Y,8585
4
4
  commonmeta/base_utils.py,sha256=-HKaIts_LzTKNsdqSAw52r5zx1baGawSQawGh8l5Sio,3751
5
- commonmeta/cli.py,sha256=sOI9BJTePnljVcXcZ95N7TKXDT283XpjUaak7bMnbr0,6076
5
+ commonmeta/cli.py,sha256=_sMYNzfiEgQ1qx6tZPMbOp1GZ9BBiWe0fYF3jJlamKU,6251
6
6
  commonmeta/constants.py,sha256=NuugDPtaAlYx7d-0WKPHNO-qnjt4rzcj-EbzL2vSi2Q,19259
7
7
  commonmeta/crossref_utils.py,sha256=mEXNP7LQXcJyEmCqcpWxi_VI3GU1ZD_XvarYjUMxPL0,22284
8
8
  commonmeta/date_utils.py,sha256=WW0tg0mgHdORPhAHt9nJIuVawhepZtUCouW-SdqI1OM,6317
9
- commonmeta/doi_utils.py,sha256=bM4D3ypyOIjeMcT5C5vx-ul-7wPGMeAOVHep9QnYAqE,9911
10
- commonmeta/metadata.py,sha256=8oe0GlqVq8oakjOyBTDK7BjTIxMmRoMgLuLg5fCXalU,16539
9
+ commonmeta/doi_utils.py,sha256=uIDfE6i68bJv-AJ4STMmT6JhXEvmTu6eZwIxAr_4MD8,9570
10
+ commonmeta/metadata.py,sha256=qgqbrvxPEbYn0pKIArhpaGjIeiHeuubc6nF37QgWp2Y,16702
11
11
  commonmeta/schema_utils.py,sha256=GFFusU6D9atmjiQ7SS-rQ5cqrOEQlwYzF3q1CnOUXRA,916
12
12
  commonmeta/translators.py,sha256=RpGJtKNLjmz41VREZDY7KyyE2eXOi8j7m-da4jHmknI,1362
13
- commonmeta/utils.py,sha256=7IWcP0r1oHZvLrJxyl6uadLpLy13S3muP7RWV8cGp_4,46493
13
+ commonmeta/utils.py,sha256=APDXdeR2oWyn15vcQPJjPisRHn14hzt1q_21vPxkFCE,48589
14
14
  commonmeta/readers/__init__.py,sha256=vOf7UsOKNoh_ZCuyexxhAmPMt8wjB-pF_CfpWRaN8pk,45
15
15
  commonmeta/readers/bibtex_reader.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
16
  commonmeta/readers/cff_reader.py,sha256=V379XNQUc0M-cDxNPwHqabu9b0NTscPUJpM9DXNgL_c,6145
@@ -19,20 +19,20 @@ commonmeta/readers/commonmeta_reader.py,sha256=46XrCr2whkUP4uiaNiFXS7ABwowcRdWcL
19
19
  commonmeta/readers/crossref_reader.py,sha256=53Up2X6ff2iVPXLoRjjhTSa5rWrjgT8FObclU50Gazc,12540
20
20
  commonmeta/readers/crossref_xml_reader.py,sha256=yZOh66_4tVS5i0TdEyOa48ckpl7_cj69hfZnaA9pjM8,18723
21
21
  commonmeta/readers/csl_reader.py,sha256=OxzC2AZKfv43BCah4XGYvlK_LUK-5mxXFcjdzB5vv_o,3216
22
- commonmeta/readers/datacite_reader.py,sha256=CdOtxhthrakBoQMsLTdPx6sUCmqtEWo5ICYE6ZsWDdo,12026
22
+ commonmeta/readers/datacite_reader.py,sha256=YuYUl4tSOB6BXeY5aASek4BjFsF47Ibow1gIrsbTDOM,12027
23
23
  commonmeta/readers/datacite_xml_reader.py,sha256=nhnO92fZihr1HZlbXjyem-HJXc9_DWLgJ2zeltuPMIg,13041
24
24
  commonmeta/readers/inveniordm_reader.py,sha256=qFPXdOGArWwsb09MdPf0uCsXEkL19AgsRSgsH7KT9Pw,8437
25
25
  commonmeta/readers/json_feed_reader.py,sha256=uiFAeDmgDOpoZR7Zah2uLDsY7xrkxpkg59bo3obZ8uk,14477
26
26
  commonmeta/readers/kbase_reader.py,sha256=KH3loJvuq2bm8zAYIUG7hTsr5-2Anj3NQvoJUDiqmss,6764
27
- commonmeta/readers/openalex_reader.py,sha256=YbYwSbp_1aBHLnVJkITqhLEwE98yqUx2L3LJ0G8R_0k,12205
28
- commonmeta/readers/ris_reader.py,sha256=ttkB1ZeLZW6jry-r8nFCbEQ0gozlsNUBeRJGMJ6qKfY,3678
27
+ commonmeta/readers/openalex_reader.py,sha256=jYBvAoawztrMQg6AdYyQf9cCVWR1M5CaraHe9CInEbU,12750
28
+ commonmeta/readers/ris_reader.py,sha256=oQ3G7qQmNwhr4cNp-Gv5UW28J2K1oKpBlPh-tjRtnpQ,3678
29
29
  commonmeta/readers/schema_org_reader.py,sha256=oZoLG9okMxzlyCuX6oNNNFwvGCFpQ3W2Pz2TpXr3vkA,17224
30
30
  commonmeta/resources/cff_v1.2.0.json,sha256=MpfjDYgX7fN9PLiG54ISZ2uu9WItNqfh-yaRuTf6Ptg,46691
31
31
  commonmeta/resources/commonmeta_v0.12.json,sha256=HUSNReXh2JN3Q6YWSt7CE69js8dh50OlpMYGTyU98oU,16762
32
32
  commonmeta/resources/commonmeta_v0.13.json,sha256=2-WSZGijR13zVu97S_YHXr-cyeLW7hzHXYMlr6nIjdw,15787
33
33
  commonmeta/resources/commonmeta_v0.14.json,sha256=nACmkTe4IrZkygd5AeJnAv9P4EWfzCwW9oL5AhubvnE,17657
34
34
  commonmeta/resources/commonmeta_v0.15.json,sha256=kC9xmtIwrGpl7V1vcXKWthWejYvtKfqOqenBCRSjANc,17753
35
- commonmeta/resources/commonmeta_v0.16.json,sha256=kgeGjIGUXzVK4E2H6eKBZdI0-gnFQYthR9WIkyAZp5o,18706
35
+ commonmeta/resources/commonmeta_v0.16.json,sha256=2TsgX69tvEUfG-k0HUUfKepCQ3z9u6lcbm2U-esOS5g,18976
36
36
  commonmeta/resources/crossref-v0.2.json,sha256=THbFem4IDSE-TFNOtP1-NOmZhED2dlLBso9RdGMbGIY,1431
37
37
  commonmeta/resources/csl-data.json,sha256=I7LAYtdSYGD0YxuwS0s7ojfkiEhCU-MnvQD6aRhhuBE,12222
38
38
  commonmeta/resources/datacite-v4.5.json,sha256=ocpQNSbORPJf5Ogidy6M6EHundgv7DSgIqRco02KgM4,18970
@@ -71,8 +71,8 @@ commonmeta/writers/datacite_writer.py,sha256=rygkSNUWdF4lvGd4BsjrlBfPHHsSLwkFp-a
71
71
  commonmeta/writers/inveniordm_writer.py,sha256=M_VmBZ_E5x_BHSgMjt2u70c34Eij2ngoaDwYWOrJzkg,11429
72
72
  commonmeta/writers/ris_writer.py,sha256=CXd9MiSHOMLReeGmr1moqteiq4x8AtLNYVS60s-aq8I,2094
73
73
  commonmeta/writers/schema_org_writer.py,sha256=J2Y-krzyhgBZ6n__S_YvdjUtwiCm-RUtpGA_esFZUwg,5742
74
- commonmeta_py-0.103.dist-info/METADATA,sha256=2r3bpGd72_9phuGCr0lGH6-v3rGnshQSezPU8An18GE,7444
75
- commonmeta_py-0.103.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
76
- commonmeta_py-0.103.dist-info/entry_points.txt,sha256=U4w4BoRuS3rN5t5Y-uYSyOeU5Lh_VRVMS9OIDzIgw4w,50
77
- commonmeta_py-0.103.dist-info/licenses/LICENSE,sha256=wsIvxF9Q9GC9vA_s79zTWP3BkXJdfUNRmALlU8GbW1s,1074
78
- commonmeta_py-0.103.dist-info/RECORD,,
74
+ commonmeta_py-0.105.dist-info/METADATA,sha256=Y7pAnOSva_poSErOjNJMNCiKLKB6gS8qLtTk9C_4RlM,7444
75
+ commonmeta_py-0.105.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
76
+ commonmeta_py-0.105.dist-info/entry_points.txt,sha256=U4w4BoRuS3rN5t5Y-uYSyOeU5Lh_VRVMS9OIDzIgw4w,50
77
+ commonmeta_py-0.105.dist-info/licenses/LICENSE,sha256=wsIvxF9Q9GC9vA_s79zTWP3BkXJdfUNRmALlU8GbW1s,1074
78
+ commonmeta_py-0.105.dist-info/RECORD,,