plexus-python-common 1.0.24__tar.gz → 1.0.25__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 (80) hide show
  1. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/PKG-INFO +2 -1
  2. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/pyproject.toml +2 -0
  3. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/src/plexus/common/utils/s3utils.py +27 -3
  4. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/src/plexus/common/utils/testutils.py +7 -0
  5. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/src/plexus_python_common.egg-info/PKG-INFO +2 -1
  6. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/src/plexus_python_common.egg-info/requires.txt +1 -0
  7. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/.editorconfig +0 -0
  8. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/.github/workflows/pr.yml +0 -0
  9. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/.github/workflows/push.yml +0 -0
  10. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/.gitignore +0 -0
  11. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/MANIFEST.in +0 -0
  12. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/README.md +0 -0
  13. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/VERSION +0 -0
  14. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/resources/unittest/jsonutils/dummy.0.jsonl +0 -0
  15. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/resources/unittest/jsonutils/dummy.1.jsonl +0 -0
  16. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/resources/unittest/jsonutils/dummy.2.jsonl +0 -0
  17. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/resources/unittest/s3utils/dir.baz/file.bar.baz +0 -0
  18. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/resources/unittest/s3utils/dir.baz/file.foo.bar +0 -0
  19. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/resources/unittest/s3utils/dir.baz/file.foo.baz +0 -0
  20. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/resources/unittest/s3utils/dir.foo/dir.foo.bar/dir.foo.bar.baz/file.foo.bar.baz +0 -0
  21. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/resources/unittest/s3utils/dir.foo/dir.foo.bar/file.bar.baz +0 -0
  22. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/resources/unittest/s3utils/dir.foo/dir.foo.bar/file.foo.bar +0 -0
  23. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/resources/unittest/s3utils/dir.foo/dir.foo.bar/file.foo.baz +0 -0
  24. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/resources/unittest/s3utils/dir.foo/file.bar +0 -0
  25. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/resources/unittest/s3utils/dir.foo/file.baz +0 -0
  26. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/resources/unittest/s3utils/dir.foo/file.foo +0 -0
  27. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/resources/unittest/shutils/0-dummy +0 -0
  28. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/resources/unittest/shutils/1-dummy +0 -0
  29. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/resources/unittest/shutils/2-dummy +0 -0
  30. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/resources/unittest/shutils/dummy.0.0.jsonl +0 -0
  31. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/resources/unittest/shutils/dummy.0.0.vol-0.jsonl +0 -0
  32. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/resources/unittest/shutils/dummy.0.jsonl +0 -0
  33. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/resources/unittest/shutils/dummy.1.1.jsonl +0 -0
  34. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/resources/unittest/shutils/dummy.1.1.vol-1.jsonl +0 -0
  35. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/resources/unittest/shutils/dummy.1.jsonl +0 -0
  36. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/resources/unittest/shutils/dummy.2.2.jsonl +0 -0
  37. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/resources/unittest/shutils/dummy.2.2.vol-2.jsonl +0 -0
  38. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/resources/unittest/shutils/dummy.2.jsonl +0 -0
  39. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/resources/unittest/shutils/dummy.csv.part0 +0 -0
  40. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/resources/unittest/shutils/dummy.csv.part1 +0 -0
  41. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/resources/unittest/shutils/dummy.csv.part2 +0 -0
  42. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/resources/unittest/shutils/dummy.txt +0 -0
  43. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/setup.cfg +0 -0
  44. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/setup.py +0 -0
  45. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/src/plexus/common/__init__.py +0 -0
  46. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/src/plexus/common/carto/OSMFile.py +0 -0
  47. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/src/plexus/common/carto/OSMNode.py +0 -0
  48. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/src/plexus/common/carto/OSMTags.py +0 -0
  49. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/src/plexus/common/carto/OSMWay.py +0 -0
  50. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/src/plexus/common/carto/__init__.py +0 -0
  51. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/src/plexus/common/config.py +0 -0
  52. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/src/plexus/common/pose.py +0 -0
  53. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/src/plexus/common/proj.py +0 -0
  54. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/src/plexus/common/utils/__init__.py +0 -0
  55. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/src/plexus/common/utils/apiutils.py +0 -0
  56. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/src/plexus/common/utils/bagutils.py +0 -0
  57. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/src/plexus/common/utils/datautils.py +0 -0
  58. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/src/plexus/common/utils/jsonutils.py +0 -0
  59. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/src/plexus/common/utils/ormutils.py +0 -0
  60. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/src/plexus/common/utils/shutils.py +0 -0
  61. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/src/plexus/common/utils/sqlutils.py +0 -0
  62. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/src/plexus/common/utils/strutils.py +0 -0
  63. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/src/plexus_python_common.egg-info/SOURCES.txt +0 -0
  64. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/src/plexus_python_common.egg-info/dependency_links.txt +0 -0
  65. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/src/plexus_python_common.egg-info/not-zip-safe +0 -0
  66. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/src/plexus_python_common.egg-info/top_level.txt +0 -0
  67. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/test/plexus_test.py +0 -0
  68. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/test/plexus_tests/__init__.py +0 -0
  69. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/test/plexus_tests/common/carto/osm_file_test.py +0 -0
  70. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/test/plexus_tests/common/carto/osm_tags_test.py +0 -0
  71. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/test/plexus_tests/common/pose_test.py +0 -0
  72. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/test/plexus_tests/common/proj_test.py +0 -0
  73. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/test/plexus_tests/common/utils/bagutils_test.py +0 -0
  74. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/test/plexus_tests/common/utils/datautils_test.py +0 -0
  75. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/test/plexus_tests/common/utils/jsonutils_test.py +0 -0
  76. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/test/plexus_tests/common/utils/ormutils_test.py +0 -0
  77. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/test/plexus_tests/common/utils/s3utils_test.py +0 -0
  78. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/test/plexus_tests/common/utils/shutils_test.py +0 -0
  79. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/test/plexus_tests/common/utils/strutils_test.py +0 -0
  80. {plexus_python_common-1.0.24 → plexus_python_common-1.0.25}/test/plexus_tests/common/utils/testutils_test.py +0 -0
