altcodepro-polydb-python 2.5.4__tar.gz → 2.5.7__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 (116) hide show
  1. {altcodepro_polydb_python-2.5.4/src/altcodepro_polydb_python.egg-info → altcodepro_polydb_python-2.5.7}/PKG-INFO +69 -20
  2. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/README.md +51 -6
  3. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/pyproject.toml +30 -16
  4. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7/src/altcodepro_polydb_python.egg-info}/PKG-INFO +69 -20
  5. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/altcodepro_polydb_python.egg-info/SOURCES.txt +14 -0
  6. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/altcodepro_polydb_python.egg-info/requires.txt +20 -13
  7. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/__init__.py +1 -1
  8. altcodepro_polydb_python-2.5.7/src/polydb/adapters/AWSSecretsManagerAdapter.py +72 -0
  9. altcodepro_polydb_python-2.5.7/src/polydb/adapters/AzureKeyVaultAdapter.py +65 -0
  10. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/adapters/AzureQueueAdapter.py +82 -4
  11. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/adapters/DynamoDBAdapter.py +31 -16
  12. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/adapters/FirestoreAdapter.py +30 -13
  13. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/adapters/GCPPubSubAdapter.py +46 -0
  14. altcodepro_polydb_python-2.5.7/src/polydb/adapters/GCPSecretManagerAdapter.py +79 -0
  15. altcodepro_polydb_python-2.5.7/src/polydb/adapters/KafkaQueueAdapter.py +332 -0
  16. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/adapters/PostgreSQLAdapter.py +114 -6
  17. altcodepro_polydb_python-2.5.7/src/polydb/adapters/RabbitMQAdapter.py +465 -0
  18. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/adapters/SQSAdapter.py +60 -0
  19. altcodepro_polydb_python-2.5.7/src/polydb/adapters/VaultAdapter.py +75 -0
  20. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/adapters/VercelKVAdapter.py +38 -24
  21. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/adapters/VercelQueueAdapter.py +30 -2
  22. altcodepro_polydb_python-2.5.7/src/polydb/base/QueueAdapter.py +149 -0
  23. altcodepro_polydb_python-2.5.7/src/polydb/base/SecretsAdapter.py +30 -0
  24. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/cache.py +90 -0
  25. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/cloudDatabaseFactory.py +129 -15
  26. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/databaseFactory.py +262 -60
  27. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/errors.py +6 -0
  28. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/models.py +77 -0
  29. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/retry.py +7 -0
  30. altcodepro_polydb_python-2.5.7/tests/test_kafka.py +442 -0
  31. altcodepro_polydb_python-2.5.7/tests/test_queue_extend_delay_cancel.py +378 -0
  32. altcodepro_polydb_python-2.5.7/tests/test_rabbitmq.py +410 -0
  33. altcodepro_polydb_python-2.5.7/tests/test_redis_kv.py +199 -0
  34. altcodepro_polydb_python-2.5.7/tests/test_secrets_aws.py +70 -0
  35. altcodepro_polydb_python-2.5.7/tests/test_secrets_vault.py +84 -0
  36. altcodepro_polydb_python-2.5.7/tests/test_session_vars.py +295 -0
  37. altcodepro_polydb_python-2.5.4/src/polydb/base/QueueAdapter.py +0 -27
  38. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/LICENSE +0 -0
  39. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/MANIFEST.in +0 -0
  40. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/requirements-aws.txt +0 -0
  41. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/requirements-azure.txt +0 -0
  42. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/requirements-dev.txt +0 -0
  43. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/requirements-gcp.txt +0 -0
  44. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/requirements-generic.txt +0 -0
  45. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/requirements.txt +0 -0
  46. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/setup.cfg +0 -0
  47. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/setup.py +0 -0
  48. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/altcodepro_polydb_python.egg-info/dependency_links.txt +0 -0
  49. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/altcodepro_polydb_python.egg-info/top_level.txt +0 -0
  50. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/PolyDB.py +0 -0
  51. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/adapters/AzureBlobStorageAdapter.py +0 -0
  52. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/adapters/AzureFileStorageAdapter.py +0 -0
  53. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/adapters/AzureTableStorageAdapter.py +0 -0
  54. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/adapters/BlockchainBlobAdapter.py +0 -0
  55. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/adapters/BlockchainFileAdapter.py +0 -0
  56. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/adapters/BlockchainKVAdapter.py +0 -0
  57. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/adapters/BlockchainQueueAdapter.py +0 -0
  58. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/adapters/EFSAdapter.py +0 -0
  59. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/adapters/GCPFilestoreAdapter.py +0 -0
  60. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/adapters/GCPStorageAdapter.py +0 -0
  61. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/adapters/MongoDBAdapter.py +0 -0
  62. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/adapters/S3Adapter.py +0 -0
  63. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/adapters/S3CompatibleAdapter.py +0 -0
  64. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/adapters/VercelBlobAdapter.py +0 -0
  65. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/adapters/VercelFileAdapter.py +0 -0
  66. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/adapters/__init__.py +0 -0
  67. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/advanced_query.py +0 -0
  68. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/audit/AuditStorage.py +0 -0
  69. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/audit/__init__.py +0 -0
  70. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/audit/context.py +0 -0
  71. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/audit/manager.py +0 -0
  72. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/audit/models.py +0 -0
  73. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/base/NoSQLKVAdapter.py +0 -0
  74. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/base/ObjectStorageAdapter.py +0 -0
  75. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/base/SharedFilesAdapter.py +0 -0
  76. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/base/__init__.py +0 -0
  77. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/batch.py +0 -0
  78. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/decorators.py +0 -0
  79. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/json_safe.py +0 -0
  80. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/monitoring.py +0 -0
  81. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/multitenancy.py +0 -0
  82. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/observability/__init__.py +0 -0
  83. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/observability/logging.py +0 -0
  84. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/py.typed +0 -0
  85. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/query.py +0 -0
  86. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/registry.py +0 -0
  87. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/schema.py +0 -0
  88. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/security.py +0 -0
  89. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/services/__init__.py +0 -0
  90. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/services/compliance_service.py +0 -0
  91. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/services/security_service.py +0 -0
  92. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/types.py +0 -0
  93. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/utils.py +0 -0
  94. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/src/polydb/validation.py +0 -0
  95. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/tests/test_advanced_query_injection.py +0 -0
  96. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/tests/test_atomic_decrement.py +0 -0
  97. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/tests/test_audit_chain_cutover.py +0 -0
  98. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/tests/test_audit_hmac.py +0 -0
  99. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/tests/test_aws.py +0 -0
  100. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/tests/test_azure.py +0 -0
  101. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/tests/test_azure_queue_receipt_handle.py +0 -0
  102. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/tests/test_azure_table_empty_filter.py +0 -0
  103. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/tests/test_azure_table_unpack_entity.py +0 -0
  104. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/tests/test_blockchain.py +0 -0
  105. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/tests/test_cloud_factory.py +0 -0
  106. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/tests/test_field_encryption.py +0 -0
  107. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/tests/test_gcp.py +0 -0
  108. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/tests/test_like_pattern_escaping.py +0 -0
  109. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/tests/test_mongodb.py +0 -0
  110. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/tests/test_multi_engine.py +0 -0
  111. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/tests/test_multitenancy_ddl_injection.py +0 -0
  112. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/tests/test_nosql_operator_injection.py +0 -0
  113. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/tests/test_observability.py +0 -0
  114. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/tests/test_postgresql.py +0 -0
  115. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/tests/test_schema_ddl_injection.py +0 -0
  116. {altcodepro_polydb_python-2.5.4 → altcodepro_polydb_python-2.5.7}/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.4
