Skip to content

Commit c610af5

Browse files
Abel Milashclaude
andcommitted
Remove non-async changes from async PR: revert migration tool path, restore typed signatures and docstrings
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 16084a1 commit c610af5

7 files changed

Lines changed: 25 additions & 18 deletions

File tree

pyproject.toml

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ dependencies = [
4040

4141
[project.scripts]
4242
dataverse-install-claude-skill = "PowerPlatform.Dataverse._skill_installer:main"
43-
dataverse-migrate = "tools.migrate_v0_to_v1:main"
43+
dataverse-migrate = "PowerPlatform.Dataverse.migration.migrate_v0_to_v1:main"
4444

4545
[project.optional-dependencies]
4646
async = [
@@ -58,12 +58,12 @@ dev = [
5858
migration = ["libcst>=1.0.0"]
5959

6060
[tool.setuptools]
61-
package-dir = {"" = "src", "tools" = "tools"}
61+
package-dir = {"" = "src"}
6262
zip-safe = false
6363

6464
[tool.setuptools.packages.find]
65-
where = ["src", "."]
66-
include = ["PowerPlatform*", "tools"]
65+
where = ["src"]
66+
include = ["PowerPlatform*"]
6767
namespaces = false
6868

6969
[tool.setuptools.package-data]
@@ -103,10 +103,12 @@ asyncio_mode = "auto"
103103

104104
[tool.coverage.run]
105105
source = ["src/PowerPlatform"]
106-
omit = [
107-
"*/Dataverse/_skill_installer.py",
108-
"*/Dataverse/extensions/__init__.py",
109-
]
106+
# Migration codemod is an opt-in tool (requires the [migration] extra).
107+
# It is exercised by tests/unit/test_migration_tool.py and tests/unit/test_phase4_ga.py,
108+
# but its CLI plumbing and libcst error-path branches are not meaningfully testable
109+
# under the default coverage scope. Exclude from coverage reporting so the metric
110+
# reflects core SDK code only.
111+
omit = ["src/PowerPlatform/Dataverse/migration/*"]
110112

111113
[tool.coverage.report]
112114
fail_under = 90

src/PowerPlatform/Dataverse/client.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ def __init__(
105105
) -> None:
106106
if config is not None and context is not None:
107107
raise ValueError(
108-
"Cannot specify both 'config' and 'context'. " "Pass operation_context via DataverseConfig instead."
108+
"Cannot specify both 'config' and 'context'. Pass operation_context via DataverseConfig instead."
109109
)
110110
self.auth = _AuthManager(credential)
111111
self._base_url = (base_url or "").rstrip("/")

src/PowerPlatform/Dataverse/models/record.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from __future__ import annotations
77

88
from dataclasses import dataclass, field
9-
from typing import Any, Dict, Iterator, KeysView, List, Optional, ValuesView, ItemsView
9+
from typing import Any, Dict, Iterator, KeysView, List, Optional, Union, ValuesView, ItemsView
1010

1111
__all__ = ["Record", "QueryResult"]
1212

@@ -141,7 +141,7 @@ def __bool__(self) -> bool:
141141
def __repr__(self) -> str:
142142
return f"QueryResult({len(self.records)} records)"
143143

144-
def __getitem__(self, index):
144+
def __getitem__(self, index: Union[int, slice]) -> Union[Record, "QueryResult"]:
145145
result = self.records[index]
146146
return QueryResult(result) if isinstance(index, slice) else result
147147

src/PowerPlatform/Dataverse/operations/query.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,14 @@ class QueryOperations:
3333
3434
Example::
3535
36+
from PowerPlatform.Dataverse.models.filters import col
37+
3638
client = DataverseClient(base_url, credential)
3739
3840
# Fluent query builder (recommended)
3941
for record in (client.query.builder("account")
4042
.select("name", "revenue")
41-
.filter_eq("statecode", 0)
43+
.where(col("statecode") == 0)
4244
.order_by("revenue", descending=True)
4345
.top(100)
4446
.execute()):
@@ -72,8 +74,8 @@ def builder(self, table: str) -> QueryBuilder:
7274
7375
for record in (client.query.builder("account")
7476
.select("name", "revenue")
75-
.filter_eq("statecode", 0)
76-
.filter_gt("revenue", 1000000)
77+
.where(col("statecode") == 0)
78+
.where(col("revenue") > 1_000_000)
7779
.order_by("revenue", descending=True)
7880
.top(100)
7981
.page_size(50)
@@ -82,11 +84,11 @@ def builder(self, table: str) -> QueryBuilder:
8284
8385
With composable expression tree::
8486
85-
from PowerPlatform.Dataverse.models.filters import eq, gt
87+
from PowerPlatform.Dataverse.models.filters import col
8688
8789
for record in (client.query.builder("account")
88-
.where((eq("statecode", 0) | eq("statecode", 1))
89-
& gt("revenue", 100000))
90+
.where((col("statecode") == 0) | (col("statecode") == 1))
91+
.where(col("revenue") > 100_000)
9092
.execute()):
9193
print(record["name"])
9294
"""

tests/unit/models/test_query_builder.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -891,6 +891,7 @@ def test_to_dataframe_forwards_count_and_annotations(self):
891891
def test_to_dataframe_with_record_objects(self):
892892
"""to_dataframe() handles Record objects (with .data attribute)."""
893893
import pandas as pd
894+
from PowerPlatform.Dataverse.models.record import Record
894895

895896
mock_query_ops, _ = self._make_od(
896897
[

tests/unit/test_phase1_ga.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -391,6 +391,8 @@ def test_dataframe_get_warning_message(self):
391391

392392
def test_dataframe_other_methods_no_warning(self):
393393
"""dataframe.sql(), dataframe.create(), etc. must NOT warn."""
394+
import pandas as pd
395+
from PowerPlatform.Dataverse.models.record import Record
394396

395397
self.client._odata._query_sql.return_value = []
396398

tests/unit/test_phase3_ga.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
import unittest
1919
import warnings
2020
from dataclasses import dataclass
21-
from unittest.mock import MagicMock
21+
from unittest.mock import MagicMock, patch
2222

2323
from azure.core.credentials import TokenCredential
2424

0 commit comments

Comments
 (0)