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.
Files changed (47) hide show
  1. {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/PKG-INFO +4 -8
  2. {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/pyproject.toml +2 -2
  3. {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/requirements-dev.txt +7 -7
  4. rudi_node_write-1.3.3/requirements.txt +7 -0
  5. {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/connectors/io_connector.py +2 -2
  6. {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/rudi_node_writer.py +10 -15
  7. {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/rudi_types/rudi_const.py +1 -2
  8. {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/rudi_types/rudi_dictionary_entry.py +2 -2
  9. {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/rudi_types/rudi_media.py +10 -9
  10. {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/rudi_types/rudi_meta.py +5 -12
  11. {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/utils/dict_utils.py +2 -3
  12. {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/utils/file_utils.py +9 -1
  13. {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/utils/list_utils.py +3 -3
  14. {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/utils/str_utils.py +1 -1
  15. {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write.egg-info/PKG-INFO +4 -8
  16. {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write.egg-info/requires.txt +3 -7
  17. rudi_node_write-1.3.2/requirements.txt +0 -7
  18. {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/LICENCE.md +0 -0
  19. {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/README.md +0 -0
  20. {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/setup.cfg +0 -0
  21. {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/__init__.py +0 -0
  22. {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/conf/meta_defaults.py +0 -0
  23. {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/connectors/io_rudi_catalog_write.py +0 -0
  24. {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/connectors/io_rudi_jwt_factory.py +0 -0
  25. {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/connectors/io_rudi_manager_write.py +0 -0
  26. {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
  27. {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
  28. {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/connectors/io_rudi_storage_write.py +0 -0
  29. {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/connectors/rudi_node_auth.py +0 -0
  30. {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/rudi_types/rudi_contact.py +0 -0
  31. {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/rudi_types/rudi_dates.py +0 -0
  32. {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/rudi_types/rudi_geo.py +0 -0
  33. {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/rudi_types/rudi_licence.py +0 -0
  34. {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/rudi_types/rudi_meta_misc.py +0 -0
  35. {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/rudi_types/rudi_org.py +0 -0
  36. {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/rudi_types/serializable.py +0 -0
  37. {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/utils/err.py +0 -0
  38. {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/utils/html_utils.py +0 -0
  39. {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/utils/jwt.py +0 -0
  40. {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/utils/log.py +0 -0
  41. {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/utils/type_date.py +0 -0
  42. {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/utils/typing_utils.py +0 -0
  43. {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write/utils/url_utils.py +0 -0
  44. {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write.egg-info/SOURCES.txt +0 -0
  45. {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write.egg-info/dependency_links.txt +0 -0
  46. {rudi_node_write-1.3.2 → rudi_node_write-1.3.3}/src/rudi_node_write.egg-info/top_level.txt +0 -0
  47. {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.2
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.7.2; extra == "dev"
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.400; extra == "dev"
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.1; extra == "dev"
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.2"
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.2"
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.7.2
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.400
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.1
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.0 # Installed as dependency for black
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.0 # Installed as dependency for pytest-cov
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.0 # Installed as dependency for jsonschema, referencing
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==2.5.0 # Installed as dependency for commitizen
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
@@ -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 is_dict, safe_get_key
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, log_w
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/creds_release.json"
500
+ creds_file = "../creds/creds_2.5.2.json"
503
501
  rudi_node_creds = read_json_file(creds_file)
504
- if rudi_node_creds.get(PM_URL) is not None:
505
- pm_url = rudi_node_creds[PM_URL]
506
- else:
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["pm_usr"], pwd=rudi_node_creds["pm_pwd"])
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/creds_release.json")
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["pm_url"], auth)
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(f"Filename : {path1}, file type : {answer["file_type"]}")
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(f"Filename : {path2}, file type : {answer2["file_type"]}")
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(f"Filename : {path3}, file type : {answer3["file_type"]}")
529
+ print("Filename:", path3, "file type:", answer3["file_type"])
535
530
  except Exception as e:
536
531
  print(str(e))
@@ -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 (is_string(version) and REGEX_RUDI_VERSION.match(version)):
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 is_list, are_list_equal
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 is_list(list_entries):
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:
@@ -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, is_dict
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, is_list
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, is_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 is_list(o):
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 is_dict(o):
141
+ if isinstance(o, dict):
143
142
  return RudiMediaConnectorParameterList([RudiMediaConnectorParameter.from_json(o)])
144
- if is_list(o):
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 is_type(connector_parameters, RudiMediaConnectorParameterList):
161
+ if isinstance(connector_parameters, RudiMediaConnectorParameterList):
163
162
  self.connector_parameters = connector_parameters
164
- elif is_list(connector_parameters) or is_type(connector_parameters, RudiMediaConnectorParameter):
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 is_list, ensure_is_str_list
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 is_list(theme) else theme)
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 is_string(resource_languages)
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 = check_is_literal(metadata_status, METADATA_STATUSES)
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 is_dict(obj):
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 is_dict(leaf):
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 is_list(list_a) and is_list(list_b):
82
+ if isinstance(list_a, list) and isinstance(list_b, list):
83
83
  return list_a + list_b
84
- if is_list(list_a):
84
+ if isinstance(list_a, list):
85
85
  return list_a + [list_b]
86
- if is_list(list_b):
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 is_string(email_str) and bool(REGEX_EMAIL.match(email_str))
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.2
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.7.2; extra == "dev"
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.400; extra == "dev"
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.1; extra == "dev"
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.7.2
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.400
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.1
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