caltechdata-api 2.0.0__tar.gz → 2.1.0__tar.gz
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.
- {caltechdata_api-2.0.0 → caltechdata_api-2.1.0}/PKG-INFO +31 -14
- {caltechdata_api-2.0.0 → caltechdata_api-2.1.0}/README.md +17 -5
- {caltechdata_api-2.0.0 → caltechdata_api-2.1.0}/caltechdata_api.egg-info/PKG-INFO +31 -14
- {caltechdata_api-2.0.0 → caltechdata_api-2.1.0}/caltechdata_api.egg-info/SOURCES.txt +0 -2
- caltechdata_api-2.1.0/pyproject.toml +69 -0
- caltechdata_api-2.1.0/setup.cfg +4 -0
- {caltechdata_api-2.0.0 → caltechdata_api-2.1.0}/tests/test_rdm.py +6 -2
- caltechdata_api-2.1.0/tests/test_unit.py +76 -0
- caltechdata_api-2.0.0/pyproject.toml +0 -3
- caltechdata_api-2.0.0/setup.cfg +0 -55
- caltechdata_api-2.0.0/setup.py +0 -3
- caltechdata_api-2.0.0/tests/test_unit.py +0 -166
- {caltechdata_api-2.0.0 → caltechdata_api-2.1.0}/LICENSE +0 -0
- {caltechdata_api-2.0.0 → caltechdata_api-2.1.0}/caltechdata_api/__init__.py +0 -0
- {caltechdata_api-2.0.0 → caltechdata_api-2.1.0}/caltechdata_api/caltechdata_edit.py +0 -0
- {caltechdata_api-2.0.0 → caltechdata_api-2.1.0}/caltechdata_api/caltechdata_write.py +0 -0
- {caltechdata_api-2.0.0 → caltechdata_api-2.1.0}/caltechdata_api/cli.py +0 -0
- {caltechdata_api-2.0.0 → caltechdata_api-2.1.0}/caltechdata_api/customize_schema.py +0 -0
- {caltechdata_api-2.0.0 → caltechdata_api-2.1.0}/caltechdata_api/download_file.py +0 -0
- {caltechdata_api-2.0.0 → caltechdata_api-2.1.0}/caltechdata_api/get_files.py +0 -0
- {caltechdata_api-2.0.0 → caltechdata_api-2.1.0}/caltechdata_api/get_metadata.py +0 -0
- {caltechdata_api-2.0.0 → caltechdata_api-2.1.0}/caltechdata_api/md_to_json.py +0 -0
- {caltechdata_api-2.0.0 → caltechdata_api-2.1.0}/caltechdata_api/utils.py +0 -0
- {caltechdata_api-2.0.0 → caltechdata_api-2.1.0}/caltechdata_api/vocabularies/date_types.yaml +0 -0
- {caltechdata_api-2.0.0 → caltechdata_api-2.1.0}/caltechdata_api/vocabularies/description_types.yaml +0 -0
- {caltechdata_api-2.0.0 → caltechdata_api-2.1.0}/caltechdata_api/vocabularies/identifier_types.yaml +0 -0
- {caltechdata_api-2.0.0 → caltechdata_api-2.1.0}/caltechdata_api/vocabularies/licenses.csv +0 -0
- {caltechdata_api-2.0.0 → caltechdata_api-2.1.0}/caltechdata_api/vocabularies/relation_types.yaml +0 -0
- {caltechdata_api-2.0.0 → caltechdata_api-2.1.0}/caltechdata_api/vocabularies/resource_types.yaml +0 -0
- {caltechdata_api-2.0.0 → caltechdata_api-2.1.0}/caltechdata_api/vocabularies/roles.yaml +0 -0
- {caltechdata_api-2.0.0 → caltechdata_api-2.1.0}/caltechdata_api/vocabularies/title_types.yaml +0 -0
- {caltechdata_api-2.0.0 → caltechdata_api-2.1.0}/caltechdata_api/vocabularies.yaml +0 -0
- {caltechdata_api-2.0.0 → caltechdata_api-2.1.0}/caltechdata_api.egg-info/dependency_links.txt +0 -0
- {caltechdata_api-2.0.0 → caltechdata_api-2.1.0}/caltechdata_api.egg-info/entry_points.txt +0 -0
- {caltechdata_api-2.0.0 → caltechdata_api-2.1.0}/caltechdata_api.egg-info/requires.txt +0 -0
- {caltechdata_api-2.0.0 → caltechdata_api-2.1.0}/caltechdata_api.egg-info/top_level.txt +0 -0
- {caltechdata_api-2.0.0 → caltechdata_api-2.1.0}/tests/test_download.py +0 -0
|
@@ -1,20 +1,25 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: caltechdata_api
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.1.0
|
|
4
4
|
Summary: Python wrapper for CaltechDATA API.
|
|
5
|
-
|
|
6
|
-
Author: Thomas E Morrell
|
|
7
|
-
|
|
8
|
-
License:
|
|
9
|
-
|
|
5
|
+
Author: Rohan Bhattarai, Elizabeth Won
|
|
6
|
+
Author-email: Thomas E Morrell <tmorrell@caltech.edu>, Alexander A Abakah <aabakah@caltech.edu>, Kshemaahna Nagi <knagi@caltech.edu>
|
|
7
|
+
Maintainer-email: Thomas E Morrell <tmorrell@caltech.edu>
|
|
8
|
+
License-Expression: BSD-3-Clause
|
|
9
|
+
Project-URL: Homepage, https://github.com/caltechlibrary/caltechdata_api
|
|
10
|
+
Project-URL: Repository, https://github.com/caltechlibrary/caltechdata_api
|
|
11
|
+
Project-URL: Issues, https://github.com/caltechlibrary/caltechdata_api/issues
|
|
12
|
+
Keywords: metadata,software,InvenioRDM
|
|
10
13
|
Classifier: Programming Language :: Python :: 3
|
|
11
|
-
Classifier: Programming Language :: Python :: 3.7
|
|
12
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
13
14
|
Classifier: Programming Language :: Python :: 3.9
|
|
14
15
|
Classifier: Programming Language :: Python :: 3.10
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
15
20
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
16
21
|
Classifier: Operating System :: OS Independent
|
|
17
|
-
Requires-Python: >=3.
|
|
22
|
+
Requires-Python: >=3.9
|
|
18
23
|
Description-Content-Type: text/markdown
|
|
19
24
|
License-File: LICENSE
|
|
20
25
|
Requires-Dist: requests
|
|
@@ -44,7 +49,7 @@ The `caltechdata_api` Python library provides a convenient interface for interac
|
|
|
44
49
|
|
|
45
50
|
## Requirements
|
|
46
51
|
|
|
47
|
-
- Python 3.
|
|
52
|
+
- Python 3.9+
|
|
48
53
|
|
|
49
54
|
## Installation
|
|
50
55
|
|
|
@@ -54,6 +59,18 @@ Install the library via pip:
|
|
|
54
59
|
pip install caltechdata_api
|
|
55
60
|
```
|
|
56
61
|
|
|
62
|
+
Or add it to a [uv](https://docs.astral.sh/uv/) project:
|
|
63
|
+
|
|
64
|
+
```shell
|
|
65
|
+
uv add caltechdata_api
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
You can also run a script using uv:
|
|
69
|
+
|
|
70
|
+
```shell
|
|
71
|
+
uv run write.py
|
|
72
|
+
```
|
|
73
|
+
|
|
57
74
|
## Examples
|
|
58
75
|
|
|
59
76
|
There are some example python scripts in the GitHub repository.
|
|
@@ -61,7 +78,7 @@ There are some example python scripts in the GitHub repository.
|
|
|
61
78
|
### Create a record:
|
|
62
79
|
|
|
63
80
|
```shell
|
|
64
|
-
|
|
81
|
+
uv run write.py example.json -fnames logo.gif
|
|
65
82
|
# Output: pbkn6-m9y63 (unique identifier)
|
|
66
83
|
```
|
|
67
84
|
> The response will be the unique identifier for the record. You can put this at
|
|
@@ -71,7 +88,7 @@ https://data.caltechlibrary.dev/records/pbkn6-m9y63)
|
|
|
71
88
|
### Edit a record
|
|
72
89
|
Make changes to the example.json file to see a change)
|
|
73
90
|
```
|
|
74
|
-
|
|
91
|
+
uv run edit.py example.json -id pbkn6-m9y63
|
|
75
92
|
10.33569/pbkn6-m9y63
|
|
76
93
|
```
|
|
77
94
|
> The response is the DOI for the record, which includes the unique identifier
|
|
@@ -82,13 +99,13 @@ Some groups have worked with the library to create custom DOIs. These can be
|
|
|
82
99
|
passed in the metadata like:
|
|
83
100
|
|
|
84
101
|
```shell
|
|
85
|
-
|
|
102
|
+
uv run write.py example_custom.json -fnames logo.gif
|
|
86
103
|
m6zxz-p4j22
|
|
87
104
|
```
|
|
88
105
|
|
|
89
106
|
And then you can edit with
|
|
90
107
|
```
|
|
91
|
-
|
|
108
|
+
uv run edit.py example_custom.json -id m6zxz-p4j22
|
|
92
109
|
10.5281/inveniordm.1234
|
|
93
110
|
```
|
|
94
111
|
|
|
@@ -15,7 +15,7 @@ The `caltechdata_api` Python library provides a convenient interface for interac
|
|
|
15
15
|
|
|
16
16
|
## Requirements
|
|
17
17
|
|
|
18
|
-
- Python 3.
|
|
18
|
+
- Python 3.9+
|
|
19
19
|
|
|
20
20
|
## Installation
|
|
21
21
|
|
|
@@ -25,6 +25,18 @@ Install the library via pip:
|
|
|
25
25
|
pip install caltechdata_api
|
|
26
26
|
```
|
|
27
27
|
|
|
28
|
+
Or add it to a [uv](https://docs.astral.sh/uv/) project:
|
|
29
|
+
|
|
30
|
+
```shell
|
|
31
|
+
uv add caltechdata_api
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
You can also run a script using uv:
|
|
35
|
+
|
|
36
|
+
```shell
|
|
37
|
+
uv run write.py
|
|
38
|
+
```
|
|
39
|
+
|
|
28
40
|
## Examples
|
|
29
41
|
|
|
30
42
|
There are some example python scripts in the GitHub repository.
|
|
@@ -32,7 +44,7 @@ There are some example python scripts in the GitHub repository.
|
|
|
32
44
|
### Create a record:
|
|
33
45
|
|
|
34
46
|
```shell
|
|
35
|
-
|
|
47
|
+
uv run write.py example.json -fnames logo.gif
|
|
36
48
|
# Output: pbkn6-m9y63 (unique identifier)
|
|
37
49
|
```
|
|
38
50
|
> The response will be the unique identifier for the record. You can put this at
|
|
@@ -42,7 +54,7 @@ https://data.caltechlibrary.dev/records/pbkn6-m9y63)
|
|
|
42
54
|
### Edit a record
|
|
43
55
|
Make changes to the example.json file to see a change)
|
|
44
56
|
```
|
|
45
|
-
|
|
57
|
+
uv run edit.py example.json -id pbkn6-m9y63
|
|
46
58
|
10.33569/pbkn6-m9y63
|
|
47
59
|
```
|
|
48
60
|
> The response is the DOI for the record, which includes the unique identifier
|
|
@@ -53,13 +65,13 @@ Some groups have worked with the library to create custom DOIs. These can be
|
|
|
53
65
|
passed in the metadata like:
|
|
54
66
|
|
|
55
67
|
```shell
|
|
56
|
-
|
|
68
|
+
uv run write.py example_custom.json -fnames logo.gif
|
|
57
69
|
m6zxz-p4j22
|
|
58
70
|
```
|
|
59
71
|
|
|
60
72
|
And then you can edit with
|
|
61
73
|
```
|
|
62
|
-
|
|
74
|
+
uv run edit.py example_custom.json -id m6zxz-p4j22
|
|
63
75
|
10.5281/inveniordm.1234
|
|
64
76
|
```
|
|
65
77
|
|
|
@@ -1,20 +1,25 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: caltechdata_api
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.1.0
|
|
4
4
|
Summary: Python wrapper for CaltechDATA API.
|
|
5
|
-
|
|
6
|
-
Author: Thomas E Morrell
|
|
7
|
-
|
|
8
|
-
License:
|
|
9
|
-
|
|
5
|
+
Author: Rohan Bhattarai, Elizabeth Won
|
|
6
|
+
Author-email: Thomas E Morrell <tmorrell@caltech.edu>, Alexander A Abakah <aabakah@caltech.edu>, Kshemaahna Nagi <knagi@caltech.edu>
|
|
7
|
+
Maintainer-email: Thomas E Morrell <tmorrell@caltech.edu>
|
|
8
|
+
License-Expression: BSD-3-Clause
|
|
9
|
+
Project-URL: Homepage, https://github.com/caltechlibrary/caltechdata_api
|
|
10
|
+
Project-URL: Repository, https://github.com/caltechlibrary/caltechdata_api
|
|
11
|
+
Project-URL: Issues, https://github.com/caltechlibrary/caltechdata_api/issues
|
|
12
|
+
Keywords: metadata,software,InvenioRDM
|
|
10
13
|
Classifier: Programming Language :: Python :: 3
|
|
11
|
-
Classifier: Programming Language :: Python :: 3.7
|
|
12
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
13
14
|
Classifier: Programming Language :: Python :: 3.9
|
|
14
15
|
Classifier: Programming Language :: Python :: 3.10
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
15
20
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
16
21
|
Classifier: Operating System :: OS Independent
|
|
17
|
-
Requires-Python: >=3.
|
|
22
|
+
Requires-Python: >=3.9
|
|
18
23
|
Description-Content-Type: text/markdown
|
|
19
24
|
License-File: LICENSE
|
|
20
25
|
Requires-Dist: requests
|
|
@@ -44,7 +49,7 @@ The `caltechdata_api` Python library provides a convenient interface for interac
|
|
|
44
49
|
|
|
45
50
|
## Requirements
|
|
46
51
|
|
|
47
|
-
- Python 3.
|
|
52
|
+
- Python 3.9+
|
|
48
53
|
|
|
49
54
|
## Installation
|
|
50
55
|
|
|
@@ -54,6 +59,18 @@ Install the library via pip:
|
|
|
54
59
|
pip install caltechdata_api
|
|
55
60
|
```
|
|
56
61
|
|
|
62
|
+
Or add it to a [uv](https://docs.astral.sh/uv/) project:
|
|
63
|
+
|
|
64
|
+
```shell
|
|
65
|
+
uv add caltechdata_api
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
You can also run a script using uv:
|
|
69
|
+
|
|
70
|
+
```shell
|
|
71
|
+
uv run write.py
|
|
72
|
+
```
|
|
73
|
+
|
|
57
74
|
## Examples
|
|
58
75
|
|
|
59
76
|
There are some example python scripts in the GitHub repository.
|
|
@@ -61,7 +78,7 @@ There are some example python scripts in the GitHub repository.
|
|
|
61
78
|
### Create a record:
|
|
62
79
|
|
|
63
80
|
```shell
|
|
64
|
-
|
|
81
|
+
uv run write.py example.json -fnames logo.gif
|
|
65
82
|
# Output: pbkn6-m9y63 (unique identifier)
|
|
66
83
|
```
|
|
67
84
|
> The response will be the unique identifier for the record. You can put this at
|
|
@@ -71,7 +88,7 @@ https://data.caltechlibrary.dev/records/pbkn6-m9y63)
|
|
|
71
88
|
### Edit a record
|
|
72
89
|
Make changes to the example.json file to see a change)
|
|
73
90
|
```
|
|
74
|
-
|
|
91
|
+
uv run edit.py example.json -id pbkn6-m9y63
|
|
75
92
|
10.33569/pbkn6-m9y63
|
|
76
93
|
```
|
|
77
94
|
> The response is the DOI for the record, which includes the unique identifier
|
|
@@ -82,13 +99,13 @@ Some groups have worked with the library to create custom DOIs. These can be
|
|
|
82
99
|
passed in the metadata like:
|
|
83
100
|
|
|
84
101
|
```shell
|
|
85
|
-
|
|
102
|
+
uv run write.py example_custom.json -fnames logo.gif
|
|
86
103
|
m6zxz-p4j22
|
|
87
104
|
```
|
|
88
105
|
|
|
89
106
|
And then you can edit with
|
|
90
107
|
```
|
|
91
|
-
|
|
108
|
+
uv run edit.py example_custom.json -id m6zxz-p4j22
|
|
92
109
|
10.5281/inveniordm.1234
|
|
93
110
|
```
|
|
94
111
|
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=77.0"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "caltechdata_api"
|
|
7
|
+
version = "2.1.0"
|
|
8
|
+
description = "Python wrapper for CaltechDATA API."
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.9"
|
|
11
|
+
license = "BSD-3-Clause"
|
|
12
|
+
license-files = ["LICENSE"]
|
|
13
|
+
authors = [
|
|
14
|
+
{name = "Thomas E Morrell", email = "tmorrell@caltech.edu"},
|
|
15
|
+
{name = "Rohan Bhattarai"},
|
|
16
|
+
{name = "Elizabeth Won"},
|
|
17
|
+
{name = "Alexander A Abakah", email = "aabakah@caltech.edu"},
|
|
18
|
+
{name = "Kshemaahna Nagi", email = "knagi@caltech.edu"},
|
|
19
|
+
]
|
|
20
|
+
maintainers = [
|
|
21
|
+
{name = "Thomas E Morrell", email = "tmorrell@caltech.edu"},
|
|
22
|
+
]
|
|
23
|
+
keywords = ["metadata", "software", "InvenioRDM"]
|
|
24
|
+
classifiers = [
|
|
25
|
+
"Programming Language :: Python :: 3",
|
|
26
|
+
"Programming Language :: Python :: 3.9",
|
|
27
|
+
"Programming Language :: Python :: 3.10",
|
|
28
|
+
"Programming Language :: Python :: 3.11",
|
|
29
|
+
"Programming Language :: Python :: 3.12",
|
|
30
|
+
"Programming Language :: Python :: 3.13",
|
|
31
|
+
"Programming Language :: Python :: 3.14",
|
|
32
|
+
"Programming Language :: Python :: Implementation :: CPython",
|
|
33
|
+
"Operating System :: OS Independent",
|
|
34
|
+
]
|
|
35
|
+
dependencies = [
|
|
36
|
+
"requests",
|
|
37
|
+
"datacite>1.1.0",
|
|
38
|
+
"tqdm>=4.62.3",
|
|
39
|
+
"pyyaml",
|
|
40
|
+
"s3fs",
|
|
41
|
+
"cryptography",
|
|
42
|
+
"s3cmd",
|
|
43
|
+
"jsonschema-specifications",
|
|
44
|
+
]
|
|
45
|
+
|
|
46
|
+
[project.urls]
|
|
47
|
+
Homepage = "https://github.com/caltechlibrary/caltechdata_api"
|
|
48
|
+
Repository = "https://github.com/caltechlibrary/caltechdata_api"
|
|
49
|
+
Issues = "https://github.com/caltechlibrary/caltechdata_api/issues"
|
|
50
|
+
|
|
51
|
+
[project.scripts]
|
|
52
|
+
caltechdata_api = "caltechdata_api.cli:main"
|
|
53
|
+
|
|
54
|
+
[dependency-groups]
|
|
55
|
+
dev = [
|
|
56
|
+
"pytest>=7.0",
|
|
57
|
+
"black",
|
|
58
|
+
]
|
|
59
|
+
|
|
60
|
+
[tool.setuptools.packages.find]
|
|
61
|
+
include = ["caltechdata_api*"]
|
|
62
|
+
|
|
63
|
+
[tool.setuptools.package-data]
|
|
64
|
+
caltechdata_api = ["vocabularies.yaml", "vocabularies/*"]
|
|
65
|
+
|
|
66
|
+
[tool.pytest.ini_options]
|
|
67
|
+
addopts = "--verbose"
|
|
68
|
+
testpaths = ["tests"]
|
|
69
|
+
pythonpath = ["tests"]
|
|
@@ -7,6 +7,10 @@ from caltechdata_api import (
|
|
|
7
7
|
import json
|
|
8
8
|
import os
|
|
9
9
|
|
|
10
|
+
# Any file will do here, we just need something to attach to the test records
|
|
11
|
+
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
|
|
12
|
+
UPLOAD_FILE = os.path.join(BASE_DIR, "helpers.py")
|
|
13
|
+
|
|
10
14
|
|
|
11
15
|
def test_datacite_rdm_conversion(full_datacite43_record, full_rdm_record):
|
|
12
16
|
|
|
@@ -48,7 +52,7 @@ def test_datacite_rdm_create_edit(full_datacite43_record):
|
|
|
48
52
|
full_datacite43_record,
|
|
49
53
|
schema="43",
|
|
50
54
|
production=False,
|
|
51
|
-
files=[
|
|
55
|
+
files=[UPLOAD_FILE],
|
|
52
56
|
publish=True,
|
|
53
57
|
token=env_token,
|
|
54
58
|
)
|
|
@@ -77,7 +81,7 @@ def test_datacite_rdm_create_edit(full_datacite43_record):
|
|
|
77
81
|
new_doi = caltechdata_edit(
|
|
78
82
|
recid,
|
|
79
83
|
full_datacite43_record,
|
|
80
|
-
files=[
|
|
84
|
+
files=[UPLOAD_FILE],
|
|
81
85
|
schema="43",
|
|
82
86
|
production=False,
|
|
83
87
|
publish=True,
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import pytest
|
|
3
|
+
import logging
|
|
4
|
+
from caltechdata_api import validate_metadata as validator43
|
|
5
|
+
from helpers import load_json_path
|
|
6
|
+
|
|
7
|
+
# Configure logging
|
|
8
|
+
logging.basicConfig(level=logging.DEBUG)
|
|
9
|
+
logger = logging.getLogger(__name__)
|
|
10
|
+
|
|
11
|
+
# Dynamically determine the base path
|
|
12
|
+
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
|
|
13
|
+
INVALID_DATACITE43_DIR = os.path.join(BASE_DIR, "data", "invalid_datacite43")
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
# Function to get all JSON files in the directory
|
|
17
|
+
def get_all_json_files(directory):
|
|
18
|
+
return [
|
|
19
|
+
os.path.join(directory, f) for f in os.listdir(directory) if f.endswith(".json")
|
|
20
|
+
]
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
# Get list of all valid and invalid JSON files
|
|
24
|
+
VALID_DATACITE43_FILES = get_all_json_files(
|
|
25
|
+
os.path.join(BASE_DIR, "data", "datacite43")
|
|
26
|
+
)
|
|
27
|
+
INVALID_DATACITE43_FILES = get_all_json_files(INVALID_DATACITE43_DIR)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
@pytest.mark.parametrize("valid_file", VALID_DATACITE43_FILES)
|
|
31
|
+
def test_valid_json(valid_file):
|
|
32
|
+
"""Test that valid example files validate successfully."""
|
|
33
|
+
print(f"\nValidating file: {valid_file}")
|
|
34
|
+
json_data = load_json_path(valid_file)
|
|
35
|
+
validation_errors = None
|
|
36
|
+
try:
|
|
37
|
+
validation_errors = validator43(json_data)
|
|
38
|
+
except ValueError as e:
|
|
39
|
+
pytest.fail(f"Validation failed for: {valid_file}\nErrors: {str(e)}")
|
|
40
|
+
|
|
41
|
+
assert (
|
|
42
|
+
not validation_errors
|
|
43
|
+
), f"Validation failed for: {valid_file}\nErrors: {validation_errors}"
|
|
44
|
+
print(f"Validation passed for: {valid_file}")
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
@pytest.mark.parametrize("invalid_file", INVALID_DATACITE43_FILES)
|
|
48
|
+
def test_invalid_json(invalid_file):
|
|
49
|
+
"""Test that invalid example files do not validate successfully."""
|
|
50
|
+
logger.debug(f"Attempting to validate invalid file: {invalid_file}")
|
|
51
|
+
|
|
52
|
+
json_data = load_json_path(invalid_file)
|
|
53
|
+
|
|
54
|
+
def validate_wrapper():
|
|
55
|
+
try:
|
|
56
|
+
validation_errors = validator43(json_data)
|
|
57
|
+
|
|
58
|
+
logger.debug(f"Validation result for {invalid_file}: {validation_errors}")
|
|
59
|
+
|
|
60
|
+
if validation_errors:
|
|
61
|
+
logger.debug(f"Found validation errors in {invalid_file}")
|
|
62
|
+
return
|
|
63
|
+
|
|
64
|
+
logger.error(
|
|
65
|
+
f"No validation errors found for supposedly invalid file: {invalid_file}"
|
|
66
|
+
)
|
|
67
|
+
raise ValueError(
|
|
68
|
+
f"Validation did not fail for invalid file: {invalid_file}"
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
except Exception as e:
|
|
72
|
+
logger.error(f"Validation exception for {invalid_file}: {str(e)}")
|
|
73
|
+
raise
|
|
74
|
+
|
|
75
|
+
with pytest.raises((ValueError, KeyError, AssertionError, TypeError)):
|
|
76
|
+
validate_wrapper()
|
caltechdata_api-2.0.0/setup.cfg
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
[build-system]
|
|
2
|
-
requires = ["setuptools>=64.0","wheel"]
|
|
3
|
-
build-backend = "setuptools.build_meta"
|
|
4
|
-
|
|
5
|
-
[metadata]
|
|
6
|
-
name = caltechdata_api
|
|
7
|
-
version = 2.0.0
|
|
8
|
-
author = Thomas E Morrell, Rohan Bhattarai, Elizabeth Won, Alexander A Abakah, Kshemaahna Nagi
|
|
9
|
-
author_email = tmorrell@caltech.edu, aabakah@caltech.edu, knagi@caltech.edu
|
|
10
|
-
description = Python wrapper for CaltechDATA API.
|
|
11
|
-
long_description = file: README.md
|
|
12
|
-
long_description_content_type = text/markdown
|
|
13
|
-
url = https://github.com/caltechlibrary/caltechdata_api
|
|
14
|
-
license = MIT
|
|
15
|
-
classifiers =
|
|
16
|
-
License :: OSI Approved :: MIT License
|
|
17
|
-
Programming Language :: Python :: 3
|
|
18
|
-
Programming Language :: Python :: 3.7
|
|
19
|
-
Programming Language :: Python :: 3.8
|
|
20
|
-
Programming Language :: Python :: 3.9
|
|
21
|
-
Programming Language :: Python :: 3.10
|
|
22
|
-
Programming Language :: Python :: Implementation :: CPython
|
|
23
|
-
Operating System :: OS Independent
|
|
24
|
-
|
|
25
|
-
[options]
|
|
26
|
-
packages = find:
|
|
27
|
-
python_requires = >=3.6.0
|
|
28
|
-
install_requires =
|
|
29
|
-
requests
|
|
30
|
-
datacite>1.1.0
|
|
31
|
-
tqdm>=4.62.3
|
|
32
|
-
pyyaml
|
|
33
|
-
s3fs
|
|
34
|
-
cryptography
|
|
35
|
-
s3cmd
|
|
36
|
-
jsonschema-specifications
|
|
37
|
-
include_package_data = True
|
|
38
|
-
|
|
39
|
-
[options.packages.find]
|
|
40
|
-
exclude = tests
|
|
41
|
-
|
|
42
|
-
[options.package_data]
|
|
43
|
-
caltechdata_api = vocabularies.yaml, vocabularies/*
|
|
44
|
-
|
|
45
|
-
[options.entry_points]
|
|
46
|
-
console_scripts =
|
|
47
|
-
caltechdata_api=caltechdata_api.cli:main
|
|
48
|
-
|
|
49
|
-
[tool:pytest]
|
|
50
|
-
addopts = --verbose
|
|
51
|
-
|
|
52
|
-
[egg_info]
|
|
53
|
-
tag_build =
|
|
54
|
-
tag_date = 0
|
|
55
|
-
|
caltechdata_api-2.0.0/setup.py
DELETED
|
@@ -1,166 +0,0 @@
|
|
|
1
|
-
import os
|
|
2
|
-
import pytest
|
|
3
|
-
import logging
|
|
4
|
-
from caltechdata_api import validate_metadata as validator43
|
|
5
|
-
from helpers import load_json_path
|
|
6
|
-
|
|
7
|
-
# Configure logging
|
|
8
|
-
logging.basicConfig(level=logging.DEBUG)
|
|
9
|
-
logger = logging.getLogger(__name__)
|
|
10
|
-
|
|
11
|
-
# Dynamically determine the base path
|
|
12
|
-
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
|
|
13
|
-
INVALID_DATACITE43_DIR = os.path.join(BASE_DIR, "data", "invalid_datacite43")
|
|
14
|
-
DATACITE43_DIR = os.path.join(BASE_DIR, "data")
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
# Function to get all JSON files in the directory
|
|
18
|
-
def get_all_json_files(directory):
|
|
19
|
-
return [
|
|
20
|
-
os.path.join(directory, f) for f in os.listdir(directory) if f.endswith(".json")
|
|
21
|
-
]
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
# Get list of all valid and invalid JSON files
|
|
25
|
-
VALID_DATACITE43_FILES = get_all_json_files(
|
|
26
|
-
os.path.join(BASE_DIR, "data", "datacite43")
|
|
27
|
-
)
|
|
28
|
-
INVALID_DATACITE43_FILES = get_all_json_files(INVALID_DATACITE43_DIR)
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
@pytest.mark.parametrize("valid_file", VALID_DATACITE43_FILES)
|
|
32
|
-
def test_valid_json(valid_file):
|
|
33
|
-
"""Test that valid example files validate successfully."""
|
|
34
|
-
print(f"\nValidating file: {valid_file}")
|
|
35
|
-
json_data = load_json_path(valid_file)
|
|
36
|
-
validation_errors = None
|
|
37
|
-
try:
|
|
38
|
-
validation_errors = validator43(json_data)
|
|
39
|
-
except ValueError as e:
|
|
40
|
-
pytest.fail(f"Validation failed for: {valid_file}\nErrors: {str(e)}")
|
|
41
|
-
|
|
42
|
-
assert (
|
|
43
|
-
not validation_errors
|
|
44
|
-
), f"Validation failed for: {valid_file}\nErrors: {validation_errors}"
|
|
45
|
-
print(f"Validation passed for: {valid_file}")
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
@pytest.mark.parametrize("invalid_file", INVALID_DATACITE43_FILES)
|
|
49
|
-
def test_invalid_json(invalid_file):
|
|
50
|
-
"""Test that invalid example files do not validate successfully."""
|
|
51
|
-
logger.debug(f"Attempting to validate invalid file: {invalid_file}")
|
|
52
|
-
|
|
53
|
-
json_data = load_json_path(invalid_file)
|
|
54
|
-
|
|
55
|
-
def validate_wrapper():
|
|
56
|
-
try:
|
|
57
|
-
validation_errors = validator43(json_data)
|
|
58
|
-
|
|
59
|
-
logger.debug(f"Validation result for {invalid_file}: {validation_errors}")
|
|
60
|
-
|
|
61
|
-
if validation_errors:
|
|
62
|
-
logger.debug(f"Found validation errors in {invalid_file}")
|
|
63
|
-
return
|
|
64
|
-
|
|
65
|
-
logger.error(
|
|
66
|
-
f"No validation errors found for supposedly invalid file: {invalid_file}"
|
|
67
|
-
)
|
|
68
|
-
raise ValueError(
|
|
69
|
-
f"Validation did not fail for invalid file: {invalid_file}"
|
|
70
|
-
)
|
|
71
|
-
|
|
72
|
-
except Exception as e:
|
|
73
|
-
logger.error(f"Validation exception for {invalid_file}: {str(e)}")
|
|
74
|
-
raise
|
|
75
|
-
|
|
76
|
-
with pytest.raises((ValueError, KeyError, AssertionError, TypeError)):
|
|
77
|
-
validate_wrapper()
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
@pytest.mark.parametrize(
|
|
81
|
-
"missing_field_file",
|
|
82
|
-
[
|
|
83
|
-
{
|
|
84
|
-
"file": os.path.join(DATACITE43_DIR, "missing_creators.json"),
|
|
85
|
-
"missing_field": "creators",
|
|
86
|
-
},
|
|
87
|
-
{
|
|
88
|
-
"file": os.path.join(DATACITE43_DIR, "missing_titles.json"),
|
|
89
|
-
"missing_field": "titles",
|
|
90
|
-
},
|
|
91
|
-
],
|
|
92
|
-
)
|
|
93
|
-
def test_missing_required_fields(missing_field_file):
|
|
94
|
-
"""Test that JSON files missing required fields fail validation."""
|
|
95
|
-
print(
|
|
96
|
-
f"\nTesting missing field: {missing_field_file['missing_field']} in file: {missing_field_file['file']}"
|
|
97
|
-
)
|
|
98
|
-
|
|
99
|
-
# Skip the test if the file doesn't exist
|
|
100
|
-
if not os.path.exists(missing_field_file["file"]):
|
|
101
|
-
pytest.skip(f"Test file not found: {missing_field_file['file']}")
|
|
102
|
-
|
|
103
|
-
json_data = load_json_path(missing_field_file["file"])
|
|
104
|
-
with pytest.raises(
|
|
105
|
-
ValueError,
|
|
106
|
-
match=f"Missing required metadata field: {missing_field_file['missing_field']}",
|
|
107
|
-
):
|
|
108
|
-
validator43(json_data)
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
@pytest.mark.parametrize(
|
|
112
|
-
"type_error_file",
|
|
113
|
-
[
|
|
114
|
-
{
|
|
115
|
-
"file": os.path.join(DATACITE43_DIR, "type_error_creators.json"),
|
|
116
|
-
"field": "creators",
|
|
117
|
-
},
|
|
118
|
-
{
|
|
119
|
-
"file": os.path.join(DATACITE43_DIR, "type_error_dates.json"),
|
|
120
|
-
"field": "dates",
|
|
121
|
-
},
|
|
122
|
-
],
|
|
123
|
-
)
|
|
124
|
-
def test_incorrect_field_types(type_error_file):
|
|
125
|
-
"""Test that JSON files with incorrect field types fail validation."""
|
|
126
|
-
print(
|
|
127
|
-
f"\nTesting incorrect type in field: {type_error_file['field']} for file: {type_error_file['file']}"
|
|
128
|
-
)
|
|
129
|
-
|
|
130
|
-
# Skip the test if the file doesn't exist
|
|
131
|
-
if not os.path.exists(type_error_file["file"]):
|
|
132
|
-
pytest.skip(f"Test file not found: {type_error_file['file']}")
|
|
133
|
-
|
|
134
|
-
json_data = load_json_path(type_error_file["file"])
|
|
135
|
-
with pytest.raises(
|
|
136
|
-
ValueError, match=f"Incorrect type for field: {type_error_file['field']}"
|
|
137
|
-
):
|
|
138
|
-
validator43(json_data)
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
def test_multiple_errors():
|
|
142
|
-
"""Test JSON file with multiple issues to check all errors are raised."""
|
|
143
|
-
multiple_errors_file = os.path.join(DATACITE43_DIR, "multiple_errors.json")
|
|
144
|
-
|
|
145
|
-
# Skip the test if the file doesn't exist
|
|
146
|
-
if not os.path.exists(multiple_errors_file):
|
|
147
|
-
pytest.skip(f"Test file not found: {multiple_errors_file}")
|
|
148
|
-
|
|
149
|
-
json_data = load_json_path(multiple_errors_file)
|
|
150
|
-
with pytest.raises(ValueError, match="Multiple validation errors"):
|
|
151
|
-
validator43(json_data)
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
def test_error_logging(caplog):
|
|
155
|
-
"""Test that errors are logged correctly during validation."""
|
|
156
|
-
some_invalid_file = os.path.join(INVALID_DATACITE43_DIR, "some_invalid_file.json")
|
|
157
|
-
|
|
158
|
-
# Skip the test if the file doesn't exist
|
|
159
|
-
if not os.path.exists(some_invalid_file):
|
|
160
|
-
pytest.skip(f"Test file not found: {some_invalid_file}")
|
|
161
|
-
|
|
162
|
-
json_data = load_json_path(some_invalid_file)
|
|
163
|
-
with caplog.at_level(logging.ERROR):
|
|
164
|
-
with pytest.raises(ValueError):
|
|
165
|
-
validator43(json_data)
|
|
166
|
-
assert "Validation failed" in caplog.text
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{caltechdata_api-2.0.0 → caltechdata_api-2.1.0}/caltechdata_api/vocabularies/date_types.yaml
RENAMED
|
File without changes
|
{caltechdata_api-2.0.0 → caltechdata_api-2.1.0}/caltechdata_api/vocabularies/description_types.yaml
RENAMED
|
File without changes
|
{caltechdata_api-2.0.0 → caltechdata_api-2.1.0}/caltechdata_api/vocabularies/identifier_types.yaml
RENAMED
|
File without changes
|
|
File without changes
|
{caltechdata_api-2.0.0 → caltechdata_api-2.1.0}/caltechdata_api/vocabularies/relation_types.yaml
RENAMED
|
File without changes
|
{caltechdata_api-2.0.0 → caltechdata_api-2.1.0}/caltechdata_api/vocabularies/resource_types.yaml
RENAMED
|
File without changes
|
|
File without changes
|
{caltechdata_api-2.0.0 → caltechdata_api-2.1.0}/caltechdata_api/vocabularies/title_types.yaml
RENAMED
|
File without changes
|
|
File without changes
|
{caltechdata_api-2.0.0 → caltechdata_api-2.1.0}/caltechdata_api.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|