Skip to content

Commit bdeebb2

Browse files
authored
Regenerate the client for the API's new request fields (#286)
## Summary Regenerated against the local stack on robosystems `bugfix/input-validation-hardening` (companion to that PR and to robosystems-typescript-client #302). - Additive request fields: `SSOExchangeRequest.browser_nonce_hash`, `SSOCompleteRequest.browser_nonce`, `UpdateEventHandlerRequest.expected_updated_at` - Command bodies that now refuse unknown fields carry `additionalProperties: false`, so their models lose the unknown-field store (see below) - Operation descriptions caught up with main - GraphQL SDL snapshot: `Agent.taxId` changed position (it is an explicit resolver now); the generated models are unchanged ## Client contract A client **minor**. Generated tier, additive, with one removal that touches the stable tier and rides the minor as dead surface. **Removed:** `additional_properties`, `additional_keys` and the mapping methods (`__getitem__`, `__setitem__`, `__delitem__`, `__contains__`) on `AcceptSuggestionsRequest`, `BackupCreateRequest`, `CancelSubscriptionRequest`, `IndexDocumentOp`, `InitializeLedgerRequest`, `LearnClassificationDefaultsRequest`, `MaterializeOp`, `OperationResumeRequest`, `PromoteObligationsRequest`, `SyncConnectionRequest`. Name these in the release notes. `MaterializeOp` is stable tier (the integration template imports it). The removal skips the deprecation cycle as dead surface: - **It never functioned.** The server ignored unknown fields on these bodies and now refuses them, so nothing stored there ever had an effect. - **No consumer.** The integration template builds `MaterializeOp.from_dict({})`. The facades pass named fields only, and nothing reads or writes the unknown-field store on any of the ten models. - **Symbol resolution only.** No working call changes behaviour. ## Test plan - [x] `just test` — 737 passed, 17 skipped - [x] ruff / basedpyright (pre-commit) - [x] Regenerated independently from the server branch's `/openapi.json`: identical to this diff 🤖 Generated with [Claude Code](https://claude.com/claude-code)
2 parents b92ac45 + 633201c commit bdeebb2

20 files changed

Lines changed: 162 additions & 230 deletions