3
+ Version: 2.5.7
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
@@ -27,19 +27,6 @@ Requires-Dist: psycopg2-binary>=2.9.11
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
- Requires-Dist: azure-storage-queue>=12.15.0
31
- Requires-Dist: azure-storage-blob>=12.29.0
32
- Requires-Dist: boto3>=1.43.18
33
- Requires-Dist: google-cloud-storage>=3.10.1
34
- Requires-Dist: azure-storage-file-share>=12.25.0
35
- Requires-Dist: azure-data-tables>=12.7.0
36
- Requires-Dist: ipfshttpclient>=0.7.0
37
- Requires-Dist: web3>=7.16.0
38
- Requires-Dist: google-cloud-firestore>=2.27.0
39
- Requires-Dist: google-cloud-pubsub>=2.38.0
40
- Requires-Dist: pymongo>=4.17.0
41
- Requires-Dist: build>=1.5.0
42
- Requires-Dist: twine>=6.2.0
43
30
  Provides-Extra: aws
44
31
  Requires-Dist: boto3>=1.42.47; extra == "aws"
45
32
  Requires-Dist: botocore>=1.42.47; extra == "aws"
@@ -49,6 +36,8 @@ Requires-Dist: azure-data-tables>=12.7.0; extra == "azure"
49
36
  Requires-Dist: azure-storage-blob>=12.28.0; extra == "azure"
50
37
  Requires-Dist: azure-storage-file-share>=12.24.0; extra == "azure"
51
38
  Requires-Dist: azure-storage-queue>=12.15.0; extra == "azure"
39
+ Requires-Dist: azure-identity>=1.16.0; extra == "azure"
40
+ Requires-Dist: azure-keyvault-secrets>=4.8.0; extra == "azure"
52
41
  Provides-Extra: gcp
53
42
  Requires-Dist: google-api-core>=2.29.0; extra == "gcp"
54
43
  Requires-Dist: google-auth>=2.48.0; extra == "gcp"
@@ -56,18 +45,27 @@ Requires-Dist: google-cloud-core>=2.5.0; extra == "gcp"
56
45
  Requires-Dist: google-cloud-firestore>=2.23.0; extra == "gcp"
57
46
  Requires-Dist: google-cloud-pubsub>=2.35.0; extra == "gcp"
58
47
  Requires-Dist: google-cloud-storage>=3.9.0; extra == "gcp"
48
+ Requires-Dist: google-cloud-secret-manager>=2.20.0; extra == "gcp"
59
49
  Provides-Extra: mongodb
60
50
  Requires-Dist: pymongo>=4.16.0; extra == "mongodb"
61
51
  Provides-Extra: rabbitmq
62
52
  Requires-Dist: pika>=1.3.2; extra == "rabbitmq"
53
+ Provides-Extra: kafka
54
+ Requires-Dist: kafka-python>=2.0.2; extra == "kafka"
63
55
  Provides-Extra: vercel
64
56
  Requires-Dist: requests>=2.32.5; extra == "vercel"
57
+ Provides-Extra: blockchain
58
+ Requires-Dist: ipfshttpclient>=0.7.0; extra == "blockchain"
59
+ Requires-Dist: web3>=7.14.1; extra == "blockchain"
65
60
  Provides-Extra: bolckchain
66
61
  Requires-Dist: ipfshttpclient>=0.7.0; extra == "bolckchain"
