Skip to content

Commit aba4cf4

Browse files
author
Max Wang
committed
handle 1 record delete and strip @OData rows in get_dataframe returns
1 parent 6c599c1 commit aba4cf4

2 files changed

Lines changed: 13 additions & 4 deletions

File tree

src/PowerPlatform/Dataverse/client.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
from .core._auth import _AuthManager
1414
from .core.config import DataverseConfig
1515
from .data._odata import _ODataClient
16-
from .utils._pandas import dataframe_to_records
16+
from .utils._pandas import dataframe_to_records, strip_odata_keys
1717

1818

1919
class DataverseClient:
@@ -425,7 +425,7 @@ def get_dataframe(
425425
record_id=record_id,
426426
select=select,
427427
)
428-
return pd.DataFrame([result])
428+
return pd.DataFrame([strip_odata_keys(result)])
429429

430430
def _paged_df() -> Iterable[pd.DataFrame]:
431431
for batch in self.get(
@@ -437,7 +437,7 @@ def _paged_df() -> Iterable[pd.DataFrame]:
437437
expand=expand,
438438
page_size=page_size,
439439
):
440-
yield pd.DataFrame(batch)
440+
yield pd.DataFrame([strip_odata_keys(row) for row in batch])
441441

442442
return _paged_df()
443443

@@ -563,7 +563,11 @@ def delete_dataframe(
563563
if not isinstance(ids, pd.Series):
564564
raise TypeError("ids must be a pandas Series")
565565

566-
return self.delete(table_schema_name, ids.tolist(), use_bulk_delete=use_bulk_delete)
566+
id_list = ids.tolist()
567+
if len(id_list) == 1:
568+
return self.delete(table_schema_name, id_list[0])
569+
else:
570+
return self.delete(table_schema_name, id_list, use_bulk_delete=use_bulk_delete)
567571

568572
# SQL via Web API sql parameter
569573
def query_sql(self, sql: str):

src/PowerPlatform/Dataverse/utils/_pandas.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,8 @@ def dataframe_to_records(df: pd.DataFrame) -> List[Dict[str, Any]]:
2222
clean[k] = None
2323
records.append(clean)
2424
return records
25+
26+
27+
def strip_odata_keys(record: Dict[str, Any]) -> Dict[str, Any]:
28+
"""Remove OData metadata keys (keys containing '@') from a record dict."""
29+
return {k: v for k, v in record.items() if "@" not in k}

0 commit comments

Comments
 (0)