‎robosystems_client/api/connections/create_connection.py‎

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,9 @@ def sync_detailed(
115115
Plaid: returns a pending connection — `POST /oauth/init` returns a `link_token` for Plaid Link. A
116116
bank feed (Mercury, Plaid) names the entity its accounts book to (`entity_id`, the group parent when
117117
omitted) and is refused (409) when that entity has no chart of accounts or is the one QuickBooks
118-
keeps; QuickBooks is refused (409) when the group parent's books are already native.
118+
keeps. QuickBooks keeps the group parent's books only: `entity_id` may be omitted, and naming a
119+
subsidiary is refused (409 PARENT_ONLY); it is refused (409) too when the group parent's books are
120+
already native. Every connection's `entity_id` is the entity whose books it keeps.
119121
120122
Args:
121123
graph_id (str):
@@ -157,7 +159,9 @@ def sync(
157159
Plaid: returns a pending connection — `POST /oauth/init` returns a `link_token` for Plaid Link. A
158160
bank feed (Mercury, Plaid) names the entity its accounts book to (`entity_id`, the group parent when
159161
omitted) and is refused (409) when that entity has no chart of accounts or is the one QuickBooks
160-
keeps; QuickBooks is refused (409) when the group parent's books are already native.
162+
keeps. QuickBooks keeps the group parent's books only: `entity_id` may be omitted, and naming a
163+
subsidiary is refused (409 PARENT_ONLY); it is refused (409) too when the group parent's books are
164+
already native. Every connection's `entity_id` is the entity whose books it keeps.
161165
162166
Args:
163167
graph_id (str):
@@ -194,7 +198,9 @@ async def asyncio_detailed(
194198
Plaid: returns a pending connection — `POST /oauth/init` returns a `link_token` for Plaid Link. A
195199
bank feed (Mercury, Plaid) names the entity its accounts book to (`entity_id`, the group parent when
196200
omitted) and is refused (409) when that entity has no chart of accounts or is the one QuickBooks
197-
keeps; QuickBooks is refused (409) when the group parent's books are already native.
201+
keeps. QuickBooks keeps the group parent's books only: `entity_id` may be omitted, and naming a
202+
subsidiary is refused (409 PARENT_ONLY); it is refused (409) too when the group parent's books are
203+
already native. Every connection's `entity_id` is the entity whose books it keeps.
198204
199205
Args:
200206
graph_id (str):
@@ -234,7 +240,9 @@ async def asyncio(
234240
Plaid: returns a pending connection — `POST /oauth/init` returns a `link_token` for Plaid Link. A
235241
bank feed (Mercury, Plaid) names the entity its accounts book to (`entity_id`, the group parent when
236242
omitted) and is refused (409) when that entity has no chart of accounts or is the one QuickBooks
237-
keeps; QuickBooks is refused (409) when the group parent's books are already native.
243+
keeps. QuickBooks keeps the group parent's books only: `entity_id` may be omitted, and naming a
244+
subsidiary is refused (409 PARENT_ONLY); it is refused (409) too when the group parent's books are
245+
already native. Every connection's `entity_id` is the entity whose books it keeps.
238246
239247
Args:
240248
graph_id (str):

‎robosystems_client/api/connections/list_connections.py‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ def sync_detailed(
127127
128128
Args:
129129
graph_id (str):
130-
entity_id (None | str | Unset): Filter by entity ID
130+
entity_id (None | str | Unset): Only the connections that keep this entity's books
131131
provider (ListConnectionsProviderType0 | None | Unset): Filter by provider type
132132
133133
Raises:
@@ -162,7 +162,7 @@ def sync(
162162
163163
Args:
164164
graph_id (str):
165-
entity_id (None | str | Unset): Filter by entity ID
165+
entity_id (None | str | Unset): Only the connections that keep this entity's books
166166
provider (ListConnectionsProviderType0 | None | Unset): Filter by provider type
167167
168168
Raises:
@@ -192,7 +192,7 @@ async def asyncio_detailed(
192192
193193
Args:
194194
graph_id (str):
195-
entity_id (None | str | Unset): Filter by entity ID
195+
entity_id (None | str | Unset): Only the connections that keep this entity's books
196196
provider (ListConnectionsProviderType0 | None | Unset): Filter by provider type
197197
198198
Raises:
@@ -225,7 +225,7 @@ async def asyncio(
225225
226226
Args:
227227
graph_id (str):
228-
entity_id (None | str | Unset): Filter by entity ID
228+
entity_id (None | str | Unset): Only the connections that keep this entity's books
229229
provider (ListConnectionsProviderType0 | None | Unset): Filter by provider type
230230
231231
Raises:

‎robosystems_client/api/graph_operations/delete_graph.py‎

Lines changed: 44 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -114,9 +114,12 @@ def sync_detailed(
114114
Permanently destroys a user graph and cancels its subscription. Two modes via the `at_period_end`
115115
body flag: omit it (or pass `false`) to tear down immediately (~10 min); pass `true` to keep the
116116
graph usable through the current billing period and tear it down at the period boundary via the
117-
existing suspend → deprovision pipeline. Requires `confirm` to equal the URL `graph_id`. Caller must
118-
be both org owner (billing authority) and admin on the graph (operational authority). Not allowed on
119-
shared repositories.
117+
existing suspend → deprovision pipeline. An immediate delete credits the unused part of the billed
118+
period; it is not refunded. On a card-billed plan the credit goes to the organization's account
119+
balance and is applied to its next invoice; on an invoiced plan it is a credit line on that period's
120+
invoice, or a separate credit invoice if that one is already paid. Requires `confirm` to equal the
121+
URL `graph_id`. Caller must be both org owner (billing authority) and admin on the graph
122+
(operational authority). Not allowed on shared repositories.
120123
121124
**Idempotency**: supply an `Idempotency-Key` header to make safe retries; replays within 24 hours
122125
return the same envelope. Reusing the key with a different body returns HTTP 409 Conflict.
@@ -130,7 +133,11 @@ def sync_detailed(
130133
131134
- **Immediate** (default): subscription canceled now (`ends_at = now`) and
132135
fast-path deprovisioning fires within ~10 minutes. Use when you want
133-
the data gone and the slot freed right away.
136+
the data gone and the slot freed right away. The unused part of the
137+
billed period is credited, not refunded: on a card-billed plan to the
138+
organization's account balance, applied to its next invoice; on an
139+
invoiced plan as a credit on that period's invoice, or a separate credit
140+
invoice if it is already paid.
134141
- **At period end** (`at_period_end=true`): subscription canceled but
135142
`ends_at = current_period_end` so the graph stays usable through the
136143
paid period. The existing suspend → deprovision sensor pipeline tears
@@ -172,9 +179,12 @@ def sync(
172179
Permanently destroys a user graph and cancels its subscription. Two modes via the `at_period_end`
173180
body flag: omit it (or pass `false`) to tear down immediately (~10 min); pass `true` to keep the
174181
graph usable through the current billing period and tear it down at the period boundary via the
175-
existing suspend → deprovision pipeline. Requires `confirm` to equal the URL `graph_id`. Caller must
176-
be both org owner (billing authority) and admin on the graph (operational authority). Not allowed on
177-
shared repositories.
182+
existing suspend → deprovision pipeline. An immediate delete credits the unused part of the billed
183+
period; it is not refunded. On a card-billed plan the credit goes to the organization's account
184+
balance and is applied to its next invoice; on an invoiced plan it is a credit line on that period's
185+
invoice, or a separate credit invoice if that one is already paid. Requires `confirm` to equal the
186+
URL `graph_id`. Caller must be both org owner (billing authority) and admin on the graph
187+
(operational authority). Not allowed on shared repositories.
178188
179189
**Idempotency**: supply an `Idempotency-Key` header to make safe retries; replays within 24 hours
180190
return the same envelope. Reusing the key with a different body returns HTTP 409 Conflict.
@@ -188,7 +198,11 @@ def sync(
188198
189199
- **Immediate** (default): subscription canceled now (`ends_at = now`) and
190200
fast-path deprovisioning fires within ~10 minutes. Use when you want
191-
the data gone and the slot freed right away.
201+
the data gone and the slot freed right away. The unused part of the
202+
billed period is credited, not refunded: on a card-billed plan to the
203+
organization's account balance, applied to its next invoice; on an
204+
invoiced plan as a credit on that period's invoice, or a separate credit
205+
invoice if it is already paid.
192206
- **At period end** (`at_period_end=true`): subscription canceled but
193207
`ends_at = current_period_end` so the graph stays usable through the
194208
paid period. The existing suspend → deprovision sensor pipeline tears
@@ -225,9 +239,12 @@ async def asyncio_detailed(
225239
Permanently destroys a user graph and cancels its subscription. Two modes via the `at_period_end`
226240
body flag: omit it (or pass `false`) to tear down immediately (~10 min); pass `true` to keep the
227241
graph usable through the current billing period and tear it down at the period boundary via the
228-
existing suspend → deprovision pipeline. Requires `confirm` to equal the URL `graph_id`. Caller must
229-
be both org owner (billing authority) and admin on the graph (operational authority). Not allowed on
230-
shared repositories.
242+
existing suspend → deprovision pipeline. An immediate delete credits the unused part of the billed
243+
period; it is not refunded. On a card-billed plan the credit goes to the organization's account
244+
balance and is applied to its next invoice; on an invoiced plan it is a credit line on that period's
245+
invoice, or a separate credit invoice if that one is already paid. Requires `confirm` to equal the
246+
URL `graph_id`. Caller must be both org owner (billing authority) and admin on the graph
247+
(operational authority). Not allowed on shared repositories.
231248
232249
**Idempotency**: supply an `Idempotency-Key` header to make safe retries; replays within 24 hours
233250
return the same envelope. Reusing the key with a different body returns HTTP 409 Conflict.
@@ -241,7 +258,11 @@ async def asyncio_detailed(
241258
242259
- **Immediate** (default): subscription canceled now (`ends_at = now`) and
243260
fast-path deprovisioning fires within ~10 minutes. Use when you want
244-
the data gone and the slot freed right away.
261+
the data gone and the slot freed right away. The unused part of the
262+
billed period is credited, not refunded: on a card-billed plan to the
263+
organization's account balance, applied to its next invoice; on an
264+
invoiced plan as a credit on that period's invoice, or a separate credit
265+
invoice if it is already paid.
245266
- **At period end** (`at_period_end=true`): subscription canceled but
246267
`ends_at = current_period_end` so the graph stays usable through the
247268
paid period. The existing suspend → deprovision sensor pipeline tears
@@ -281,9 +302,12 @@ async def asyncio(
281302
Permanently destroys a user graph and cancels its subscription. Two modes via the `at_period_end`
282303
body flag: omit it (or pass `false`) to tear down immediately (~10 min); pass `true` to keep the
283304
graph usable through the current billing period and tear it down at the period boundary via the
284-
existing suspend → deprovision pipeline. Requires `confirm` to equal the URL `graph_id`. Caller must
285-
be both org owner (billing authority) and admin on the graph (operational authority). Not allowed on
286-
shared repositories.
305+
existing suspend → deprovision pipeline. An immediate delete credits the unused part of the billed
306+
period; it is not refunded. On a card-billed plan the credit goes to the organization's account
307+
balance and is applied to its next invoice; on an invoiced plan it is a credit line on that period's
308+
invoice, or a separate credit invoice if that one is already paid. Requires `confirm` to equal the
309+
URL `graph_id`. Caller must be both org owner (billing authority) and admin on the graph
310+
(operational authority). Not allowed on shared repositories.
287311
288312
**Idempotency**: supply an `Idempotency-Key` header to make safe retries; replays within 24 hours
289313
return the same envelope. Reusing the key with a different body returns HTTP 409 Conflict.
@@ -297,7 +321,11 @@ async def asyncio(
297321
298322
- **Immediate** (default): subscription canceled now (`ends_at = now`) and
299323
fast-path deprovisioning fires within ~10 minutes. Use when you want
300-
the data gone and the slot freed right away.
324+
the data gone and the slot freed right away. The unused part of the
325+
billed period is credited, not refunded: on a card-billed plan to the
326+
organization's account balance, applied to its next invoice; on an
327+
invoiced plan as a credit on that period's invoice, or a separate credit
328+
invoice if it is already paid.
301329
- **At period end** (`at_period_end=true`): subscription canceled but
302330
`ends_at = current_period_end` so the graph stays usable through the
303331
paid period. The existing suspend → deprovision sensor pipeline tears

‎robosystems_client/graphql/schema.graphql‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1848,7 +1848,6 @@ type Agent {
18481848
agentType: String!
18491849
name: String!
18501850
legalName: String
1851-
taxId: String
18521851
registrationNumber: String
18531852
duns: String
18541853
lei: String
@@ -1864,6 +1863,7 @@ type Agent {
18641863
createdAt: DateTime
18651864
updatedAt: DateTime
18661865
createdBy: String
1866+
taxId: String
18671867
openReceivable: OpenBalanceByAgent
18681868
openPayable: OpenBalanceByAgent
18691869
}

‎robosystems_client/models/accept_suggestions_request.py‎

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
from typing import Any, TypeVar, cast
66

77
from attrs import define as _attrs_define
8-
from attrs import field as _attrs_field
98

109
from ..types import UNSET, Unset
1110

@@ -44,7 +43,6 @@ class AcceptSuggestionsRequest:
4443
commit: bool | Unset = False
4544
limit: int | Unset = 200
4645
dry_run: bool | Unset = False
47-
additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
4846

4947
def to_dict(self) -> dict[str, Any]:
5048
entity_id: None | str | Unset
@@ -103,7 +101,7 @@ def to_dict(self) -> dict[str, Any]:
103101
dry_run = self.dry_run
104102

105103
field_dict: dict[str, Any] = {}
106-
field_dict.update(self.additional_properties)
104+
107105
field_dict.update({})
108106
if entity_id is not UNSET:
109107
field_dict["entity_id"] = entity_id
@@ -238,21 +236,4 @@ def _parse_occurred_to(data: object) -> datetime.date | None | Unset:
238236
dry_run=dry_run,
239237
)
240238

241-
accept_suggestions_request.additional_properties = d
242239
return accept_suggestions_request
243-
244-
@property
245-
def additional_keys(self) -> list[str]:
246-
return list(self.additional_properties.keys())
247-
248-
def __getitem__(self, key: str) -> Any:
249-
return self.additional_properties[key]
250-
251-
def __setitem__(self, key: str, value: Any) -> None:
252-
self.additional_properties[key] = value
253-
254-
def __delitem__(self, key: str) -> None:
255-
del self.additional_properties[key]
256-
257-
def __contains__(self, key: str) -> bool:
258-
return key in self.additional_properties

‎robosystems_client/models/backup_create_request.py‎

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
from typing import Any, TypeVar, cast
55

66
from attrs import define as _attrs_define
7-
from attrs import field as _attrs_field
87

98
from ..types import UNSET, Unset
109

@@ -31,7 +30,6 @@ class BackupCreateRequest:
3130
retention_days: int | Unset = 30
3231
compression: bool | Unset = True
3332
schedule: None | str | Unset = UNSET
34-
additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
3533

3634
def to_dict(self) -> dict[str, Any]:
3735
backup_format = self.backup_format
@@ -49,7 +47,7 @@ def to_dict(self) -> dict[str, Any]:
4947
schedule = self.schedule
5048

5149
field_dict: dict[str, Any] = {}
52-
field_dict.update(self.additional_properties)
50+
5351
field_dict.update({})
5452
if backup_format is not UNSET:
5553
field_dict["backup_format"] = backup_format
@@ -92,21 +90,4 @@ def _parse_schedule(data: object) -> None | str | Unset:
9290
schedule=schedule,
9391
)
9492

95-
backup_create_request.additional_properties = d
9693
return backup_create_request
97-
98-
@property
99-
def additional_keys(self) -> list[str]:
100-
return list(self.additional_properties.keys())
101-
102-
def __getitem__(self, key: str) -> Any:
103-
return self.additional_properties[key]
104-
105-
def __setitem__(self, key: str, value: Any) -> None:
106-
self.additional_properties[key] = value
107-
108-
def __delitem__(self, key: str) -> None:
109-
del self.additional_properties[key]
110-
111-
def __contains__(self, key: str) -> bool:
112-
return key in self.additional_properties

‎robosystems_client/models/cancel_subscription_request.py‎

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
from typing import Any, TypeVar, cast
55

66
from attrs import define as _attrs_define
7-
from attrs import field as _attrs_field
87

98
from ..types import UNSET, Unset
109

@@ -33,7 +32,6 @@ class CancelSubscriptionRequest:
3332
immediate: bool | Unset = False
3433
confirm: None | str | Unset = UNSET
3534
user_id: None | str | Unset = UNSET
36-
additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
3735

3836
def to_dict(self) -> dict[str, Any]:
3937
immediate = self.immediate
@@ -51,7 +49,7 @@ def to_dict(self) -> dict[str, Any]:
5149
user_id = self.user_id
5250

5351
field_dict: dict[str, Any] = {}
54-
field_dict.update(self.additional_properties)
52+
5553
field_dict.update({})
5654
if immediate is not UNSET:
5755
field_dict["immediate"] = immediate
@@ -91,21 +89,4 @@ def _parse_user_id(data: object) -> None | str | Unset:
9189
user_id=user_id,
9290
)
9391

94-
cancel_subscription_request.additional_properties = d
9592
return cancel_subscription_request
96-
97-
@property
98-
def additional_keys(self) -> list[str]:
99-
return list(self.additional_properties.keys())
100-
101-
def __getitem__(self, key: str) -> Any:
102-
return self.additional_properties[key]
103-
104-
def __setitem__(self, key: str, value: Any) -> None:
105-
self.additional_properties[key] = value
106-
107-
def __delitem__(self, key: str) -> None:
108-
del self.additional_properties[key]
109-
110-
def __contains__(self, key: str) -> bool:
111-
return key in self.additional_properties

‎robosystems_client/models/connection_response.py‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,9 @@ class ConnectionResponse:
2626
status (str): Connection status
2727
created_at (datetime.datetime | str): Creation timestamp
2828
metadata (ConnectionResponseMetadata): Provider-specific metadata
29-
entity_id (None | str | Unset): Entity identifier
29+
entity_id (None | str | Unset): The entity whose books the connection keeps: the group parent for QuickBooks,
30+
the entity a bank feed was connected for (each of its accounts can move to another entity later), none for an
31+
external source, whose events name their own.
3032
updated_at (datetime.datetime | None | str | Unset): Last update timestamp
3133
last_sync (datetime.datetime | None | str | Unset): Last sync timestamp
3234
write_policy (None | str | Unset): Source-of-truth write policy: 'native' (RoboSystems is authoritative; no

‎robosystems_client/models/create_connection_request.py‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ class CreateConnectionRequest:
2525
2626
Attributes:
2727
provider (CreateConnectionRequestProvider): Connection provider type
28-
entity_id (None | str | Unset): Entity identifier. Required for QuickBooks.
28+
entity_id (None | str | Unset): QuickBooks: the entity whose books it keeps, which can only be the group parent;
29+
omit it. A bank feed names its entity on its own config.
2930
quickbooks_config (None | QuickBooksConnectionConfig | Unset):
3031
external_config (ExternalConnectionConfig | None | Unset):
3132
mercury_config (MercuryConnectionConfig | None | Unset):

‎robosystems_client/models/delete_graph_op.py‎

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,11 @@ class DeleteGraphOp:
1919
2020
- **Immediate** (default): subscription canceled now (`ends_at = now`) and
2121
fast-path deprovisioning fires within ~10 minutes. Use when you want
22-
the data gone and the slot freed right away.
22+
the data gone and the slot freed right away. The unused part of the
23+
billed period is credited, not refunded: on a card-billed plan to the
24+
organization's account balance, applied to its next invoice; on an
25+
invoiced plan as a credit on that period's invoice, or a separate credit
26+
invoice if it is already paid.
2327
- **At period end** (`at_period_end=true`): subscription canceled but
2428
`ends_at = current_period_end` so the graph stays usable through the
2529
paid period. The existing suspend → deprovision sensor pipeline tears

0 commit comments

Comments
 (0)