rudi-node-write 1.3.2__tar.gz → 1.3.3__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.2 → rudi_node_write-1.3.3}/PKG-INFO +4 -8
- {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/pyproject.toml +2 -2
- {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/requirements-dev.txt +7 -7
- rudi_node_write-1.3.3/requirements.txt +7 -0
- {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/connectors/io_connector.py +2 -2
- {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/rudi_node_writer.py +10 -15
- {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/rudi_types/rudi_const.py +1 -2
- {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/rudi_types/rudi_dictionary_entry.py +2 -2
- {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/rudi_types/rudi_media.py +10 -9
- {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/rudi_types/rudi_meta.py +5 -12
- {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/utils/dict_utils.py +2 -3
- {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/utils/file_utils.py +9 -1
- {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/utils/list_utils.py +3 -3
- {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/utils/str_utils.py +1 -1
- {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write.egg-info/PKG-INFO +4 -8
- {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write.egg-info/requires.txt +3 -7
- rudi_node_write-1.3.2/requirements.txt +0 -7
- {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/LICENCE.md +0 -0
- {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/README.md +0 -0
- {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/setup.cfg +0 -0
- {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/__init__.py +0 -0
- {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/conf/meta_defaults.py +0 -0
- {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/connectors/io_rudi_catalog_write.py +0 -0
- {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/connectors/io_rudi_jwt_factory.py +0 -0
- {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/connectors/io_rudi_manager_write.py +0 -0
- {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/connectors/io_rudi_manager_write_v2.py +0 -0
- {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/connectors/io_rudi_manager_write_v3.py +0 -0
- {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/connectors/io_rudi_storage_write.py +0 -0
- {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/connectors/rudi_node_auth.py +0 -0
- {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/rudi_types/rudi_contact.py +0 -0
- {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/rudi_types/rudi_dates.py +0 -0
- {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/rudi_types/rudi_geo.py +0 -0
- {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/rudi_types/rudi_licence.py +0 -0
- {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/rudi_types/rudi_meta_misc.py +0 -0
- {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/rudi_types/rudi_org.py +0 -0
- {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/rudi_types/serializable.py +0 -0
- {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/utils/err.py +0 -0
- {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/utils/html_utils.py +0 -0
- {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/utils/jwt.py +0 -0
- {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/utils/log.py +0 -0
- {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/utils/type_date.py +0 -0
- {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/utils/typing_utils.py +0 -0
- {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/utils/url_utils.py +0 -0
- {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write.egg-info/SOURCES.txt +0 -0
- {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write.egg-info/dependency_links.txt +0 -0
- {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write.egg-info/top_level.txt +0 -0
- {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/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.3
|
|
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>
|
|
@@ -16,15 +16,11 @@ Classifier: Operating System :: OS Independent
|
|
|
16
16
|
Requires-Python: >=3.11
|
|
17
17
|
Description-Content-Type: text/markdown
|
|
18
18
|
License-File: LICENCE.md
|
|
19
|
-
Requires-Dist: beautifulsoup4==4.13.4
|
|
20
|
-
Requires-Dist: chardet==5.2.0
|
|
21
|
-
Requires-Dist: deepdiff==8.5.0
|
|
22
|
-
Requires-Dist: puremagic==1.29
|
|
23
19
|
Provides-Extra: dev
|
|
24
20
|
Requires-Dist: backports.tarfile==1.2.0; extra == "dev"
|
|
25
21
|
Requires-Dist: black==25.1.0; extra == "dev"
|
|
26
22
|
Requires-Dist: build==1.2.2.post1; extra == "dev"
|
|
27
|
-
Requires-Dist: commitizen==4.
|
|
23
|
+
Requires-Dist: commitizen==4.8.2; extra == "dev"
|
|
28
24
|
Requires-Dist: flake8==7.2.0; extra == "dev"
|
|
29
25
|
Requires-Dist: importlib-metadata==8.7.0; extra == "dev"
|
|
30
26
|
Requires-Dist: importlib-resources==6.5.2; extra == "dev"
|
|
@@ -41,10 +37,10 @@ Requires-Dist: pkginfo==1.12.1.2; extra == "dev"
|
|
|
41
37
|
Requires-Dist: pre-commit==4.2.0; extra == "dev"
|
|
42
38
|
Requires-Dist: pre-commit-hooks==5.0.0; extra == "dev"
|
|
43
39
|
Requires-Dist: py-env==0.0.1; extra == "dev"
|
|
44
|
-
Requires-Dist: pyright==1.1.
|
|
40
|
+
Requires-Dist: pyright==1.1.401; extra == "dev"
|
|
45
41
|
Requires-Dist: pytest-check==2.5.3; extra == "dev"
|
|
46
42
|
Requires-Dist: pytest-cov==6.1.1; extra == "dev"
|
|
47
|
-
Requires-Dist: rudi-node-write==1.3.
|
|
43
|
+
Requires-Dist: rudi-node-write==1.3.2; extra == "dev"
|
|
48
44
|
Requires-Dist: tomli==2.2.1; extra == "dev"
|
|
49
45
|
Requires-Dist: twine==6.1.0; extra == "dev"
|
|
50
46
|
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.3"
|
|
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.3"
|
|
49
49
|
version_files = ["pyproject.toml:version"]
|
|
50
50
|
|
|
51
51
|
# ----- Tool: pytest
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
backports.tarfile==1.2.0
|
|
3
3
|
black==25.1.0
|
|
4
4
|
build==1.2.2.post1
|
|
5
|
-
commitizen==4.
|
|
5
|
+
commitizen==4.8.2
|
|
6
6
|
flake8==7.2.0
|
|
7
7
|
importlib-metadata==8.7.0
|
|
8
8
|
importlib-resources==6.5.2
|
|
@@ -19,10 +19,10 @@ pkginfo==1.12.1.2
|
|
|
19
19
|
pre-commit==4.2.0
|
|
20
20
|
pre-commit-hooks==5.0.0
|
|
21
21
|
py-env==0.0.1
|
|
22
|
-
pyright==1.1.
|
|
22
|
+
pyright==1.1.401
|
|
23
23
|
pytest-check==2.5.3
|
|
24
24
|
pytest-cov==6.1.1
|
|
25
|
-
rudi-node-write==1.3.
|
|
25
|
+
rudi-node-write==1.3.2
|
|
26
26
|
tomli==2.2.1
|
|
27
27
|
twine==6.1.0
|
|
28
28
|
# appnope==0.1.4 # Installed as dependency for ipykernel
|
|
@@ -33,10 +33,10 @@ twine==6.1.0
|
|
|
33
33
|
# certifi==2025.4.26 # Installed as dependency for requests
|
|
34
34
|
# cfgv==3.4.0 # Installed as dependency for pre-commit
|
|
35
35
|
# charset-normalizer==3.4.2 # Installed as dependency for commitizen, requests
|
|
36
|
-
# click==8.2.
|
|
36
|
+
# click==8.2.1 # Installed as dependency for black
|
|
37
37
|
# colorama==0.4.6 # Installed as dependency for commitizen
|
|
38
38
|
# comm==0.2.2 # Installed as dependency for ipykernel
|
|
39
|
-
# coverage==7.8.
|
|
39
|
+
# coverage==7.8.1 # Installed as dependency for pytest-cov
|
|
40
40
|
# debugpy==1.8.14 # Installed as dependency for ipykernel
|
|
41
41
|
# decli==0.6.2 # Installed as dependency for commitizen
|
|
42
42
|
# decorator==5.2.1 # Installed as dependency for ipython
|
|
@@ -98,12 +98,12 @@ twine==6.1.0
|
|
|
98
98
|
# requests-toolbelt==1.0.0 # Installed as dependency for twine
|
|
99
99
|
# rfc3986==2.0.0 # Installed as dependency for twine
|
|
100
100
|
# rich==14.0.0 # Installed as dependency for twine
|
|
101
|
-
# rpds-py==0.25.
|
|
101
|
+
# rpds-py==0.25.1 # Installed as dependency for jsonschema, referencing
|
|
102
102
|
# ruamel.yaml==0.18.10 # Installed as dependency for pre-commit-hooks
|
|
103
103
|
# ruamel.yaml.clib==0.2.12 # Installed as dependency for ruamel.yaml
|
|
104
104
|
# six==1.17.0 # Installed as dependency for python-dateutil
|
|
105
105
|
# stack-data==0.6.3 # Installed as dependency for ipython
|
|
106
|
-
# termcolor==
|
|
106
|
+
# termcolor==3.1.0 # Installed as dependency for commitizen
|
|
107
107
|
# tomlkit==0.13.2 # Installed as dependency for commitizen
|
|
108
108
|
# tornado==6.5 # Installed as dependency for ipykernel, jupyter-client
|
|
109
109
|
# traitlets==5.14.3 # Installed as dependency for comm, ipykernel, ipython, jupyter-client, jupyter-core, matplotlib-inline, nbformat
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# beautifulsoup4==4.13.4 # Installed as dependency for rudi-node-write
|
|
2
|
+
# chardet==5.2.0 # Installed as dependency for rudi-node-write
|
|
3
|
+
# deepdiff==8.5.0 # Installed as dependency for rudi-node-write
|
|
4
|
+
# orderly-set==5.4.1 # Installed as dependency for deepdiff
|
|
5
|
+
# puremagic==1.29 # Installed as dependency for rudi-node-write
|
|
6
|
+
# soupsieve==2.7 # Installed as dependency for beautifulsoup4
|
|
7
|
+
# typing-extensions==4.13.2 # Installed as dependency for beautifulsoup4, pyright, referencing, typeguard
|
{rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/connectors/io_connector.py
RENAMED
|
@@ -5,9 +5,9 @@ from urllib.parse import urlsplit
|
|
|
5
5
|
|
|
6
6
|
from rudi_node_write.rudi_types.rudi_const import check_is_literal
|
|
7
7
|
from rudi_node_write.rudi_types.serializable import Serializable
|
|
8
|
-
from rudi_node_write.utils.dict_utils import
|
|
8
|
+
from rudi_node_write.utils.dict_utils import safe_get_key
|
|
9
9
|
from rudi_node_write.utils.err import HttpError
|
|
10
|
-
from rudi_node_write.utils.log import log_d_if, log_e, log_d
|
|
10
|
+
from rudi_node_write.utils.log import log_d_if, log_e, log_d
|
|
11
11
|
from rudi_node_write.utils.str_utils import slash_join
|
|
12
12
|
from rudi_node_write.utils.url_utils import get_response_cookies, url_encode_req_params
|
|
13
13
|
|
|
@@ -496,20 +496,15 @@ class RudiNodeWriter:
|
|
|
496
496
|
|
|
497
497
|
if __name__ == "__main__": # pragma: no cover
|
|
498
498
|
begin = time()
|
|
499
|
-
NODE_URL = "url" # The URL of RUDI node
|
|
500
|
-
PM_URL = "pm_url" # The URL of the RUDI node manager. If not set in the credential file, it will be set to NODE_URL+'/prodmanager'
|
|
501
499
|
tests = "RudiNodeWriter tests"
|
|
502
|
-
creds_file = "../creds/
|
|
500
|
+
creds_file = "../creds/creds_2.5.2.json"
|
|
503
501
|
rudi_node_creds = read_json_file(creds_file)
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
pm_url = rudi_node_creds[NODE_URL] + "/prodmanager"
|
|
508
|
-
|
|
509
|
-
if (b64url_auth := rudi_node_creds["b64auth"]) is not None:
|
|
502
|
+
pm_url = slash_join(rudi_node_creds.get("url"), "manager")
|
|
503
|
+
b64url_auth = rudi_node_creds.get("b64auth")
|
|
504
|
+
if b64url_auth is not None:
|
|
510
505
|
auth = RudiNodeAuth(b64url_auth=b64url_auth)
|
|
511
506
|
else:
|
|
512
|
-
auth = RudiNodeAuth(usr=rudi_node_creds
|
|
507
|
+
auth = RudiNodeAuth(usr=rudi_node_creds.get("usr"), pwd=rudi_node_creds.get("pwd"))
|
|
513
508
|
|
|
514
509
|
rudi_node_writer = RudiNodeWriter(pm_url=pm_url, auth=auth)
|
|
515
510
|
log_d(tests, "used_organization_list", rudi_node_writer.used_organization_list)
|
|
@@ -519,18 +514,18 @@ if __name__ == "__main__": # pragma: no cover
|
|
|
519
514
|
log_d(tests, "contact_1_id", rudi_node_writer.contact_list[0]["contact_id"])
|
|
520
515
|
# log_d(tests, "metadata_with_available_media", rudi_node_writer.select_metadata_with_available_media())
|
|
521
516
|
|
|
522
|
-
release_creds = read_json_file("../creds/
|
|
517
|
+
release_creds = read_json_file("../creds/creds_2.5.2.json")
|
|
523
518
|
auth = RudiNodeAuth(b64url_auth=release_creds["b64auth"])
|
|
524
|
-
writer = RudiNodeWriter(release_creds["
|
|
519
|
+
writer = RudiNodeWriter(release_creds["url"], auth)
|
|
525
520
|
path1 = "../dwnld/tball.gif"
|
|
526
521
|
path2 = "../dwnld/toucan.jpg"
|
|
527
522
|
path3 = "../dwnld/unicode_chars.txt"
|
|
528
523
|
try:
|
|
529
524
|
answer = loads(str(writer.post_local_file_and_media_info(file_local_path=path1)))
|
|
530
|
-
print(
|
|
525
|
+
print("Filename:", path1, "file type:", answer["file_type"])
|
|
531
526
|
answer2 = loads(str(writer.post_local_file_and_media_info(file_local_path=path2)))
|
|
532
|
-
print(
|
|
527
|
+
print("Filename:", path2, "file type:", answer2["file_type"])
|
|
533
528
|
answer3 = loads(str(writer.post_local_file_and_media_info(file_local_path=path3)))
|
|
534
|
-
print(
|
|
529
|
+
print("Filename:", path3, "file type:", answer3["file_type"])
|
|
535
530
|
except Exception as e:
|
|
536
531
|
print(str(e))
|
{rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/rudi_types/rudi_const.py
RENAMED
|
@@ -2,7 +2,6 @@ from re import compile
|
|
|
2
2
|
from typing import Literal, get_args, Final
|
|
3
3
|
|
|
4
4
|
from rudi_node_write.utils.err import LiteralUnexpectedValueException
|
|
5
|
-
from rudi_node_write.utils.str_utils import is_string
|
|
6
5
|
|
|
7
6
|
# -----[ RUDI version ]-------------------------------------------------------------------------------------------------
|
|
8
7
|
|
|
@@ -346,6 +345,6 @@ def check_is_literal_or_none(val, series: tuple, err_msg: str = "incorrect value
|
|
|
346
345
|
|
|
347
346
|
|
|
348
347
|
def check_rudi_version(version: str):
|
|
349
|
-
if not (
|
|
348
|
+
if not (isinstance(version, str) and REGEX_RUDI_VERSION.match(version)):
|
|
350
349
|
raise ValueError(f"Incorrect RUDI metadata version: '{version}'")
|
|
351
350
|
return version
|
|
@@ -4,7 +4,7 @@ from rudi_node_write.conf.meta_defaults import DEFAULT_LANG
|
|
|
4
4
|
from rudi_node_write.rudi_types.rudi_const import RECOGNIZED_LANGUAGES, Language, check_is_literal
|
|
5
5
|
from rudi_node_write.rudi_types.serializable import Serializable
|
|
6
6
|
from rudi_node_write.utils.dict_utils import check_is_dict, check_has_key
|
|
7
|
-
from rudi_node_write.utils.list_utils import
|
|
7
|
+
from rudi_node_write.utils.list_utils import are_list_equal
|
|
8
8
|
from rudi_node_write.utils.log import log_d
|
|
9
9
|
from rudi_node_write.utils.str_utils import check_is_string
|
|
10
10
|
from rudi_node_write.utils.typing_utils import get_type_name
|
|
@@ -35,7 +35,7 @@ class RudiDictionaryEntry(Serializable):
|
|
|
35
35
|
|
|
36
36
|
class RudiDictionaryEntryList(Serializable, list):
|
|
37
37
|
def __init__(self, list_entries: list[RudiDictionaryEntry]):
|
|
38
|
-
if not
|
|
38
|
+
if not isinstance(list_entries, list):
|
|
39
39
|
raise ValueError("input parameter should be a list")
|
|
40
40
|
super().__init__()
|
|
41
41
|
for entry in list_entries:
|
{rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/rudi_types/rudi_media.py
RENAMED
|
@@ -18,13 +18,13 @@ from rudi_node_write.rudi_types.rudi_const import (
|
|
|
18
18
|
)
|
|
19
19
|
from rudi_node_write.rudi_types.rudi_dates import RudiDates
|
|
20
20
|
from rudi_node_write.rudi_types.serializable import Serializable
|
|
21
|
-
from rudi_node_write.utils.dict_utils import check_is_dict, check_has_key
|
|
21
|
+
from rudi_node_write.utils.dict_utils import check_is_dict, check_has_key
|
|
22
22
|
from rudi_node_write.utils.file_utils import FileDetails
|
|
23
|
-
from rudi_node_write.utils.list_utils import check_is_list_or_none
|
|
23
|
+
from rudi_node_write.utils.list_utils import check_is_list_or_none
|
|
24
24
|
from rudi_node_write.utils.log import log_d
|
|
25
25
|
from rudi_node_write.utils.str_utils import check_is_string_or_none, check_is_uuid4, check_is_string, uuid4_str
|
|
26
26
|
from rudi_node_write.utils.type_date import Date
|
|
27
|
-
from rudi_node_write.utils.typing_utils import check_is_int, does_inherit_from, get_type_name, check_type
|
|
27
|
+
from rudi_node_write.utils.typing_utils import check_is_int, does_inherit_from, get_type_name, check_type
|
|
28
28
|
|
|
29
29
|
NORMALIZED_CONNECTOR_PARAMS_TYPES = {
|
|
30
30
|
"STR": "STRING",
|
|
@@ -116,8 +116,7 @@ class RudiMediaConnectorParameter(Serializable):
|
|
|
116
116
|
accepted_values=accepted_values,
|
|
117
117
|
usage=check_is_string_or_none(o.get("usage")), # type: ignore
|
|
118
118
|
)
|
|
119
|
-
if
|
|
120
|
-
# log_d(here, 'is_list')
|
|
119
|
+
if isinstance(o, list):
|
|
121
120
|
return RudiMediaConnectorParameterList.from_json(o)
|
|
122
121
|
|
|
123
122
|
raise TypeError("RudiMediaConnectorParameter.from_json input should be a dict")
|
|
@@ -139,9 +138,9 @@ class RudiMediaConnectorParameterList(Serializable, list[RudiMediaConnectorParam
|
|
|
139
138
|
|
|
140
139
|
@staticmethod
|
|
141
140
|
def from_json(o: list | dict):
|
|
142
|
-
if
|
|
141
|
+
if isinstance(o, dict):
|
|
143
142
|
return RudiMediaConnectorParameterList([RudiMediaConnectorParameter.from_json(o)])
|
|
144
|
-
if
|
|
143
|
+
if isinstance(o, list):
|
|
145
144
|
return RudiMediaConnectorParameterList([RudiMediaConnectorParameter.from_json(entry) for entry in o])
|
|
146
145
|
raise TypeError("Property 'connector_parameters' should be a list")
|
|
147
146
|
|
|
@@ -159,9 +158,11 @@ class RudiMediaConnector(Serializable):
|
|
|
159
158
|
self.interface_contract = check_is_string_or_none(interface_contract)
|
|
160
159
|
self.connector_parameters = None
|
|
161
160
|
if connector_parameters is not None:
|
|
162
|
-
if
|
|
161
|
+
if isinstance(connector_parameters, RudiMediaConnectorParameterList):
|
|
163
162
|
self.connector_parameters = connector_parameters
|
|
164
|
-
elif
|
|
163
|
+
elif isinstance(connector_parameters, list) or isinstance(
|
|
164
|
+
connector_parameters, RudiMediaConnectorParameter
|
|
165
|
+
):
|
|
165
166
|
self.connector_parameters = RudiMediaConnectorParameterList(connector_parameters)
|
|
166
167
|
else:
|
|
167
168
|
check_type(connector_parameters, RudiMediaConnectorParameterList)
|
|
@@ -3,7 +3,6 @@ from uuid import UUID
|
|
|
3
3
|
from rudi_node_write.conf.meta_defaults import RUDI_API_VERSION
|
|
4
4
|
from rudi_node_write.rudi_types.rudi_const import (
|
|
5
5
|
METADATA_STATUSES,
|
|
6
|
-
MetadataStatus,
|
|
7
6
|
StorageStatus,
|
|
8
7
|
Language,
|
|
9
8
|
check_is_literal,
|
|
@@ -22,21 +21,15 @@ from rudi_node_write.rudi_types.rudi_meta_misc import RudiMetadataInfo, RudiData
|
|
|
22
21
|
from rudi_node_write.rudi_types.rudi_org import RudiOrganization
|
|
23
22
|
from rudi_node_write.rudi_types.serializable import Serializable
|
|
24
23
|
from rudi_node_write.utils.dict_utils import check_is_dict, check_has_key
|
|
25
|
-
from rudi_node_write.utils.list_utils import
|
|
24
|
+
from rudi_node_write.utils.list_utils import ensure_is_str_list
|
|
26
25
|
from rudi_node_write.utils.log import log_d
|
|
27
|
-
from rudi_node_write.utils.str_utils import
|
|
28
|
-
check_is_string_or_none,
|
|
29
|
-
check_is_uuid4,
|
|
30
|
-
check_is_string,
|
|
31
|
-
is_string,
|
|
32
|
-
uuid4_str,
|
|
33
|
-
)
|
|
26
|
+
from rudi_node_write.utils.str_utils import check_is_string_or_none, check_is_uuid4, check_is_string, uuid4_str
|
|
34
27
|
from rudi_node_write.utils.type_date import Date
|
|
35
28
|
from rudi_node_write.utils.typing_utils import check_type_or_null, get_type_name, check_type
|
|
36
29
|
|
|
37
30
|
|
|
38
31
|
def normalize_theme(theme: str | list) -> str:
|
|
39
|
-
normalized_theme = ThemeTranslation.get(theme[0] if
|
|
32
|
+
normalized_theme = ThemeTranslation.get(theme[0] if isinstance(theme, list) else theme)
|
|
40
33
|
return (
|
|
41
34
|
normalized_theme.strip()
|
|
42
35
|
if normalized_theme is not None
|
|
@@ -105,7 +98,7 @@ class RudiMetadata(Serializable):
|
|
|
105
98
|
if resource_languages is None
|
|
106
99
|
else (
|
|
107
100
|
[check_is_literal(resource_languages, RECOGNIZED_LANGUAGES)]
|
|
108
|
-
if
|
|
101
|
+
if isinstance(resource_languages, str)
|
|
109
102
|
else [check_is_literal(lang, RECOGNIZED_LANGUAGES) for lang in resource_languages]
|
|
110
103
|
)
|
|
111
104
|
)
|
|
@@ -116,7 +109,7 @@ class RudiMetadata(Serializable):
|
|
|
116
109
|
|
|
117
110
|
self.collection_tag = check_is_string_or_none(collection_tag)
|
|
118
111
|
self.metadata_source = check_is_string_or_none(metadata_source)
|
|
119
|
-
self.metadata_status =
|
|
112
|
+
self.metadata_status = check_is_literal_or_none(metadata_status, METADATA_STATUSES)
|
|
120
113
|
|
|
121
114
|
@staticmethod
|
|
122
115
|
def from_json(o: dict):
|
|
@@ -63,7 +63,7 @@ def safe_get_key(obj, *args):
|
|
|
63
63
|
:param args: hierarchy of attributes we need to access.
|
|
64
64
|
:return: None if the operation doesn't succeed. o['arg1']['arg2']...['argN'] otherwise.
|
|
65
65
|
"""
|
|
66
|
-
if not
|
|
66
|
+
if not isinstance(obj, dict):
|
|
67
67
|
return None
|
|
68
68
|
leaf = obj
|
|
69
69
|
nb_args = len(args)
|
|
@@ -73,7 +73,7 @@ def safe_get_key(obj, *args):
|
|
|
73
73
|
return None
|
|
74
74
|
if i + 1 == nb_args:
|
|
75
75
|
return leaf
|
|
76
|
-
if not
|
|
76
|
+
if not isinstance(leaf, dict):
|
|
77
77
|
return None
|
|
78
78
|
return None
|
|
79
79
|
|
|
@@ -106,7 +106,6 @@ def is_element_matching_filter(element, match_filter) -> bool:
|
|
|
106
106
|
if not has_key(element, key) or not is_element_matching_filter(element[key], val):
|
|
107
107
|
return False
|
|
108
108
|
return True
|
|
109
|
-
# elif is_list(element):
|
|
110
109
|
if isinstance(match_filter, dict):
|
|
111
110
|
for e in element:
|
|
112
111
|
if is_element_matching_filter(e, match_filter):
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from chardet import detect
|
|
2
2
|
from hashlib import md5, sha256, sha512
|
|
3
3
|
from json import load, dump
|
|
4
|
-
from os import stat
|
|
4
|
+
from os import makedirs, stat
|
|
5
5
|
from os.path import exists
|
|
6
6
|
from pathlib import Path
|
|
7
7
|
from puremagic import magic_file
|
|
@@ -23,6 +23,14 @@ def check_is_dir(dir_local_path: str, err_msg: str | None = None):
|
|
|
23
23
|
return dir_local_path
|
|
24
24
|
|
|
25
25
|
|
|
26
|
+
def make_dir(dir_local_path: str):
|
|
27
|
+
if not exists(dir_local_path):
|
|
28
|
+
makedirs(dir_local_path)
|
|
29
|
+
else:
|
|
30
|
+
check_is_dir(dir_local_path)
|
|
31
|
+
return dir_local_path
|
|
32
|
+
|
|
33
|
+
|
|
26
34
|
def exists_file(file_local_path: str):
|
|
27
35
|
return exists(file_local_path)
|
|
28
36
|
|
|
@@ -79,11 +79,11 @@ def merge_lists(list_a: list | None, list_b: list | None):
|
|
|
79
79
|
return list_a
|
|
80
80
|
if list_a is None:
|
|
81
81
|
return list_b
|
|
82
|
-
if
|
|
82
|
+
if isinstance(list_a, list) and isinstance(list_b, list):
|
|
83
83
|
return list_a + list_b
|
|
84
|
-
if
|
|
84
|
+
if isinstance(list_a, list):
|
|
85
85
|
return list_a + [list_b]
|
|
86
|
-
if
|
|
86
|
+
if isinstance(list_b, list):
|
|
87
87
|
return [list_a] + list_b
|
|
88
88
|
|
|
89
89
|
|
|
@@ -29,7 +29,7 @@ REGEX_UUID = compile(r"^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[
|
|
|
29
29
|
|
|
30
30
|
|
|
31
31
|
def is_email(email_str: str):
|
|
32
|
-
return
|
|
32
|
+
return isinstance(email_str, str) and bool(REGEX_EMAIL.match(email_str))
|
|
33
33
|
|
|
34
34
|
|
|
35
35
|
def check_is_email(email_str: str) -> str:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: rudi-node-write
|
|
3
|
-
Version: 1.3.
|
|
3
|
+
Version: 1.3.3
|
|
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>
|
|
@@ -16,15 +16,11 @@ Classifier: Operating System :: OS Independent
|
|
|
16
16
|
Requires-Python: >=3.11
|
|
17
17
|
Description-Content-Type: text/markdown
|
|
18
18
|
License-File: LICENCE.md
|
|
19
|
-
Requires-Dist: beautifulsoup4==4.13.4
|
|
20
|
-
Requires-Dist: chardet==5.2.0
|
|
21
|
-
Requires-Dist: deepdiff==8.5.0
|
|
22
|
-
Requires-Dist: puremagic==1.29
|
|
23
19
|
Provides-Extra: dev
|
|
24
20
|
Requires-Dist: backports.tarfile==1.2.0; extra == "dev"
|
|
25
21
|
Requires-Dist: black==25.1.0; extra == "dev"
|
|
26
22
|
Requires-Dist: build==1.2.2.post1; extra == "dev"
|
|
27
|
-
Requires-Dist: commitizen==4.
|
|
23
|
+
Requires-Dist: commitizen==4.8.2; extra == "dev"
|
|
28
24
|
Requires-Dist: flake8==7.2.0; extra == "dev"
|
|
29
25
|
Requires-Dist: importlib-metadata==8.7.0; extra == "dev"
|
|
30
26
|
Requires-Dist: importlib-resources==6.5.2; extra == "dev"
|
|
@@ -41,10 +37,10 @@ Requires-Dist: pkginfo==1.12.1.2; extra == "dev"
|
|
|
41
37
|
Requires-Dist: pre-commit==4.2.0; extra == "dev"
|
|
42
38
|
Requires-Dist: pre-commit-hooks==5.0.0; extra == "dev"
|
|
43
39
|
Requires-Dist: py-env==0.0.1; extra == "dev"
|
|
44
|
-
Requires-Dist: pyright==1.1.
|
|
40
|
+
Requires-Dist: pyright==1.1.401; extra == "dev"
|
|
45
41
|
Requires-Dist: pytest-check==2.5.3; extra == "dev"
|
|
46
42
|
Requires-Dist: pytest-cov==6.1.1; extra == "dev"
|
|
47
|
-
Requires-Dist: rudi-node-write==1.3.
|
|
43
|
+
Requires-Dist: rudi-node-write==1.3.2; extra == "dev"
|
|
48
44
|
Requires-Dist: tomli==2.2.1; extra == "dev"
|
|
49
45
|
Requires-Dist: twine==6.1.0; extra == "dev"
|
|
50
46
|
Dynamic: license-file
|
|
@@ -1,13 +1,9 @@
|
|
|
1
|
-
beautifulsoup4==4.13.4
|
|
2
|
-
chardet==5.2.0
|
|
3
|
-
deepdiff==8.5.0
|
|
4
|
-
puremagic==1.29
|
|
5
1
|
|
|
6
2
|
[dev]
|
|
7
3
|
backports.tarfile==1.2.0
|
|
8
4
|
black==25.1.0
|
|
9
5
|
build==1.2.2.post1
|
|
10
|
-
commitizen==4.
|
|
6
|
+
commitizen==4.8.2
|
|
11
7
|
flake8==7.2.0
|
|
12
8
|
importlib-metadata==8.7.0
|
|
13
9
|
importlib-resources==6.5.2
|
|
@@ -24,9 +20,9 @@ pkginfo==1.12.1.2
|
|
|
24
20
|
pre-commit==4.2.0
|
|
25
21
|
pre-commit-hooks==5.0.0
|
|
26
22
|
py-env==0.0.1
|
|
27
|
-
pyright==1.1.
|
|
23
|
+
pyright==1.1.401
|
|
28
24
|
pytest-check==2.5.3
|
|
29
25
|
pytest-cov==6.1.1
|
|
30
|
-
rudi-node-write==1.3.
|
|
26
|
+
rudi-node-write==1.3.2
|
|
31
27
|
tomli==2.2.1
|
|
32
28
|
twine==6.1.0
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
beautifulsoup4==4.13.4
|
|
2
|
-
chardet==5.2.0
|
|
3
|
-
deepdiff==8.5.0
|
|
4
|
-
puremagic==1.29
|
|
5
|
-
# orderly-set==5.4.1 # Installed as dependency for deepdiff
|
|
6
|
-
# soupsieve==2.7 # Installed as dependency for beautifulsoup4
|
|
7
|
-
# typing-extensions==4.13.2 # Installed as dependency for beautifulsoup4, pyright, referencing, typeguard
|
|
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.2 → rudi_node_write-1.3.3}/src/rudi_node_write/connectors/rudi_node_auth.py
RENAMED
|
File without changes
|
{rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/rudi_types/rudi_contact.py
RENAMED
|
File without changes
|
{rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/rudi_types/rudi_dates.py
RENAMED
|
File without changes
|
|
File without changes
|
{rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/rudi_types/rudi_licence.py
RENAMED
|
File without changes
|
{rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/rudi_types/rudi_meta_misc.py
RENAMED
|
File without changes
|
|
File without changes
|
{rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/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
|
{rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|