67
62
  Requires-Dist: web3>=7.14.1; extra == "bolckchain"
63
+ Provides-Extra: secrets
64
+ Requires-Dist: hvac>=2.1.0; extra == "secrets"
68
65
  Provides-Extra: generic
69
66
  Requires-Dist: pymongo>=4.16.0; extra == "generic"
70
67
  Requires-Dist: pika>=1.3.2; extra == "generic"
68
+ Requires-Dist: kafka-python>=2.0.2; extra == "generic"
71
69
  Requires-Dist: boto3>=1.42.47; extra == "generic"
72
70
  Provides-Extra: security
73
71
  Requires-Dist: cryptography>=42.0.0; extra == "security"
@@ -79,13 +77,18 @@ Requires-Dist: azure-data-tables>=12.7.0; extra == "all"
79
77
  Requires-Dist: azure-storage-blob>=12.28.0; extra == "all"
80
78
  Requires-Dist: azure-storage-file-share>=12.24.0; extra == "all"
81
79
  Requires-Dist: azure-storage-queue>=12.15.0; extra == "all"
80
+ Requires-Dist: azure-identity>=1.16.0; extra == "all"
81
+ Requires-Dist: azure-keyvault-secrets>=4.8.0; extra == "all"
82
82
  Requires-Dist: google-cloud-firestore>=2.23.0; extra == "all"
83
83
  Requires-Dist: google-cloud-pubsub>=2.35.0; extra == "all"
84
84
  Requires-Dist: google-cloud-storage>=3.9.0; extra == "all"
85
+ Requires-Dist: google-cloud-secret-manager>=2.20.0; extra == "all"
85
86
  Requires-Dist: pymongo>=4.16.0; extra == "all"
86
87
  Requires-Dist: pika>=1.3.2; extra == "all"
88
+ Requires-Dist: kafka-python>=2.0.2; extra == "all"
87
89
  Requires-Dist: requests>=2.32.5; extra == "all"
88
90
  Requires-Dist: cryptography>=42.0.0; extra == "all"
91
+ Requires-Dist: hvac>=2.1.0; extra == "all"
89
92
  Provides-Extra: dev
90
93
  Requires-Dist: black>=26.1.0; extra == "dev"
91
94
  Requires-Dist: flake8>=7.3.0; extra == "dev"
@@ -97,6 +100,7 @@ Requires-Dist: pytest-asyncio>=1.2.0; extra == "test"
97
100
  Requires-Dist: pytest-cov>=7.0.0; extra == "test"
98
101
  Requires-Dist: pytest-mock>=3.15.1; extra == "test"
99
102
  Requires-Dist: moto>=5.1.21; extra == "test"
103
+ Requires-Dist: hvac>=2.1.0; extra == "test"
100
104
  Dynamic: license-file
101
105
 
102
106
 
@@ -291,19 +295,64 @@ Supported systems:
291
295
  * AWS SQS
292
296
  * Azure Queue
293
297
  * Google Pub/Sub
294
- * Vercel Queue
298
+ * Vercel Queue (cloud REST API, or a plain local `redis://` URL for
299
+ dev/test)
300
+ * Kafka
301
+ * RabbitMQ
295
302
  * Blockchain event queues
296
303
 
297
- Example:
304
+ Example (method names below match `QueueAdapter`'s actual signatures —
305
+ `send`/`receive`/`ack`/`delete`, not `send_message`/`receive_message`):
298
306
 
299
307
  ```python
300
- queue = factory.get_queue()
308
+ queue = factory.get_queue("rabbitmq")
301
309
 
302
- queue.send_message("jobs", {"task": "process"})
303
- msg = queue.receive_message("jobs")
304
- queue.delete_message("jobs", msg)
310
+ message_id = queue.send({"task": "process"}, queue_name="jobs")
311
+ messages = queue.receive(queue_name="jobs", max_messages=1)
312
+ queue.ack(messages[0]["receipt_handle"], queue_name="jobs")
305
313
  ```
306
314
 
315
+ ## Extended queue management (`nack`/`purge`/`declare`/`status`)
316
+
317
+ `QueueAdapter`'s base class also defines `nack`, `purge`, `declare`
318
+ (explicit provisioning ahead of first use, with optional dead-letter
319
+ queue wiring), and `status` — regular (non-abstract) base methods that
320
+ raise `NotImplementedError` by default, overridden only where a
321
+ subclass genuinely implements them. Honest status, verified against a
322
+ real local broker/client, not assumed:
323
+
324
+ * **RabbitMQAdapter** — all four implemented for real against a live
325
+ broker: `nack` is `basic_nack(requeue=True)` (immediate redelivery,
326
+ not dead-lettering); `purge` reads the real purged count off
327
+ `queue_purge`'s `Queue.PurgeOk` response; `declare` wires real AMQP
328
+ dead-lettering (`x-dead-letter-exchange`/`x-dead-letter-routing-key`
329
+ queue arguments — not a hand-rolled shadow re-router) when
330
+ `dead_letter_queue` is given, and `status` reads `message_count`/
331
+ `consumer_count` off a passive `queue_declare`. A message only
332
+ actually gets dead-lettered by a real reject-without-requeue
333
+ (`basic_nack`/`basic_reject` with `requeue=False`) or a TTL/
334
+ max-length policy — `nack()`'s own contract is "redeliver now", so it
335
+ deliberately does **not** trigger dead-lettering itself. `dlq_list`/
336
+ `dlq_replay` aren't separate adapter methods — they're just
337
+ `receive`/`send`+`ack` aimed at the DLQ's own queue name.
338
+ * **KafkaQueueAdapter** — only `nack` is implemented, and it's a
339
+ documented no-op: `receive()` already never commits an offset until
340
+ `ack()`/`delete()` does, so a received-but-unacked message is already
341
+ effectively "nacked". `purge`/`declare`/`status` are **not**
342
+ implemented — not practical against `kafka-python`'s client-level API
343
+ without broker admin tooling; they raise the base class's
344
+ `NotImplementedError`.
345
+ * **SQS / Azure Queue / GCP Pub/Sub / Blockchain** — none of the four
346
+ new methods are implemented; all raise the base class's
347
+ `NotImplementedError`. No credentials/emulator for any of these three
348
+ cloud providers, and no real blockchain node, were available where
349
+ this was built and tested.
350
+ * **Vercel Queue (local-redis mode)** — also not implemented for these
351
+ four, though flagged as a real, likely-tractable gap for later: Redis
352
+ Streams' `XPENDING`/`XCLAIM`/`XTRIM` could plausibly back `nack`/
353
+ `status`/`purge` for the local-redis mode specifically. Deliberately
354
+ left out of this round rather than half-implemented.
355
+
307
356
  ---
