altcodepro-polydb-python 2.5.24__tar.gz → 2.6.1__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.24/src/altcodepro_polydb_python.egg-info → altcodepro_polydb_python-2.6.1}/PKG-INFO +2 -2
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/pyproject.toml +2 -2
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/requirements-aws.txt +1 -1
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/requirements-azure.txt +1 -1
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/requirements-dev.txt +1 -1
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/requirements-gcp.txt +1 -1
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/requirements-generic.txt +1 -1
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/requirements.txt +1 -3
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1/src/altcodepro_polydb_python.egg-info}/PKG-INFO +2 -2
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/altcodepro_polydb_python.egg-info/SOURCES.txt +7 -1
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/altcodepro_polydb_python.egg-info/requires.txt +1 -1
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/adapters/AzureTableStorageAdapter.py +28 -16
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/adapters/PostgreSQLAdapter.py +363 -83
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/databaseFactory.py +23 -0
- altcodepro_polydb_python-2.6.1/src/polydb/read_batch.py +134 -0
- altcodepro_polydb_python-2.6.1/src/polydb/write_behind.py +110 -0
- altcodepro_polydb_python-2.6.1/tests/test_azure_table_list_filter.py +53 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/tests/test_observability.py +2 -1
- altcodepro_polydb_python-2.6.1/tests/test_postgres_lazy_pool.py +95 -0
- altcodepro_polydb_python-2.6.1/tests/test_read_batch.py +213 -0
- altcodepro_polydb_python-2.6.1/tests/test_write_behind.py +126 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/LICENSE +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/MANIFEST.in +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/README.md +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/setup.cfg +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/setup.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/altcodepro_polydb_python.egg-info/dependency_links.txt +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/altcodepro_polydb_python.egg-info/top_level.txt +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/PolyDB.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/__init__.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/adapters/AWSSecretsManagerAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/adapters/AzureBlobStorageAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/adapters/AzureFileStorageAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/adapters/AzureKeyVaultAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/adapters/AzureQueueAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/adapters/BlockchainBlobAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/adapters/BlockchainFileAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/adapters/BlockchainKVAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/adapters/BlockchainQueueAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/adapters/DynamoDBAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/adapters/EFSAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/adapters/FirestoreAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/adapters/GCPFilestoreAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/adapters/GCPPubSubAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/adapters/GCPSecretManagerAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/adapters/GCPStorageAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/adapters/KafkaQueueAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/adapters/MongoDBAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/adapters/RabbitMQAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/adapters/S3Adapter.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/adapters/S3CompatibleAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/adapters/SQSAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/adapters/VaultAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/adapters/VercelBlobAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/adapters/VercelFileAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/adapters/VercelKVAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/adapters/VercelQueueAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/adapters/__init__.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/advanced_query.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/aio.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/audit/AuditStorage.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/audit/__init__.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/audit/context.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/audit/manager.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/audit/models.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/base/NoSQLKVAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/base/ObjectStorageAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/base/QueueAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/base/SecretsAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/base/SharedFilesAdapter.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/base/__init__.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/base/constraints.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/batch.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/cache.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/cloudDatabaseFactory.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/errors.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/json_safe.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/models.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/monitoring.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/multitenancy.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/observability/__init__.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/observability/logging.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/overflow_gc.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/py.typed +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/query.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/registry.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/retry.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/schema.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/security.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/services/__init__.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/services/compliance_service.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/services/security_service.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/types.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/utils.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/src/polydb/validation.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/tests/test_advanced_query_injection.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/tests/test_async_api.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/tests/test_atomic_decrement.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/tests/test_audit_chain_cutover.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/tests/test_audit_hmac.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/tests/test_aws.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/tests/test_azure.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/tests/test_azure_keyvault_credential.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/tests/test_azure_queue_receipt_handle.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/tests/test_azure_table_empty_filter.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/tests/test_azure_table_id_property_persisted.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/tests/test_azure_table_id_return_value_sanitization_mismatch.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/tests/test_azure_table_key_field_filter.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/tests/test_azure_table_large_record_patch_roundtrip.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/tests/test_azure_table_self_heal.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/tests/test_azure_table_unpack_entity.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/tests/test_blockchain.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/tests/test_blockchain_overflow_guard.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/tests/test_cloud_factory.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/tests/test_create_unique_violation.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/tests/test_factory_wiring.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/tests/test_field_encryption.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/tests/test_gcp.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/tests/test_kafka.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/tests/test_like_pattern_escaping.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/tests/test_mongodb.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/tests/test_monitoring_health.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/tests/test_multi_engine.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/tests/test_multitenancy_ddl_injection.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/tests/test_nosql_constraints.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/tests/test_nosql_kv_overflow_write_path.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/tests/test_nosql_operator_injection.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/tests/test_overflow_gc.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/tests/test_postgresql.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/tests/test_postgresql_deserialize_row.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/tests/test_queue_extend_delay_cancel.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/tests/test_rabbitmq.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/tests/test_read_projection.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/tests/test_redis_kv.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/tests/test_schema_ddl_injection.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/tests/test_secrets_aws.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/tests/test_secrets_vault.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/tests/test_session_vars.py +0 -0
- {altcodepro_polydb_python-2.5.24 → altcodepro_polydb_python-2.6.1}/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.1
|
|
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.1"
|
|
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.1
|
|
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
|
|
@@ -98,6 +100,7 @@ tests/test_azure_table_id_property_persisted.py
|
|
|
98
100
|
tests/test_azure_table_id_return_value_sanitization_mismatch.py
|
|
99
101
|
tests/test_azure_table_key_field_filter.py
|
|
100
102
|
tests/test_azure_table_large_record_patch_roundtrip.py
|
|
103
|
+
tests/test_azure_table_list_filter.py
|
|
101
104
|
tests/test_azure_table_self_heal.py
|
|
102
105
|
tests/test_azure_table_unpack_entity.py
|
|
103
106
|
tests/test_blockchain.py
|
|
@@ -118,14 +121,17 @@ tests/test_nosql_kv_overflow_write_path.py
|
|
|
118
121
|
tests/test_nosql_operator_injection.py
|
|
119
122
|
tests/test_observability.py
|
|
120
123
|
tests/test_overflow_gc.py
|
|
124
|
+
tests/test_postgres_lazy_pool.py
|
|
121
125
|
tests/test_postgresql.py
|
|
122
126
|
tests/test_postgresql_deserialize_row.py
|
|
123
127
|
tests/test_queue_extend_delay_cancel.py
|
|
124
128
|
tests/test_rabbitmq.py
|
|
129
|
+
tests/test_read_batch.py
|
|
125
130
|
tests/test_read_projection.py
|
|
126
131
|
tests/test_redis_kv.py
|
|
127
132
|
tests/test_schema_ddl_injection.py
|
|
128
133
|
tests/test_secrets_aws.py
|
|
129
134
|
tests/test_secrets_vault.py
|
|
130
135
|
tests/test_session_vars.py
|
|
131
|
-
tests/test_vercel.py
|
|
136
|
+
tests/test_vercel.py
|
|
137
|
+
tests/test_write_behind.py
|
|
@@ -785,22 +785,34 @@ class AzureTableStorageAdapter(NoSQLKVAdapter):
|
|
|
785
785
|
self._sanitize_prop_name(orig_k) if orig_k != _MODEL_FIELD else _MODEL_FIELD
|
|
786
786
|
)
|
|
787
787
|
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
788
|
+
def _eq(prop: str, raw: Any) -> str:
|
|
789
|
+
ev = self._encode_value(raw)
|
|
790
|
+
if ev is None:
|
|
791
|
+
return f"{prop} eq null"
|
|
792
|
+
if isinstance(ev, bool):
|
|
793
|
+
return f"{prop} eq {str(ev).lower()}"
|
|
794
|
+
if isinstance(ev, (int, float)):
|
|
795
|
+
return f"{prop} eq {ev}"
|
|
796
|
+
if isinstance(ev, datetime):
|
|
797
|
+
iso = ev.isoformat()
|
|
798
|
+
if not iso.endswith("Z"):
|
|
799
|
+
iso = iso + "Z"
|
|
800
|
+
return f"{prop} eq datetime'{iso}'"
|
|
801
|
+
return f"{prop} eq '{str(ev).replace(chr(39), chr(39) * 2)}'"
|
|
802
|
+
|
|
803
|
+
if isinstance(orig_v, (list, tuple, set, frozenset)) and all(
|
|
804
|
+
isinstance(x, (str, int, float, bool)) for x in orig_v
|
|
805
|
+
):
|
|
806
|
+
# A list of plain values means "equals any of them" (the SQL adapters already read it that way). Sent as
|
|
807
|
+
# one JSON-encoded string it matched no row at all, so every `field: [a, b]` lookup silently returned [].
|
|
808
|
+
if not orig_v:
|
|
809
|
+
return [] # IN () matches nothing
|
|
810
|
+
if len(orig_v) > 100:
|
|
811
|
+
raise NoSQLError("Azure Table filter: at most 100 values in a list")
|
|
812
|
+
parts.append("(" + " or ".join(_eq(sk, x) for x in orig_v) + ")")
|
|
813
|
+
continue
|
|
814
|
+
|
|
815
|
+
parts.append(_eq(sk, orig_v))
|
|
804
816
|
|
|
805
817
|
# Empty-filter contract: if the caller passed filter keys but every
|
|
806
818
|
# condition dropped out (e.g. all values None/unresolvable), the query
|