Skip to content

Commit 774102a

Browse files
Abel Milashclaude
andcommitted
Simplify async _async_odata.py: replace multi-pass comprehensions with for loops
Five methods used [await ... for x in xs] list comprehensions followed by zip or a second pass, running coroutines sequentially but with unnecessary complexity. Replaced with plain for loops that match the sync _odata.py structure exactly: _upsert_multiple, _build_create_multiple, _build_update_multiple_from_records, _build_upsert_multiple, _delete_columns. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent c4d5614 commit 774102a

1 file changed

Lines changed: 22 additions & 23 deletions

File tree

src/PowerPlatform/Dataverse/aio/data/_async_odata.py

Lines changed: 22 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -365,11 +365,11 @@ async def _upsert_multiple(
365365
f"alternate_keys and records must have the same length " f"({len(alternate_keys)} != {len(records)})"
366366
)
367367
logical_name = table_schema_name.lower()
368-
lowered_records = [self._lowercase_keys(r) for r in records]
369-
converted = [await self._convert_labels_to_ints(table_schema_name, r) for r in lowered_records]
370368
targets: List[Dict[str, Any]] = []
371-
for alt_key, record_processed in zip(alternate_keys, converted):
369+
for alt_key, record in zip(alternate_keys, records):
372370
alt_key_lower = self._lowercase_keys(alt_key)
371+
record_processed = self._lowercase_keys(record)
372+
record_processed = await self._convert_labels_to_ints(table_schema_name, record_processed)
373373
conflicting = {
374374
k for k in set(alt_key_lower) & set(record_processed) if alt_key_lower[k] != record_processed[k]
375375
}
@@ -1475,11 +1475,8 @@ async def _delete_columns(
14751475
deleted: List[str] = []
14761476
needs_picklist_flush = False
14771477

1478-
attr_metas = [
1479-
await self._get_attribute_metadata(metadata_id, col, extra_select="@odata.type,AttributeType")
1480-
for col in names
1481-
]
1482-
for column_name, attr_meta in zip(names, attr_metas):
1478+
for column_name in names:
1479+
attr_meta = await self._get_attribute_metadata(metadata_id, column_name, extra_select="@odata.type,AttributeType")
14831480
if not attr_meta:
14841481
raise MetadataError(
14851482
f"Column '{column_name}' not found on table '{entity_schema}'.",
@@ -1535,12 +1532,13 @@ async def _build_create_multiple(
15351532
if not all(isinstance(r, dict) for r in records):
15361533
raise TypeError("All items for multi-create must be dicts")
15371534
logical_name = table.lower()
1538-
lowered = [self._lowercase_keys(r) for r in records]
1539-
converted = [await self._convert_labels_to_ints(table, r) for r in lowered]
1540-
enriched = [
1541-
{**r, "@odata.type": f"Microsoft.Dynamics.CRM.{logical_name}"} if "@odata.type" not in r else r
1542-
for r in converted
1543-
]
1535+
enriched = []
1536+
for r in records:
1537+
r = self._lowercase_keys(r)
1538+
r = await self._convert_labels_to_ints(table, r)
1539+
if "@odata.type" not in r:
1540+
r = {**r, "@odata.type": f"Microsoft.Dynamics.CRM.{logical_name}"}
1541+
enriched.append(r)
15441542
return _RawRequest(
15451543
method="POST",
15461544
url=f"{self.api}/{entity_set}/Microsoft.Dynamics.CRM.CreateMultiple",
@@ -1588,12 +1586,13 @@ async def _build_update_multiple_from_records(
15881586
:meth:`_build_update_multiple` (which assembles from ids + changes).
15891587
"""
15901588
logical_name = table.lower()
1591-
lowered = [self._lowercase_keys(r) for r in records]
1592-
converted = [await self._convert_labels_to_ints(table, r) for r in lowered]
1593-
enriched = [
1594-
{**r, "@odata.type": f"Microsoft.Dynamics.CRM.{logical_name}"} if "@odata.type" not in r else r
1595-
for r in converted
1596-
]
1589+
enriched = []
1590+
for r in records:
1591+
r = self._lowercase_keys(r)
1592+
r = await self._convert_labels_to_ints(table, r)
1593+
if "@odata.type" not in r:
1594+
r = {**r, "@odata.type": f"Microsoft.Dynamics.CRM.{logical_name}"}
1595+
enriched.append(r)
15971596
return _RawRequest(
15981597
method="POST",
15991598
url=f"{self.api}/{entity_set}/Microsoft.Dynamics.CRM.UpdateMultiple",
@@ -1658,11 +1657,11 @@ async def _build_upsert_multiple(
16581657
subcode="upsert_length_mismatch",
16591658
)
16601659
logical_name = table.lower()
1661-
lowered_records = [self._lowercase_keys(r) for r in records]
1662-
converted = [await self._convert_labels_to_ints(table, r) for r in lowered_records]
16631660
targets: List[Dict[str, Any]] = []
1664-
for alt_key, record_processed in zip(alternate_keys, converted):
1661+
for alt_key, record in zip(alternate_keys, records):
16651662
alt_key_lower = self._lowercase_keys(alt_key)
1663+
record_processed = self._lowercase_keys(record)
1664+
record_processed = await self._convert_labels_to_ints(table, record_processed)
16661665
conflicting = {
16671666
k for k in set(alt_key_lower) & set(record_processed) if alt_key_lower[k] != record_processed[k]
16681667
}

0 commit comments

Comments
 (0)