308
357
 
309
358
  # Blockchain Storage
@@ -190,19 +190,64 @@ Supported systems:
190
190
  * AWS SQS
191
191
  * Azure Queue
192
192
  * Google Pub/Sub
193
- * Vercel Queue
193
+ * Vercel Queue (cloud REST API, or a plain local `redis://` URL for
194
+ dev/test)
195
+ * Kafka
196
+ * RabbitMQ
194
197
  * Blockchain event queues
195
198
 
196
- Example:
199
+ Example (method names below match `QueueAdapter`'s actual signatures —
200
+ `send`/`receive`/`ack`/`delete`, not `send_message`/`receive_message`):
197
201
 
198
202
  ```python
199
- queue = factory.get_queue()
203
+ queue = factory.get_queue("rabbitmq")
200
204
 
201
- queue.send_message("jobs", {"task": "process"})
202
- msg = queue.receive_message("jobs")
203
- queue.delete_message("jobs", msg)
205
+ message_id = queue.send({"task": "process"}, queue_name="jobs")
206
+ messages = queue.receive(queue_name="jobs", max_messages=1)
207
+ queue.ack(messages[0]["receipt_handle"], queue_name="jobs")
204
208
  ```
205
209
 
210
+ ## Extended queue management (`nack`/`purge`/`declare`/`status`)
211
+
212
+ `QueueAdapter`'s base class also defines `nack`, `purge`, `declare`
213
+ (explicit provisioning ahead of first use, with optional dead-letter
214
+ queue wiring), and `status` — regular (non-abstract) base methods that
215
+ raise `NotImplementedError` by default, overridden only where a
216
+ subclass genuinely implements them. Honest status, verified against a
217
+ real local broker/client, not assumed:
218
+
219
+ * **RabbitMQAdapter** — all four implemented for real against a live
220
+ broker: `nack` is `basic_nack(requeue=True)` (immediate redelivery,
221
+ not dead-lettering); `purge` reads the real purged count off
222
+ `queue_purge`'s `Queue.PurgeOk` response; `declare` wires real AMQP
223
+ dead-lettering (`x-dead-letter-exchange`/`x-dead-letter-routing-key`
224
+ queue arguments — not a hand-rolled shadow re-router) when
225
+ `dead_letter_queue` is given, and `status` reads `message_count`/
226
+ `consumer_count` off a passive `queue_declare`. A message only
227
+ actually gets dead-lettered by a real reject-without-requeue
228
+ (`basic_nack`/`basic_reject` with `requeue=False`) or a TTL/
229
+ max-length policy — `nack()`'s own contract is "redeliver now", so it
230
+ deliberately does **not** trigger dead-lettering itself. `dlq_list`/
231
+ `dlq_replay` aren't separate adapter methods — they're just
232
+ `receive`/`send`+`ack` aimed at the DLQ's own queue name.
233
+ * **KafkaQueueAdapter** — only `nack` is implemented, and it's a
234
+ documented no-op: `receive()` already never commits an offset until
235
+ `ack()`/`delete()` does, so a received-but-unacked message is already
236
+ effectively "nacked". `purge`/`declare`/`status` are **not**
237
+ implemented — not practical against `kafka-python`'s client-level API
238
+ without broker admin tooling; they raise the base class's
239
+ `NotImplementedError`.
240
+ * **SQS / Azure Queue / GCP Pub/Sub / Blockchain** — none of the four
241
+ new methods are implemented; all raise the base class's
242
+ `NotImplementedError`. No credentials/emulator for any of these three
243
+ cloud providers, and no real blockchain node, were available where
244
+ this was built and tested.
245
+ * **Vercel Queue (local-redis mode)** — also not implemented for these
246
+ four, though flagged as a real, likely-tractable gap for later: Redis
247
+ Streams' `XPENDING`/`XCLAIM`/`XTRIM` could plausibly back `nack`/
248
+ `status`/`purge` for the local-redis mode specifically. Deliberately
249
+ left out of this round rather than half-implemented.
250
+
206
251
  ---
207
252
 
208
253
  # Blockchain Storage
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "altcodepro-polydb-python"
7
- version = "2.5.4"
7
+ version = "2.5.7"
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"
@@ -40,25 +40,22 @@ classifiers = [
40
40
  "Operating System :: OS Independent",
41
41
  ]
42
42
 
