convexity-api-client 0.21.0.dev332__py3-none-any.whl → 0.21.0.dev336__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- convexity_api_client/api/v1/crm_create_sales_rep.py +186 -0
- convexity_api_client/api/v1/crm_delete_sales_rep.py +182 -0
- convexity_api_client/api/v1/crm_get_sales_rep.py +182 -0
- convexity_api_client/api/v1/crm_list_sales_reps.py +236 -0
- convexity_api_client/api/v1/crm_update_sales_rep.py +202 -0
- convexity_api_client/api/v1/inventory_assign_item_warehouse_location.py +206 -0
- convexity_api_client/api/v1/inventory_create_cost_list_vendor_assignment.py +202 -0
- convexity_api_client/api/v1/inventory_create_price_list_channel_assignment.py +202 -0
- convexity_api_client/api/v1/inventory_create_price_list_customer_assignment.py +202 -0
- convexity_api_client/api/v1/inventory_delete_cost_list_vendor_assignment.py +196 -0
- convexity_api_client/api/v1/inventory_delete_price_list_channel_assignment.py +196 -0
- convexity_api_client/api/v1/inventory_delete_price_list_customer_assignment.py +196 -0
- convexity_api_client/api/v1/inventory_list_cost_list_vendor_assignments.py +202 -0
- convexity_api_client/api/v1/inventory_list_item_cost_list_entries.py +182 -0
- convexity_api_client/api/v1/inventory_list_item_price_list_entries.py +182 -0
- convexity_api_client/api/v1/inventory_list_item_warehouse_locations.py +212 -0
- convexity_api_client/api/v1/inventory_list_price_list_channel_assignments.py +202 -0
- convexity_api_client/api/v1/inventory_list_price_list_customer_assignments.py +202 -0
- convexity_api_client/api/v1/inventory_list_warehouse_location_items.py +226 -0
- convexity_api_client/api/v1/inventory_update_cost_list_vendor_assignment.py +216 -0
- convexity_api_client/api/v1/inventory_update_price_list_channel_assignment.py +216 -0
- convexity_api_client/api/v1/inventory_update_price_list_customer_assignment.py +216 -0
- convexity_api_client/api/v1/purchasing_create_item_sourcing.py +190 -0
- convexity_api_client/api/v1/purchasing_deactivate_item_sourcing.py +182 -0
- convexity_api_client/api/v1/purchasing_get_item_sourcing_options.py +166 -0
- convexity_api_client/api/v1/purchasing_list_item_sourcing.py +382 -0
- convexity_api_client/api/v1/purchasing_update_item_sourcing.py +202 -0
- convexity_api_client/api/v1/purchasing_upsert_item_sourcing_cost.py +206 -0
- convexity_api_client/api/v1/sales_list_orders.py +20 -0
- convexity_api_client/api/v1/warehouse_workflow_cancel_pick_pack_ship.py +182 -0
- convexity_api_client/api/v1/warehouse_workflow_complete_pick_pack_ship_pack.py +202 -0
- convexity_api_client/api/v1/warehouse_workflow_complete_pick_pack_ship_pick.py +202 -0
- convexity_api_client/api/v1/warehouse_workflow_create_pick_pack_ship.py +186 -0
- convexity_api_client/api/v1/warehouse_workflow_generate_pick_pack_ship_pdf.py +188 -0
- convexity_api_client/api/v1/warehouse_workflow_get_pick_pack_ship.py +182 -0
- convexity_api_client/api/v1/warehouse_workflow_mark_pick_pack_ship_shipped.py +202 -0
- convexity_api_client/api/v1/warehouse_workflow_save_pick_pack_ship_shipment.py +202 -0
- convexity_api_client/models/__init__.py +134 -0
- convexity_api_client/models/adjust_stock_request.py +20 -8
- convexity_api_client/models/assign_inventory_item_location_request.py +108 -0
- convexity_api_client/models/assign_inventory_item_location_request_ext_data_type_0.py +47 -0
- convexity_api_client/models/bulk_upsert_customer_payload.py +20 -0
- convexity_api_client/models/bulk_upsert_sales_order_payload.py +40 -0
- convexity_api_client/models/complete_pick_pack_ship_pack_request.py +75 -0
- convexity_api_client/models/complete_pick_pack_ship_request.py +97 -0
- convexity_api_client/models/cost_list_entry_response.py +77 -0
- convexity_api_client/models/cost_list_vendor_assignment_response.py +149 -0
- convexity_api_client/models/cost_list_vendor_assignment_response_ext_data_type_0.py +47 -0
- convexity_api_client/models/cost_rule.py +53 -0
- convexity_api_client/models/cost_rule_response.py +22 -0
- convexity_api_client/models/cost_source_type.py +9 -0
- convexity_api_client/models/create_cost_list_request.py +4 -5
- convexity_api_client/models/create_cost_list_vendor_assignment_request.py +116 -0
- convexity_api_client/models/create_cost_list_vendor_assignment_request_ext_data_type_0.py +47 -0
- convexity_api_client/models/create_customer_request.py +20 -0
- convexity_api_client/models/create_item_sourcing_request.py +256 -0
- convexity_api_client/models/create_item_sourcing_request_ext_data_type_0.py +47 -0
- convexity_api_client/models/create_pick_pack_ship_request.py +153 -0
- convexity_api_client/models/create_price_list_channel_assignment_request.py +116 -0
- convexity_api_client/models/create_price_list_channel_assignment_request_ext_data_type_0.py +47 -0
- convexity_api_client/models/create_price_list_customer_assignment_request.py +116 -0
- convexity_api_client/models/create_price_list_customer_assignment_request_ext_data_type_0.py +47 -0
- convexity_api_client/models/create_price_list_request.py +4 -5
- convexity_api_client/models/create_sales_order_line_request.py +40 -8
- convexity_api_client/models/create_sales_order_request.py +40 -0
- convexity_api_client/models/create_sales_rep_request.py +181 -0
- convexity_api_client/models/create_sales_rep_request_ext_data_type_0.py +47 -0
- convexity_api_client/models/customer.py +53 -0
- convexity_api_client/models/customer_response.py +14 -0
- convexity_api_client/models/inventory_config.py +53 -0
- convexity_api_client/models/inventory_config_response.py +28 -0
- convexity_api_client/models/inventory_item.py +43 -0
- convexity_api_client/models/inventory_item_location.py +237 -0
- convexity_api_client/models/inventory_item_location_assignment_response.py +150 -0
- convexity_api_client/models/inventory_item_location_assignment_response_ext_data_type_0.py +47 -0
- convexity_api_client/models/inventory_item_type.py +0 -1
- convexity_api_client/models/item_sourcing.py +41 -0
- convexity_api_client/models/item_sourcing_item_option.py +107 -0
- convexity_api_client/models/item_sourcing_options_response.py +120 -0
- convexity_api_client/models/item_sourcing_response.py +360 -0
- convexity_api_client/models/item_sourcing_response_ext_data_type_0.py +47 -0
- convexity_api_client/models/item_sourcing_uom_option.py +77 -0
- convexity_api_client/models/item_sourcing_vendor_option.py +77 -0
- convexity_api_client/models/item_warehouse_location_response.py +248 -0
- convexity_api_client/models/list_cost_list_entries_response.py +83 -0
- convexity_api_client/models/list_cost_list_vendor_assignments_response.py +83 -0
- convexity_api_client/models/list_item_sourcing_response.py +83 -0
- convexity_api_client/models/list_item_warehouse_locations_response.py +83 -0
- convexity_api_client/models/list_price_list_channel_assignments_response.py +83 -0
- convexity_api_client/models/list_price_list_customer_assignments_response.py +83 -0
- convexity_api_client/models/list_price_list_entries_response.py +83 -0
- convexity_api_client/models/list_sales_reps_response.py +83 -0
- convexity_api_client/models/list_warehouse_location_items_response.py +83 -0
- convexity_api_client/models/mark_pick_pack_ship_shipped_request.py +84 -0
- convexity_api_client/models/pick_pack_ship_line_request.py +100 -0
- convexity_api_client/models/pick_pack_ship_packed_line_request.py +111 -0
- convexity_api_client/models/pick_pack_ship_picked_line_request.py +91 -0
- convexity_api_client/models/pick_pack_ship_response.py +111 -0
- convexity_api_client/models/price_list.py +41 -0
- convexity_api_client/models/price_list_channel_assignment_response.py +149 -0
- convexity_api_client/models/price_list_channel_assignment_response_ext_data_type_0.py +47 -0
- convexity_api_client/models/price_list_customer_assignment_response.py +149 -0
- convexity_api_client/models/price_list_customer_assignment_response_ext_data_type_0.py +47 -0
- convexity_api_client/models/price_list_entry_response.py +77 -0
- convexity_api_client/models/price_source_type.py +9 -0
- convexity_api_client/models/project.py +43 -0
- convexity_api_client/models/purchase_order_line.py +101 -0
- convexity_api_client/models/purchase_order_line_request.py +20 -8
- convexity_api_client/models/purchase_order_line_response.py +103 -0
- convexity_api_client/models/purchasing_list_item_sourcing_filter_operator_type_0.py +19 -0
- convexity_api_client/models/purchasing_list_item_sourcing_sort_direction_type_0.py +9 -0
- convexity_api_client/models/resolve_cost_response.py +22 -0
- convexity_api_client/models/resolve_price_response.py +20 -0
- convexity_api_client/models/sales_invoice_line.py +121 -0
- convexity_api_client/models/sales_invoice_line_request.py +40 -8
- convexity_api_client/models/sales_invoice_line_response.py +121 -0
- convexity_api_client/models/sales_order.py +73 -0
- convexity_api_client/models/sales_order_line.py +121 -0
- convexity_api_client/models/sales_order_line_response.py +123 -0
- convexity_api_client/models/sales_order_response.py +28 -0
- convexity_api_client/models/sales_rep.py +279 -0
- convexity_api_client/models/sales_rep_response.py +185 -0
- convexity_api_client/models/sales_rep_response_ext_data_type_0.py +47 -0
- convexity_api_client/models/save_pick_pack_ship_shipment_request.py +163 -0
- convexity_api_client/models/stock_balance.py +20 -8
- convexity_api_client/models/update_customer_request.py +20 -0
- convexity_api_client/models/update_item_sourcing_request.py +312 -0
- convexity_api_client/models/update_item_sourcing_request_ext_data_type_0.py +47 -0
- convexity_api_client/models/update_list_assignment_request.py +111 -0
- convexity_api_client/models/update_list_assignment_request_ext_data_type_0.py +47 -0
- convexity_api_client/models/update_sales_order_request.py +40 -0
- convexity_api_client/models/update_sales_rep_request.py +211 -0
- convexity_api_client/models/update_sales_rep_request_ext_data_type_0.py +47 -0
- convexity_api_client/models/upsert_inventory_config_request.py +40 -0
- convexity_api_client/models/upsert_item_sourcing_cost_request.py +62 -0
- convexity_api_client/models/warehouse_location.py +43 -0
- convexity_api_client/models/warehouse_location_item_response.py +160 -0
- {convexity_api_client-0.21.0.dev332.dist-info → convexity_api_client-0.21.0.dev336.dist-info}/METADATA +1 -1
- {convexity_api_client-0.21.0.dev332.dist-info → convexity_api_client-0.21.0.dev336.dist-info}/RECORD +140 -41
- {convexity_api_client-0.21.0.dev332.dist-info → convexity_api_client-0.21.0.dev336.dist-info}/WHEEL +1 -1
|
@@ -7,6 +7,7 @@ from typing import TYPE_CHECKING, Any, TypeVar, cast
|
|
|
7
7
|
from attrs import define as _attrs_define
|
|
8
8
|
from attrs import field as _attrs_field
|
|
9
9
|
|
|
10
|
+
from ..models.price_source_type import PriceSourceType
|
|
10
11
|
from ..types import UNSET, Unset
|
|
11
12
|
|
|
12
13
|
if TYPE_CHECKING:
|
|
@@ -39,8 +40,13 @@ class SalesOrderLine:
|
|
|
39
40
|
updated_at (datetime.datetime):
|
|
40
41
|
inventory_item_id (None | str | Unset):
|
|
41
42
|
sku (None | str | Unset):
|
|
43
|
+
notes (None | str | Unset):
|
|
42
44
|
uom_id (None | str | Unset):
|
|
43
45
|
stock_quantity (float | None | Unset):
|
|
46
|
+
source_price_list_id (None | str | Unset):
|
|
47
|
+
source_price_rule_id (None | str | Unset):
|
|
48
|
+
price_resolved_at (datetime.datetime | None | Unset):
|
|
49
|
+
price_source_type (None | PriceSourceType | Unset):
|
|
44
50
|
ext_data (None | str | Unset):
|
|
45
51
|
order (None | SalesOrder | Unset):
|
|
46
52
|
allocations (list[SalesOrderAllocation] | None | Unset):
|
|
@@ -63,8 +69,13 @@ class SalesOrderLine:
|
|
|
63
69
|
updated_at: datetime.datetime
|
|
64
70
|
inventory_item_id: None | str | Unset = UNSET
|
|
65
71
|
sku: None | str | Unset = UNSET
|
|
72
|
+
notes: None | str | Unset = UNSET
|
|
66
73
|
uom_id: None | str | Unset = UNSET
|
|
67
74
|
stock_quantity: float | None | Unset = UNSET
|
|
75
|
+
source_price_list_id: None | str | Unset = UNSET
|
|
76
|
+
source_price_rule_id: None | str | Unset = UNSET
|
|
77
|
+
price_resolved_at: datetime.datetime | None | Unset = UNSET
|
|
78
|
+
price_source_type: None | PriceSourceType | Unset = UNSET
|
|
68
79
|
ext_data: None | str | Unset = UNSET
|
|
69
80
|
order: None | SalesOrder | Unset = UNSET
|
|
70
81
|
allocations: list[SalesOrderAllocation] | None | Unset = UNSET
|
|
@@ -110,6 +121,12 @@ class SalesOrderLine:
|
|
|
110
121
|
else:
|
|
111
122
|
sku = self.sku
|
|
112
123
|
|
|
124
|
+
notes: None | str | Unset
|
|
125
|
+
if isinstance(self.notes, Unset):
|
|
126
|
+
notes = UNSET
|
|
127
|
+
else:
|
|
128
|
+
notes = self.notes
|
|
129
|
+
|
|
113
130
|
uom_id: None | str | Unset
|
|
114
131
|
if isinstance(self.uom_id, Unset):
|
|
115
132
|
uom_id = UNSET
|
|
@@ -122,6 +139,34 @@ class SalesOrderLine:
|
|
|
122
139
|
else:
|
|
123
140
|
stock_quantity = self.stock_quantity
|
|
124
141
|
|
|
142
|
+
source_price_list_id: None | str | Unset
|
|
143
|
+
if isinstance(self.source_price_list_id, Unset):
|
|
144
|
+
source_price_list_id = UNSET
|
|
145
|
+
else:
|
|
146
|
+
source_price_list_id = self.source_price_list_id
|
|
147
|
+
|
|
148
|
+
source_price_rule_id: None | str | Unset
|
|
149
|
+
if isinstance(self.source_price_rule_id, Unset):
|
|
150
|
+
source_price_rule_id = UNSET
|
|
151
|
+
else:
|
|
152
|
+
source_price_rule_id = self.source_price_rule_id
|
|
153
|
+
|
|
154
|
+
price_resolved_at: None | str | Unset
|
|
155
|
+
if isinstance(self.price_resolved_at, Unset):
|
|
156
|
+
price_resolved_at = UNSET
|
|
157
|
+
elif isinstance(self.price_resolved_at, datetime.datetime):
|
|
158
|
+
price_resolved_at = self.price_resolved_at.isoformat()
|
|
159
|
+
else:
|
|
160
|
+
price_resolved_at = self.price_resolved_at
|
|
161
|
+
|
|
162
|
+
price_source_type: None | str | Unset
|
|
163
|
+
if isinstance(self.price_source_type, Unset):
|
|
164
|
+
price_source_type = UNSET
|
|
165
|
+
elif isinstance(self.price_source_type, PriceSourceType):
|
|
166
|
+
price_source_type = self.price_source_type.value
|
|
167
|
+
else:
|
|
168
|
+
price_source_type = self.price_source_type
|
|
169
|
+
|
|
125
170
|
ext_data: None | str | Unset
|
|
126
171
|
if isinstance(self.ext_data, Unset):
|
|
127
172
|
ext_data = UNSET
|
|
@@ -228,10 +273,20 @@ class SalesOrderLine:
|
|
|
228
273
|
field_dict["inventory_item_id"] = inventory_item_id
|
|
229
274
|
if sku is not UNSET:
|
|
230
275
|
field_dict["sku"] = sku
|
|
276
|
+
if notes is not UNSET:
|
|
277
|
+
field_dict["notes"] = notes
|
|
231
278
|
if uom_id is not UNSET:
|
|
232
279
|
field_dict["uom_id"] = uom_id
|
|
233
280
|
if stock_quantity is not UNSET:
|
|
234
281
|
field_dict["stock_quantity"] = stock_quantity
|
|
282
|
+
if source_price_list_id is not UNSET:
|
|
283
|
+
field_dict["source_price_list_id"] = source_price_list_id
|
|
284
|
+
if source_price_rule_id is not UNSET:
|
|
285
|
+
field_dict["source_price_rule_id"] = source_price_rule_id
|
|
286
|
+
if price_resolved_at is not UNSET:
|
|
287
|
+
field_dict["price_resolved_at"] = price_resolved_at
|
|
288
|
+
if price_source_type is not UNSET:
|
|
289
|
+
field_dict["price_source_type"] = price_source_type
|
|
235
290
|
if ext_data is not UNSET:
|
|
236
291
|
field_dict["ext_data"] = ext_data
|
|
237
292
|
if order is not UNSET:
|
|
@@ -300,6 +355,15 @@ class SalesOrderLine:
|
|
|
300
355
|
|
|
301
356
|
sku = _parse_sku(d.pop("sku", UNSET))
|
|
302
357
|
|
|
358
|
+
def _parse_notes(data: object) -> None | str | Unset:
|
|
359
|
+
if data is None:
|
|
360
|
+
return data
|
|
361
|
+
if isinstance(data, Unset):
|
|
362
|
+
return data
|
|
363
|
+
return cast(None | str | Unset, data)
|
|
364
|
+
|
|
365
|
+
notes = _parse_notes(d.pop("notes", UNSET))
|
|
366
|
+
|
|
303
367
|
def _parse_uom_id(data: object) -> None | str | Unset:
|
|
304
368
|
if data is None:
|
|
305
369
|
return data
|
|
@@ -318,6 +382,58 @@ class SalesOrderLine:
|
|
|
318
382
|
|
|
319
383
|
stock_quantity = _parse_stock_quantity(d.pop("stock_quantity", UNSET))
|
|
320
384
|
|
|
385
|
+
def _parse_source_price_list_id(data: object) -> None | str | Unset:
|
|
386
|
+
if data is None:
|
|
387
|
+
return data
|
|
388
|
+
if isinstance(data, Unset):
|
|
389
|
+
return data
|
|
390
|
+
return cast(None | str | Unset, data)
|
|
391
|
+
|
|
392
|
+
source_price_list_id = _parse_source_price_list_id(d.pop("source_price_list_id", UNSET))
|
|
393
|
+
|
|
394
|
+
def _parse_source_price_rule_id(data: object) -> None | str | Unset:
|
|
395
|
+
if data is None:
|
|
396
|
+
return data
|
|
397
|
+
if isinstance(data, Unset):
|
|
398
|
+
return data
|
|
399
|
+
return cast(None | str | Unset, data)
|
|
400
|
+
|
|
401
|
+
source_price_rule_id = _parse_source_price_rule_id(d.pop("source_price_rule_id", UNSET))
|
|
402
|
+
|
|
403
|
+
def _parse_price_resolved_at(data: object) -> datetime.datetime | None | Unset:
|
|
404
|
+
if data is None:
|
|
405
|
+
return data
|
|
406
|
+
if isinstance(data, Unset):
|
|
407
|
+
return data
|
|
408
|
+
try:
|
|
409
|
+
if not isinstance(data, str):
|
|
410
|
+
raise TypeError()
|
|
411
|
+
price_resolved_at_type_0 = datetime.datetime.fromisoformat(data)
|
|
412
|
+
|
|
413
|
+
return price_resolved_at_type_0
|
|
414
|
+
except (TypeError, ValueError, AttributeError, KeyError):
|
|
415
|
+
pass
|
|
416
|
+
return cast(datetime.datetime | None | Unset, data)
|
|
417
|
+
|
|
418
|
+
price_resolved_at = _parse_price_resolved_at(d.pop("price_resolved_at", UNSET))
|
|
419
|
+
|
|
420
|
+
def _parse_price_source_type(data: object) -> None | PriceSourceType | Unset:
|
|
421
|
+
if data is None:
|
|
422
|
+
return data
|
|
423
|
+
if isinstance(data, Unset):
|
|
424
|
+
return data
|
|
425
|
+
try:
|
|
426
|
+
if not isinstance(data, str):
|
|
427
|
+
raise TypeError()
|
|
428
|
+
price_source_type_type_0 = PriceSourceType(data)
|
|
429
|
+
|
|
430
|
+
return price_source_type_type_0
|
|
431
|
+
except (TypeError, ValueError, AttributeError, KeyError):
|
|
432
|
+
pass
|
|
433
|
+
return cast(None | PriceSourceType | Unset, data)
|
|
434
|
+
|
|
435
|
+
price_source_type = _parse_price_source_type(d.pop("price_source_type", UNSET))
|
|
436
|
+
|
|
321
437
|
def _parse_ext_data(data: object) -> None | str | Unset:
|
|
322
438
|
if data is None:
|
|
323
439
|
return data
|
|
@@ -489,8 +605,13 @@ class SalesOrderLine:
|
|
|
489
605
|
updated_at=updated_at,
|
|
490
606
|
inventory_item_id=inventory_item_id,
|
|
491
607
|
sku=sku,
|
|
608
|
+
notes=notes,
|
|
492
609
|
uom_id=uom_id,
|
|
493
610
|
stock_quantity=stock_quantity,
|
|
611
|
+
source_price_list_id=source_price_list_id,
|
|
612
|
+
source_price_rule_id=source_price_rule_id,
|
|
613
|
+
price_resolved_at=price_resolved_at,
|
|
614
|
+
price_source_type=price_source_type,
|
|
494
615
|
ext_data=ext_data,
|
|
495
616
|
order=order,
|
|
496
617
|
allocations=allocations,
|
|
@@ -7,6 +7,9 @@ from typing import TYPE_CHECKING, Any, TypeVar, cast
|
|
|
7
7
|
from attrs import define as _attrs_define
|
|
8
8
|
from attrs import field as _attrs_field
|
|
9
9
|
|
|
10
|
+
from ..models.price_source_type import PriceSourceType
|
|
11
|
+
from ..types import UNSET, Unset
|
|
12
|
+
|
|
10
13
|
if TYPE_CHECKING:
|
|
11
14
|
from ..models.sales_order_line_response_ext_data_type_0 import SalesOrderLineResponseExtDataType0
|
|
12
15
|
|
|
@@ -31,6 +34,11 @@ class SalesOrderLineResponse:
|
|
|
31
34
|
ext_data (None | SalesOrderLineResponseExtDataType0):
|
|
32
35
|
created_at (datetime.datetime):
|
|
33
36
|
updated_at (datetime.datetime):
|
|
37
|
+
notes (None | str | Unset):
|
|
38
|
+
source_price_list_id (None | str | Unset):
|
|
39
|
+
source_price_rule_id (None | str | Unset):
|
|
40
|
+
price_resolved_at (datetime.datetime | None | Unset):
|
|
41
|
+
price_source_type (None | PriceSourceType | Unset):
|
|
34
42
|
"""
|
|
35
43
|
|
|
36
44
|
id: str
|
|
@@ -46,6 +54,11 @@ class SalesOrderLineResponse:
|
|
|
46
54
|
ext_data: None | SalesOrderLineResponseExtDataType0
|
|
47
55
|
created_at: datetime.datetime
|
|
48
56
|
updated_at: datetime.datetime
|
|
57
|
+
notes: None | str | Unset = UNSET
|
|
58
|
+
source_price_list_id: None | str | Unset = UNSET
|
|
59
|
+
source_price_rule_id: None | str | Unset = UNSET
|
|
60
|
+
price_resolved_at: datetime.datetime | None | Unset = UNSET
|
|
61
|
+
price_source_type: None | PriceSourceType | Unset = UNSET
|
|
49
62
|
additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
|
|
50
63
|
|
|
51
64
|
def to_dict(self) -> dict[str, Any]:
|
|
@@ -83,6 +96,40 @@ class SalesOrderLineResponse:
|
|
|
83
96
|
|
|
84
97
|
updated_at = self.updated_at.isoformat()
|
|
85
98
|
|
|
99
|
+
notes: None | str | Unset
|
|
100
|
+
if isinstance(self.notes, Unset):
|
|
101
|
+
notes = UNSET
|
|
102
|
+
else:
|
|
103
|
+
notes = self.notes
|
|
104
|
+
|
|
105
|
+
source_price_list_id: None | str | Unset
|
|
106
|
+
if isinstance(self.source_price_list_id, Unset):
|
|
107
|
+
source_price_list_id = UNSET
|
|
108
|
+
else:
|
|
109
|
+
source_price_list_id = self.source_price_list_id
|
|
110
|
+
|
|
111
|
+
source_price_rule_id: None | str | Unset
|
|
112
|
+
if isinstance(self.source_price_rule_id, Unset):
|
|
113
|
+
source_price_rule_id = UNSET
|
|
114
|
+
else:
|
|
115
|
+
source_price_rule_id = self.source_price_rule_id
|
|
116
|
+
|
|
117
|
+
price_resolved_at: None | str | Unset
|
|
118
|
+
if isinstance(self.price_resolved_at, Unset):
|
|
119
|
+
price_resolved_at = UNSET
|
|
120
|
+
elif isinstance(self.price_resolved_at, datetime.datetime):
|
|
121
|
+
price_resolved_at = self.price_resolved_at.isoformat()
|
|
122
|
+
else:
|
|
123
|
+
price_resolved_at = self.price_resolved_at
|
|
124
|
+
|
|
125
|
+
price_source_type: None | str | Unset
|
|
126
|
+
if isinstance(self.price_source_type, Unset):
|
|
127
|
+
price_source_type = UNSET
|
|
128
|
+
elif isinstance(self.price_source_type, PriceSourceType):
|
|
129
|
+
price_source_type = self.price_source_type.value
|
|
130
|
+
else:
|
|
131
|
+
price_source_type = self.price_source_type
|
|
132
|
+
|
|
86
133
|
field_dict: dict[str, Any] = {}
|
|
87
134
|
field_dict.update(self.additional_properties)
|
|
88
135
|
field_dict.update(
|
|
@@ -102,6 +149,16 @@ class SalesOrderLineResponse:
|
|
|
102
149
|
"updated_at": updated_at,
|
|
103
150
|
}
|
|
104
151
|
)
|
|
152
|
+
if notes is not UNSET:
|
|
153
|
+
field_dict["notes"] = notes
|
|
154
|
+
if source_price_list_id is not UNSET:
|
|
155
|
+
field_dict["source_price_list_id"] = source_price_list_id
|
|
156
|
+
if source_price_rule_id is not UNSET:
|
|
157
|
+
field_dict["source_price_rule_id"] = source_price_rule_id
|
|
158
|
+
if price_resolved_at is not UNSET:
|
|
159
|
+
field_dict["price_resolved_at"] = price_resolved_at
|
|
160
|
+
if price_source_type is not UNSET:
|
|
161
|
+
field_dict["price_source_type"] = price_source_type
|
|
105
162
|
|
|
106
163
|
return field_dict
|
|
107
164
|
|
|
@@ -159,6 +216,67 @@ class SalesOrderLineResponse:
|
|
|
159
216
|
|
|
160
217
|
updated_at = datetime.datetime.fromisoformat(d.pop("updated_at"))
|
|
161
218
|
|
|
219
|
+
def _parse_notes(data: object) -> None | str | Unset:
|
|
220
|
+
if data is None:
|
|
221
|
+
return data
|
|
222
|
+
if isinstance(data, Unset):
|
|
223
|
+
return data
|
|
224
|
+
return cast(None | str | Unset, data)
|
|
225
|
+
|
|
226
|
+
notes = _parse_notes(d.pop("notes", UNSET))
|
|
227
|
+
|
|
228
|
+
def _parse_source_price_list_id(data: object) -> None | str | Unset:
|
|
229
|
+
if data is None:
|
|
230
|
+
return data
|
|
231
|
+
if isinstance(data, Unset):
|
|
232
|
+
return data
|
|
233
|
+
return cast(None | str | Unset, data)
|
|
234
|
+
|
|
235
|
+
source_price_list_id = _parse_source_price_list_id(d.pop("source_price_list_id", UNSET))
|
|
236
|
+
|
|
237
|
+
def _parse_source_price_rule_id(data: object) -> None | str | Unset:
|
|
238
|
+
if data is None:
|
|
239
|
+
return data
|
|
240
|
+
if isinstance(data, Unset):
|
|
241
|
+
return data
|
|
242
|
+
return cast(None | str | Unset, data)
|
|
243
|
+
|
|
244
|
+
source_price_rule_id = _parse_source_price_rule_id(d.pop("source_price_rule_id", UNSET))
|
|
245
|
+
|
|
246
|
+
def _parse_price_resolved_at(data: object) -> datetime.datetime | None | Unset:
|
|
247
|
+
if data is None:
|
|
248
|
+
return data
|
|
249
|
+
if isinstance(data, Unset):
|
|
250
|
+
return data
|
|
251
|
+
try:
|
|
252
|
+
if not isinstance(data, str):
|
|
253
|
+
raise TypeError()
|
|
254
|
+
price_resolved_at_type_0 = datetime.datetime.fromisoformat(data)
|
|
255
|
+
|
|
256
|
+
return price_resolved_at_type_0
|
|
257
|
+
except (TypeError, ValueError, AttributeError, KeyError):
|
|
258
|
+
pass
|
|
259
|
+
return cast(datetime.datetime | None | Unset, data)
|
|
260
|
+
|
|
261
|
+
price_resolved_at = _parse_price_resolved_at(d.pop("price_resolved_at", UNSET))
|
|
262
|
+
|
|
263
|
+
def _parse_price_source_type(data: object) -> None | PriceSourceType | Unset:
|
|
264
|
+
if data is None:
|
|
265
|
+
return data
|
|
266
|
+
if isinstance(data, Unset):
|
|
267
|
+
return data
|
|
268
|
+
try:
|
|
269
|
+
if not isinstance(data, str):
|
|
270
|
+
raise TypeError()
|
|
271
|
+
price_source_type_type_0 = PriceSourceType(data)
|
|
272
|
+
|
|
273
|
+
return price_source_type_type_0
|
|
274
|
+
except (TypeError, ValueError, AttributeError, KeyError):
|
|
275
|
+
pass
|
|
276
|
+
return cast(None | PriceSourceType | Unset, data)
|
|
277
|
+
|
|
278
|
+
price_source_type = _parse_price_source_type(d.pop("price_source_type", UNSET))
|
|
279
|
+
|
|
162
280
|
sales_order_line_response = cls(
|
|
163
281
|
id=id,
|
|
164
282
|
project_id=project_id,
|
|
@@ -173,6 +291,11 @@ class SalesOrderLineResponse:
|
|
|
173
291
|
ext_data=ext_data,
|
|
174
292
|
created_at=created_at,
|
|
175
293
|
updated_at=updated_at,
|
|
294
|
+
notes=notes,
|
|
295
|
+
source_price_list_id=source_price_list_id,
|
|
296
|
+
source_price_rule_id=source_price_rule_id,
|
|
297
|
+
price_resolved_at=price_resolved_at,
|
|
298
|
+
price_source_type=price_source_type,
|
|
176
299
|
)
|
|
177
300
|
|
|
178
301
|
sales_order_line_response.additional_properties = d
|
|
@@ -30,6 +30,8 @@ class SalesOrderResponse:
|
|
|
30
30
|
project_id (str):
|
|
31
31
|
so_number (str):
|
|
32
32
|
customer_id (None | str):
|
|
33
|
+
sales_rep_id (None | str):
|
|
34
|
+
commission_rate_snapshot (float | None | str):
|
|
33
35
|
channel_id (None | str):
|
|
34
36
|
external_id (None | str):
|
|
35
37
|
lifecycle_status (CanonicalStatus):
|
|
@@ -57,6 +59,8 @@ class SalesOrderResponse:
|
|
|
57
59
|
project_id: str
|
|
58
60
|
so_number: str
|
|
59
61
|
customer_id: None | str
|
|
62
|
+
sales_rep_id: None | str
|
|
63
|
+
commission_rate_snapshot: float | None | str
|
|
60
64
|
channel_id: None | str
|
|
61
65
|
external_id: None | str
|
|
62
66
|
lifecycle_status: CanonicalStatus
|
|
@@ -92,6 +96,12 @@ class SalesOrderResponse:
|
|
|
92
96
|
customer_id: None | str
|
|
93
97
|
customer_id = self.customer_id
|
|
94
98
|
|
|
99
|
+
sales_rep_id: None | str
|
|
100
|
+
sales_rep_id = self.sales_rep_id
|
|
101
|
+
|
|
102
|
+
commission_rate_snapshot: float | None | str
|
|
103
|
+
commission_rate_snapshot = self.commission_rate_snapshot
|
|
104
|
+
|
|
95
105
|
channel_id: None | str
|
|
96
106
|
channel_id = self.channel_id
|
|
97
107
|
|
|
@@ -194,6 +204,8 @@ class SalesOrderResponse:
|
|
|
194
204
|
"project_id": project_id,
|
|
195
205
|
"so_number": so_number,
|
|
196
206
|
"customer_id": customer_id,
|
|
207
|
+
"sales_rep_id": sales_rep_id,
|
|
208
|
+
"commission_rate_snapshot": commission_rate_snapshot,
|
|
197
209
|
"channel_id": channel_id,
|
|
198
210
|
"external_id": external_id,
|
|
199
211
|
"lifecycle_status": lifecycle_status,
|
|
@@ -245,6 +257,20 @@ class SalesOrderResponse:
|
|
|
245
257
|
|
|
246
258
|
customer_id = _parse_customer_id(d.pop("customer_id"))
|
|
247
259
|
|
|
260
|
+
def _parse_sales_rep_id(data: object) -> None | str:
|
|
261
|
+
if data is None:
|
|
262
|
+
return data
|
|
263
|
+
return cast(None | str, data)
|
|
264
|
+
|
|
265
|
+
sales_rep_id = _parse_sales_rep_id(d.pop("sales_rep_id"))
|
|
266
|
+
|
|
267
|
+
def _parse_commission_rate_snapshot(data: object) -> float | None | str:
|
|
268
|
+
if data is None:
|
|
269
|
+
return data
|
|
270
|
+
return cast(float | None | str, data)
|
|
271
|
+
|
|
272
|
+
commission_rate_snapshot = _parse_commission_rate_snapshot(d.pop("commission_rate_snapshot"))
|
|
273
|
+
|
|
248
274
|
def _parse_channel_id(data: object) -> None | str:
|
|
249
275
|
if data is None:
|
|
250
276
|
return data
|
|
@@ -425,6 +451,8 @@ class SalesOrderResponse:
|
|
|
425
451
|
project_id=project_id,
|
|
426
452
|
so_number=so_number,
|
|
427
453
|
customer_id=customer_id,
|
|
454
|
+
sales_rep_id=sales_rep_id,
|
|
455
|
+
commission_rate_snapshot=commission_rate_snapshot,
|
|
428
456
|
channel_id=channel_id,
|
|
429
457
|
external_id=external_id,
|
|
430
458
|
lifecycle_status=lifecycle_status,
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import datetime
|
|
4
|
+
from collections.abc import Mapping
|
|
5
|
+
from typing import TYPE_CHECKING, Any, TypeVar, cast
|
|
6
|
+
|
|
7
|
+
from attrs import define as _attrs_define
|
|
8
|
+
from attrs import field as _attrs_field
|
|
9
|
+
|
|
10
|
+
from ..types import UNSET, Unset
|
|
11
|
+
|
|
12
|
+
if TYPE_CHECKING:
|
|
13
|
+
from ..models.customer import Customer
|
|
14
|
+
from ..models.sales_order import SalesOrder
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
T = TypeVar("T", bound="SalesRep")
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
@_attrs_define
|
|
21
|
+
class SalesRep:
|
|
22
|
+
"""Represents a SalesRep record
|
|
23
|
+
|
|
24
|
+
Attributes:
|
|
25
|
+
id (str):
|
|
26
|
+
project_id (str):
|
|
27
|
+
code (str):
|
|
28
|
+
name (str):
|
|
29
|
+
is_active (bool):
|
|
30
|
+
created_at (datetime.datetime):
|
|
31
|
+
updated_at (datetime.datetime):
|
|
32
|
+
user_id (None | str | Unset):
|
|
33
|
+
email (None | str | Unset):
|
|
34
|
+
default_commission_rate (float | None | str | Unset):
|
|
35
|
+
ext_data (None | str | Unset):
|
|
36
|
+
customers (list[Customer] | None | Unset):
|
|
37
|
+
sales_orders (list[SalesOrder] | None | Unset):
|
|
38
|
+
"""
|
|
39
|
+
|
|
40
|
+
id: str
|
|
41
|
+
project_id: str
|
|
42
|
+
code: str
|
|
43
|
+
name: str
|
|
44
|
+
is_active: bool
|
|
45
|
+
created_at: datetime.datetime
|
|
46
|
+
updated_at: datetime.datetime
|
|
47
|
+
user_id: None | str | Unset = UNSET
|
|
48
|
+
email: None | str | Unset = UNSET
|
|
49
|
+
default_commission_rate: float | None | str | Unset = UNSET
|
|
50
|
+
ext_data: None | str | Unset = UNSET
|
|
51
|
+
customers: list[Customer] | None | Unset = UNSET
|
|
52
|
+
sales_orders: list[SalesOrder] | None | Unset = UNSET
|
|
53
|
+
additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
|
|
54
|
+
|
|
55
|
+
def to_dict(self) -> dict[str, Any]:
|
|
56
|
+
id = self.id
|
|
57
|
+
|
|
58
|
+
project_id = self.project_id
|
|
59
|
+
|
|
60
|
+
code = self.code
|
|
61
|
+
|
|
62
|
+
name = self.name
|
|
63
|
+
|
|
64
|
+
is_active = self.is_active
|
|
65
|
+
|
|
66
|
+
created_at = self.created_at.isoformat()
|
|
67
|
+
|
|
68
|
+
updated_at = self.updated_at.isoformat()
|
|
69
|
+
|
|
70
|
+
user_id: None | str | Unset
|
|
71
|
+
if isinstance(self.user_id, Unset):
|
|
72
|
+
user_id = UNSET
|
|
73
|
+
else:
|
|
74
|
+
user_id = self.user_id
|
|
75
|
+
|
|
76
|
+
email: None | str | Unset
|
|
77
|
+
if isinstance(self.email, Unset):
|
|
78
|
+
email = UNSET
|
|
79
|
+
else:
|
|
80
|
+
email = self.email
|
|
81
|
+
|
|
82
|
+
default_commission_rate: float | None | str | Unset
|
|
83
|
+
if isinstance(self.default_commission_rate, Unset):
|
|
84
|
+
default_commission_rate = UNSET
|
|
85
|
+
else:
|
|
86
|
+
default_commission_rate = self.default_commission_rate
|
|
87
|
+
|
|
88
|
+
ext_data: None | str | Unset
|
|
89
|
+
if isinstance(self.ext_data, Unset):
|
|
90
|
+
ext_data = UNSET
|
|
91
|
+
else:
|
|
92
|
+
ext_data = self.ext_data
|
|
93
|
+
|
|
94
|
+
customers: list[dict[str, Any]] | None | Unset
|
|
95
|
+
if isinstance(self.customers, Unset):
|
|
96
|
+
customers = UNSET
|
|
97
|
+
elif isinstance(self.customers, list):
|
|
98
|
+
customers = []
|
|
99
|
+
for customers_type_0_item_data in self.customers:
|
|
100
|
+
customers_type_0_item = customers_type_0_item_data.to_dict()
|
|
101
|
+
customers.append(customers_type_0_item)
|
|
102
|
+
|
|
103
|
+
else:
|
|
104
|
+
customers = self.customers
|
|
105
|
+
|
|
106
|
+
sales_orders: list[dict[str, Any]] | None | Unset
|
|
107
|
+
if isinstance(self.sales_orders, Unset):
|
|
108
|
+
sales_orders = UNSET
|
|
109
|
+
elif isinstance(self.sales_orders, list):
|
|
110
|
+
sales_orders = []
|
|
111
|
+
for sales_orders_type_0_item_data in self.sales_orders:
|
|
112
|
+
sales_orders_type_0_item = sales_orders_type_0_item_data.to_dict()
|
|
113
|
+
sales_orders.append(sales_orders_type_0_item)
|
|
114
|
+
|
|
115
|
+
else:
|
|
116
|
+
sales_orders = self.sales_orders
|
|
117
|
+
|
|
118
|
+
field_dict: dict[str, Any] = {}
|
|
119
|
+
field_dict.update(self.additional_properties)
|
|
120
|
+
field_dict.update(
|
|
121
|
+
{
|
|
122
|
+
"id": id,
|
|
123
|
+
"project_id": project_id,
|
|
124
|
+
"code": code,
|
|
125
|
+
"name": name,
|
|
126
|
+
"is_active": is_active,
|
|
127
|
+
"created_at": created_at,
|
|
128
|
+
"updated_at": updated_at,
|
|
129
|
+
}
|
|
130
|
+
)
|
|
131
|
+
if user_id is not UNSET:
|
|
132
|
+
field_dict["user_id"] = user_id
|
|
133
|
+
if email is not UNSET:
|
|
134
|
+
field_dict["email"] = email
|
|
135
|
+
if default_commission_rate is not UNSET:
|
|
136
|
+
field_dict["default_commission_rate"] = default_commission_rate
|
|
137
|
+
if ext_data is not UNSET:
|
|
138
|
+
field_dict["ext_data"] = ext_data
|
|
139
|
+
if customers is not UNSET:
|
|
140
|
+
field_dict["customers"] = customers
|
|
141
|
+
if sales_orders is not UNSET:
|
|
142
|
+
field_dict["sales_orders"] = sales_orders
|
|
143
|
+
|
|
144
|
+
return field_dict
|
|
145
|
+
|
|
146
|
+
@classmethod
|
|
147
|
+
def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
|
|
148
|
+
from ..models.customer import Customer
|
|
149
|
+
from ..models.sales_order import SalesOrder
|
|
150
|
+
|
|
151
|
+
d = dict(src_dict)
|
|
152
|
+
id = d.pop("id")
|
|
153
|
+
|
|
154
|
+
project_id = d.pop("project_id")
|
|
155
|
+
|
|
156
|
+
code = d.pop("code")
|
|
157
|
+
|
|
158
|
+
name = d.pop("name")
|
|
159
|
+
|
|
160
|
+
is_active = d.pop("is_active")
|
|
161
|
+
|
|
162
|
+
created_at = datetime.datetime.fromisoformat(d.pop("created_at"))
|
|
163
|
+
|
|
164
|
+
updated_at = datetime.datetime.fromisoformat(d.pop("updated_at"))
|
|
165
|
+
|
|
166
|
+
def _parse_user_id(data: object) -> None | str | Unset:
|
|
167
|
+
if data is None:
|
|
168
|
+
return data
|
|
169
|
+
if isinstance(data, Unset):
|
|
170
|
+
return data
|
|
171
|
+
return cast(None | str | Unset, data)
|
|
172
|
+
|
|
173
|
+
user_id = _parse_user_id(d.pop("user_id", UNSET))
|
|
174
|
+
|
|
175
|
+
def _parse_email(data: object) -> None | str | Unset:
|
|
176
|
+
if data is None:
|
|
177
|
+
return data
|
|
178
|
+
if isinstance(data, Unset):
|
|
179
|
+
return data
|
|
180
|
+
return cast(None | str | Unset, data)
|
|
181
|
+
|
|
182
|
+
email = _parse_email(d.pop("email", UNSET))
|
|
183
|
+
|
|
184
|
+
def _parse_default_commission_rate(data: object) -> float | None | str | Unset:
|
|
185
|
+
if data is None:
|
|
186
|
+
return data
|
|
187
|
+
if isinstance(data, Unset):
|
|
188
|
+
return data
|
|
189
|
+
return cast(float | None | str | Unset, data)
|
|
190
|
+
|
|
191
|
+
default_commission_rate = _parse_default_commission_rate(d.pop("default_commission_rate", UNSET))
|
|
192
|
+
|
|
193
|
+
def _parse_ext_data(data: object) -> None | str | Unset:
|
|
194
|
+
if data is None:
|
|
195
|
+
return data
|
|
196
|
+
if isinstance(data, Unset):
|
|
197
|
+
return data
|
|
198
|
+
return cast(None | str | Unset, data)
|
|
199
|
+
|
|
200
|
+
ext_data = _parse_ext_data(d.pop("ext_data", UNSET))
|
|
201
|
+
|
|
202
|
+
def _parse_customers(data: object) -> list[Customer] | None | Unset:
|
|
203
|
+
if data is None:
|
|
204
|
+
return data
|
|
205
|
+
if isinstance(data, Unset):
|
|
206
|
+
return data
|
|
207
|
+
try:
|
|
208
|
+
if not isinstance(data, list):
|
|
209
|
+
raise TypeError()
|
|
210
|
+
customers_type_0 = []
|
|
211
|
+
_customers_type_0 = data
|
|
212
|
+
for customers_type_0_item_data in _customers_type_0:
|
|
213
|
+
customers_type_0_item = Customer.from_dict(customers_type_0_item_data)
|
|
214
|
+
|
|
215
|
+
customers_type_0.append(customers_type_0_item)
|
|
216
|
+
|
|
217
|
+
return customers_type_0
|
|
218
|
+
except (TypeError, ValueError, AttributeError, KeyError):
|
|
219
|
+
pass
|
|
220
|
+
return cast(list[Customer] | None | Unset, data)
|
|
221
|
+
|
|
222
|
+
customers = _parse_customers(d.pop("customers", UNSET))
|
|
223
|
+
|
|
224
|
+
def _parse_sales_orders(data: object) -> list[SalesOrder] | None | Unset:
|
|
225
|
+
if data is None:
|
|
226
|
+
return data
|
|
227
|
+
if isinstance(data, Unset):
|
|
228
|
+
return data
|
|
229
|
+
try:
|
|
230
|
+
if not isinstance(data, list):
|
|
231
|
+
raise TypeError()
|
|
232
|
+
sales_orders_type_0 = []
|
|
233
|
+
_sales_orders_type_0 = data
|
|
234
|
+
for sales_orders_type_0_item_data in _sales_orders_type_0:
|
|
235
|
+
sales_orders_type_0_item = SalesOrder.from_dict(sales_orders_type_0_item_data)
|
|
236
|
+
|
|
237
|
+
sales_orders_type_0.append(sales_orders_type_0_item)
|
|
238
|
+
|
|
239
|
+
return sales_orders_type_0
|
|
240
|
+
except (TypeError, ValueError, AttributeError, KeyError):
|
|
241
|
+
pass
|
|
242
|
+
return cast(list[SalesOrder] | None | Unset, data)
|
|
243
|
+
|
|
244
|
+
sales_orders = _parse_sales_orders(d.pop("sales_orders", UNSET))
|
|
245
|
+
|
|
246
|
+
sales_rep = cls(
|
|
247
|
+
id=id,
|
|
248
|
+
project_id=project_id,
|
|
249
|
+
code=code,
|
|
250
|
+
name=name,
|
|
251
|
+
is_active=is_active,
|
|
252
|
+
created_at=created_at,
|
|
253
|
+
updated_at=updated_at,
|
|
254
|
+
user_id=user_id,
|
|
255
|
+
email=email,
|
|
256
|
+
default_commission_rate=default_commission_rate,
|
|
257
|
+
ext_data=ext_data,
|
|
258
|
+
customers=customers,
|
|
259
|
+
sales_orders=sales_orders,
|
|
260
|
+
)
|
|
261
|
+
|
|
262
|
+
sales_rep.additional_properties = d
|
|
263
|
+
return sales_rep
|
|
264
|
+
|
|
265
|
+
@property
|
|
266
|
+
def additional_keys(self) -> list[str]:
|
|
267
|
+
return list(self.additional_properties.keys())
|
|
268
|
+
|
|
269
|
+
def __getitem__(self, key: str) -> Any:
|
|
270
|
+
return self.additional_properties[key]
|
|
271
|
+
|
|
272
|
+
def __setitem__(self, key: str, value: Any) -> None:
|
|
273
|
+
self.additional_properties[key] = value
|
|
274
|
+
|
|
275
|
+
def __delitem__(self, key: str) -> None:
|
|
276
|
+
del self.additional_properties[key]
|
|
277
|
+
|
|
278
|
+
def __contains__(self, key: str) -> bool:
|
|
279
|
+
return key in self.additional_properties
|