altcodepro-polydb-python 2.5.7__py3-none-any.whl → 2.5.9__py3-none-any.whl

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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: altcodepro-polydb-python
3
- Version: 2.5.7
3
+ Version: 2.5.9
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
@@ -1,6 +1,6 @@
1
- altcodepro_polydb_python-2.5.7.dist-info/licenses/LICENSE,sha256=9X8GLocsBwy-5aR5JGOt2SAMDDPs9Qv-YnqmHBHOXrw,1067
1
+ altcodepro_polydb_python-2.5.9.dist-info/licenses/LICENSE,sha256=9X8GLocsBwy-5aR5JGOt2SAMDDPs9Qv-YnqmHBHOXrw,1067
2
2
  polydb/PolyDB.py,sha256=MG7-nV59zDvrUQwXNEgV4eetHCeW9TYY9DQqtxu_r7k,23543
3
- polydb/__init__.py,sha256=htR8zFSwezyrv-RpIat6_nJYBnf7eNe7aHvKC7ewHJc,1535
3
+ polydb/__init__.py,sha256=JxB_TeZ2RfmcuZ7HOTeRPSpe4kA-Pxe25M6KN2MR8vw,1535
4
4
  polydb/advanced_query.py,sha256=JZUQr4wyC9ydrcO9VbZiH2ueiQiC4dxOX9hzG_JaFhs,6931
5
5
  polydb/batch.py,sha256=_DjWZa1ZXYSk6MLKqFe0eT7SYVRZtYNqZb9bI8Y2sao,4566
6
6
  polydb/cache.py,sha256=9UUHhiCVSWHQ-x-Ac_kIHYAadj0AQeqE4x8dwtyYFII,11781
@@ -26,7 +26,7 @@ polydb/adapters/AzureBlobStorageAdapter.py,sha256=4vD55Z8DBTzBK66jIJbo5bNMY-AQ61
26
26
  polydb/adapters/AzureFileStorageAdapter.py,sha256=VZNprqlBXCuWUgtqClNT-NrQmRf-XFYEiRA2BLbf-Sc,7046
27
27
  polydb/adapters/AzureKeyVaultAdapter.py,sha256=7Nizs9qGh6cytbZNgV78f-odOO4Z6sUlwm_HQYqt-pc,2339
28
28
  polydb/adapters/AzureQueueAdapter.py,sha256=15w0QQMBM53NIg10MZqdoweJyYtYdgR-SbZVwFqx3BI,13660
29
- polydb/adapters/AzureTableStorageAdapter.py,sha256=jMgGjiaqI6bUeKRa--f8xHz1pb8j8AMGaP-VA5CxlYw,30126
29
+ polydb/adapters/AzureTableStorageAdapter.py,sha256=s367vYgA40CkqPmCCQvvKRsGHA-AAo8a4GnPFvGsNxo,32025
30
30
  polydb/adapters/BlockchainBlobAdapter.py,sha256=D01Yua9mkKfaQrxKYApblIyI6DSP0dtNAh4Tav51HJ4,3299
31
31
  polydb/adapters/BlockchainFileAdapter.py,sha256=G749xOVpG20HuKS8zCgi6PMjoJNu-YXK7zitygjLdzM,8335
32
32
  polydb/adapters/BlockchainKVAdapter.py,sha256=UFYHyTgvdW-sZUBqyHEG3Cdx6wSTiF2QowEVWL3XPTg,4564
@@ -67,7 +67,7 @@ polydb/observability/logging.py,sha256=gv1SshNjaSkmR98Uv7Qbwq3gkeQUzVCA4ichqHKL6
67
67
  polydb/services/__init__.py,sha256=nMolMXzmhejRSm7f42kU9fCHF0GIpqpejN2kywuBsUQ,241
68
68
  polydb/services/compliance_service.py,sha256=-0ncX7PrXy4-NuyWXIv65cLUsqz0jXzb3LtsD8rlrXE,4983
69
69
  polydb/services/security_service.py,sha256=q7GzK6sbMnBBsc4fuL4oXTd-ui2b-MYQyrWTBvdVNSk,5062