@@ -1,12 +1,13 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: plexus-python-common
3
- Version: 1.0.24
3
+ Version: 1.0.25
4
4
  Classifier: Programming Language :: Python :: 3
5
5
  Classifier: Programming Language :: Python :: 3.12
6
6
  Classifier: Programming Language :: Python :: 3.13
7
7
  Classifier: Programming Language :: Python :: 3.14
8
8
  Requires-Python: <3.15,>=3.12
9
9
  Requires-Dist: boto3>=1.41
10
+ Requires-Dist: boto3-stubs>=1.41
10
11
  Requires-Dist: cloudpathlib>=0.21
11
12
  Requires-Dist: lxml>=6.0
12
13
  Requires-Dist: numpy>=2.3
@@ -9,6 +9,7 @@ build-backend = "setuptools.build_meta"
9
9
  [dependency-groups]
10
10
  dev = [
11
11
  "boto3>=1.41",
12
+ "boto3-stubs>=1.41",
12
13
  "cloudpathlib>=0.21",
13
14
  "lxml>=6.0",
14
15
  "numpy>=2.3",
@@ -48,6 +49,7 @@ classifiers = [
48
49
  ]
49
50
  dependencies = [
50
51
  "boto3>=1.41",
52
+ "boto3-stubs>=1.41",
51
53
  "cloudpathlib>=0.21",
52
54
  "lxml>=6.0",
53
55
  "numpy>=2.3",
@@ -7,6 +7,7 @@ import mimetypes
7
7
  import os
8
8
  import os.path
9
9
  import tempfile
10
+ import typing
10
11
  from collections.abc import Callable, Generator
11
12
  from pathlib import Path
12
13
  from typing import Literal
@@ -34,20 +35,29 @@ __all__ = [
34
35
  ]
35
36
 
36
37
 
37
- @dataclasses.dataclass
38
+ @dataclasses.dataclass(frozen=True, eq=True)
38
39
  class S3ObjectMeta(object):
39
40
  key: str
40
41
  last_modified: datetime.datetime
41
42
  size: int
42
43
 
43
44
 
45
+ if typing.TYPE_CHECKING:
46
+ def s3_make_client(
47
+ access_key_id: str = None,
48
+ secret_access_key: str = None,
49
+ region_name: str = None,
50
+ endpoint_url: str = None,
51
+ ) -> contextlib.AbstractContextManager[S3Client]: ...
52
+
53
+
44
54
  @contextlib.contextmanager
45
55
  def s3_make_client(
46
56
  access_key_id: str = None,
47
57
  secret_access_key: str = None,
48
58
  region_name: str = None,
49
59
  endpoint_url: str = None,
50
- ) -> Generator[S3Client]:
60
+ ) -> Generator[S3Client, None, None]:
51
61
  """
52
62
  Creates an S3 client as a context manager for safe resource handling.
53
63
 
@@ -60,7 +70,12 @@ def s3_make_client(
60
70
  session = boto3.Session(aws_access_key_id=trim_to_none(access_key_id),
61
71
  aws_secret_access_key=trim_to_none(secret_access_key),
62
72
  region_name=trim_to_none(region_name))
63
- yield S3Client(boto3_session=session, endpoint_url=trim_to_none(endpoint_url))
73
+ client = S3Client(boto3_session=session, endpoint_url=trim_to_none(endpoint_url))
74
+ try:
75
+ yield client
76
+ finally:
77
+ if hasattr(client, "close"):
78
+ client.close()
64
79
 
65
80
 
66
81
  def s3_list_objects(client: S3Client, bucket: str, prefix: str, limit: int = None) -> Generator[S3ObjectMeta]:
@@ -386,6 +401,15 @@ def s3_make_progress_callback(
386
401
  return progress_callback
387
402
 
388
403
 
404
+ if typing.TYPE_CHECKING:
405
+ def s3_make_progressed_client(
406
+ access_key_id: str = None,
407
+ secret_access_key: str = None,
408
+ region_name: str = None,
409
+ endpoint_url: str = None,
410
+ ) -> contextlib.AbstractContextManager[S3Client]: ...
411
+
412
+
389
413
  @contextlib.contextmanager
390
414
  def s3_make_progressed_client(
391
415
  access_key_id: str = None,
@@ -1,3 +1,5 @@
1
+ import uuid as py_uuid
2
+
1
3
  import textcase
2
4
  from iker.common.utils.jsonutils import JsonType
3
5
  from iker.common.utils.jsonutils import json_difference, json_reformat
@@ -6,6 +8,7 @@ from plexus.common.utils.datautils import compute_vin_code_check_digit
6
8
 
7
9
  __all__ = [
8
10
  "generate_dummy_uuid_str",
11
+ "generate_dummy_uuid",
9
12
  "generate_dummy_vin_code",
10
13
  "case_insensitive_json_compare",
11
14
  ]
@@ -20,6 +23,10 @@ def generate_dummy_uuid_str(*nums: int) -> str:
20
23
  return f"{i0:04x}{i1:04x}-{i2:04x}-{i3:04x}-{i4:04x}-{i5:04x}{i6:04x}{i7:04x}"
21
24
 
22
25
 
26
+ def generate_dummy_uuid(*nums: int) -> py_uuid.UUID:
27
+ return py_uuid.UUID(generate_dummy_uuid_str(*nums))
28
+
29
+
23
30
  def generate_dummy_vin_code(*nums: int) -> str:
24
31
  if len(nums) > 4:
25
32
  raise ValueError("a maximum of 4 integers can be provided")
@@ -1,12 +1,13 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: plexus-python-common
3
- Version: 1.0.24
3
+ Version: 1.0.25
4
4
  Classifier: Programming Language :: Python :: 3
5
5
  Classifier: Programming Language :: Python :: 3.12
6
6
  Classifier: Programming Language :: Python :: 3.13
7
7
  Classifier: Programming Language :: Python :: 3.14
8
8
  Requires-Python: <3.15,>=3.12
9
9
  Requires-Dist: boto3>=1.41
10
+ Requires-Dist: boto3-stubs>=1.41
10
11
  Requires-Dist: cloudpathlib>=0.21
11
12
  Requires-Dist: lxml>=6.0
12
13
  Requires-Dist: numpy>=2.3
@@ -1,4 +1,5 @@
1
1
  boto3>=1.41
2
+ boto3-stubs>=1.41
2
3
  cloudpathlib>=0.21
3
4
  lxml>=6.0
4
5
  numpy>=2.3