You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Sync to Tango API v4.6.9: budget surface, singleton GETs, bug fixes (v1.1.0) (#31)
* feat: sync to Tango API v4.6.9 (budget surface, singleton GETs, bug fixes)
Phase 1 (bug fixes):
- Contract model: drop dead fields (id, award_id, recipient_name, award_amount,
awarding_agency, funding_agency); add real ContractListSerializer fields. Old
fields kept Optional/None + deprecation note, to be removed in 2.0.0.
- list_contracts: stop sending page=1 to the cursor-only /api/contracts/.
- add list_otidv_awards (parity with Node).
Phase 2 (additive):
- budget accounts surface: list_budget_accounts, get_budget_account,
get_budget_account_quarters, get_budget_account_recipients (+ BudgetAccount
model + shape schema).
- singleton detail GETs: get_contract, get_contract_subawards,
get_contract_transactions, get_forecast, get_grant, get_notice,
get_opportunity, get_subaward.
- get_entity_budget_flows(uei).
- grant_id filter on list_grants.
Phase 3 (CI):
- re-enable lint.yml as a PR gate; conformance split into a non-blocking job.
Version bump to 1.1.0.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* test: re-record contract integration cassettes for cursor-only pagination
The list_contracts page=1 removal changed the recorded request URI, so 32
contract/edge-case cassettes no longer matched. Re-recorded against live API
(v4.6.9). Two expensive filter queries (awarding_agency, multi-param search)
504 at the gateway on re-record, so those two cassettes retain their prior
valid 200 response with only the stale `&page=1` stripped from the request URI.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* fix(shapes): register ContractOrIDVCompetition nested schema alias
CONTRACT_SCHEMA/IDV_SCHEMA reference the competition leaf as
"ContractOrIDVCompetition" but only "Competition" was registered in
EXPLICIT_SCHEMAS, so competition(extent_competed,...) nested selections on
contract/IDV shapes raised ShapeValidationError. Register the name as an alias
of COMPETITION_SCHEMA. Fixes tango-python#29 item 1.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* ci(lint): make mypy advisory and conformance skip without token
Re-enabling lint.yml surfaced two pre-existing blockers unrelated to the API
sync: ~28 mypy errors that predate CI enforcement, and a conformance job that
fails because the private makegov/tango checkout needs an unconfigured
TANGO_API_REPO_ACCESS_TOKEN secret.
Keep ruff format + ruff check as hard gates (clean today). Make mypy advisory
(continue-on-error) pending a debt burn-down. Gate the conformance steps on the
token being present so the job skips cleanly (green) instead of failing red, and
becomes a real gate automatically once the secret exists.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* fix(types): align webhook alert parser with WebhookAlert contract
Clears the 4 mypy errors the v1.1.0 branch introduced over main's baseline.
_parse_webhook_alert now emits str/dict/Literal values matching the model's
declared types (sparse payloads hydrate "" / {} instead of None); cli sample
payload cast to dict for assignment.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: V. David Zvenyach <dave@zvenyach.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
0 commit comments