commonmeta-py 0.104__py3-none-any.whl → 0.106__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.
@@ -2,8 +2,9 @@
2
2
 
3
3
  from typing import Optional
4
4
 
5
- import httpx
5
+ import requests
6
6
  from pydash import py_
7
+ from requests.exceptions import ConnectionError, ReadTimeout
7
8
 
8
9
  from ..author_utils import get_authors
9
10
  from ..base_utils import compact, presence, sanitize, wrap
@@ -15,12 +16,14 @@ from ..constants import (
15
16
  )
16
17
  from ..doi_utils import (
17
18
  normalize_doi,
18
- openalex_api_sample_url,
19
- openalex_api_url,
20
19
  )
21
20
  from ..utils import (
22
21
  dict_to_spdx,
23
22
  normalize_url,
23
+ openalex_api_query_url,
24
+ openalex_api_sample_url,
25
+ openalex_api_url,
26
+ validate_id,
24
27
  validate_openalex,
25
28
  )
26
29
 
@@ -35,15 +38,27 @@ OA_IDENTIFIER_TYPES = {
35
38
  }
36
39
 
37
40
 
41
+ def get_openalex_list(query: dict, **kwargs) -> list[dict]:
42
+ """get_openalex list from OpenAlex API."""
43
+ url = openalex_api_query_url(query, **kwargs)
44
+ response = requests.get(url, timeout=30, **kwargs)
45
+ if response.status_code != 200:
46
+ return []
47
+ return response.json().get("results", [])
48
+
49
+
38
50
  def get_openalex(pid: str, **kwargs) -> dict:
39
51
  """get_openalex"""
40
- doi = normalize_doi(pid)
41
- if doi is None:
52
+ id, identifier_type = validate_id(pid)
53
+ if identifier_type not in ["DOI", "MAG", "OpenAlex", "PMID", "PMCID"]:
42
54
  return {"state": "not_found"}
43
- url = openalex_api_url(doi)
44
- response = httpx.get(url, timeout=10, **kwargs)
55
+ url = openalex_api_url(id, identifier_type, **kwargs)
56
+ response = requests.get(url, timeout=10, **kwargs)
45
57
  if response.status_code != 200:
46
58
  return {"state": "not_found"}
59
+ # OpenAlex returns record as list
60
+ if identifier_type in ["MAG", "PMID", "PMCID"]:
61
+ return py_.get(response.json(), "results[0]") | {"via": "openalex"}
47
62
  return response.json() | {"via": "openalex"}
48
63
 
49
64
 
@@ -54,8 +69,7 @@ def read_openalex(data: Optional[dict], **kwargs) -> Commonmeta:
54
69
  meta = data
55
70
  read_options = kwargs or {}
56
71
 
57
- doi = meta.get("doi", None)
58
- _id = normalize_doi(doi)
72
+ _id = meta.get("doi", None) or meta.get("id", None)
59
73
  _type = CR_TO_CM_TRANSLATIONS.get(meta.get("type_crossref", None)) or "Other"
60
74
  additional_type = OA_TO_CM_TRANSLATIONS.get(meta.get("type", None))
61
75
  if additional_type == _type:
@@ -199,7 +213,7 @@ def get_references(pids: list, **kwargs) -> list:
199
213
 
200
214
 
201
215
  def get_citations(citation_url: str, **kwargs) -> list:
202
- response = httpx.get(citation_url, timeout=10, **kwargs)
216
+ response = requests.get(citation_url, timeout=10, **kwargs)
203
217
  if response.status_code != 200:
204
218
  return {"state": "not_found"}
205
219
  response = response.json()
@@ -235,7 +249,7 @@ def get_openalex_works(pids: list, **kwargs) -> list:
235
249
  for pid_batch in pid_batches:
236
250
  ids = "|".join(pid_batch)
237
251
  url = f"https://api.openalex.org/works?filter=ids.openalex:{ids}"
238
- response = httpx.get(url, timeout=10, **kwargs)
252
+ response = requests.get(url, timeout=10, **kwargs)
239
253
  if response.status_code != 200:
240
254
  return {"state": "not_found"}
241
255
  response = response.json()
