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.
- commonmeta/__init__.py +1 -1
- commonmeta/api_utils.py +7 -6
- commonmeta/author_utils.py +10 -10
- commonmeta/base_utils.py +3 -2
- commonmeta/cli.py +3 -0
- commonmeta/date_utils.py +3 -2
- commonmeta/doi_utils.py +4 -14
- commonmeta/metadata.py +5 -1
- commonmeta/readers/cff_reader.py +9 -8
- commonmeta/readers/codemeta_reader.py +14 -13
- commonmeta/readers/crossref_reader.py +6 -5
- commonmeta/readers/crossref_xml_reader.py +20 -19
- commonmeta/readers/datacite_reader.py +21 -19
- commonmeta/readers/datacite_xml_reader.py +7 -6
- commonmeta/readers/inveniordm_reader.py +15 -16
- commonmeta/readers/json_feed_reader.py +25 -22
- commonmeta/readers/openalex_reader.py +31 -19
- commonmeta/readers/ris_reader.py +4 -4
- commonmeta/readers/schema_org_reader.py +31 -29
- commonmeta/schema_utils.py +1 -0
- commonmeta/translators.py +2 -1
- commonmeta/utils.py +81 -7
- {commonmeta_py-0.104.dist-info → commonmeta_py-0.106.dist-info}/METADATA +16 -15
- {commonmeta_py-0.104.dist-info → commonmeta_py-0.106.dist-info}/RECORD +27 -29
- commonmeta/resources/ietf-bcp-47.json +0 -3025
- commonmeta/resources/iso-8601.json +0 -3182
- {commonmeta_py-0.104.dist-info → commonmeta_py-0.106.dist-info}/WHEEL +0 -0
- {commonmeta_py-0.104.dist-info → commonmeta_py-0.106.dist-info}/entry_points.txt +0 -0
- {commonmeta_py-0.104.dist-info → commonmeta_py-0.106.dist-info}/licenses/LICENSE +0 -0
@@ -2,8 +2,9 @@
|
|
2
2
|
|
3
3
|
from typing import Optional
|
4
4
|
|
5
|
-
import
|
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
|
-
|
41
|
-
if
|
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(
|
44
|
-
response =
|
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
|
-
|
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 =
|
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 =
|
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 =
|
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 =
|
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
|
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 =
|
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
|
-
|
378
|
-
|
379
|
-
except (httpx.ReadTimeout, httpx.ConnectError):
|
390
|
+
return items
|
391
|
+
except (ReadTimeout, ConnectionError):
|
380
392
|
return []
|
commonmeta/readers/ris_reader.py
CHANGED
@@ -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 ..
|
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
|
9
|
-
from
|
10
|
-
|
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 ..
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
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 =
|
55
|
-
except
|
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",
|
commonmeta/schema_utils.py
CHANGED
commonmeta/translators.py
CHANGED
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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.
|
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
|
14
|
+
Requires-Dist: beautifulsoup4<5,>=4.11
|
15
15
|
Requires-Dist: bibtexparser~=1.4
|
16
|
-
Requires-Dist: citeproc-py-styles
|
17
|
-
Requires-Dist: citeproc-py<
|
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
|
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.
|
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
|
32
|
-
Requires-Dist: pydash<9,>=
|
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
|
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
|
38
|
+
Requires-Dist: types-beautifulsoup4<5,>=4.11
|
38
39
|
Requires-Dist: types-dateparser~=1.1
|
39
|
-
Requires-Dist: types-pyyaml
|
40
|
-
Requires-Dist: types-xmltodict<0.
|
41
|
-
Requires-Dist: xmltodict<0.
|
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
|
[](https://zenodo.org/doi/10.5281/zenodo.8340374)
|
@@ -1,32 +1,32 @@
|
|
1
|
-
commonmeta/__init__.py,sha256=
|
2
|
-
commonmeta/api_utils.py,sha256
|
3
|
-
commonmeta/author_utils.py,sha256=
|
4
|
-
commonmeta/base_utils.py,sha256
|
5
|
-
commonmeta/cli.py,sha256=
|
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=
|
9
|
-
commonmeta/doi_utils.py,sha256=
|
10
|
-
commonmeta/metadata.py,sha256=
|
11
|
-
commonmeta/schema_utils.py,sha256=
|
12
|
-
commonmeta/translators.py,sha256=
|
13
|
-
commonmeta/utils.py,sha256=
|
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=
|
17
|
-
commonmeta/readers/codemeta_reader.py,sha256=
|
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=
|
20
|
-
commonmeta/readers/crossref_xml_reader.py,sha256=
|
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=
|
23
|
-
commonmeta/readers/datacite_xml_reader.py,sha256=
|
24
|
-
commonmeta/readers/inveniordm_reader.py,sha256=
|
25
|
-
commonmeta/readers/json_feed_reader.py,sha256=
|
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=
|
28
|
-
commonmeta/readers/ris_reader.py,sha256=
|
29
|
-
commonmeta/readers/schema_org_reader.py,sha256=
|
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.
|
75
|
-
commonmeta_py-0.
|
76
|
-
commonmeta_py-0.
|
77
|
-
commonmeta_py-0.
|
78
|
-
commonmeta_py-0.
|
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,,
|