43
- # Core dependencies - always installed
43
+ # Core dependencies - always installed. Deliberately just the
44
+ # generic/open-source stack (Postgres + Redis) plus cross-cutting
45
+ # concerns (retry, env config) -- every cloud SDK moved to its extra
46
+ # below, where it already belonged. A plain `pip install
47
+ # altcodepro-polydb-python` used to require boto3/every-azure-package/
48
+ # every-google-cloud-package/pymongo/web3/ipfshttpclient/build/twine
49
+ # unconditionally, defeating these extras entirely and breaking outright
50
+ # on any environment where the blockchain extras' transitive deps don't
51
+ # build (found by actually trying a minimal install). `build`/`twine`
52
+ # were never runtime dependencies at all -- packaging/publishing tools,
53
+ # not something this library needs to function.
44
54
  dependencies = [
45
55
  "psycopg2-binary>=2.9.11",
46
56
  "tenacity>=9.1.4",
47
57
  "redis>=6.4.0",
48
58
  "python-dotenv>=1.1.1",
49
- "azure-storage-queue>=12.15.0",
50
- "azure-storage-blob>=12.29.0",
51
- "boto3>=1.43.18",
52
- "google-cloud-storage>=3.10.1",
53
- "azure-storage-file-share>=12.25.0",
54
- "azure-data-tables>=12.7.0",
55
- "ipfshttpclient>=0.7.0",
56
- "web3>=7.16.0",
57
- "google-cloud-firestore>=2.27.0",
58
- "google-cloud-pubsub>=2.38.0",
59
- "pymongo>=4.17.0",
60
- "build>=1.5.0",
61
- "twine>=6.2.0",
62
59
  ]
63
60
 
64
61
  # Generic/Open-source stack (cheapest option)
@@ -72,6 +69,8 @@ azure = [
72
69
  "azure-storage-blob>=12.28.0",
73
70
  "azure-storage-file-share>=12.24.0",
74
71
  "azure-storage-queue>=12.15.0",
72
+ "azure-identity>=1.16.0",
73
+ "azure-keyvault-secrets>=4.8.0",
75
74
  ]
76
75
 
