altcodepro-polydb-python 2.5.23__tar.gz → 2.6.0__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.
- {altcodepro_polydb_python-2.5.23/src/altcodepro_polydb_python.egg-info → altcodepro_polydb_python-2.6.0}/PKG-INFO +2 -2
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/pyproject.toml +2 -2
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/requirements-aws.txt +1 -1
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/requirements-azure.txt +1 -1
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/requirements-dev.txt +1 -1
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/requirements-gcp.txt +1 -1
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/requirements-generic.txt +1 -1
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/requirements.txt +1 -3
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0/src/altcodepro_polydb_python.egg-info}/PKG-INFO +2 -2
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/altcodepro_polydb_python.egg-info/SOURCES.txt +7 -1
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/altcodepro_polydb_python.egg-info/requires.txt +1 -1
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/__init__.py +1 -1
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/AzureTableStorageAdapter.py +23 -1
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/PostgreSQLAdapter.py +363 -83
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/databaseFactory.py +23 -0
- altcodepro_polydb_python-2.6.0/src/polydb/read_batch.py +134 -0
- altcodepro_polydb_python-2.6.0/src/polydb/write_behind.py +110 -0
- altcodepro_polydb_python-2.6.0/tests/test_azure_table_key_field_filter.py +55 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_observability.py +2 -1
- altcodepro_polydb_python-2.6.0/tests/test_postgres_lazy_pool.py +95 -0
- altcodepro_polydb_python-2.6.0/tests/test_read_batch.py +213 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_read_projection.py +1 -1
- altcodepro_polydb_python-2.6.0/tests/test_write_behind.py +126 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/LICENSE +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/MANIFEST.in +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/README.md +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/setup.cfg +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/setup.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/altcodepro_polydb_python.egg-info/dependency_links.txt +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/altcodepro_polydb_python.egg-info/top_level.txt +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/PolyDB.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/AWSSecretsManagerAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/AzureBlobStorageAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/AzureFileStorageAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/AzureKeyVaultAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/AzureQueueAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/BlockchainBlobAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/BlockchainFileAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/BlockchainKVAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/BlockchainQueueAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/DynamoDBAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/EFSAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/FirestoreAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/GCPFilestoreAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/GCPPubSubAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/GCPSecretManagerAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/GCPStorageAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/KafkaQueueAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/MongoDBAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/RabbitMQAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/S3Adapter.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/S3CompatibleAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/SQSAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/VaultAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/VercelBlobAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/VercelFileAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/VercelKVAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/VercelQueueAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/__init__.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/advanced_query.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/aio.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/audit/AuditStorage.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/audit/__init__.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/audit/context.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/audit/manager.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/audit/models.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/base/NoSQLKVAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/base/ObjectStorageAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/base/QueueAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/base/SecretsAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/base/SharedFilesAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/base/__init__.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/base/constraints.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/batch.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/cache.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/cloudDatabaseFactory.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/errors.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/json_safe.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/models.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/monitoring.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/multitenancy.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/observability/__init__.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/observability/logging.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/overflow_gc.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/py.typed +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/query.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/registry.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/retry.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/schema.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/security.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/services/__init__.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/services/compliance_service.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/services/security_service.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/types.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/utils.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/validation.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_advanced_query_injection.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_async_api.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_atomic_decrement.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_audit_chain_cutover.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_audit_hmac.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_aws.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_azure.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_azure_keyvault_credential.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_azure_queue_receipt_handle.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_azure_table_empty_filter.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_azure_table_id_property_persisted.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_azure_table_id_return_value_sanitization_mismatch.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_azure_table_large_record_patch_roundtrip.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_azure_table_self_heal.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_azure_table_unpack_entity.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_blockchain.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_blockchain_overflow_guard.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_cloud_factory.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_create_unique_violation.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_factory_wiring.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_field_encryption.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_gcp.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_kafka.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_like_pattern_escaping.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_mongodb.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_monitoring_health.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_multi_engine.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_multitenancy_ddl_injection.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_nosql_constraints.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_nosql_kv_overflow_write_path.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_nosql_operator_injection.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_overflow_gc.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_postgresql.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_postgresql_deserialize_row.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_queue_extend_delay_cancel.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_rabbitmq.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_redis_kv.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_schema_ddl_injection.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_secrets_aws.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_secrets_vault.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_session_vars.py +0 -0
- {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_vercel.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: altcodepro-polydb-python
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.6.0
|
|
4
4
|
Summary: Production-ready multi-cloud database abstraction layer with connection pooling, retry logic, and thread safety
|
|
5
5
|
Author: AltCodePro
|
|
6
6
|
Project-URL: Homepage, https://github.com/altcodepro/polydb-python
|
|
@@ -23,7 +23,7 @@ Classifier: Operating System :: OS Independent
|
|
|
23
23
|
Requires-Python: >=3.11
|
|
24
24
|
Description-Content-Type: text/markdown
|
|
25
25
|
License-File: LICENSE
|
|
26
|
-
Requires-Dist:
|
|
26
|
+
Requires-Dist: psycopg[binary,pool]>=3.2
|
|
27
27
|
Requires-Dist: tenacity>=9.1.4
|
|
28
28
|
Requires-Dist: redis>=6.4.0
|
|
29
29
|
Requires-Dist: python-dotenv>=1.1.1
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "altcodepro-polydb-python"
|
|
7
|
-
version = "2.
|
|
7
|
+
version = "2.6.0"
|
|
8
8
|
description = "Production-ready multi-cloud database abstraction layer with connection pooling, retry logic, and thread safety"
|
|
9
9
|
readme = { file = "README.md", content-type = "text/markdown" }
|
|
10
10
|
requires-python = ">=3.11"
|
|
@@ -52,7 +52,7 @@ classifiers = [
|
|
|
52
52
|
# were never runtime dependencies at all -- packaging/publishing tools,
|
|
53
53
|
# not something this library needs to function.
|
|
54
54
|
dependencies = [
|
|
55
|
-
"
|
|
55
|
+
"psycopg[binary,pool]>=3.2",
|
|
56
56
|
"tenacity>=9.1.4",
|
|
57
57
|
"redis>=6.4.0",
|
|
58
58
|
"python-dotenv>=1.1.1",
|
|
@@ -193,7 +193,6 @@ opentelemetry-instrumentation-dbapi==0.58b0
|
|
|
193
193
|
opentelemetry-instrumentation-django==0.58b0
|
|
194
194
|
opentelemetry-instrumentation-fastapi==0.58b0
|
|
195
195
|
opentelemetry-instrumentation-flask==0.58b0
|
|
196
|
-
opentelemetry-instrumentation-psycopg2==0.58b0
|
|
197
196
|
opentelemetry-instrumentation-requests==0.58b0
|
|
198
197
|
opentelemetry-instrumentation-urllib==0.58b0
|
|
199
198
|
opentelemetry-instrumentation-urllib3==0.58b0
|
|
@@ -216,8 +215,7 @@ propcache==0.4.0
|
|
|
216
215
|
proto-plus==1.26.1
|
|
217
216
|
protobuf==6.32.1
|
|
218
217
|
psutil==7.1.0
|
|
219
|
-
|
|
220
|
-
psycopg2-pool==1.2
|
|
218
|
+
psycopg[binary,pool]==3.3.6
|
|
221
219
|
py-cid==0.5.0
|
|
222
220
|
py-multibase==2.0.0
|
|
223
221
|
py-multicodec==1.0.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: altcodepro-polydb-python
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.6.0
|
|
4
4
|
Summary: Production-ready multi-cloud database abstraction layer with connection pooling, retry logic, and thread safety
|
|
5
5
|
Author: AltCodePro
|
|
6
6
|
Project-URL: Homepage, https://github.com/altcodepro/polydb-python
|
|
@@ -23,7 +23,7 @@ Classifier: Operating System :: OS Independent
|
|
|
23
23
|
Requires-Python: >=3.11
|
|
24
24
|
Description-Content-Type: text/markdown
|
|
25
25
|
License-File: LICENSE
|
|
26
|
-
Requires-Dist:
|
|
26
|
+
Requires-Dist: psycopg[binary,pool]>=3.2
|
|
27
27
|
Requires-Dist: tenacity>=9.1.4
|
|
28
28
|
Requires-Dist: redis>=6.4.0
|
|
29
29
|
Requires-Dist: python-dotenv>=1.1.1
|
|
@@ -30,6 +30,7 @@ src/polydb/multitenancy.py
|
|
|
30
30
|
src/polydb/overflow_gc.py
|
|
31
31
|
src/polydb/py.typed
|
|
32
32
|
src/polydb/query.py
|
|
33
|
+
src/polydb/read_batch.py
|
|
33
34
|
src/polydb/registry.py
|
|
34
35
|
src/polydb/retry.py
|
|
35
36
|
src/polydb/schema.py
|
|
@@ -37,6 +38,7 @@ src/polydb/security.py
|
|
|
37
38
|
src/polydb/types.py
|
|
38
39
|
src/polydb/utils.py
|
|
39
40
|
src/polydb/validation.py
|
|
41
|
+
src/polydb/write_behind.py
|
|
40
42
|
src/polydb/adapters/AWSSecretsManagerAdapter.py
|
|
41
43
|
src/polydb/adapters/AzureBlobStorageAdapter.py
|
|
42
44
|
src/polydb/adapters/AzureFileStorageAdapter.py
|
|
@@ -96,6 +98,7 @@ tests/test_azure_queue_receipt_handle.py
|
|
|
96
98
|
tests/test_azure_table_empty_filter.py
|
|
97
99
|
tests/test_azure_table_id_property_persisted.py
|
|
98
100
|
tests/test_azure_table_id_return_value_sanitization_mismatch.py
|
|
101
|
+
tests/test_azure_table_key_field_filter.py
|
|
99
102
|
tests/test_azure_table_large_record_patch_roundtrip.py
|
|
100
103
|
tests/test_azure_table_self_heal.py
|
|
101
104
|
tests/test_azure_table_unpack_entity.py
|
|
@@ -117,14 +120,17 @@ tests/test_nosql_kv_overflow_write_path.py
|
|
|
117
120
|
tests/test_nosql_operator_injection.py
|
|
118
121
|
tests/test_observability.py
|
|
119
122
|
tests/test_overflow_gc.py
|
|
123
|
+
tests/test_postgres_lazy_pool.py
|
|
120
124
|
tests/test_postgresql.py
|
|
121
125
|
tests/test_postgresql_deserialize_row.py
|
|
122
126
|
tests/test_queue_extend_delay_cancel.py
|
|
123
127
|
tests/test_rabbitmq.py
|
|
128
|
+
tests/test_read_batch.py
|
|
124
129
|
tests/test_read_projection.py
|
|
125
130
|
tests/test_redis_kv.py
|
|
126
131
|
tests/test_schema_ddl_injection.py
|
|
127
132
|
tests/test_secrets_aws.py
|
|
128
133
|
tests/test_secrets_vault.py
|
|
129
134
|
tests/test_session_vars.py
|
|
130
|
-
tests/test_vercel.py
|
|
135
|
+
tests/test_vercel.py
|
|
136
|
+
tests/test_write_behind.py
|
|
@@ -4,7 +4,7 @@ PolyDB - Enterprise Cloud-Independent Database Abstraction
|
|
|
4
4
|
Full LINQ support, field-level audit, cache, soft delete, overflow storage
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
|
-
__version__ = "2.5.
|
|
7
|
+
__version__ = "2.5.24"
|
|
8
8
|
|
|
9
9
|
from .aio import AsyncDatabaseFactory, AsyncPolyDB
|
|
10
10
|
from .audit.context import AuditContext
|
|
@@ -750,11 +750,33 @@ class AzureTableStorageAdapter(NoSQLKVAdapter):
|
|
|
750
750
|
|
|
751
751
|
eff_filters = dict(filters or {})
|
|
752
752
|
parts: List[str] = []
|
|
753
|
+
# An equality on the model's own pk/rk FIELD is a key lookup: filtering the same value as an ordinary
|
|
754
|
+
# property made Azure scan the whole table (1.2s for one project's artifacts). Only valid when the key is
|
|
755
|
+
# built straight from that field (no partition_config template), which is how _get_pk_rk derives it.
|
|
756
|
+
pk_field = rk_field = None
|
|
757
|
+
declared = getattr(model, "__polydb__", None) or {}
|
|
758
|
+
if not getattr(self, "partition_config", None):
|
|
759
|
+
# Only fields the model declares itself; the defaults (tenant_id / id) are left as property filters
|
|
760
|
+
# so rows written before a model declared its keys keep matching.
|
|
761
|
+
pk_field = declared.get("pk_field") or None
|
|
762
|
+
rk_field = declared.get("rk_field") or None
|
|
753
763
|
for orig_k, orig_v in eff_filters.items():
|
|
754
764
|
if orig_v is None:
|
|
755
765
|
continue
|
|
756
766
|
|
|
757
|
-
if
|
|
767
|
+
if (
|
|
768
|
+
(pk_field or rk_field)
|
|
769
|
+
and isinstance(orig_v, (str, int))
|
|
770
|
+
and not isinstance(orig_v, bool)
|
|
771
|
+
and orig_k in (pk_field, rk_field)
|
|
772
|
+
):
|
|
773
|
+
# Keys are sanitized on write, so the key filter uses the sanitized value; the original
|
|
774
|
+
# property filter below is kept too because sanitizing can map two raw values to one key.
|
|
775
|
+
key_name = "PartitionKey" if orig_k == pk_field else "RowKey"
|
|
776
|
+
safe = self._sanitize_pk_rk(orig_v).replace("'", "''")
|
|
777
|
+
parts.append(f"{key_name} eq '{safe}'")
|
|
778
|
+
sk = self._sanitize_prop_name(orig_k)
|
|
779
|
+
elif orig_k in ("partition_key", "PartitionKey"):
|
|
758
780
|
sk = "PartitionKey"
|
|
759
781
|
elif orig_k in ("row_key", "RowKey"):
|
|
760
782
|
sk = "RowKey"
|