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 +1 -1
- commonmeta/cli.py +9 -5
- commonmeta/doi_utils.py +0 -10
- commonmeta/metadata.py +5 -1
- commonmeta/readers/datacite_reader.py +15 -14
- commonmeta/readers/openalex_reader.py +22 -11
- commonmeta/readers/ris_reader.py +4 -4
- commonmeta/resources/commonmeta_v0.16.json +21 -5
- commonmeta/utils.py +81 -7
- {commonmeta_py-0.103.dist-info → commonmeta_py-0.105.dist-info}/METADATA +1 -1
- {commonmeta_py-0.103.dist-info → commonmeta_py-0.105.dist-info}/RECORD +14 -14
- {commonmeta_py-0.103.dist-info → commonmeta_py-0.105.dist-info}/WHEEL +0 -0
- {commonmeta_py-0.103.dist-info → commonmeta_py-0.105.dist-info}/entry_points.txt +0 -0
- {commonmeta_py-0.103.dist-info → commonmeta_py-0.105.dist-info}/licenses/LICENSE +0 -0
commonmeta/__init__.py
CHANGED
commonmeta/cli.py
CHANGED
@@ -1,16 +1,18 @@
|
|
1
|
-
import click
|
2
1
|
import time
|
3
|
-
|
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
|
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.
|
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 ..
|
25
|
-
|
26
|
-
|
27
|
-
|
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
|
-
|
41
|
-
if
|
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(
|
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
|
-
|
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
|
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
|
-
|
378
|
-
return [i.get("id") for i in items]
|
389
|
+
return items
|
379
390
|
except (httpx.ReadTimeout, httpx.ConnectError):
|
380
391
|
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:
|
@@ -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": [
|
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": {
|
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": [
|
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
|
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.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
|
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=
|
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=
|
10
|
-
commonmeta/metadata.py,sha256=
|
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=
|
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=
|
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=
|
28
|
-
commonmeta/readers/ris_reader.py,sha256=
|
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=
|
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.
|
75
|
-
commonmeta_py-0.
|
76
|
-
commonmeta_py-0.
|
77
|
-
commonmeta_py-0.
|
78
|
-
commonmeta_py-0.
|
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,,
|
File without changes
|
File without changes
|
File without changes
|