77
76
  gcp = [
@@ -81,16 +80,25 @@ gcp = [
81
80
  "google-cloud-firestore>=2.23.0",
82
81
  "google-cloud-pubsub>=2.35.0",
83
82
  "google-cloud-storage>=3.9.0",
83
+ "google-cloud-secret-manager>=2.20.0",
84
84
  ]
85
85
 
86
86
  mongodb = ["pymongo>=4.16.0"]
87
87
 
88
88
  rabbitmq = ["pika>=1.3.2"]
89
89
 
90
+ kafka = ["kafka-python>=2.0.2"]
91
+
90
92
  vercel = ["requests>=2.32.5"]
93
+ # "bolckchain" (sic) kept as a deprecated alias -- fixing the typo
94
+ # outright would silently break anyone already pinning
95
+ # altcodepro-polydb-python[bolckchain].
96
+ blockchain = ["ipfshttpclient>=0.7.0", "web3>=7.14.1"]
91
97
  bolckchain = ["ipfshttpclient>=0.7.0", "web3>=7.14.1"]
92
98
 
93
- generic = ["pymongo>=4.16.0", "pika>=1.3.2", "boto3>=1.42.47"]
99
+ secrets = ["hvac>=2.1.0"]
100
+
101
+ generic = ["pymongo>=4.16.0", "pika>=1.3.2", "kafka-python>=2.0.2", "boto3>=1.42.47"]
94
102
 
95
103
  security = ["cryptography>=42.0.0"]
96
104
 
@@ -102,13 +110,18 @@ all = [
102
110
  "azure-storage-blob>=12.28.0",
103
111
  "azure-storage-file-share>=12.24.0",
104
112
  "azure-storage-queue>=12.15.0",
113
+ "azure-identity>=1.16.0",
114
+ "azure-keyvault-secrets>=4.8.0",
105
115
  "google-cloud-firestore>=2.23.0",
106
116
  "google-cloud-pubsub>=2.35.0",
107
117
  "google-cloud-storage>=3.9.0",
118
+ "google-cloud-secret-manager>=2.20.0",
108
119
  "pymongo>=4.16.0",
109
120
  "pika>=1.3.2",
121
+ "kafka-python>=2.0.2",
110
122
  "requests>=2.32.5",
111
123
  "cryptography>=42.0.0",
124
+ "hvac>=2.1.0",
112
125
  ]
113
126
 
114
127
 
@@ -123,6 +136,7 @@ test = [
123
136
  "pytest-cov>=7.0.0",
124
137
  "pytest-mock>=3.15.1",
125
138
  "moto>=5.1.21",
139
+ "hvac>=2.1.0",
126
140
  ]
127
141
 
128
142
  [project.urls]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: altcodepro-polydb-python
3
- Version: 2.5.4
3
+ Version: 2.5.7
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
@@ -27,19 +27,6 @@ Requires-Dist: psycopg2-binary>=2.9.11
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
- Requires-Dist: azure-storage-queue>=12.15.0
31
- Requires-Dist: azure-storage-blob>=12.29.0
32
- Requires-Dist: boto3>=1.43.18
33
- Requires-Dist: google-cloud-storage>=3.10.1
34
- Requires-Dist: azure-storage-file-share>=12.25.0
35
- Requires-Dist: azure-data-tables>=12.7.0
36
- Requires-Dist: ipfshttpclient>=0.7.0
37
- Requires-Dist: web3>=7.16.0
38
- Requires-Dist: google-cloud-firestore>=2.27.0
39
- Requires-Dist: google-cloud-pubsub>=2.38.0
40
- Requires-Dist: pymongo>=4.17.0
41
- Requires-Dist: build>=1.5.0
42
- Requires-Dist: twine>=6.2.0
43
30
  Provides-Extra: aws
44
31
  Requires-Dist: boto3>=1.42.47; extra == "aws"
45
32
  Requires-Dist: botocore>=1.42.47; extra == "aws"
@@ -49,6 +36,8 @@ Requires-Dist: azure-data-tables>=12.7.0; extra == "azure"
49
36
  Requires-Dist: azure-storage-blob>=12.28.0; extra == "azure"
50
37
  Requires-Dist: azure-storage-file-share>=12.24.0; extra == "azure"
51
38
  Requires-Dist: azure-storage-queue>=12.15.0; extra == "azure"
39
+ Requires-Dist: azure-identity>=1.16.0; extra == "azure"
40
+ Requires-Dist: azure-keyvault-secrets>=4.8.0; extra == "azure"
52
41
  Provides-Extra: gcp
53
42
  Requires-Dist: google-api-core>=2.29.0; extra == "gcp"
54
43
  Requires-Dist: google-auth>=2.48.0; extra == "gcp"
@@ -56,18 +45,27 @@ Requires-Dist: google-cloud-core>=2.5.0; extra == "gcp"
56
45
  Requires-Dist: google-cloud-firestore>=2.23.0; extra == "gcp"
57
46
  Requires-Dist: google-cloud-pubsub>=2.35.0; extra == "gcp"
58
47
  Requires-Dist: google-cloud-storage>=3.9.0; extra == "gcp"
48
+ Requires-Dist: google-cloud-secret-manager>=2.20.0; extra == "gcp"
59
49
  Provides-Extra: mongodb
60
50
  Requires-Dist: pymongo>=4.16.0; extra == "mongodb"
61
51
  Provides-Extra: rabbitmq
62
52
  Requires-Dist: pika>=1.3.2; extra == "rabbitmq"
53
+ Provides-Extra: kafka
54
+ Requires-Dist: kafka-python>=2.0.2; extra == "kafka"
63
55
  Provides-Extra: vercel
64
56
  Requires-Dist: requests>=2.32.5; extra == "vercel"
57
+ Provides-Extra: blockchain
58
+ Requires-Dist: ipfshttpclient>=0.7.0; extra == "blockchain"
59
+ Requires-Dist: web3>=7.14.1; extra == "blockchain"
65
60
  Provides-Extra: bolckchain
66
61
  Requires-Dist: ipfshttpclient>=0.7.0; extra == "bolckchain"
67
62
  Requires-Dist: web3>=7.14.1; extra == "bolckchain"
63
+ Provides-Extra: secrets
64
+ Requires-Dist: hvac>=2.1.0; extra == "secrets"
68
65
  Provides-Extra: generic
69
66
  Requires-Dist: pymongo>=4.16.0; extra == "generic"
70
67
  Requires-Dist: pika>=1.3.2; extra == "generic"
68
+ Requires-Dist: kafka-python>=2.0.2; extra == "generic"
71
69
  Requires-Dist: boto3>=1.42.47; extra == "generic"
72
70
  Provides-Extra: security
73
71
  Requires-Dist: cryptography>=42.0.0; extra == "security"
@@ -79,13 +77,18 @@ Requires-Dist: azure-data-tables>=12.7.0; extra == "all"
79
77
  Requires-Dist: azure-storage-blob>=12.28.0; extra == "all"
80
78
  Requires-Dist: azure-storage-file-share>=12.24.0; extra == "all"
81
79
  Requires-Dist: azure-storage-queue>=12.15.0; extra == "all"
80
+ Requires-Dist: azure-identity>=1.16.0; extra == "all"
81
+ Requires-Dist: azure-keyvault-secrets>=4.8.0; extra == "all"
82
82
  Requires-Dist: google-cloud-firestore>=2.23.0; extra == "all"
83
83
  Requires-Dist: google-cloud-pubsub>=2.35.0; extra == "all"
84
84
  Requires-Dist: google-cloud-storage>=3.9.0; extra == "all"
85
+ Requires-Dist: google-cloud-secret-manager>=2.20.0; extra == "all"
85
86
  Requires-Dist: pymongo>=4.16.0; extra == "all"
86
87
  Requires-Dist: pika>=1.3.2; extra == "all"
88
+ Requires-Dist: kafka-python>=2.0.2; extra == "all"
87
89
  Requires-Dist: requests>=2.32.5; extra == "all"
88
90
  Requires-Dist: cryptography>=42.0.0; extra == "all"
91
+ Requires-Dist: hvac>=2.1.0; extra == "all"
89
92
  Provides-Extra: dev
90
93
  Requires-Dist: black>=26.1.0; extra == "dev"
91
94
  Requires-Dist: flake8>=7.3.0; extra == "dev"
@@ -97,6 +100,7 @@ Requires-Dist: pytest-asyncio>=1.2.0; extra == "test"
97
100
  Requires-Dist: pytest-cov>=7.0.0; extra == "test"
98
101
  Requires-Dist: pytest-mock>=3.15.1; extra == "test"
99
102
  Requires-Dist: moto>=5.1.21; extra == "test"
103
+ Requires-Dist: hvac>=2.1.0; extra == "test"
100
104
  Dynamic: license-file
101
105
 
102
106
 
@@ -291,19 +295,64 @@ Supported systems:
291
295
  * AWS SQS
292
296
  * Azure Queue
293
297
  * Google Pub/Sub
294
- * Vercel Queue
298
+ * Vercel Queue (cloud REST API, or a plain local `redis://` URL for
299
+ dev/test)
300
+ * Kafka
301
+ * RabbitMQ
295
302
  * Blockchain event queues
296
303
 
297
- Example:
304
+ Example (method names below match `QueueAdapter`'s actual signatures —
305
+ `send`/`receive`/`ack`/`delete`, not `send_message`/`receive_message`):
298
306
 
299
307
  ```python
300
- queue = factory.get_queue()
308
+ queue = factory.get_queue("rabbitmq")
301
309
 
302
- queue.send_message("jobs", {"task": "process"})
303
- msg = queue.receive_message("jobs")
304
- queue.delete_message("jobs", msg)
310
+ message_id = queue.send({"task": "process"}, queue_name="jobs")
311
+ messages = queue.receive(queue_name="jobs", max_messages=1)
312
+ queue.ack(messages[0]["receipt_handle"], queue_name="jobs")
305
313
  ```
306
314
 
315
+ ## Extended queue management (`nack`/`purge`/`declare`/`status`)
316
+
317
+ `QueueAdapter`'s base class also defines `nack`, `purge`, `declare`
318
+ (explicit provisioning ahead of first use, with optional dead-letter
319
+ queue wiring), and `status` — regular (non-abstract) base methods that
320
+ raise `NotImplementedError` by default, overridden only where a
321
+ subclass genuinely implements them. Honest status, verified against a
322
+ real local broker/client, not assumed:
323
+
324
+ * **RabbitMQAdapter** — all four implemented for real against a live
325
+ broker: `nack` is `basic_nack(requeue=True)` (immediate redelivery,
326
+ not dead-lettering); `purge` reads the real purged count off
327
+ `queue_purge`'s `Queue.PurgeOk` response; `declare` wires real AMQP
328
+ dead-lettering (`x-dead-letter-exchange`/`x-dead-letter-routing-key`
329
+ queue arguments — not a hand-rolled shadow re-router) when
330
+ `dead_letter_queue` is given, and `status` reads `message_count`/
331
+ `consumer_count` off a passive `queue_declare`. A message only
332
+ actually gets dead-lettered by a real reject-without-requeue
333
+ (`basic_nack`/`basic_reject` with `requeue=False`) or a TTL/
334
+ max-length policy — `nack()`'s own contract is "redeliver now", so it
335
+ deliberately does **not** trigger dead-lettering itself. `dlq_list`/
336
+ `dlq_replay` aren't separate adapter methods — they're just
337
+ `receive`/`send`+`ack` aimed at the DLQ's own queue name.
338
+ * **KafkaQueueAdapter** — only `nack` is implemented, and it's a
339
+ documented no-op: `receive()` already never commits an offset until
340
+ `ack()`/`delete()` does, so a received-but-unacked message is already
341
+ effectively "nacked". `purge`/`declare`/`status` are **not**
342
+ implemented — not practical against `kafka-python`'s client-level API
343
+ without broker admin tooling; they raise the base class's
344
+ `NotImplementedError`.
345
+ * **SQS / Azure Queue / GCP Pub/Sub / Blockchain** — none of the four
346
+ new methods are implemented; all raise the base class's
347
+ `NotImplementedError`. No credentials/emulator for any of these three
348
+ cloud providers, and no real blockchain node, were available where
349
+ this was built and tested.
350
+ * **Vercel Queue (local-redis mode)** — also not implemented for these
351
+ four, though flagged as a real, likely-tractable gap for later: Redis
352
+ Streams' `XPENDING`/`XCLAIM`/`XTRIM` could plausibly back `nack`/
353
+ `status`/`purge` for the local-redis mode specifically. Deliberately
354
+ left out of this round rather than half-implemented.
355
+
307
356
  ---
308
357
 
309
358
  # Blockchain Storage
@@ -36,8 +36,10 @@ src/polydb/security.py
36
36
  src/polydb/types.py
37
37
  src/polydb/utils.py
38
38
  src/polydb/validation.py
39
+ src/polydb/adapters/AWSSecretsManagerAdapter.py
39
40
  src/polydb/adapters/AzureBlobStorageAdapter.py
40
41
  src/polydb/adapters/AzureFileStorageAdapter.py
42
+ src/polydb/adapters/AzureKeyVaultAdapter.py
41
43
  src/polydb/adapters/AzureQueueAdapter.py
42
44
  src/polydb/adapters/AzureTableStorageAdapter.py
43
45
  src/polydb/adapters/BlockchainBlobAdapter.py
@@ -49,12 +51,16 @@ src/polydb/adapters/EFSAdapter.py
49
51
  src/polydb/adapters/FirestoreAdapter.py
50
52
  src/polydb/adapters/GCPFilestoreAdapter.py
51
53
  src/polydb/adapters/GCPPubSubAdapter.py
54
+ src/polydb/adapters/GCPSecretManagerAdapter.py
52
55
  src/polydb/adapters/GCPStorageAdapter.py
56
+ src/polydb/adapters/KafkaQueueAdapter.py
53
57
  src/polydb/adapters/MongoDBAdapter.py
54
58
  src/polydb/adapters/PostgreSQLAdapter.py
59
+ src/polydb/adapters/RabbitMQAdapter.py
55
60
  src/polydb/adapters/S3Adapter.py
56
61
  src/polydb/adapters/S3CompatibleAdapter.py
57
62
  src/polydb/adapters/SQSAdapter.py
63
+ src/polydb/adapters/VaultAdapter.py
58
64
  src/polydb/adapters/VercelBlobAdapter.py
59
65
  src/polydb/adapters/VercelFileAdapter.py
60
66
  src/polydb/adapters/VercelKVAdapter.py
@@ -68,6 +74,7 @@ src/polydb/audit/models.py
68
74
  src/polydb/base/NoSQLKVAdapter.py
69
75
  src/polydb/base/ObjectStorageAdapter.py
70
76
  src/polydb/base/QueueAdapter.py
77
+ src/polydb/base/SecretsAdapter.py
71
78
  src/polydb/base/SharedFilesAdapter.py
72
79
  src/polydb/base/__init__.py
73
80
  src/polydb/observability/__init__.py
@@ -88,6 +95,7 @@ tests/test_blockchain.py
88
95
  tests/test_cloud_factory.py
89
96
  tests/test_field_encryption.py
90
97
  tests/test_gcp.py
98
+ tests/test_kafka.py
91
99
  tests/test_like_pattern_escaping.py
92
100
  tests/test_mongodb.py
93
101
  tests/test_multi_engine.py
@@ -95,5 +103,11 @@ tests/test_multitenancy_ddl_injection.py
95
103
  tests/test_nosql_operator_injection.py
96
104
  tests/test_observability.py
97
105
  tests/test_postgresql.py
106
+ tests/test_queue_extend_delay_cancel.py
107
+ tests/test_rabbitmq.py
108
+ tests/test_redis_kv.py
98
109
  tests/test_schema_ddl_injection.py
110
+ tests/test_secrets_aws.py
111
+ tests/test_secrets_vault.py
112
+ tests/test_session_vars.py
99
113
  tests/test_vercel.py
@@ -2,19 +2,6 @@ psycopg2-binary>=2.9.11
2
2
  tenacity>=9.1.4
3
3
  redis>=6.4.0
4
4
  python-dotenv>=1.1.1
5
- azure-storage-queue>=12.15.0
6
- azure-storage-blob>=12.29.0
7
- boto3>=1.43.18
8
- google-cloud-storage>=3.10.1
9
- azure-storage-file-share>=12.25.0
10
- azure-data-tables>=12.7.0
11
- ipfshttpclient>=0.7.0
12
- web3>=7.16.0
13
- google-cloud-firestore>=2.27.0
14
- google-cloud-pubsub>=2.38.0
15
- pymongo>=4.17.0
16
- build>=1.5.0
17
- twine>=6.2.0
18
5
 
19
6
  [all]
20
7
  boto3>=1.42.47
@@ -24,13 +11,18 @@ azure-data-tables>=12.7.0
24
11
  azure-storage-blob>=12.28.0
25
12
  azure-storage-file-share>=12.24.0
26
13
  azure-storage-queue>=12.15.0
14
+ azure-identity>=1.16.0
15
+ azure-keyvault-secrets>=4.8.0
27
16
  google-cloud-firestore>=2.23.0
28
17
  google-cloud-pubsub>=2.35.0
29
18
  google-cloud-storage>=3.9.0
19
+ google-cloud-secret-manager>=2.20.0
30
20
  pymongo>=4.16.0
31
21
  pika>=1.3.2
22
+ kafka-python>=2.0.2
32
23
  requests>=2.32.5
33
24
  cryptography>=42.0.0
25
+ hvac>=2.1.0
34
26
 
35
27
  [aws]
36
28
  boto3>=1.42.47
@@ -42,6 +34,12 @@ azure-data-tables>=12.7.0
42
34
  azure-storage-blob>=12.28.0
43
35
  azure-storage-file-share>=12.24.0
44
36
  azure-storage-queue>=12.15.0
37
+ azure-identity>=1.16.0
38
+ azure-keyvault-secrets>=4.8.0
39
+
40
+ [blockchain]
41
+ ipfshttpclient>=0.7.0
42
+ web3>=7.14.1
45
43
 
46
44
  [bolckchain]
47
45
  ipfshttpclient>=0.7.0
@@ -60,18 +58,26 @@ google-cloud-core>=2.5.0
60
58
  google-cloud-firestore>=2.23.0
61
59
  google-cloud-pubsub>=2.35.0
62
60
  google-cloud-storage>=3.9.0
61
+ google-cloud-secret-manager>=2.20.0
63
62
 
64
63
  [generic]
65
64
  pymongo>=4.16.0
66
65
  pika>=1.3.2
66
+ kafka-python>=2.0.2
67
67
  boto3>=1.42.47
68
68
 
69
+ [kafka]
70
+ kafka-python>=2.0.2
71
+
69
72
  [mongodb]
70
73
  pymongo>=4.16.0
71
74
 
72
75
  [rabbitmq]
73
76
  pika>=1.3.2
74
77
 
78
+ [secrets]
79
+ hvac>=2.1.0
80
+
75
81
  [security]
76
82
  cryptography>=42.0.0
77
83
 
@@ -81,6 +87,7 @@ pytest-asyncio>=1.2.0
81
87
  pytest-cov>=7.0.0
82
88
  pytest-mock>=3.15.1
83
89
  moto>=5.1.21
90
+ hvac>=2.1.0
84
91
 
85
92
  [vercel]
86
93
  requests>=2.32.5
@@ -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.2.3"
7
+ __version__ = "2.5.7"
8
8
 
9
9
  from .cloudDatabaseFactory import CloudDatabaseFactory
10
10
  from .databaseFactory import DatabaseFactory