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.
Files changed (138) hide show
  1. {altcodepro_polydb_python-2.5.23/src/altcodepro_polydb_python.egg-info → altcodepro_polydb_python-2.6.0}/PKG-INFO +2 -2
  2. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/pyproject.toml +2 -2
  3. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/requirements-aws.txt +1 -1
  4. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/requirements-azure.txt +1 -1
  5. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/requirements-dev.txt +1 -1
  6. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/requirements-gcp.txt +1 -1
  7. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/requirements-generic.txt +1 -1
  8. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/requirements.txt +1 -3
  9. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0/src/altcodepro_polydb_python.egg-info}/PKG-INFO +2 -2
  10. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/altcodepro_polydb_python.egg-info/SOURCES.txt +7 -1
  11. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/altcodepro_polydb_python.egg-info/requires.txt +1 -1
  12. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/__init__.py +1 -1
  13. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/AzureTableStorageAdapter.py +23 -1
  14. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/PostgreSQLAdapter.py +363 -83
  15. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/databaseFactory.py +23 -0
  16. altcodepro_polydb_python-2.6.0/src/polydb/read_batch.py +134 -0
  17. altcodepro_polydb_python-2.6.0/src/polydb/write_behind.py +110 -0
  18. altcodepro_polydb_python-2.6.0/tests/test_azure_table_key_field_filter.py +55 -0
  19. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_observability.py +2 -1
  20. altcodepro_polydb_python-2.6.0/tests/test_postgres_lazy_pool.py +95 -0
  21. altcodepro_polydb_python-2.6.0/tests/test_read_batch.py +213 -0
  22. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_read_projection.py +1 -1
  23. altcodepro_polydb_python-2.6.0/tests/test_write_behind.py +126 -0
  24. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/LICENSE +0 -0
  25. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/MANIFEST.in +0 -0
  26. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/README.md +0 -0
  27. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/setup.cfg +0 -0
  28. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/setup.py +0 -0
  29. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/altcodepro_polydb_python.egg-info/dependency_links.txt +0 -0
  30. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/altcodepro_polydb_python.egg-info/top_level.txt +0 -0
  31. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/PolyDB.py +0 -0
  32. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/AWSSecretsManagerAdapter.py +0 -0
  33. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/AzureBlobStorageAdapter.py +0 -0
  34. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/AzureFileStorageAdapter.py +0 -0
  35. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/AzureKeyVaultAdapter.py +0 -0
  36. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/AzureQueueAdapter.py +0 -0
  37. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/BlockchainBlobAdapter.py +0 -0
  38. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/BlockchainFileAdapter.py +0 -0
  39. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/BlockchainKVAdapter.py +0 -0
  40. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/BlockchainQueueAdapter.py +0 -0
  41. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/DynamoDBAdapter.py +0 -0
  42. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/EFSAdapter.py +0 -0
  43. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/FirestoreAdapter.py +0 -0
  44. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/GCPFilestoreAdapter.py +0 -0
  45. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/GCPPubSubAdapter.py +0 -0
  46. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/GCPSecretManagerAdapter.py +0 -0
  47. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/GCPStorageAdapter.py +0 -0
  48. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/KafkaQueueAdapter.py +0 -0
  49. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/MongoDBAdapter.py +0 -0
  50. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/RabbitMQAdapter.py +0 -0
  51. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/S3Adapter.py +0 -0
  52. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/S3CompatibleAdapter.py +0 -0
  53. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/SQSAdapter.py +0 -0
  54. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/VaultAdapter.py +0 -0
  55. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/VercelBlobAdapter.py +0 -0
  56. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/VercelFileAdapter.py +0 -0
  57. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/VercelKVAdapter.py +0 -0
  58. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/VercelQueueAdapter.py +0 -0
  59. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/adapters/__init__.py +0 -0
  60. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/advanced_query.py +0 -0
  61. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/aio.py +0 -0
  62. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/audit/AuditStorage.py +0 -0
  63. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/audit/__init__.py +0 -0
  64. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/audit/context.py +0 -0
  65. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/audit/manager.py +0 -0
  66. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/audit/models.py +0 -0
  67. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/base/NoSQLKVAdapter.py +0 -0
  68. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/base/ObjectStorageAdapter.py +0 -0
  69. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/base/QueueAdapter.py +0 -0
  70. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/base/SecretsAdapter.py +0 -0
  71. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/base/SharedFilesAdapter.py +0 -0
  72. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/base/__init__.py +0 -0
  73. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/base/constraints.py +0 -0
  74. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/batch.py +0 -0
  75. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/cache.py +0 -0
  76. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/cloudDatabaseFactory.py +0 -0
  77. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/errors.py +0 -0
  78. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/json_safe.py +0 -0
  79. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/models.py +0 -0
  80. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/monitoring.py +0 -0
  81. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/multitenancy.py +0 -0
  82. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/observability/__init__.py +0 -0
  83. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/observability/logging.py +0 -0
  84. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/overflow_gc.py +0 -0
  85. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/py.typed +0 -0
  86. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/query.py +0 -0
  87. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/registry.py +0 -0
  88. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/retry.py +0 -0
  89. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/schema.py +0 -0
  90. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/security.py +0 -0
  91. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/services/__init__.py +0 -0
  92. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/services/compliance_service.py +0 -0
  93. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/services/security_service.py +0 -0
  94. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/types.py +0 -0
  95. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/utils.py +0 -0
  96. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/src/polydb/validation.py +0 -0
  97. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_advanced_query_injection.py +0 -0
  98. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_async_api.py +0 -0
  99. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_atomic_decrement.py +0 -0
  100. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_audit_chain_cutover.py +0 -0
  101. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_audit_hmac.py +0 -0
  102. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_aws.py +0 -0
  103. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_azure.py +0 -0
  104. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_azure_keyvault_credential.py +0 -0
  105. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_azure_queue_receipt_handle.py +0 -0
  106. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_azure_table_empty_filter.py +0 -0
  107. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_azure_table_id_property_persisted.py +0 -0
  108. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_azure_table_id_return_value_sanitization_mismatch.py +0 -0
  109. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_azure_table_large_record_patch_roundtrip.py +0 -0
  110. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_azure_table_self_heal.py +0 -0
  111. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_azure_table_unpack_entity.py +0 -0
  112. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_blockchain.py +0 -0
  113. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_blockchain_overflow_guard.py +0 -0
  114. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_cloud_factory.py +0 -0
  115. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_create_unique_violation.py +0 -0
  116. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_factory_wiring.py +0 -0
  117. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_field_encryption.py +0 -0
  118. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_gcp.py +0 -0
  119. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_kafka.py +0 -0
  120. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_like_pattern_escaping.py +0 -0
  121. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_mongodb.py +0 -0
  122. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_monitoring_health.py +0 -0
  123. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_multi_engine.py +0 -0
  124. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_multitenancy_ddl_injection.py +0 -0
  125. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_nosql_constraints.py +0 -0
  126. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_nosql_kv_overflow_write_path.py +0 -0
  127. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_nosql_operator_injection.py +0 -0
  128. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_overflow_gc.py +0 -0
  129. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_postgresql.py +0 -0
  130. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_postgresql_deserialize_row.py +0 -0
  131. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_queue_extend_delay_cancel.py +0 -0
  132. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_rabbitmq.py +0 -0
  133. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_redis_kv.py +0 -0
  134. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_schema_ddl_injection.py +0 -0
  135. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_secrets_aws.py +0 -0
  136. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_secrets_vault.py +0 -0
  137. {altcodepro_polydb_python-2.5.23 → altcodepro_polydb_python-2.6.0}/tests/test_session_vars.py +0 -0
  138. {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.5.23
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: psycopg2-binary>=2.9.11
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.5.23"
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
- "psycopg2-binary>=2.9.11",
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",
@@ -3,4 +3,4 @@
3
3
 
4
4
  boto3>=1.34.0 # DynamoDB, S3, SQS
5
5
  botocore>=1.34.0 # AWS SDK core
6
- psycopg2-binary>=2.9.11
6
+ psycopg[binary,pool]>=3.2
@@ -6,4 +6,4 @@ azure-data-tables>=12.7.0
6
6
  azure-storage-blob>=12.28.0
7
7
  azure-storage-file-share>=12.24.0
8
8
  azure-storage-queue>=12.15.0
9
- psycopg2-binary>=2.9.11
9
+ psycopg[binary,pool]>=3.2
@@ -14,7 +14,7 @@ mypy>=1.8.0
14
14
  isort>=5.13.0
15
15
 
16
16
  # Core
17
- psycopg2-binary>=2.9.11
17
+ psycopg[binary,pool]>=3.2
18
18
 
19
19
  # Testing providers
20
20
  pymongo>=4.6.1
@@ -13,4 +13,4 @@ googleapis-common-protos>=1.72.0
13
13
  grpc-google-iam-v1>=0.14.3
14
14
  grpcio>=1.78.0
15
15
  grpcio-status>=1.78.0
16
- psycopg2-binary>=2.9.11
16
+ psycopg[binary,pool]>=3.2
@@ -4,4 +4,4 @@
4
4
  pymongo>=4.6.1 # MongoDB with connection pooling
5
5
  pika>=1.3.2 # RabbitMQ
6
6
  boto3>=1.34.0 # S3-compatible (MinIO, DigitalOcean Spaces)
7
- psycopg2-binary>=2.9.11
7
+ psycopg[binary,pool]>=3.2
@@ -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
- psycopg2-binary==2.9.11
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.5.23
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: psycopg2-binary>=2.9.11
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
@@ -1,4 +1,4 @@
1
- psycopg2-binary>=2.9.11
1
+ psycopg[binary,pool]>=3.2
2
2
  tenacity>=9.1.4
3
3
  redis>=6.4.0
4
4
  python-dotenv>=1.1.1
@@ -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.23"
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 orig_k in ("partition_key", "PartitionKey"):
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"