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.
- {python3_commons-0.15.10 → python3_commons-0.15.12}/.pre-commit-config.yaml +2 -2
- {python3_commons-0.15.10 → python3_commons-0.15.12}/PKG-INFO +4 -3
- {python3_commons-0.15.10 → python3_commons-0.15.12}/pyproject.toml +3 -2
- {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons.egg-info/PKG-INFO +4 -3
- {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons.egg-info/SOURCES.txt +1 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons.egg-info/requires.txt +3 -2
- python3_commons-0.15.12/tests/integration/test_osc.py +45 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/uv.lock +217 -175
- {python3_commons-0.15.10 → python3_commons-0.15.12}/.coveragerc +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/.devcontainer/Dockerfile +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/.devcontainer/devcontainer.json +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/.devcontainer/docker-compose.yml +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/.env_template +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/.github/workflows/checks.yml +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/.github/workflows/python-publish.yaml +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/.github/workflows/release-on-tag-push.yml +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/.gitignore +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/.python-version +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/AUTHORS.rst +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/CHANGELOG.rst +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/LICENSE +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/README.md +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/README.rst +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/docs/Makefile +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/docs/_static/.gitignore +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/docs/authors.rst +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/docs/changelog.rst +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/docs/conf.py +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/docs/index.rst +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/docs/license.rst +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/setup.cfg +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/__init__.py +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/api_client.py +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/async_functools.py +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/audit.py +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/auth.py +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/cache.py +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/conf.py +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/db/__init__.py +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/db/helpers.py +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/db/models/__init__.py +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/db/models/auth.py +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/db/models/common.py +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/db/models/rbac.py +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/db/models/users.py +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/exceptions.py +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/fs.py +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/generators.py +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/helpers.py +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/log/__init__.py +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/log/filters.py +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/log/formatters.py +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/object_storage.py +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/permissions.py +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/serializers/__init__.py +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/serializers/common.py +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/serializers/json.py +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/serializers/msgpack.py +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons/serializers/msgspec.py +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons.egg-info/dependency_links.txt +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons.egg-info/top_level.txt +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/tests/__init__.py +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/tests/integration/__init__.py +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/tests/integration/test_cache.py +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/tests/unit/__init__.py +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/tests/unit/conftest.py +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/tests/unit/log/__init__.py +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/tests/unit/log/test_formatters.py +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/tests/unit/test_async_functools.py +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/tests/unit/test_audit.py +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/tests/unit/test_helpers.py +0 -0
- {python3_commons-0.15.10 → python3_commons-0.15.12}/tests/unit/test_msgpack.py +0 -0
- {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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
{python3_commons-0.15.10 → python3_commons-0.15.12}/src/python3_commons.egg-info/requires.txt
RENAMED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
aiobotocore~=3.2.
|
|
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.
|
|
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'
|