Skip to content

Commit fa166f5

Browse files
brownjuly2003-codeJuliaEdomclaude
authored
chore(ci): put sdk/ under the ruff lint+format gate (#167)
The published PyPI package was gated weaker than src/: ci.yml ran ruff only over src/tests/scripts, so sdk/ accumulated format drift (async_client.py, cli.py, client.py). Add sdk/ to both ruff steps and apply the one-off `ruff format sdk/`. Makefile lint/format targets get scripts/ and sdk/ too, so `make lint` now matches CI exactly. Formatting-only for the SDK sources; no behaviour change. Co-authored-by: JuliaEdom <uedomskikh@gmail.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent 674fe64 commit fa166f5

5 files changed

Lines changed: 27 additions & 90 deletions

File tree

‎.github/workflows/ci.yml‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@ jobs:
2424
- name: Install dependencies
2525
run: pip install -e ".[dev]"
2626
- name: Ruff check
27-
run: ruff check src/ tests/ scripts/
27+
run: ruff check src/ tests/ scripts/ sdk/
2828
- name: Ruff format check
29-
run: ruff format --check src/ tests/ scripts/
29+
run: ruff format --check src/ tests/ scripts/ sdk/
3030
- name: Type check
3131
run: mypy src/ --ignore-missing-imports
3232

‎Makefile‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -105,13 +105,13 @@ perf-plot:
105105
# ── Code Quality ──────────────────────────────────────────────────
106106

107107
lint:
108-
ruff check src/ tests/
109-
ruff format --check src/ tests/
108+
ruff check src/ tests/ scripts/ sdk/
109+
ruff format --check src/ tests/ scripts/ sdk/
110110
mypy src/
111111

112112
format:
113-
ruff format src/ tests/
114-
ruff check --fix src/ tests/
113+
ruff format src/ tests/ scripts/ sdk/
114+
ruff check --fix src/ tests/ scripts/ sdk/
115115

116116
# ── Build & Deploy ────────────────────────────────────────────────
117117

‎sdk/agentflow/async_client.py‎

Lines changed: 10 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -197,9 +197,7 @@ def _record_version_headers(self, headers: httpx.Headers) -> None:
197197
self._last_server_version = headers.get("X-AgentFlow-Version")
198198
self._last_latest_version = headers.get("X-AgentFlow-Latest-Version")
199199
self._last_deprecated = headers.get("X-AgentFlow-Deprecated")
200-
self._last_deprecation_warning = headers.get(
201-
"X-AgentFlow-Deprecation-Warning"
202-
)
200+
self._last_deprecation_warning = headers.get("X-AgentFlow-Deprecation-Warning")
203201

204202
async def _get_entity(
205203
self,
@@ -219,9 +217,7 @@ def _parse_contract_versions(
219217
return {}
220218
entity, separator, version = contract_version.partition(":")
221219
if not separator or not entity or not version:
222-
raise ValueError(
223-
"contract_version must use '<entity>:<version>' format."
224-
)
220+
raise ValueError("contract_version must use '<entity>:<version>' format.")
225221
return {entity: version[1:] if version.startswith("v") else version}
226222

227223
async def _apply_contract_version(
@@ -234,27 +230,14 @@ async def _apply_contract_version(
234230
return payload
235231
contract = await self._get_contract(entity_type, version)
236232
fields = contract.get("fields", [])
237-
required_fields = [
238-
field["name"]
239-
for field in fields
240-
if field.get("required")
241-
]
242-
missing_fields = [
243-
field_name
244-
for field_name in required_fields
245-
if field_name not in payload
246-
]
233+
required_fields = [field["name"] for field in fields if field.get("required")]
234+
missing_fields = [field_name for field_name in required_fields if field_name not in payload]
247235
if missing_fields:
248236
raise AgentFlowError(
249-
"Contract validation failed. Missing required fields: "
250-
+ ", ".join(missing_fields)
237+
"Contract validation failed. Missing required fields: " + ", ".join(missing_fields)
251238
)
252239
allowed_fields = {field["name"] for field in fields}
253-
return {
254-
name: value
255-
for name, value in payload.items()
256-
if name in allowed_fields
257-
}
240+
return {name: value for name, value in payload.items() if name in allowed_fields}
258241

259242
async def _get_contract(self, entity_type: str, version: str) -> dict[str, Any]:
260243
cache_key = (entity_type, version)
@@ -355,11 +338,7 @@ async def _query_page(
355338
payload["limit"] = limit
356339
if cursor is not None:
357340
payload["cursor"] = cursor
358-
headers = (
359-
{"Idempotency-Key": idempotency_key}
360-
if idempotency_key is not None
361-
else None
362-
)
341+
headers = {"Idempotency-Key": idempotency_key} if idempotency_key is not None else None
363342
return await self._request("POST", "/v1/query", json=payload, headers=headers)
364343

365344
async def query(
@@ -404,8 +383,7 @@ async def search(
404383
async def list_contracts(self) -> list[ContractSummary]:
405384
payload = await self._request("GET", "/v1/contracts")
406385
return [
407-
ContractSummary.model_validate(contract)
408-
for contract in payload.get("contracts", [])
386+
ContractSummary.model_validate(contract) for contract in payload.get("contracts", [])
409387
]
410388

411389
async def get_contract(
@@ -438,11 +416,7 @@ async def validate_contract(
438416
*,
439417
idempotency_key: str | None = None,
440418
) -> ContractValidation:
441-
headers = (
442-
{"Idempotency-Key": idempotency_key}
443-
if idempotency_key is not None
444-
else None
445-
)
419+
headers = {"Idempotency-Key": idempotency_key} if idempotency_key is not None else None
446420
response = await self._request(
447421
"POST",
448422
f"/v1/contracts/{entity}/validate",
@@ -500,11 +474,7 @@ async def batch(
500474
*,
501475
idempotency_key: str | None = None,
502476
) -> dict[str, Any]:
503-
headers = (
504-
{"Idempotency-Key": idempotency_key}
505-
if idempotency_key is not None
506-
else None
507-
)
477+
headers = {"Idempotency-Key": idempotency_key} if idempotency_key is not None else None
508478
return await self._request(
509479
"POST",
510480
"/v1/batch",

‎sdk/agentflow/cli.py‎

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -124,10 +124,7 @@ def _scaffold_project(
124124
continue
125125
relative_path = source_path.relative_to(template_dir)
126126
target_path = project_dir.joinpath(
127-
*[
128-
part[:-5] if part.endswith(".tmpl") else part
129-
for part in relative_path.parts
130-
]
127+
*[part[:-5] if part.endswith(".tmpl") else part for part in relative_path.parts]
131128
)
132129
target_path.parent.mkdir(parents=True, exist_ok=True)
133130
rendered = _render_template(

‎sdk/agentflow/client.py‎

Lines changed: 10 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -197,9 +197,7 @@ def _record_version_headers(self, headers: httpx.Headers) -> None:
197197
self._last_server_version = headers.get("X-AgentFlow-Version")
198198
self._last_latest_version = headers.get("X-AgentFlow-Latest-Version")
199199
self._last_deprecated = headers.get("X-AgentFlow-Deprecated")
200-
self._last_deprecation_warning = headers.get(
201-
"X-AgentFlow-Deprecation-Warning"
202-
)
200+
self._last_deprecation_warning = headers.get("X-AgentFlow-Deprecation-Warning")
203201

204202
def _get_entity(
205203
self,
@@ -222,9 +220,7 @@ def _parse_contract_versions(
222220
return {}
223221
entity, separator, version = contract_version.partition(":")
224222
if not separator or not entity or not version:
225-
raise ValueError(
226-
"contract_version must use '<entity>:<version>' format."
227-
)
223+
raise ValueError("contract_version must use '<entity>:<version>' format.")
228224
return {entity: version[1:] if version.startswith("v") else version}
229225

230226
def _apply_contract_version(
@@ -237,27 +233,14 @@ def _apply_contract_version(
237233
return payload
238234
contract = self._get_contract(entity_type, version)
239235
fields = contract.get("fields", [])
240-
required_fields = [
241-
field["name"]
242-
for field in fields
243-
if field.get("required")
244-
]
245-
missing_fields = [
246-
field_name
247-
for field_name in required_fields
248-
if field_name not in payload
249-
]
236+
required_fields = [field["name"] for field in fields if field.get("required")]
237+
missing_fields = [field_name for field_name in required_fields if field_name not in payload]
250238
if missing_fields:
251239
raise AgentFlowError(
252-
"Contract validation failed. Missing required fields: "
253-
+ ", ".join(missing_fields)
240+
"Contract validation failed. Missing required fields: " + ", ".join(missing_fields)
254241
)
255242
allowed_fields = {field["name"] for field in fields}
256-
return {
257-
name: value
258-
for name, value in payload.items()
259-
if name in allowed_fields
260-
}
243+
return {name: value for name, value in payload.items() if name in allowed_fields}
261244

262245
def _get_contract(self, entity_type: str, version: str) -> dict[str, Any]:
263246
cache_key = (entity_type, version)
@@ -359,11 +342,7 @@ def _query_page(
359342
payload["limit"] = limit
360343
if cursor is not None:
361344
payload["cursor"] = cursor
362-
headers = (
363-
{"Idempotency-Key": idempotency_key}
364-
if idempotency_key is not None
365-
else None
366-
)
345+
headers = {"Idempotency-Key": idempotency_key} if idempotency_key is not None else None
367346
return self._request("POST", "/v1/query", json=payload, headers=headers)
368347

369348
def query(
@@ -408,8 +387,7 @@ def search(
408387
def list_contracts(self) -> list[ContractSummary]:
409388
payload = self._request("GET", "/v1/contracts")
410389
return [
411-
ContractSummary.model_validate(contract)
412-
for contract in payload.get("contracts", [])
390+
ContractSummary.model_validate(contract) for contract in payload.get("contracts", [])
413391
]
414392

415393
def get_contract(
@@ -442,11 +420,7 @@ def validate_contract(
442420
*,
443421
idempotency_key: str | None = None,
444422
) -> ContractValidation:
445-
headers = (
446-
{"Idempotency-Key": idempotency_key}
447-
if idempotency_key is not None
448-
else None
449-
)
423+
headers = {"Idempotency-Key": idempotency_key} if idempotency_key is not None else None
450424
response = self._request(
451425
"POST",
452426
f"/v1/contracts/{entity}/validate",
@@ -504,11 +478,7 @@ def batch(
504478
*,
505479
idempotency_key: str | None = None,
506480
) -> dict[str, Any]:
507-
headers = (
508-
{"Idempotency-Key": idempotency_key}
509-
if idempotency_key is not None
510-
else None
511-
)
481+
headers = {"Idempotency-Key": idempotency_key} if idempotency_key is not None else None
512482
return self._request(
513483
"POST",
514484
"/v1/batch",

0 commit comments

Comments
 (0)