@@ -255,7 +269,7 @@ def get_openalex_funders(pids: list, **kwargs) -> list:
255
269
  for pid_batch in pid_batches:
256
270
  ids = "|".join(pid_batch)
257
271
  url = f"https://api.openalex.org/funders?filter=ids.openalex:{ids}"
258
- response = httpx.get(url, timeout=10, **kwargs)
272
+ response = requests.get(url, timeout=10, **kwargs)
259
273
  if response.status_code != 200:
260
274
  return {"state": "not_found"}
261
275
  response = response.json()
@@ -284,7 +298,7 @@ def get_openalex_source(str: Optional[str], **kwargs) -> Optional[dict]:
284
298
  return None
285
299
 
286
300
  url = f"https://api.openalex.org/sources/{id}"
287
- response = httpx.get(url, timeout=10, **kwargs)
301
+ response = requests.get(url, timeout=10, **kwargs)
288
302
  if response.status_code != 200:
289
303
  return {"state": "not_found"}
290
304
  response = response.json()
@@ -315,7 +329,6 @@ def get_files(meta) -> Optional[list]:
315
329
  def get_container(meta: dict) -> dict:
316
330
  """Get container from OpenAlex"""
317
331
  source = get_openalex_source(py_.get(meta, "primary_location.source.id"))
318
- print(source)
319
332
  container_type = py_.get(source, "type")
320
333
  if container_type:
321
334
  container_type = OA_TO_CM_CONTAINER_TRANLATIONS.get(
@@ -364,17 +377,16 @@ def from_openalex_funding(funding_references: list) -> list:
364
377
  return py_.uniq(formatted_funding_references)
365
378
 
366
379
 
367
- def get_random_id_from_openalex(number: int = 1, **kwargs) -> list:
380
+ def get_random_openalex_id(number: int = 1, **kwargs) -> list:
368
381
  """Get random ID from OpenAlex"""
369
382
  number = min(number, 20)
370
383
  url = openalex_api_sample_url(number, **kwargs)
371
384
  try:
372
- response = httpx.get(url, timeout=10)
385
+ response = requests.get(url, timeout=10)
373
386
  if response.status_code != 200:
374
387
  return []
375
388
 
376
389
  items = py_.get(response.json(), "results")
377
- print(items)
378
- return [i.get("id") for i in items]
379
- except (httpx.ReadTimeout, httpx.ConnectError):
390
+ return items
391
+ except (ReadTimeout, ConnectionError):
380
392
  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:
@@ -1,43 +1,45 @@
1
1
  """schema_org reader for commonmeta-py"""
2
2
 
3
- from typing import Optional
4
3
  import io
5
- import orjson as json
6
- from datetime import datetime
7
4
  from collections import defaultdict
8
- import httpx
9
- from pydash import py_
10
- from bs4 import BeautifulSoup
5
+ from datetime import datetime
6
+ from typing import Optional
7
+
8
+ import orjson as json
11
9
  import pikepdf
10
+ import requests
11
+ from bs4 import BeautifulSoup
12
+ from pydash import py_
13
+ from requests.exceptions import ConnectionError
12
14
 
13
- from ..utils import (
14
- dict_to_spdx,
15
- normalize_cc_url,
16
- from_schema_org,
17
- from_schema_org_creators,
18
- normalize_id,
19
- normalize_ids,
20
- normalize_url,
21
- name_to_fos,
22
- get_language,
23
- )
24
- from ..readers.crossref_reader import get_crossref
25
- from ..readers.datacite_reader import get_datacite
26
- from ..base_utils import wrap, compact, presence, parse_attributes, sanitize
27
15
  from ..author_utils import get_authors
16
+ from ..base_utils import compact, parse_attributes, presence, sanitize, wrap
17
+ from ..constants import (
18
+ OG_TO_SO_TRANSLATIONS,
19
+ SO_TO_CM_TRANSLATIONS,
20
+ SO_TO_DC_RELATION_TYPES,
21
+ SO_TO_DC_REVERSE_RELATION_TYPES,
22
+ Commonmeta,
23
+ )
28
24
  from ..date_utils import (
25
+ get_datetime_from_pdf_time,
29
26
  get_iso8601_date,
30
27
  strip_milliseconds,
31
- get_datetime_from_pdf_time,
32
28
  )
33
29
  from ..doi_utils import doi_from_url, get_doi_ra, validate_doi
30
+ from ..readers.crossref_reader import get_crossref
31
+ from ..readers.datacite_reader import get_datacite
34
32
  from ..translators import web_translator
35
- from ..constants import (
36
- SO_TO_CM_TRANSLATIONS,
37
- SO_TO_DC_RELATION_TYPES,
38
- SO_TO_DC_REVERSE_RELATION_TYPES,
39
- OG_TO_SO_TRANSLATIONS,
40
- Commonmeta,
33
+ from ..utils import (
34
+ dict_to_spdx,
35
+ from_schema_org,
36
+ from_schema_org_creators,
37
+ get_language,
38
+ name_to_fos,
39
+ normalize_cc_url,
40
+ normalize_id,
41
+ normalize_ids,
42
+ normalize_url,
41
43
  )
42
44
 
43
45
 
@@ -51,8 +53,8 @@ def get_schema_org(pid: str, **kwargs) -> dict:
51
53
  if doi_from_url(pid):
52
54
  return get_doi_meta(doi_from_url(pid))
53
55
  try:
54
- response = httpx.get(url, timeout=10, follow_redirects=True, **kwargs)
55
- except httpx.ConnectError as error:
56
+ response = requests.get(url, timeout=10, allow_redirects=True, **kwargs)
57
+ except ConnectionError as error:
56
58
  return {
57
59
  "@id": url,
58
60
  "@type": "WebPage",
@@ -1,6 +1,7 @@
1
1
  """Schema utils for commonmeta-py"""
2
2
 
3
3
  from os import path
4
+
4
5
  import orjson as json
5
6
  from jsonschema import Draft202012Validator, ValidationError
6
7
 
commonmeta/translators.py CHANGED
@@ -1,8 +1,9 @@
1
1
  """Web translators for commonmeta. Using BeautifulSoup to extract metadata from web pages."""
2
2
 
3
- from furl import furl
4
3
  import re
5
4
 
5
+ from furl import furl
6
+
6
7
  from .doi_utils import doi_as_url
7
8
 
8
9
 
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.104
3
+ Version: 0.106
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
@@ -8,37 +8,38 @@ Project-URL: Documentation, https://python.commonmeta.org
8
8
  Author-email: Martin Fenner <martin@front-matter.io>
9
9
  License-Expression: MIT
10
10
  License-File: LICENSE
11
- Keywords: bibtex,commonmeta,crossref,csl,datacite,metadata,science
11
+ Keywords: bibtex,commonmeta,crossref,csl,datacite,inveniordm,metadata,openalex,schemaorg,science
12
12
  Requires-Python: <4.0,>=3.9
13
13
  Requires-Dist: base32-lib~=1.0
14
- Requires-Dist: beautifulsoup4~=4.11
14
+ Requires-Dist: beautifulsoup4<5,>=4.11
15
15
  Requires-Dist: bibtexparser~=1.4
16
- Requires-Dist: citeproc-py-styles~=0.1.3
17
- Requires-Dist: citeproc-py<0.9,>=0.7
16
+ Requires-Dist: citeproc-py-styles<1,>=0.1.2
17
+ Requires-Dist: citeproc-py<1,>=0.6
18
18
  Requires-Dist: click<9,>=8.1.7
19
- Requires-Dist: datacite~=1.1
19
+ Requires-Dist: datacite<2,>=1.1.1
20
20
  Requires-Dist: dateparser<2,>=1.1.7
21
21
  Requires-Dist: edtf<6,>=5.0.0
22
22
  Requires-Dist: furl<3,>=2.1.3
23
- Requires-Dist: httpx<0.29,>=0.28
24
23
  Requires-Dist: jsonschema~=4.21
25
24
  Requires-Dist: lxml>=4.8
26
- Requires-Dist: nameparser<2,>=1.1.2
25
+ Requires-Dist: nameparser<2,>=1.1.1
27
26
  Requires-Dist: nh3<0.3,>=0.2.14
28
27
  Requires-Dist: orjson<4,>=3.9.14
29
28
  Requires-Dist: orjsonl<2,>=1.0.0
30
29
  Requires-Dist: pikepdf<10.0,>=8.14
31
- Requires-Dist: pycountry<25,>=23.12.11
32
- Requires-Dist: pydash<9,>=7
30
+ Requires-Dist: pycountry>=22.3.5
31
+ Requires-Dist: pydash<9,>=6
33
32
  Requires-Dist: pyjwt<3,>=2.8.0
34
33
  Requires-Dist: python-dateutil<3,>=2.8.2
35
- Requires-Dist: pyyaml~=6.0
34
+ Requires-Dist: pyyaml>=5.4
35
+ Requires-Dist: requests>=2.31.0
36
+ Requires-Dist: requests>=2.32.3
36
37
  Requires-Dist: simplejson~=3.18
37
- Requires-Dist: types-beautifulsoup4~=4.11
38
+ Requires-Dist: types-beautifulsoup4<5,>=4.11
38
39
  Requires-Dist: types-dateparser~=1.1
39
- Requires-Dist: types-pyyaml~=6.0
40
- Requires-Dist: types-xmltodict<0.15,>=0.13
41
- Requires-Dist: xmltodict<0.15,>=0.12
40
+ Requires-Dist: types-pyyaml>=5.4
41
+ Requires-Dist: types-xmltodict<0.20,>=0.13
42
+ Requires-Dist: xmltodict<0.20,>=0.12
42
43
  Description-Content-Type: text/markdown
43
44
 
44
45
  [![DOI](https://zenodo.org/badge/570526578.svg)](https://zenodo.org/doi/10.5281/zenodo.8340374)
@@ -1,32 +1,32 @@
1
- commonmeta/__init__.py,sha256=5F2THw28J2xpXhEitpTdQQj3DnYrYKJYmWxNO5ZBQUA,1933
2
- commonmeta/api_utils.py,sha256=-ZHGVZZhJqnjnsLtp4-PoeHYbDqL0cQme7W70BEjo4U,2677
3
- commonmeta/author_utils.py,sha256=4ftyfy0tZRtP8bJ_PYdrNS8Z76FNBJ38sHj5EMhds1Y,8585
4
- commonmeta/base_utils.py,sha256=-HKaIts_LzTKNsdqSAw52r5zx1baGawSQawGh8l5Sio,3751
5
- commonmeta/cli.py,sha256=3wC9nsc1J8746ZAfltt7hDHc4c9nSYp-smO-fR3UGC8,6077
1
+ commonmeta/__init__.py,sha256=4QbwqizFuHpgUA-IbFXoocikH5j9AXSEAHpyKfF3lOk,1933
2
+ commonmeta/api_utils.py,sha256=jkM1d4jgvdZ5k0gkLeg8NDXsizPEesiHNB9sF7P-gFA,2687
3
+ commonmeta/author_utils.py,sha256=3lYW5s1rOUWNTKs1FP6XLfEUY3yCLOe_3L_VdJTDMp0,8585
4
+ commonmeta/base_utils.py,sha256=TCaMENjyySStUxFowg6R08Vt5eLkHfW7WjdEHVcAZWo,3752
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
- 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
11
- commonmeta/schema_utils.py,sha256=GFFusU6D9atmjiQ7SS-rQ5cqrOEQlwYzF3q1CnOUXRA,916
12
- commonmeta/translators.py,sha256=RpGJtKNLjmz41VREZDY7KyyE2eXOi8j7m-da4jHmknI,1362
13
- commonmeta/utils.py,sha256=7IWcP0r1oHZvLrJxyl6uadLpLy13S3muP7RWV8cGp_4,46493
8
+ commonmeta/date_utils.py,sha256=H2cCobX0JREIUOT_cCigGd3MG7prGiQpXk1m4ZNrFwU,6318
9
+ commonmeta/doi_utils.py,sha256=ZztajfOLtnASk1BbQ1Y2Q4B_xxlnbujn7Opx5a1U5vY,9582
10
+ commonmeta/metadata.py,sha256=qgqbrvxPEbYn0pKIArhpaGjIeiHeuubc6nF37QgWp2Y,16702
11
+ commonmeta/schema_utils.py,sha256=yEb8Bt7WqjfQW5y15TV1uaZZdK_k9Ufz6V7Nq7Ywhi0,917
12
+ commonmeta/translators.py,sha256=CBMK4jrXRmGZiAhCh6wsJjhbDJWbcsda8UvXFXxccAw,1363
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
- commonmeta/readers/cff_reader.py,sha256=V379XNQUc0M-cDxNPwHqabu9b0NTscPUJpM9DXNgL_c,6145
17
- commonmeta/readers/codemeta_reader.py,sha256=RpzyHs07Jfix4i0mYjW48ZLuTrMPTMQ9RenowjQy-Fc,3659
16
+ commonmeta/readers/cff_reader.py,sha256=kIG-OKGQz37oWL6cU3Cz7HQ83DnRCmQ2PKSjIDodSp8,6152
17
+ commonmeta/readers/codemeta_reader.py,sha256=NUpdFXZZKR_sj2dT62ch9n3KEx-VcTWnsF5cHdAQ8JM,3666
18
18
  commonmeta/readers/commonmeta_reader.py,sha256=46XrCr2whkUP4uiaNiFXS7ABwowcRdWcLG-3OcfhVdk,303
19
- commonmeta/readers/crossref_reader.py,sha256=53Up2X6ff2iVPXLoRjjhTSa5rWrjgT8FObclU50Gazc,12540
20
- commonmeta/readers/crossref_xml_reader.py,sha256=yZOh66_4tVS5i0TdEyOa48ckpl7_cj69hfZnaA9pjM8,18723
19
+ commonmeta/readers/crossref_reader.py,sha256=xvFrSBtKb4A83t61R7QfruZQ96IVxBZpODYny0vuRjA,12604
20
+ commonmeta/readers/crossref_xml_reader.py,sha256=f4bBueit6DAlRNtUVaDs5p3wkT6wmNEz8ffQAj0BobY,18730
21
21
  commonmeta/readers/csl_reader.py,sha256=OxzC2AZKfv43BCah4XGYvlK_LUK-5mxXFcjdzB5vv_o,3216
22
- commonmeta/readers/datacite_reader.py,sha256=CdOtxhthrakBoQMsLTdPx6sUCmqtEWo5ICYE6ZsWDdo,12026
23
- commonmeta/readers/datacite_xml_reader.py,sha256=nhnO92fZihr1HZlbXjyem-HJXc9_DWLgJ2zeltuPMIg,13041
24
- commonmeta/readers/inveniordm_reader.py,sha256=qFPXdOGArWwsb09MdPf0uCsXEkL19AgsRSgsH7KT9Pw,8437
25
- commonmeta/readers/json_feed_reader.py,sha256=uiFAeDmgDOpoZR7Zah2uLDsY7xrkxpkg59bo3obZ8uk,14477
22
+ commonmeta/readers/datacite_reader.py,sha256=kO_Frddha0qzamz20XzXfU9G1NkdTOVr4K8qmhbSlZY,12068
23
+ commonmeta/readers/datacite_xml_reader.py,sha256=zJSuN9pnWplYFH7V1eneh0OjKTFCNkOLmEMf6fU6_xg,13048
24
+ commonmeta/readers/inveniordm_reader.py,sha256=6LkT6R20jSFqDdZqAzcREHbdAcIPHiYJvxKsK_mpDdw,8374
25
+ commonmeta/readers/json_feed_reader.py,sha256=edF4jirGRpvE0SMosXtjAS9_LCJt0WjwRcG1Rn4a3KE,14522
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
29
- commonmeta/readers/schema_org_reader.py,sha256=oZoLG9okMxzlyCuX6oNNNFwvGCFpQ3W2Pz2TpXr3vkA,17224
27
+ commonmeta/readers/openalex_reader.py,sha256=4HUkBsut_iUjhUcC5c1GHgxnKsYQc-fgY43QILgVZEg,12826
28
+ commonmeta/readers/ris_reader.py,sha256=oQ3G7qQmNwhr4cNp-Gv5UW28J2K1oKpBlPh-tjRtnpQ,3678
29
+ commonmeta/readers/schema_org_reader.py,sha256=AlFMmuUovqlMYkwL9F1Um6bX5vIWzhqmreHCrzsC3rU,17275
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
@@ -37,8 +37,6 @@ commonmeta/resources/crossref-v0.2.json,sha256=THbFem4IDSE-TFNOtP1-NOmZhED2dlLBs
37
37
  commonmeta/resources/csl-data.json,sha256=I7LAYtdSYGD0YxuwS0s7ojfkiEhCU-MnvQD6aRhhuBE,12222
38
38
  commonmeta/resources/datacite-v4.5.json,sha256=ocpQNSbORPJf5Ogidy6M6EHundgv7DSgIqRco02KgM4,18970
39
39
  commonmeta/resources/datacite-v4.5pr.json,sha256=2A1fKDid_hNfKc5YLjOjtXUobJovU3so9lNkTXVS3sw,21092
40
- commonmeta/resources/ietf-bcp-47.json,sha256=QQUmtIleKwywDfilVLlxzhf7XA4T46LdtLZic5XwDco,228225
41
- commonmeta/resources/iso-8601.json,sha256=SJpMPOyep2ujMnTw7PeL_KjF4tNPjx5E0n7KslCm2_I,246361
42
40
  commonmeta/resources/spdx-schema.json,sha256=Zq3_ad54nFivIkbnnqGPXEcXcDHJ_KuA6WIBSjmeJq8,47334
43
41
  commonmeta/resources/crossref/AccessIndicators.xsd,sha256=en-G2FFt4ewIFRw5C6g4YA8Nc0M66fCM2CygiO_ZqqY,2825
44
42
  commonmeta/resources/crossref/JATS-journalpublishing1-3d2-mathml3-elements.xsd,sha256=l5jJMFm4xx09bavH2Gc3EqIdr-0PTf6M9YBTNpUaZhY,415409
@@ -71,8 +69,8 @@ commonmeta/writers/datacite_writer.py,sha256=rygkSNUWdF4lvGd4BsjrlBfPHHsSLwkFp-a
71
69
  commonmeta/writers/inveniordm_writer.py,sha256=M_VmBZ_E5x_BHSgMjt2u70c34Eij2ngoaDwYWOrJzkg,11429
72
70
  commonmeta/writers/ris_writer.py,sha256=CXd9MiSHOMLReeGmr1moqteiq4x8AtLNYVS60s-aq8I,2094
73
71
  commonmeta/writers/schema_org_writer.py,sha256=J2Y-krzyhgBZ6n__S_YvdjUtwiCm-RUtpGA_esFZUwg,5742
74
- commonmeta_py-0.104.dist-info/METADATA,sha256=wBlMlgara3y9vSJyh-kzHDoHocfxA95LwBM4dO248LA,7444
75
- commonmeta_py-0.104.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
76
- commonmeta_py-0.104.dist-info/entry_points.txt,sha256=U4w4BoRuS3rN5t5Y-uYSyOeU5Lh_VRVMS9OIDzIgw4w,50
77
- commonmeta_py-0.104.dist-info/licenses/LICENSE,sha256=wsIvxF9Q9GC9vA_s79zTWP3BkXJdfUNRmALlU8GbW1s,1074
78
- commonmeta_py-0.104.dist-info/RECORD,,
72
+ commonmeta_py-0.106.dist-info/METADATA,sha256=JsAnwb_wOkMWQs7f4oc7VB9Ig6XPOY6b78n6YUqqwDE,7511
73
+ commonmeta_py-0.106.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
74
+ commonmeta_py-0.106.dist-info/entry_points.txt,sha256=U4w4BoRuS3rN5t5Y-uYSyOeU5Lh_VRVMS9OIDzIgw4w,50
75
+ commonmeta_py-0.106.dist-info/licenses/LICENSE,sha256=wsIvxF9Q9GC9vA_s79zTWP3BkXJdfUNRmALlU8GbW1s,1074
76
+ commonmeta_py-0.106.dist-info/RECORD,,