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
Bring the vehicles client up to date with the upstream tango "lakehouse
cutover" (May 2026). Adds new top-level fields, a `metrics(*)` shape
expansion, the `/api/vehicles/{uuid}/orders/` endpoint, an `ordering`
query param, and DeprecationWarning emission for fields the API now
sends a `Deprecation: true` header for.
Cassettes re-recorded against current production. Defaults verified to
match production's shape contract (organization is a leaf dict, /orders/
rejects `uuid`, organization payload includes `organization_id`).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: CHANGELOG.md
+14Lines changed: 14 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -7,6 +7,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
8
8
## [Unreleased]
9
9
10
+
### Added
11
+
- Vehicles: new top-level fields `program_acronym`, `idv_count`, `total_obligated`, `is_synthetic_solicitation`, `latest_award_date`, `description`, `opportunity_id`, and a live nested `organization` object (office hierarchy) — reflecting the upstream tango lakehouse cutover (May 2026).
12
+
- Vehicles: new `metrics(*)` shape expansion bundling 12 lakehouse metrics: `avg_offers_received`, `award_concentration_hhi`, `order_concentration_hhi`, `competed_rate`, `using_agency_count`, `avg_order_value`, `max_order_value`, `top_recipient_share`, `recent_obligations_24mo`, `recent_orders_24mo`, `days_since_last_order`, `obligation_to_ceiling_ratio`. Backed by a new `VehicleMetrics` schema.
13
+
-`list_vehicle_orders(uuid, ...)` for the new `/api/vehicles/{uuid}/orders/` endpoint, returning task orders under the vehicle's IDVs with two-phase pagination.
14
+
-`ordering` parameter on `list_vehicles` (whitelist: `vehicle_obligations`, `latest_award_date`; prefix `-` for descending) and on `list_vehicle_orders` (whitelist: `award_date`, `obligated`, `total_contract_value`).
15
+
-`ShapeConfig.VEHICLE_ORDERS_MINIMAL` default for the new orders endpoint.
16
+
-`Vehicle` and `VehicleMetrics` are now exported from the top-level `tango` package.
17
+
18
+
### Changed
19
+
-`ShapeConfig.VEHICLES_MINIMAL` and `VEHICLES_COMPREHENSIVE` now include the new top-level fields and the `organization` expansion. `VEHICLES_COMPREHENSIVE` defaults to `metrics(*)` and no longer pulls the deprecated `competition_details(*)` blob.
20
+
21
+
### Deprecated
22
+
- Vehicles shape fields `agency_details`, `competition_details`, and the `opportunity` expansion. The upstream API now sends a `Deprecation: true` header for these and recomputes them at request time. Explicit use in `shape=...` emits a Python `DeprecationWarning`. Sunset timeline TBD upstream.
List task orders under a vehicle's IDVs (`/api/vehicles/{uuid}/orders/`). Backed by a denormalized lakehouse table for fast pagination over large vehicles.
560
+
561
+
```python
562
+
orders = client.list_vehicle_orders(
563
+
uuid="00000000-0000-0000-0000-000000000001",
564
+
limit=25,
565
+
ordering="-obligated",
566
+
shape=ShapeConfig.VEHICLE_ORDERS_MINIMAL,
567
+
)
568
+
```
569
+
570
+
**Parameters:**
571
+
-`uuid` (str): Vehicle UUID
572
+
-`page` (int): Page number (default: 1)
573
+
-`limit` (int): Results per page (default: 25, max: 100)
574
+
-`ordering` (str, optional): Server-side sort. Allowed: `award_date` (default), `obligated`, `total_contract_value`. Prefix with `-` for descending.
575
+
-`shape` (str, optional): Shape string (defaults to `ShapeConfig.VEHICLE_ORDERS_MINIMAL`)
576
+
-`flat`, `flat_lists`, `joiner`: as on other vehicles methods
577
+
578
+
**Returns:**[PaginatedResponse](#paginatedresponse) with order (Contract) dictionaries
579
+
580
+
### Vehicle response fields
581
+
582
+
The post-cutover (May 2026) vehicle response includes these top-level fields, all addressable via the `shape` parameter:
583
+
584
+
| Field | Type | Notes |
585
+
| ----- | ---- | ----- |
586
+
|`uuid`| str | Stable identifier. |
587
+
|`solicitation_identifier`| str | Solicitation shared by underlying IDVs. |
588
+
|`is_synthetic_solicitation`| bool |`True` for GWAC orphans recovered via `ACRO:` prefix. |
589
+
|`agency_id`| str | From IDV award-key suffix. |
590
+
|`program_acronym`| str \| None | New post-cutover field. |
|`organization`| dict \| None | Live awarding-org snapshot `{organization_id, office_code, office_name, agency_code, agency_name, department_code, department_name}`. Selected as a leaf field (`shape=...,organization`); not currently sub-selectable. |
593
+
|`vehicle_type`, `who_can_use`, `type_of_idc`, `contract_type`| dict \| None | Returned as `{code, description}`. |
594
+
|`description`| str \| None | Common text across IDV descriptions. |
|`award_date`, `latest_award_date`, `last_date_to_order`| date \| None ||
599
+
|`solicitation_title`, `solicitation_description`, `solicitation_date`, `opportunity_id`| str / date / None | From SAM.gov via the linked Opportunity. |
600
+
|`naics_code`, `psc_code`, `set_aside`, `fiscal_year`| int / str / None ||
-`organization` — live awarding-org snapshot (selected as a leaf field; not sub-selectable).
607
+
608
+
### Deprecated shape fields
609
+
610
+
The following fields and expansions are still served by the API (recomputed at request time from the underlying IDVs) but the API now returns a `Deprecation: true` response header for them. They will be removed in a future tango API release.
611
+
612
+
-`agency_details` (top-level field and `agency_details(*)` expansion)
613
+
-`competition_details` (top-level field and `competition_details(*)` expansion)
614
+
-`opportunity(*)` expansion (use the new top-level `solicitation_*` and `opportunity_id` fields instead)
615
+
616
+
If you pass any of these in `shape=...`, the SDK will emit a Python `DeprecationWarning`. The default shapes (`VEHICLES_MINIMAL`, `VEHICLES_COMPREHENSIVE`) no longer include them.
**Available constants:** Contracts (`CONTRACTS_MINIMAL`), Entities (`ENTITIES_MINIMAL`, `ENTITIES_COMPREHENSIVE`), Forecasts, Opportunities, Notices, Grants, IDVs, Vehicles, Organizations, OTAs, OTIDVs, Subawards. See [API Reference – ShapeConfig](API_REFERENCE.md#shapeconfig-predefined-shapes) for the full table and which method uses which constant.
60
+
**Available constants:** Contracts (`CONTRACTS_MINIMAL`), Entities (`ENTITIES_MINIMAL`, `ENTITIES_COMPREHENSIVE`), Forecasts, Opportunities, Notices, Grants, IDVs, Vehicles (`VEHICLES_MINIMAL`, `VEHICLES_COMPREHENSIVE`, `VEHICLE_AWARDEES_MINIMAL`, `VEHICLE_ORDERS_MINIMAL`), Organizations, OTAs, OTIDVs, Subawards. See [API Reference – ShapeConfig](API_REFERENCE.md#shapeconfig-predefined-shapes) for the full table and which method uses which constant.
61
+
62
+
> **Vehicles `metrics(*)` expansion:** The post-cutover (May 2026) vehicles surface bundles 12 lakehouse metrics under a single `metrics(*)` expansion (e.g. `award_concentration_hhi`, `competed_rate`, `top_recipient_share`). It is included in `VEHICLES_COMPREHENSIVE` by default. The `agency_details`, `competition_details`, and `opportunity` shape entries are deprecated and emit `DeprecationWarning` if requested explicitly.
0 commit comments