rudi-node-write 1.3.0__tar.gz → 1.3.2__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.
- {rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/PKG-INFO +7 -6
- {rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/pyproject.toml +2 -2
- {rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/requirements-dev.txt +16 -14
- {rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/requirements.txt +3 -3
- {rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/src/rudi_node_write/connectors/io_rudi_catalog_write.py +1 -1
- {rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/src/rudi_node_write/connectors/io_rudi_manager_write.py +4 -4
- {rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/src/rudi_node_write/connectors/io_rudi_manager_write_v3.py +12 -12
- {rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/src/rudi_node_write/utils/file_utils.py +1 -2
- {rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/src/rudi_node_write.egg-info/PKG-INFO +7 -6
- {rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/src/rudi_node_write.egg-info/requires.txt +6 -5
- {rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/LICENCE.md +0 -0
- {rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/README.md +0 -0
- {rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/setup.cfg +0 -0
- {rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/src/rudi_node_write/__init__.py +0 -0
- {rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/src/rudi_node_write/conf/meta_defaults.py +0 -0
- {rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/src/rudi_node_write/connectors/io_connector.py +0 -0
- {rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/src/rudi_node_write/connectors/io_rudi_jwt_factory.py +0 -0
- {rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/src/rudi_node_write/connectors/io_rudi_manager_write_v2.py +0 -0
- {rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/src/rudi_node_write/connectors/io_rudi_storage_write.py +0 -0
- {rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/src/rudi_node_write/connectors/rudi_node_auth.py +0 -0
- {rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/src/rudi_node_write/rudi_node_writer.py +0 -0
- {rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/src/rudi_node_write/rudi_types/rudi_const.py +0 -0
- {rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/src/rudi_node_write/rudi_types/rudi_contact.py +0 -0
- {rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/src/rudi_node_write/rudi_types/rudi_dates.py +0 -0
- {rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/src/rudi_node_write/rudi_types/rudi_dictionary_entry.py +0 -0
- {rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/src/rudi_node_write/rudi_types/rudi_geo.py +0 -0
- {rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/src/rudi_node_write/rudi_types/rudi_licence.py +0 -0
- {rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/src/rudi_node_write/rudi_types/rudi_media.py +0 -0
- {rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/src/rudi_node_write/rudi_types/rudi_meta.py +0 -0
- {rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/src/rudi_node_write/rudi_types/rudi_meta_misc.py +0 -0
- {rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/src/rudi_node_write/rudi_types/rudi_org.py +0 -0
- {rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/src/rudi_node_write/rudi_types/serializable.py +0 -0
- {rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/src/rudi_node_write/utils/dict_utils.py +0 -0
- {rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/src/rudi_node_write/utils/err.py +0 -0
- {rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/src/rudi_node_write/utils/html_utils.py +0 -0
- {rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/src/rudi_node_write/utils/jwt.py +0 -0
- {rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/src/rudi_node_write/utils/list_utils.py +0 -0
- {rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/src/rudi_node_write/utils/log.py +0 -0
- {rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/src/rudi_node_write/utils/str_utils.py +0 -0
- {rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/src/rudi_node_write/utils/type_date.py +0 -0
- {rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/src/rudi_node_write/utils/typing_utils.py +0 -0
- {rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/src/rudi_node_write/utils/url_utils.py +0 -0
- {rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/src/rudi_node_write.egg-info/SOURCES.txt +0 -0
- {rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/src/rudi_node_write.egg-info/dependency_links.txt +0 -0
- {rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/src/rudi_node_write.egg-info/top_level.txt +0 -0
- {rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/tests/test_rudi_node_write.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: rudi-node-write
|
|
3
|
-
Version: 1.3.
|
|
3
|
+
Version: 1.3.2
|
|
4
4
|
Summary: Use the internal API of a RUDI Producer node
|
|
5
5
|
Author-email: Olivier Martineau <olivier.martineau@irisa.fr>
|
|
6
6
|
Maintainer-email: Olivier Martineau <olivier.martineau@irisa.fr>
|
|
@@ -18,15 +18,15 @@ Description-Content-Type: text/markdown
|
|
|
18
18
|
License-File: LICENCE.md
|
|
19
19
|
Requires-Dist: beautifulsoup4==4.13.4
|
|
20
20
|
Requires-Dist: chardet==5.2.0
|
|
21
|
-
Requires-Dist: deepdiff==8.
|
|
22
|
-
Requires-Dist: puremagic==1.
|
|
21
|
+
Requires-Dist: deepdiff==8.5.0
|
|
22
|
+
Requires-Dist: puremagic==1.29
|
|
23
23
|
Provides-Extra: dev
|
|
24
24
|
Requires-Dist: backports.tarfile==1.2.0; extra == "dev"
|
|
25
25
|
Requires-Dist: black==25.1.0; extra == "dev"
|
|
26
26
|
Requires-Dist: build==1.2.2.post1; extra == "dev"
|
|
27
|
-
Requires-Dist: commitizen==4.
|
|
27
|
+
Requires-Dist: commitizen==4.7.2; extra == "dev"
|
|
28
28
|
Requires-Dist: flake8==7.2.0; extra == "dev"
|
|
29
|
-
Requires-Dist: importlib-metadata==8.
|
|
29
|
+
Requires-Dist: importlib-metadata==8.7.0; extra == "dev"
|
|
30
30
|
Requires-Dist: importlib-resources==6.5.2; extra == "dev"
|
|
31
31
|
Requires-Dist: inflect==7.5.0; extra == "dev"
|
|
32
32
|
Requires-Dist: ipykernel==6.29.5; extra == "dev"
|
|
@@ -41,9 +41,10 @@ Requires-Dist: pkginfo==1.12.1.2; extra == "dev"
|
|
|
41
41
|
Requires-Dist: pre-commit==4.2.0; extra == "dev"
|
|
42
42
|
Requires-Dist: pre-commit-hooks==5.0.0; extra == "dev"
|
|
43
43
|
Requires-Dist: py-env==0.0.1; extra == "dev"
|
|
44
|
-
Requires-Dist: pyright==1.1.
|
|
44
|
+
Requires-Dist: pyright==1.1.400; extra == "dev"
|
|
45
45
|
Requires-Dist: pytest-check==2.5.3; extra == "dev"
|
|
46
46
|
Requires-Dist: pytest-cov==6.1.1; extra == "dev"
|
|
47
|
+
Requires-Dist: rudi-node-write==1.3.1; extra == "dev"
|
|
47
48
|
Requires-Dist: tomli==2.2.1; extra == "dev"
|
|
48
49
|
Requires-Dist: twine==6.1.0; extra == "dev"
|
|
49
50
|
Dynamic: license-file
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "rudi-node-write"
|
|
7
|
-
version = "1.3.
|
|
7
|
+
version = "1.3.2"
|
|
8
8
|
authors = [{ name = "Olivier Martineau", email = "olivier.martineau@irisa.fr" }]
|
|
9
9
|
maintainers = [
|
|
10
10
|
{ name = "Olivier Martineau", email = "olivier.martineau@irisa.fr" },
|
|
@@ -45,7 +45,7 @@ target-version = ['py311']
|
|
|
45
45
|
# ----- Tool: commitizen
|
|
46
46
|
[tool.commitizen]
|
|
47
47
|
name = "cz_conventional_commits"
|
|
48
|
-
version = "1.3.
|
|
48
|
+
version = "1.3.2"
|
|
49
49
|
version_files = ["pyproject.toml:version"]
|
|
50
50
|
|
|
51
51
|
# ----- Tool: pytest
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
# -r requirements.txt
|
|
1
2
|
backports.tarfile==1.2.0
|
|
2
3
|
black==25.1.0
|
|
3
4
|
build==1.2.2.post1
|
|
4
|
-
commitizen==4.
|
|
5
|
+
commitizen==4.7.2
|
|
5
6
|
flake8==7.2.0
|
|
6
|
-
importlib-metadata==8.
|
|
7
|
+
importlib-metadata==8.7.0
|
|
7
8
|
importlib-resources==6.5.2
|
|
8
9
|
inflect==7.5.0
|
|
9
10
|
ipykernel==6.29.5
|
|
@@ -18,9 +19,10 @@ pkginfo==1.12.1.2
|
|
|
18
19
|
pre-commit==4.2.0
|
|
19
20
|
pre-commit-hooks==5.0.0
|
|
20
21
|
py-env==0.0.1
|
|
21
|
-
pyright==1.1.
|
|
22
|
+
pyright==1.1.400
|
|
22
23
|
pytest-check==2.5.3
|
|
23
24
|
pytest-cov==6.1.1
|
|
25
|
+
rudi-node-write==1.3.1
|
|
24
26
|
tomli==2.2.1
|
|
25
27
|
twine==6.1.0
|
|
26
28
|
# appnope==0.1.4 # Installed as dependency for ipykernel
|
|
@@ -28,10 +30,10 @@ twine==6.1.0
|
|
|
28
30
|
# asttokens==3.0.0 # Installed as dependency for stack-data
|
|
29
31
|
# attrs==25.3.0 # Installed as dependency for jsonschema, referencing
|
|
30
32
|
# autocommand==2.2.2 # Installed as dependency for jaraco.text
|
|
31
|
-
# certifi==2025.
|
|
33
|
+
# certifi==2025.4.26 # Installed as dependency for requests
|
|
32
34
|
# cfgv==3.4.0 # Installed as dependency for pre-commit
|
|
33
|
-
# charset-normalizer==3.4.
|
|
34
|
-
# click==8.
|
|
35
|
+
# charset-normalizer==3.4.2 # Installed as dependency for commitizen, requests
|
|
36
|
+
# click==8.2.0 # Installed as dependency for black
|
|
35
37
|
# colorama==0.4.6 # Installed as dependency for commitizen
|
|
36
38
|
# comm==0.2.2 # Installed as dependency for ipykernel
|
|
37
39
|
# coverage==7.8.0 # Installed as dependency for pytest-cov
|
|
@@ -47,7 +49,7 @@ twine==6.1.0
|
|
|
47
49
|
# identify==2.6.10 # Installed as dependency for pre-commit
|
|
48
50
|
# idna==3.10 # Installed as dependency for requests
|
|
49
51
|
# iniconfig==2.1.0 # Installed as dependency for pytest
|
|
50
|
-
# ipython==9.
|
|
52
|
+
# ipython==9.2.0 # Installed as dependency for ipykernel
|
|
51
53
|
# ipython-pygments-lexers==1.1.1 # Installed as dependency for ipython
|
|
52
54
|
# jaraco.classes==3.4.0 # Installed as dependency for keyring
|
|
53
55
|
# jaraco.context==6.0.1 # Installed as dependency for jaraco.text, keyring
|
|
@@ -56,7 +58,7 @@ twine==6.1.0
|
|
|
56
58
|
# jedi==0.19.2 # Installed as dependency for ipython
|
|
57
59
|
# jinja2==3.1.6 # Installed as dependency for commitizen
|
|
58
60
|
# jsonschema==4.23.0 # Installed as dependency for nbformat
|
|
59
|
-
# jsonschema-specifications==
|
|
61
|
+
# jsonschema-specifications==2025.4.1 # Installed as dependency for jsonschema
|
|
60
62
|
# jupyter-client==8.6.3 # Installed as dependency for ipykernel
|
|
61
63
|
# jupyter-core==5.7.2 # Installed as dependency for ipykernel, jupyter-client, nbformat
|
|
62
64
|
# keyring==25.6.0 # Installed as dependency for twine
|
|
@@ -75,8 +77,8 @@ twine==6.1.0
|
|
|
75
77
|
# parso==0.8.4 # Installed as dependency for jedi
|
|
76
78
|
# pathspec==0.12.1 # Installed as dependency for black
|
|
77
79
|
# pexpect==4.9.0 # Installed as dependency for ipython
|
|
78
|
-
# platformdirs==4.3.
|
|
79
|
-
# pluggy==1.
|
|
80
|
+
# platformdirs==4.3.8 # Installed as dependency for black, jupyter-core, virtualenv
|
|
81
|
+
# pluggy==1.6.0 # Installed as dependency for pytest
|
|
80
82
|
# prompt-toolkit==3.0.51 # Installed as dependency for ipython, questionary
|
|
81
83
|
# psutil==7.0.0 # Installed as dependency for ipykernel
|
|
82
84
|
# ptyprocess==0.7.0 # Installed as dependency for pexpect
|
|
@@ -96,17 +98,17 @@ twine==6.1.0
|
|
|
96
98
|
# requests-toolbelt==1.0.0 # Installed as dependency for twine
|
|
97
99
|
# rfc3986==2.0.0 # Installed as dependency for twine
|
|
98
100
|
# rich==14.0.0 # Installed as dependency for twine
|
|
99
|
-
# rpds-py==0.
|
|
101
|
+
# rpds-py==0.25.0 # Installed as dependency for jsonschema, referencing
|
|
100
102
|
# ruamel.yaml==0.18.10 # Installed as dependency for pre-commit-hooks
|
|
101
103
|
# ruamel.yaml.clib==0.2.12 # Installed as dependency for ruamel.yaml
|
|
102
104
|
# six==1.17.0 # Installed as dependency for python-dateutil
|
|
103
105
|
# stack-data==0.6.3 # Installed as dependency for ipython
|
|
104
|
-
# termcolor==
|
|
106
|
+
# termcolor==2.5.0 # Installed as dependency for commitizen
|
|
105
107
|
# tomlkit==0.13.2 # Installed as dependency for commitizen
|
|
106
|
-
# tornado==6.
|
|
108
|
+
# tornado==6.5 # Installed as dependency for ipykernel, jupyter-client
|
|
107
109
|
# traitlets==5.14.3 # Installed as dependency for comm, ipykernel, ipython, jupyter-client, jupyter-core, matplotlib-inline, nbformat
|
|
108
110
|
# typeguard==4.4.2 # Installed as dependency for inflect
|
|
109
111
|
# urllib3==2.4.0 # Installed as dependency for requests, twine
|
|
110
|
-
# virtualenv==20.
|
|
112
|
+
# virtualenv==20.31.2 # Installed as dependency for pre-commit
|
|
111
113
|
# wcwidth==0.2.13 # Installed as dependency for prompt-toolkit
|
|
112
114
|
# zipp==3.21.0 # Installed as dependency for importlib-metadata
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
beautifulsoup4==4.13.4
|
|
2
2
|
chardet==5.2.0
|
|
3
|
-
deepdiff==8.
|
|
4
|
-
puremagic==1.
|
|
5
|
-
# orderly-set==5.4.
|
|
3
|
+
deepdiff==8.5.0
|
|
4
|
+
puremagic==1.29
|
|
5
|
+
# orderly-set==5.4.1 # Installed as dependency for deepdiff
|
|
6
6
|
# soupsieve==2.7 # Installed as dependency for beautifulsoup4
|
|
7
7
|
# typing-extensions==4.13.2 # Installed as dependency for beautifulsoup4, pyright, referencing, typeguard
|
|
@@ -120,7 +120,7 @@ class RudiNodeCatalogConnector(Connector):
|
|
|
120
120
|
"""
|
|
121
121
|
Performs an identified GET request through /api/admin path
|
|
122
122
|
:param url: part of the URL that comes after /api/admin
|
|
123
|
-
:param keep_alive: True if the connection should be
|
|
123
|
+
:param keep_alive: True if the connection should be kept alive (for successive requests). Use
|
|
124
124
|
self.connection.close() in the end of your request series.
|
|
125
125
|
:return: the result of the request, most likely a JSON
|
|
126
126
|
"""
|
|
@@ -127,7 +127,7 @@ class RudiNodeManagerConnector(Connector):
|
|
|
127
127
|
"""
|
|
128
128
|
Performs an identified GET request through /api path
|
|
129
129
|
:param url: part of the URL that comes after /api
|
|
130
|
-
:param keep_alive: True if the connection should be
|
|
130
|
+
:param keep_alive: True if the connection should be kept alive (for successive requests). Use
|
|
131
131
|
self.connection.close() in the end of your request series.
|
|
132
132
|
:return: the result of the request, most likely a JSON
|
|
133
133
|
"""
|
|
@@ -326,7 +326,7 @@ class RudiNodeManagerConnector(Connector):
|
|
|
326
326
|
"""
|
|
327
327
|
Performs an identified GET request through /api path
|
|
328
328
|
:param url: part of the URL that comes after /api
|
|
329
|
-
:param keep_alive: True if the connection should be
|
|
329
|
+
:param keep_alive: True if the connection should be kept alive (for successive requests). Use
|
|
330
330
|
self.connection.close() in the end of your request series.
|
|
331
331
|
:return: the result of the request, most likely a JSON
|
|
332
332
|
"""
|
|
@@ -475,7 +475,7 @@ class RudiNodeManagerConnector(Connector):
|
|
|
475
475
|
|
|
476
476
|
@property
|
|
477
477
|
def last_metadata_update_date(self) -> Date | None:
|
|
478
|
-
res = self.get_data("resources?
|
|
478
|
+
res = self.get_data("resources?sort_by=-updatedAt&limit=1&fields=updatedAt")
|
|
479
479
|
if not isinstance(res, list):
|
|
480
480
|
raise TypeError(f"The server should have returned a list, got:\n{res}")
|
|
481
481
|
if len(res) == 0:
|
|
@@ -485,7 +485,7 @@ class RudiNodeManagerConnector(Connector):
|
|
|
485
485
|
|
|
486
486
|
@property
|
|
487
487
|
def last_data_update_date(self) -> Date | None:
|
|
488
|
-
res = self.get_data("resources?
|
|
488
|
+
res = self.get_data("resources?sort_by=-dataset_dates.updated&limit=1&fields=dataset_dates.updated")
|
|
489
489
|
# print("last_data_update_date", res)
|
|
490
490
|
if not isinstance(res, list):
|
|
491
491
|
raise TypeError(f"The server should have returned a list, got:\n{res}")
|
|
@@ -120,11 +120,11 @@ class RudiNodeManagerConnectorV3(RudiNodeManagerConnector):
|
|
|
120
120
|
return self._cached_conf
|
|
121
121
|
|
|
122
122
|
# ----------[ Basic API calls ]-------------------------------------------------------------------------------------
|
|
123
|
-
def
|
|
123
|
+
def get_api(self, url: str, headers: dict, keep_alive: bool = False):
|
|
124
124
|
"""
|
|
125
125
|
Performs an identified GET request through /api path
|
|
126
126
|
:param url: part of the URL that comes after /api
|
|
127
|
-
:param keep_alive: True if the connection should be
|
|
127
|
+
:param keep_alive: True if the connection should be kept alive (for successive requests). Use
|
|
128
128
|
self.connection.close() in the end of your request series.
|
|
129
129
|
:return: the result of the request, most likely a JSON
|
|
130
130
|
"""
|
|
@@ -180,7 +180,7 @@ class RudiNodeManagerConnectorV3(RudiNodeManagerConnector):
|
|
|
180
180
|
)
|
|
181
181
|
|
|
182
182
|
def test_connection(self):
|
|
183
|
-
test = self.
|
|
183
|
+
test = self.get_api(url="open/test", headers=self._def_headers)
|
|
184
184
|
if test == "test":
|
|
185
185
|
log_d(here, f"Node '{self.host}'", "connection OK")
|
|
186
186
|
# log_d(here, f"Node '{self.host}'", "connection OK")
|
|
@@ -191,7 +191,7 @@ class RudiNodeManagerConnectorV3(RudiNodeManagerConnector):
|
|
|
191
191
|
def test_identified_connection(self):
|
|
192
192
|
self.test_connection()
|
|
193
193
|
try:
|
|
194
|
-
self.
|
|
194
|
+
self.get_api(url="catalog/uuid", headers=self._id_headers)
|
|
195
195
|
except HttpError:
|
|
196
196
|
raise ConnectionError(f"Identifiers seem to be not working for the node: {self.server_url}")
|
|
197
197
|
return True
|
|
@@ -209,11 +209,11 @@ class RudiNodeManagerConnectorV3(RudiNodeManagerConnector):
|
|
|
209
209
|
|
|
210
210
|
@property
|
|
211
211
|
def tags(self):
|
|
212
|
-
return self.
|
|
212
|
+
return self.get_api(url="open/tags", headers=self._def_headers)
|
|
213
213
|
|
|
214
214
|
@property
|
|
215
215
|
def hash(self):
|
|
216
|
-
return self.
|
|
216
|
+
return self.get_api(url="open/hash", headers=self._def_headers)
|
|
217
217
|
|
|
218
218
|
@property
|
|
219
219
|
def _def_headers(self):
|
|
@@ -269,7 +269,7 @@ class RudiNodeManagerConnectorV3(RudiNodeManagerConnector):
|
|
|
269
269
|
def _storage_jwt(self) -> str:
|
|
270
270
|
here = "_storage_jwt"
|
|
271
271
|
if is_jwt_expired(self._cached_storage_jwt):
|
|
272
|
-
res = self.
|
|
272
|
+
res = self.get_api(url="storage/jwt", headers=self._id_headers)
|
|
273
273
|
|
|
274
274
|
if not isinstance(res, dict):
|
|
275
275
|
raise TypeError(f"An error occurred while getting Storage JWT: got {res}")
|
|
@@ -295,7 +295,7 @@ class RudiNodeManagerConnectorV3(RudiNodeManagerConnector):
|
|
|
295
295
|
"""
|
|
296
296
|
Performs an identified GET request through /api path
|
|
297
297
|
:param url: part of the URL that comes after /api
|
|
298
|
-
:param keep_alive: True if the connection should be
|
|
298
|
+
:param keep_alive: True if the connection should be kept alive (for successive requests). Use
|
|
299
299
|
self.connection.close() in the end of your request series.
|
|
300
300
|
:return: the result of the request, most likely a JSON
|
|
301
301
|
"""
|
|
@@ -380,7 +380,7 @@ class RudiNodeManagerConnectorV3(RudiNodeManagerConnector):
|
|
|
380
380
|
if url in RUDI_OBJECT_TYPES:
|
|
381
381
|
data: list[dict] = self._get_full_obj_list(url)
|
|
382
382
|
else:
|
|
383
|
-
data = self.
|
|
383
|
+
data = self.get_api(url=url, headers=self._id_headers) # type: ignore
|
|
384
384
|
|
|
385
385
|
self._data_cache[url] = {"data": data, _REFRESH_KEY: time()}
|
|
386
386
|
obj_data = self._data_cache[url]["data"]
|
|
@@ -452,7 +452,7 @@ class RudiNodeManagerConnectorV3(RudiNodeManagerConnector):
|
|
|
452
452
|
|
|
453
453
|
@property
|
|
454
454
|
def last_metadata_update_date(self) -> Date | None:
|
|
455
|
-
res = self.get_catalog_cached("resources?
|
|
455
|
+
res = self.get_catalog_cached("resources?sort_by=-updatedAt&fields=updatedAt&limit=1")
|
|
456
456
|
if not isinstance(res, list):
|
|
457
457
|
raise TypeError(f"The server should have returned a list, got:\n{res}")
|
|
458
458
|
if len(res) == 0:
|
|
@@ -462,7 +462,7 @@ class RudiNodeManagerConnectorV3(RudiNodeManagerConnector):
|
|
|
462
462
|
|
|
463
463
|
@property
|
|
464
464
|
def last_data_update_date(self) -> Date | None:
|
|
465
|
-
res = self.get_catalog_cached("resources?
|
|
465
|
+
res = self.get_catalog_cached("resources?sort_by=-dataset_dates.updated&limit=1&fields=dataset_dates.updated")
|
|
466
466
|
# print("last_data_update_date", res)
|
|
467
467
|
if not isinstance(res, list):
|
|
468
468
|
raise TypeError(f"The server should have returned a list, got:\n{res}")
|
|
@@ -1356,7 +1356,7 @@ if __name__ == "__main__": # pragma: no cover
|
|
|
1356
1356
|
log_d(tests, "manager_url", manager.manager_url)
|
|
1357
1357
|
log_d(tests, "manager_back_url", manager.base_url)
|
|
1358
1358
|
log_d(tests, "test 1", manager.request(relative_url="open/test"))
|
|
1359
|
-
log_d(tests, "test 2", manager.
|
|
1359
|
+
log_d(tests, "test 2", manager.get_api(url="open/test", headers=manager._def_headers))
|
|
1360
1360
|
log_d(tests, "test 3", manager.test_connection())
|
|
1361
1361
|
|
|
1362
1362
|
log_d(tests, "nb orgs", manager._count_obj("organizations"))
|
|
@@ -139,8 +139,7 @@ def get_file_hash(file_local_path: str, hash_algo: str = "md5") -> str:
|
|
|
139
139
|
def read_json_file(file_path, mode: Literal["b", "t"] = "t"): # pragma: no cover
|
|
140
140
|
check_is_file(file_path)
|
|
141
141
|
with open(file_path, f"r{mode}") as json_file_content:
|
|
142
|
-
|
|
143
|
-
return json_dict
|
|
142
|
+
return load(json_file_content)
|
|
144
143
|
|
|
145
144
|
|
|
146
145
|
def write_file(destination_file_path: str, content, mode: Literal["b", "t"] = "t"): # pragma: no cover
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: rudi-node-write
|
|
3
|
-
Version: 1.3.
|
|
3
|
+
Version: 1.3.2
|
|
4
4
|
Summary: Use the internal API of a RUDI Producer node
|
|
5
5
|
Author-email: Olivier Martineau <olivier.martineau@irisa.fr>
|
|
6
6
|
Maintainer-email: Olivier Martineau <olivier.martineau@irisa.fr>
|
|
@@ -18,15 +18,15 @@ Description-Content-Type: text/markdown
|
|
|
18
18
|
License-File: LICENCE.md
|
|
19
19
|
Requires-Dist: beautifulsoup4==4.13.4
|
|
20
20
|
Requires-Dist: chardet==5.2.0
|
|
21
|
-
Requires-Dist: deepdiff==8.
|
|
22
|
-
Requires-Dist: puremagic==1.
|
|
21
|
+
Requires-Dist: deepdiff==8.5.0
|
|
22
|
+
Requires-Dist: puremagic==1.29
|
|
23
23
|
Provides-Extra: dev
|
|
24
24
|
Requires-Dist: backports.tarfile==1.2.0; extra == "dev"
|
|
25
25
|
Requires-Dist: black==25.1.0; extra == "dev"
|
|
26
26
|
Requires-Dist: build==1.2.2.post1; extra == "dev"
|
|
27
|
-
Requires-Dist: commitizen==4.
|
|
27
|
+
Requires-Dist: commitizen==4.7.2; extra == "dev"
|
|
28
28
|
Requires-Dist: flake8==7.2.0; extra == "dev"
|
|
29
|
-
Requires-Dist: importlib-metadata==8.
|
|
29
|
+
Requires-Dist: importlib-metadata==8.7.0; extra == "dev"
|
|
30
30
|
Requires-Dist: importlib-resources==6.5.2; extra == "dev"
|
|
31
31
|
Requires-Dist: inflect==7.5.0; extra == "dev"
|
|
32
32
|
Requires-Dist: ipykernel==6.29.5; extra == "dev"
|
|
@@ -41,9 +41,10 @@ Requires-Dist: pkginfo==1.12.1.2; extra == "dev"
|
|
|
41
41
|
Requires-Dist: pre-commit==4.2.0; extra == "dev"
|
|
42
42
|
Requires-Dist: pre-commit-hooks==5.0.0; extra == "dev"
|
|
43
43
|
Requires-Dist: py-env==0.0.1; extra == "dev"
|
|
44
|
-
Requires-Dist: pyright==1.1.
|
|
44
|
+
Requires-Dist: pyright==1.1.400; extra == "dev"
|
|
45
45
|
Requires-Dist: pytest-check==2.5.3; extra == "dev"
|
|
46
46
|
Requires-Dist: pytest-cov==6.1.1; extra == "dev"
|
|
47
|
+
Requires-Dist: rudi-node-write==1.3.1; extra == "dev"
|
|
47
48
|
Requires-Dist: tomli==2.2.1; extra == "dev"
|
|
48
49
|
Requires-Dist: twine==6.1.0; extra == "dev"
|
|
49
50
|
Dynamic: license-file
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
beautifulsoup4==4.13.4
|
|
2
2
|
chardet==5.2.0
|
|
3
|
-
deepdiff==8.
|
|
4
|
-
puremagic==1.
|
|
3
|
+
deepdiff==8.5.0
|
|
4
|
+
puremagic==1.29
|
|
5
5
|
|
|
6
6
|
[dev]
|
|
7
7
|
backports.tarfile==1.2.0
|
|
8
8
|
black==25.1.0
|
|
9
9
|
build==1.2.2.post1
|
|
10
|
-
commitizen==4.
|
|
10
|
+
commitizen==4.7.2
|
|
11
11
|
flake8==7.2.0
|
|
12
|
-
importlib-metadata==8.
|
|
12
|
+
importlib-metadata==8.7.0
|
|
13
13
|
importlib-resources==6.5.2
|
|
14
14
|
inflect==7.5.0
|
|
15
15
|
ipykernel==6.29.5
|
|
@@ -24,8 +24,9 @@ pkginfo==1.12.1.2
|
|
|
24
24
|
pre-commit==4.2.0
|
|
25
25
|
pre-commit-hooks==5.0.0
|
|
26
26
|
py-env==0.0.1
|
|
27
|
-
pyright==1.1.
|
|
27
|
+
pyright==1.1.400
|
|
28
28
|
pytest-check==2.5.3
|
|
29
29
|
pytest-cov==6.1.1
|
|
30
|
+
rudi-node-write==1.3.1
|
|
30
31
|
tomli==2.2.1
|
|
31
32
|
twine==6.1.0
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/src/rudi_node_write/connectors/io_connector.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/src/rudi_node_write/connectors/rudi_node_auth.py
RENAMED
|
File without changes
|
|
File without changes
|
{rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/src/rudi_node_write/rudi_types/rudi_const.py
RENAMED
|
File without changes
|
{rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/src/rudi_node_write/rudi_types/rudi_contact.py
RENAMED
|
File without changes
|
{rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/src/rudi_node_write/rudi_types/rudi_dates.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/src/rudi_node_write/rudi_types/rudi_licence.py
RENAMED
|
File without changes
|
{rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/src/rudi_node_write/rudi_types/rudi_media.py
RENAMED
|
File without changes
|
|
File without changes
|
{rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/src/rudi_node_write/rudi_types/rudi_meta_misc.py
RENAMED
|
File without changes
|
|
File without changes
|
{rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/src/rudi_node_write/rudi_types/serializable.py
RENAMED
|
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
|
|
File without changes
|
{rudi_node_write-1.3.0 → rudi_node_write-1.3.2}/src/rudi_node_write.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|