70
- altcodepro_polydb_python-2.5.7.dist-info/METADATA,sha256=jSD2IT-xV6n_n2oY5sGM9YxrnGJIAV-QAkJ9-uJ7qf0,15598
71
- altcodepro_polydb_python-2.5.7.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
72
- altcodepro_polydb_python-2.5.7.dist-info/top_level.txt,sha256=WgLFWJoYjUhwvyPxJFl6jYLrVFuBJDX3OABf4ocwk_E,7
73
- altcodepro_polydb_python-2.5.7.dist-info/RECORD,,
70
+ altcodepro_polydb_python-2.5.9.dist-info/METADATA,sha256=g6kOe5L6nI43-JRAMXNTkzAN0jWb5w0-81zAuohzqtw,15598
71
+ altcodepro_polydb_python-2.5.9.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
72
+ altcodepro_polydb_python-2.5.9.dist-info/top_level.txt,sha256=WgLFWJoYjUhwvyPxJFl6jYLrVFuBJDX3OABf4ocwk_E,7
73
+ altcodepro_polydb_python-2.5.9.dist-info/RECORD,,
polydb/__init__.py CHANGED
@@ -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"
7
+ __version__ = "2.5.9"
8
8
 
9
9
  from .cloudDatabaseFactory import CloudDatabaseFactory
10
10
  from .databaseFactory import DatabaseFactory
@@ -404,7 +404,11 @@ class AzureTableStorageAdapter(NoSQLKVAdapter):
404
404
 
405
405
  polydb_meta = getattr(model, "__polydb__", None)
406
406
  if isinstance(polydb_meta, dict):
407
- collection = polydb_meta.get("collection") or polydb_meta.get("collection_name")
407
+ collection = (
408
+ polydb_meta.get("collection")
409
+ or polydb_meta.get("collection_name")
410
+ or polydb_meta.get("table")
411
+ )
408
412
  if collection:
409
413
  return self._sanitize_table_name(str(collection))
410
414
 
@@ -489,6 +493,33 @@ class AzureTableStorageAdapter(NoSQLKVAdapter):
489
493
  table_client = self._get_table_client(model)
490
494
  safe_pk = self._sanitize_pk_rk(pk)
491
495
  safe_rk = self._sanitize_pk_rk(rk)
496
+ # Persist "id" as a REAL, queryable property whenever the
497
+ # caller's own data didn't already supply one -- not just
498
+ # synthesized onto this call's own return value below
499
+ # (`restored["id"] = safe_rk`), which only ever helped the
500
+ # ONE caller holding that return value. _query_raw already
501
+ # does the equivalent synthesis on the READ side (`out["id"]
502
+ # = ent_dict["RowKey"]` when absent) for a query's own
503
+ # results, but that can't fix a *filtered* read: a later
504
+ # `read_one(model, {"id": X, ...})` -- the ordinary
505
+ # id-addressed lookup every `update()`/`patch()` call makes
506
+ # for its own "before" read -- builds a real OData `id eq
507
+ # 'X'` filter against whatever property is actually named
508
+ # "id" on the stored entity. When the original create's own
509
+ # data never included one (true for essentially any model
510
+ # whose caller doesn't explicitly generate an id, default
511
+ # pk_field/rk_field or a custom mapping alike), that property
512
+ # never existed, so the filter matched nothing -- `before`
513
+ # came back None, and DatabaseFactory.update()'s own pk/rk
514
+ # recovery (see this file's own 2.5.7 changelog entry for the
515
+ # closely related bug) had nothing to recover from, falling
516
+ # through to a literal `str(None) == "None"` PartitionKey.
517
+ # Reproduced directly before this fix, not assumed: a create
518
+ # with no "id" in its own payload, followed by
519
+ # read_one(model, {"id": <the id the create call itself
520
+ # returned>}), always returned None.
521
+ if "id" not in data:
522
+ data = {**data, "id": safe_rk}
492
523
  entity = self._pack_entity(model, safe_pk, safe_rk, data)
493
524
  MAX_PROPERTY_CHARS = 30 * 1024
494
525