python3-commons 0.15.10__tar.gz → 0.15.12__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 (73) hide show
  1. {python3_commons-0.15.10 → python3_commons-0.15.12}/.pre-commit-config.yaml +2 -2
  2. {python3_commons-0.15.10 → python3_commons-0.15.12}/PKG-INFO +4 -3
  3. {python3_commons-0.15.10 → python3_commons-0.15.12}/pyproject.toml +3 -2
  4. {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons.egg-info/PKG-INFO +4 -3
  5. {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons.egg-info/SOURCES.txt +1 -0
  6. {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons.egg-info/requires.txt +3 -2
  7. python3_commons-0.15.12/tests/integration/test_osc.py +45 -0
  8. {python3_commons-0.15.10 → python3_commons-0.15.12}/uv.lock +217 -175
  9. {python3_commons-0.15.10 → python3_commons-0.15.12}/.coveragerc +0 -0
  10. {python3_commons-0.15.10 → python3_commons-0.15.12}/.devcontainer/Dockerfile +0 -0
  11. {python3_commons-0.15.10 → python3_commons-0.15.12}/.devcontainer/devcontainer.json +0 -0
  12. {python3_commons-0.15.10 → python3_commons-0.15.12}/.devcontainer/docker-compose.yml +0 -0
  13. {python3_commons-0.15.10 → python3_commons-0.15.12}/.env_template +0 -0
  14. {python3_commons-0.15.10 → python3_commons-0.15.12}/.github/workflows/checks.yml +0 -0
  15. {python3_commons-0.15.10 → python3_commons-0.15.12}/.github/workflows/python-publish.yaml +0 -0
  16. {python3_commons-0.15.10 → python3_commons-0.15.12}/.github/workflows/release-on-tag-push.yml +0 -0
  17. {python3_commons-0.15.10 → python3_commons-0.15.12}/.gitignore +0 -0
  18. {python3_commons-0.15.10 → python3_commons-0.15.12}/.python-version +0 -0
  19. {python3_commons-0.15.10 → python3_commons-0.15.12}/AUTHORS.rst +0 -0
  20. {python3_commons-0.15.10 → python3_commons-0.15.12}/CHANGELOG.rst +0 -0
  21. {python3_commons-0.15.10 → python3_commons-0.15.12}/LICENSE +0 -0
  22. {python3_commons-0.15.10 → python3_commons-0.15.12}/README.md +0 -0
  23. {python3_commons-0.15.10 → python3_commons-0.15.12}/README.rst +0 -0
  24. {python3_commons-0.15.10 → python3_commons-0.15.12}/docs/Makefile +0 -0
  25. {python3_commons-0.15.10 → python3_commons-0.15.12}/docs/_static/.gitignore +0 -0
  26. {python3_commons-0.15.10 → python3_commons-0.15.12}/docs/authors.rst +0 -0
  27. {python3_commons-0.15.10 → python3_commons-0.15.12}/docs/changelog.rst +0 -0
  28. {python3_commons-0.15.10 → python3_commons-0.15.12}/docs/conf.py +0 -0
  29. {python3_commons-0.15.10 → python3_commons-0.15.12}/docs/index.rst +0 -0
  30. {python3_commons-0.15.10 → python3_commons-0.15.12}/docs/license.rst +0 -0
  31. {python3_commons-0.15.10 → python3_commons-0.15.12}/setup.cfg +0 -0
  32. {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/__init__.py +0 -0
  33. {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/api_client.py +0 -0
  34. {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/async_functools.py +0 -0
  35. {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/audit.py +0 -0
  36. {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/auth.py +0 -0
  37. {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/cache.py +0 -0
  38. {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/conf.py +0 -0
  39. {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/db/__init__.py +0 -0
  40. {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/db/helpers.py +0 -0
  41. {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/db/models/__init__.py +0 -0
  42. {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/db/models/auth.py +0 -0
  43. {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/db/models/common.py +0 -0
  44. {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/db/models/rbac.py +0 -0
  45. {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/db/models/users.py +0 -0
  46. {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/exceptions.py +0 -0
  47. {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/fs.py +0 -0
  48. {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/generators.py +0 -0
  49. {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/helpers.py +0 -0
  50. {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/log/__init__.py +0 -0
  51. {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/log/filters.py +0 -0
  52. {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/log/formatters.py +0 -0
  53. {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/object_storage.py +0 -0
  54. {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/permissions.py +0 -0
  55. {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/serializers/__init__.py +0 -0
  56. {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/serializers/common.py +0 -0
  57. {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/serializers/json.py +0 -0
  58. {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/serializers/msgpack.py +0 -0
  59. {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/serializers/msgspec.py +0 -0
  60. {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons.egg-info/dependency_links.txt +0 -0
  61. {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons.egg-info/top_level.txt +0 -0
  62. {python3_commons-0.15.10 → python3_commons-0.15.12}/tests/__init__.py +0 -0
  63. {python3_commons-0.15.10 → python3_commons-0.15.12}/tests/integration/__init__.py +0 -0
  64. {python3_commons-0.15.10 → python3_commons-0.15.12}/tests/integration/test_cache.py +0 -0
  65. {python3_commons-0.15.10 → python3_commons-0.15.12}/tests/unit/__init__.py +0 -0
  66. {python3_commons-0.15.10 → python3_commons-0.15.12}/tests/unit/conftest.py +0 -0
  67. {python3_commons-0.15.10 → python3_commons-0.15.12}/tests/unit/log/__init__.py +0 -0
  68. {python3_commons-0.15.10 → python3_commons-0.15.12}/tests/unit/log/test_formatters.py +0 -0
  69. {python3_commons-0.15.10 → python3_commons-0.15.12}/tests/unit/test_async_functools.py +0 -0
  70. {python3_commons-0.15.10 → python3_commons-0.15.12}/tests/unit/test_audit.py +0 -0
  71. {python3_commons-0.15.10 → python3_commons-0.15.12}/tests/unit/test_helpers.py +0 -0
  72. {python3_commons-0.15.10 → python3_commons-0.15.12}/tests/unit/test_msgpack.py +0 -0
  73. {python3_commons-0.15.10 → python3_commons-0.15.12}/tests/unit/test_msgspec.py +0 -0
@@ -1,12 +1,12 @@
1
1
  repos:
2
2
  - repo: https://github.com/astral-sh/uv-pre-commit
3
- rev: 0.10.5
3
+ rev: 0.10.8
4
4
  hooks:
5
5
  - id: uv-lock
6
6
  # - id: uv-export
7
7
 
8
8
  - repo: https://github.com/astral-sh/ruff-pre-commit
9
- rev: v0.15.2
9
+ rev: v0.15.5
10
10
  hooks:
11
11
  # Run the linter.
12
12
  - id: ruff-check
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python3-commons
3
- Version: 0.15.10
3
+ Version: 0.15.12
4
4
  Summary: Re-usable Python3 code
5
5
  Author-email: Oleg Korsak <kamikaze.is.waiting.you@gmail.com>
6
6
  License-Expression: GPL-3.0
@@ -12,14 +12,15 @@ Requires-Python: <3.15.0,>=3.14.3
12
12
  Description-Content-Type: text/x-rst
13
13
  License-File: LICENSE
14
14
  License-File: AUTHORS.rst
15
- Requires-Dist: aiobotocore~=3.2.0
15
+ Requires-Dist: aiobotocore~=3.2.1
16
16
  Requires-Dist: aiohttp[speedups]<3.15.0,>=3.13.3
17
17
  Requires-Dist: asyncpg~=0.31.0
18
18
  Requires-Dist: lxml~=6.0.2
19
19
  Requires-Dist: msgpack~=1.1.2
20
20
  Requires-Dist: msgspec==0.20.0
21
+ Requires-Dist: object-storage-client==0.0.14
21
22
  Requires-Dist: pydantic-settings~=2.13.1
22
- Requires-Dist: SQLAlchemy[asyncio]~=2.0.46
23
+ Requires-Dist: SQLAlchemy[asyncio]~=2.0.48
23
24
  Requires-Dist: valkey[libvalkey]~=6.1.1
24
25
  Requires-Dist: zeep~=4.3.2
25
26
  Dynamic: license-file
@@ -18,14 +18,15 @@ classifiers = [
18
18
  keywords = []
19
19
  requires-python = ">=3.14.3,<3.15.0"
20
20
  dependencies = [
21
- "aiobotocore~=3.2.0",
21
+ "aiobotocore~=3.2.1",
22
22
  "aiohttp[speedups]>=3.13.3,<3.15.0",
23
23
  "asyncpg~=0.31.0",
24
24
  "lxml~=6.0.2",
25
25
  "msgpack~=1.1.2",
26
26
  "msgspec==0.20.0",
27
+ "object-storage-client==0.0.14",
27
28
  "pydantic-settings~=2.13.1",
28
- "SQLAlchemy[asyncio]~=2.0.46",
29
+ "SQLAlchemy[asyncio]~=2.0.48",
29
30
  "valkey[libvalkey]~=6.1.1",
30
31
  "zeep~=4.3.2"
31
32
  ]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python3-commons
3
- Version: 0.15.10
3
+ Version: 0.15.12
4
4
  Summary: Re-usable Python3 code
5
5
  Author-email: Oleg Korsak <kamikaze.is.waiting.you@gmail.com>
6
6
  License-Expression: GPL-3.0
@@ -12,14 +12,15 @@ Requires-Python: <3.15.0,>=3.14.3
12
12
  Description-Content-Type: text/x-rst
13
13
  License-File: LICENSE
14
14
  License-File: AUTHORS.rst
15
- Requires-Dist: aiobotocore~=3.2.0
15
+ Requires-Dist: aiobotocore~=3.2.1
16
16
  Requires-Dist: aiohttp[speedups]<3.15.0,>=3.13.3
17
17
  Requires-Dist: asyncpg~=0.31.0
18
18
  Requires-Dist: lxml~=6.0.2
19
19
  Requires-Dist: msgpack~=1.1.2
20
20
  Requires-Dist: msgspec==0.20.0
21
+ Requires-Dist: object-storage-client==0.0.14
21
22
  Requires-Dist: pydantic-settings~=2.13.1
22
- Requires-Dist: SQLAlchemy[asyncio]~=2.0.46
23
+ Requires-Dist: SQLAlchemy[asyncio]~=2.0.48
23
24
  Requires-Dist: valkey[libvalkey]~=6.1.1
24
25
  Requires-Dist: zeep~=4.3.2
25
26
  Dynamic: license-file
@@ -59,6 +59,7 @@ src/python3_commons/serializers/msgspec.py
59
59
  tests/__init__.py
60
60
  tests/integration/__init__.py
61
61
  tests/integration/test_cache.py
62
+ tests/integration/test_osc.py
62
63
  tests/unit/__init__.py
63
64
  tests/unit/conftest.py
64
65
  tests/unit/test_async_functools.py
@@ -1,10 +1,11 @@
1
- aiobotocore~=3.2.0
1
+ aiobotocore~=3.2.1
2
2
  aiohttp[speedups]<3.15.0,>=3.13.3
3
3
  asyncpg~=0.31.0
4
4
  lxml~=6.0.2
5
5
  msgpack~=1.1.2
6
6
  msgspec==0.20.0
7
+ object-storage-client==0.0.14
7
8
  pydantic-settings~=2.13.1
8
- SQLAlchemy[asyncio]~=2.0.46
9
+ SQLAlchemy[asyncio]~=2.0.48
9
10
  valkey[libvalkey]~=6.1.1
10
11
  zeep~=4.3.2
@@ -0,0 +1,45 @@
1
+ import os
2
+
3
+ import pytest
4
+ from object_storage_client import ObjectStorageClient
5
+
6
+
7
+ @pytest.mark.functional
8
+ @pytest.mark.asyncio
9
+ async def test_s3_object_lifecycle():
10
+ bucket = os.environ.get('S3_BUCKET')
11
+ assert bucket is not None, 'S3_BUCKET environment variable must be set to run this test'
12
+
13
+ # Ensure bucket doesn't end with a slash for consistent joining
14
+ bucket = bucket.rstrip('/')
15
+ bucket_url = f's3://{bucket}/'
16
+
17
+ client = ObjectStorageClient()
18
+
19
+ # 1. Create a file and put it to storage
20
+ file_url = f'{bucket_url}/test_file_s3.txt'
21
+ content = b'Hello, S3 Object Storage!'
22
+ await client.put(file_url, content)
23
+
24
+ # 2. List it in bucket
25
+ listing = await client.list(bucket_url)
26
+ assert 'test_file_s3.txt' in listing, 'File should be in the list'
27
+
28
+ # 3. Move it
29
+ moved_file_url = f'{bucket_url}/moved_test_file_s3.txt'
30
+ await client.move_object(file_url, moved_file_url)
31
+
32
+ # 4. List again to check the movement
33
+ list_after_move = await client.list(bucket_url)
34
+
35
+ assert 'test_file_s3.txt' not in list_after_move, 'Old file should NOT be in the list'
36
+
37
+ assert 'moved_test_file_s3.txt' in list_after_move, 'Moved file should be in the list'
38
+
39
+ # 5. Delete
40
+ await client.delete(moved_file_url)
41
+
42
+ # 6. List again to check the deletion
43
+ list_after_delete = await client.list(bucket_url)
44
+
45
+ assert 'moved_test_file_s3.txt' not in list_after_delete, 'Deleted file should NOT be in the list'