lusid-sdk 2.1.336__py3-none-any.whl → 2.1.340__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.
lusid/__init__.py CHANGED
@@ -631,6 +631,7 @@ from lusid.models.order_instruction_request import OrderInstructionRequest
631
631
  from lusid.models.order_instruction_set_request import OrderInstructionSetRequest
632
632
  from lusid.models.order_request import OrderRequest
633
633
  from lusid.models.order_set_request import OrderSetRequest
634
+ from lusid.models.order_update_request import OrderUpdateRequest
634
635
  from lusid.models.otc_confirmation import OtcConfirmation
635
636
  from lusid.models.output_transaction import OutputTransaction
636
637
  from lusid.models.output_transition import OutputTransition
@@ -1040,6 +1041,7 @@ from lusid.models.update_data_type_request import UpdateDataTypeRequest
1040
1041
  from lusid.models.update_derived_property_definition_request import UpdateDerivedPropertyDefinitionRequest
1041
1042
  from lusid.models.update_fee_type_request import UpdateFeeTypeRequest
1042
1043
  from lusid.models.update_instrument_identifier_request import UpdateInstrumentIdentifierRequest
1044
+ from lusid.models.update_orders_response import UpdateOrdersResponse
1043
1045
  from lusid.models.update_placements_response import UpdatePlacementsResponse
1044
1046
  from lusid.models.update_portfolio_group_request import UpdatePortfolioGroupRequest
1045
1047
  from lusid.models.update_portfolio_request import UpdatePortfolioRequest
@@ -1743,6 +1745,7 @@ __all__ = [
1743
1745
  "OrderInstructionSetRequest",
1744
1746
  "OrderRequest",
1745
1747
  "OrderSetRequest",
1748
+ "OrderUpdateRequest",
1746
1749
  "OtcConfirmation",
1747
1750
  "OutputTransaction",
1748
1751
  "OutputTransition",
@@ -2152,6 +2155,7 @@ __all__ = [
2152
2155
  "UpdateDerivedPropertyDefinitionRequest",
2153
2156
  "UpdateFeeTypeRequest",
2154
2157
  "UpdateInstrumentIdentifierRequest",
2158
+ "UpdateOrdersResponse",
2155
2159
  "UpdatePlacementsResponse",
2156
2160
  "UpdatePortfolioGroupRequest",
2157
2161
  "UpdatePortfolioRequest",
@@ -31,12 +31,14 @@ from lusid.models.book_transactions_response import BookTransactionsResponse
31
31
  from lusid.models.cancel_orders_response import CancelOrdersResponse
32
32
  from lusid.models.cancel_placements_response import CancelPlacementsResponse
33
33
  from lusid.models.move_orders_to_different_blocks_request import MoveOrdersToDifferentBlocksRequest
34
+ from lusid.models.order_update_request import OrderUpdateRequest
34
35
  from lusid.models.place_blocks_request import PlaceBlocksRequest
35
36
  from lusid.models.placement_update_request import PlacementUpdateRequest
36
37
  from lusid.models.resource_id import ResourceId
37
38
  from lusid.models.resource_list_of_block_and_orders import ResourceListOfBlockAndOrders
38
39
  from lusid.models.resource_list_of_moved_order_to_different_block_response import ResourceListOfMovedOrderToDifferentBlockResponse
39
40
  from lusid.models.resource_list_of_placement import ResourceListOfPlacement
41
+ from lusid.models.update_orders_response import UpdateOrdersResponse
40
42
  from lusid.models.update_placements_response import UpdatePlacementsResponse
41
43
 
42
44
  from lusid.api_client import ApiClient
@@ -1181,6 +1183,164 @@ class OrderManagementApi:
1181
1183
  collection_formats=_collection_formats,
1182
1184
  _request_auth=_params.get('_request_auth'))
1183
1185
 
1186
+ @overload
1187
+ async def update_orders(self, request_body : Annotated[Dict[str, OrderUpdateRequest], Field(..., description="The request containing the orders to be updated.")], **kwargs) -> UpdateOrdersResponse: # noqa: E501
1188
+ ...
1189
+
1190
+ @overload
1191
+ def update_orders(self, request_body : Annotated[Dict[str, OrderUpdateRequest], Field(..., description="The request containing the orders to be updated.")], async_req: Optional[bool]=True, **kwargs) -> UpdateOrdersResponse: # noqa: E501
1192
+ ...
1193
+
1194
+ @validate_arguments
1195
+ def update_orders(self, request_body : Annotated[Dict[str, OrderUpdateRequest], Field(..., description="The request containing the orders to be updated.")], async_req: Optional[bool]=None, **kwargs) -> Union[UpdateOrdersResponse, Awaitable[UpdateOrdersResponse]]: # noqa: E501
1196
+ """[EARLY ACCESS] UpdateOrders: Update existing orders # noqa: E501
1197
+
1198
+ The response returns both the collection of successfully updated orders, as well as those that failed. For each failure, a reason is provided. It is important to check the failed set for unsuccessful results. # noqa: E501
1199
+ This method makes a synchronous HTTP request by default. To make an
1200
+ asynchronous HTTP request, please pass async_req=True
1201
+
1202
+ >>> thread = api.update_orders(request_body, async_req=True)
1203
+ >>> result = thread.get()
1204
+
1205
+ :param request_body: The request containing the orders to be updated. (required)
1206
+ :type request_body: Dict[str, OrderUpdateRequest]
1207
+ :param async_req: Whether to execute the request asynchronously.
1208
+ :type async_req: bool, optional
1209
+ :param _request_timeout: timeout setting for this request.
1210
+ If one number provided, it will be total request
1211
+ timeout. It can also be a pair (tuple) of
1212
+ (connection, read) timeouts.
1213
+ :return: Returns the result object.
1214
+ If the method is called asynchronously,
1215
+ returns the request thread.
1216
+ :rtype: UpdateOrdersResponse
1217
+ """
1218
+ kwargs['_return_http_data_only'] = True
1219
+ if '_preload_content' in kwargs:
1220
+ message = "Error! Please call the update_orders_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501
1221
+ raise ValueError(message)
1222
+ if async_req is not None:
1223
+ kwargs['async_req'] = async_req
1224
+ return self.update_orders_with_http_info(request_body, **kwargs) # noqa: E501
1225
+
1226
+ @validate_arguments
1227
+ def update_orders_with_http_info(self, request_body : Annotated[Dict[str, OrderUpdateRequest], Field(..., description="The request containing the orders to be updated.")], **kwargs) -> ApiResponse: # noqa: E501
1228
+ """[EARLY ACCESS] UpdateOrders: Update existing orders # noqa: E501
1229
+
1230
+ The response returns both the collection of successfully updated orders, as well as those that failed. For each failure, a reason is provided. It is important to check the failed set for unsuccessful results. # noqa: E501
1231
+ This method makes a synchronous HTTP request by default. To make an
1232
+ asynchronous HTTP request, please pass async_req=True
1233
+
1234
+ >>> thread = api.update_orders_with_http_info(request_body, async_req=True)
1235
+ >>> result = thread.get()
1236
+
1237
+ :param request_body: The request containing the orders to be updated. (required)
1238
+ :type request_body: Dict[str, OrderUpdateRequest]
1239
+ :param async_req: Whether to execute the request asynchronously.
1240
+ :type async_req: bool, optional
1241
+ :param _preload_content: if False, the ApiResponse.data will
1242
+ be set to none and raw_data will store the
1243
+ HTTP response body without reading/decoding.
1244
+ Default is True.
1245
+ :type _preload_content: bool, optional
1246
+ :param _return_http_data_only: response data instead of ApiResponse
1247
+ object with status code, headers, etc
1248
+ :type _return_http_data_only: bool, optional
1249
+ :param _request_timeout: timeout setting for this request. If one
1250
+ number provided, it will be total request
1251
+ timeout. It can also be a pair (tuple) of
1252
+ (connection, read) timeouts.
1253
+ :param _request_auth: set to override the auth_settings for an a single
1254
+ request; this effectively ignores the authentication
1255
+ in the spec for a single request.
1256
+ :type _request_auth: dict, optional
1257
+ :type _content_type: string, optional: force content-type for the request
1258
+ :return: Returns the result object.
1259
+ If the method is called asynchronously,
1260
+ returns the request thread.
1261
+ :rtype: tuple(UpdateOrdersResponse, status_code(int), headers(HTTPHeaderDict))
1262
+ """
1263
+
1264
+ _params = locals()
1265
+
1266
+ _all_params = [
1267
+ 'request_body'
1268
+ ]
1269
+ _all_params.extend(
1270
+ [
1271
+ 'async_req',
1272
+ '_return_http_data_only',
1273
+ '_preload_content',
1274
+ '_request_timeout',
1275
+ '_request_auth',
1276
+ '_content_type',
1277
+ '_headers'
1278
+ ]
1279
+ )
1280
+
1281
+ # validate the arguments
1282
+ for _key, _val in _params['kwargs'].items():
1283
+ if _key not in _all_params:
1284
+ raise ApiTypeError(
1285
+ "Got an unexpected keyword argument '%s'"
1286
+ " to method update_orders" % _key
1287
+ )
1288
+ _params[_key] = _val
1289
+ del _params['kwargs']
1290
+
1291
+ _collection_formats = {}
1292
+
1293
+ # process the path parameters
1294
+ _path_params = {}
1295
+
1296
+ # process the query parameters
1297
+ _query_params = []
1298
+ # process the header parameters
1299
+ _header_params = dict(_params.get('_headers', {}))
1300
+ # process the form parameters
1301
+ _form_params = []
1302
+ _files = {}
1303
+ # process the body parameter
1304
+ _body_params = None
1305
+ if _params['request_body'] is not None:
1306
+ _body_params = _params['request_body']
1307
+
1308
+ # set the HTTP header `Accept`
1309
+ _header_params['Accept'] = self.api_client.select_header_accept(
1310
+ ['text/plain', 'application/json', 'text/json']) # noqa: E501
1311
+
1312
+ # set the HTTP header `Content-Type`
1313
+ _content_types_list = _params.get('_content_type',
1314
+ self.api_client.select_header_content_type(
1315
+ ['application/json-patch+json', 'application/json', 'text/json', 'application/*+json']))
1316
+ if _content_types_list:
1317
+ _header_params['Content-Type'] = _content_types_list
1318
+
1319
+ # authentication setting
1320
+ _auth_settings = ['oauth2'] # noqa: E501
1321
+
1322
+ _response_types_map = {
1323
+ '200': "UpdateOrdersResponse",
1324
+ '400': "LusidValidationProblemDetails",
1325
+ }
1326
+
1327
+ return self.api_client.call_api(
1328
+ '/api/ordermanagement/updateorders', 'POST',
1329
+ _path_params,
1330
+ _query_params,
1331
+ _header_params,
1332
+ body=_body_params,
1333
+ post_params=_form_params,
1334
+ files=_files,
1335
+ response_types_map=_response_types_map,
1336
+ auth_settings=_auth_settings,
1337
+ async_req=_params.get('async_req'),
1338
+ _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501
1339
+ _preload_content=_params.get('_preload_content', True),
1340
+ _request_timeout=_params.get('_request_timeout'),
1341
+ collection_formats=_collection_formats,
1342
+ _request_auth=_params.get('_request_auth'))
1343
+
1184
1344
  @overload
1185
1345
  async def update_placements(self, request_body : Annotated[Dict[str, PlacementUpdateRequest], Field(..., description="The request containing the placements to be updated.")], **kwargs) -> UpdatePlacementsResponse: # noqa: E501
1186
1346
  ...
lusid/configuration.py CHANGED
@@ -373,7 +373,7 @@ class Configuration:
373
373
  return "Python SDK Debug Report:\n"\
374
374
  "OS: {env}\n"\
375
375
  "Python Version: {pyversion}\n"\
376
- "Version of the API: 0.11.6767\n"\
376
+ "Version of the API: 0.11.6771\n"\
377
377
  "SDK Package Version: {package_version}".\
378
378
  format(env=sys.platform, pyversion=sys.version, package_version=package_version)
379
379
 
lusid/models/__init__.py CHANGED
@@ -552,6 +552,7 @@ from lusid.models.order_instruction_request import OrderInstructionRequest
552
552
  from lusid.models.order_instruction_set_request import OrderInstructionSetRequest
553
553
  from lusid.models.order_request import OrderRequest
554
554
  from lusid.models.order_set_request import OrderSetRequest
555
+ from lusid.models.order_update_request import OrderUpdateRequest
555
556
  from lusid.models.otc_confirmation import OtcConfirmation
556
557
  from lusid.models.output_transaction import OutputTransaction
557
558
  from lusid.models.output_transition import OutputTransition
@@ -961,6 +962,7 @@ from lusid.models.update_data_type_request import UpdateDataTypeRequest
961
962
  from lusid.models.update_derived_property_definition_request import UpdateDerivedPropertyDefinitionRequest
962
963
  from lusid.models.update_fee_type_request import UpdateFeeTypeRequest
963
964
  from lusid.models.update_instrument_identifier_request import UpdateInstrumentIdentifierRequest
965
+ from lusid.models.update_orders_response import UpdateOrdersResponse
964
966
  from lusid.models.update_placements_response import UpdatePlacementsResponse
965
967
  from lusid.models.update_portfolio_group_request import UpdatePortfolioGroupRequest
966
968
  from lusid.models.update_portfolio_request import UpdatePortfolioRequest
@@ -1586,6 +1588,7 @@ __all__ = [
1586
1588
  "OrderInstructionSetRequest",
1587
1589
  "OrderRequest",
1588
1590
  "OrderSetRequest",
1591
+ "OrderUpdateRequest",
1589
1592
  "OtcConfirmation",
1590
1593
  "OutputTransaction",
1591
1594
  "OutputTransition",
@@ -1995,6 +1998,7 @@ __all__ = [
1995
1998
  "UpdateDerivedPropertyDefinitionRequest",
1996
1999
  "UpdateFeeTypeRequest",
1997
2000
  "UpdateInstrumentIdentifierRequest",
2001
+ "UpdateOrdersResponse",
1998
2002
  "UpdatePlacementsResponse",
1999
2003
  "UpdatePortfolioGroupRequest",
2000
2004
  "UpdatePortfolioRequest",
@@ -0,0 +1,116 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ LUSID API
5
+
6
+ FINBOURNE Technology # noqa: E501
7
+
8
+ Contact: info@finbourne.com
9
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
10
+
11
+ Do not edit the class manually.
12
+ """
13
+
14
+
15
+ from __future__ import annotations
16
+ import pprint
17
+ import re # noqa: F401
18
+ import json
19
+
20
+
21
+ from typing import Any, Dict, Optional, Union
22
+ from pydantic.v1 import BaseModel, Field, StrictFloat, StrictInt
23
+ from lusid.models.currency_and_amount import CurrencyAndAmount
24
+ from lusid.models.perpetual_property import PerpetualProperty
25
+ from lusid.models.resource_id import ResourceId
26
+
27
+ class OrderUpdateRequest(BaseModel):
28
+ """
29
+ A request to create or update a Order. # noqa: E501
30
+ """
31
+ id: ResourceId = Field(...)
32
+ quantity: Optional[Union[StrictFloat, StrictInt]] = Field(None, description="The quantity of given instrument ordered.")
33
+ portfolio_id: Optional[ResourceId] = Field(None, alias="portfolioId")
34
+ properties: Optional[Dict[str, PerpetualProperty]] = Field(None, description="Client-defined properties associated with this order.")
35
+ price: Optional[CurrencyAndAmount] = None
36
+ limit_price: Optional[CurrencyAndAmount] = Field(None, alias="limitPrice")
37
+ stop_price: Optional[CurrencyAndAmount] = Field(None, alias="stopPrice")
38
+ __properties = ["id", "quantity", "portfolioId", "properties", "price", "limitPrice", "stopPrice"]
39
+
40
+ class Config:
41
+ """Pydantic configuration"""
42
+ allow_population_by_field_name = True
43
+ validate_assignment = True
44
+
45
+ def to_str(self) -> str:
46
+ """Returns the string representation of the model using alias"""
47
+ return pprint.pformat(self.dict(by_alias=True))
48
+
49
+ def to_json(self) -> str:
50
+ """Returns the JSON representation of the model using alias"""
51
+ return json.dumps(self.to_dict())
52
+
53
+ @classmethod
54
+ def from_json(cls, json_str: str) -> OrderUpdateRequest:
55
+ """Create an instance of OrderUpdateRequest from a JSON string"""
56
+ return cls.from_dict(json.loads(json_str))
57
+
58
+ def to_dict(self):
59
+ """Returns the dictionary representation of the model using alias"""
60
+ _dict = self.dict(by_alias=True,
61
+ exclude={
62
+ },
63
+ exclude_none=True)
64
+ # override the default output from pydantic by calling `to_dict()` of id
65
+ if self.id:
66
+ _dict['id'] = self.id.to_dict()
67
+ # override the default output from pydantic by calling `to_dict()` of portfolio_id
68
+ if self.portfolio_id:
69
+ _dict['portfolioId'] = self.portfolio_id.to_dict()
70
+ # override the default output from pydantic by calling `to_dict()` of each value in properties (dict)
71
+ _field_dict = {}
72
+ if self.properties:
73
+ for _key in self.properties:
74
+ if self.properties[_key]:
75
+ _field_dict[_key] = self.properties[_key].to_dict()
76
+ _dict['properties'] = _field_dict
77
+ # override the default output from pydantic by calling `to_dict()` of price
78
+ if self.price:
79
+ _dict['price'] = self.price.to_dict()
80
+ # override the default output from pydantic by calling `to_dict()` of limit_price
81
+ if self.limit_price:
82
+ _dict['limitPrice'] = self.limit_price.to_dict()
83
+ # override the default output from pydantic by calling `to_dict()` of stop_price
84
+ if self.stop_price:
85
+ _dict['stopPrice'] = self.stop_price.to_dict()
86
+ # set to None if properties (nullable) is None
87
+ # and __fields_set__ contains the field
88
+ if self.properties is None and "properties" in self.__fields_set__:
89
+ _dict['properties'] = None
90
+
91
+ return _dict
92
+
93
+ @classmethod
94
+ def from_dict(cls, obj: dict) -> OrderUpdateRequest:
95
+ """Create an instance of OrderUpdateRequest from a dict"""
96
+ if obj is None:
97
+ return None
98
+
99
+ if not isinstance(obj, dict):
100
+ return OrderUpdateRequest.parse_obj(obj)
101
+
102
+ _obj = OrderUpdateRequest.parse_obj({
103
+ "id": ResourceId.from_dict(obj.get("id")) if obj.get("id") is not None else None,
104
+ "quantity": obj.get("quantity"),
105
+ "portfolio_id": ResourceId.from_dict(obj.get("portfolioId")) if obj.get("portfolioId") is not None else None,
106
+ "properties": dict(
107
+ (_k, PerpetualProperty.from_dict(_v))
108
+ for _k, _v in obj.get("properties").items()
109
+ )
110
+ if obj.get("properties") is not None
111
+ else None,
112
+ "price": CurrencyAndAmount.from_dict(obj.get("price")) if obj.get("price") is not None else None,
113
+ "limit_price": CurrencyAndAmount.from_dict(obj.get("limitPrice")) if obj.get("limitPrice") is not None else None,
114
+ "stop_price": CurrencyAndAmount.from_dict(obj.get("stopPrice")) if obj.get("stopPrice") is not None else None
115
+ })
116
+ return _obj
@@ -25,12 +25,12 @@ class QuoteAccessMetadataRuleId(BaseModel):
25
25
  """
26
26
  An identifier that uniquely identifies a set of Quote access control metadata. # noqa: E501
27
27
  """
28
- provider: Optional[constr(strict=True, max_length=100, min_length=0)] = Field(None, description="The platform or vendor that provided the quote. The available values are: Client, DataScope, Lusid, Edi, TraderMade, FactSet, SIX, Bloomberg, Rimes, ICE")
28
+ provider: Optional[constr(strict=True, max_length=100, min_length=0)] = Field(None, description="The platform or vendor that provided the quote. The available values are: Client, DataScope, Lusid, Edi, TraderMade, FactSet, SIX, Bloomberg, Rimes, ICE, LSEG")
29
29
  price_source: Optional[constr(strict=True, max_length=256, min_length=0)] = Field(None, alias="priceSource", description="The source or originator of the quote, e.g. a bank or financial institution.")
30
30
  instrument_id: Optional[constr(strict=True, max_length=256, min_length=0)] = Field(None, alias="instrumentId", description="The value of the instrument identifier that uniquely identifies the instrument that the quote is for, e.g. 'BBG00JX0P539'.")
31
31
  instrument_id_type: Optional[constr(strict=True, max_length=50, min_length=0)] = Field(None, alias="instrumentIdType", description="The type of instrument identifier used to uniquely identify the instrument that the quote is for, e.g. 'Figi'.")
32
32
  quote_type: Optional[constr(strict=True, max_length=50, min_length=0)] = Field(None, alias="quoteType", description="The type of the quote. This allows for quotes other than prices e.g. rates or spreads to be used.")
33
- field: Optional[constr(strict=True, max_length=2048, min_length=0)] = Field(None, description="The field of the quote e.g. bid, mid, ask etc. This should be consistent across a time series of quotes. The allowed values depend on the provider according to the following rules: Client : *Any value is accepted*; DataScope : 'bid', 'mid', 'ask'; Lusid : *Any value is accepted*; Edi : 'bid', 'mid', 'ask', 'open', 'close', 'last'; TraderMade : 'bid', 'mid', 'ask', 'open', 'close', 'high', 'low'; FactSet : 'bid', 'mid', 'ask', 'open', 'close'; SIX : 'bid', 'mid', 'ask', 'open', 'close', 'last', 'referencePrice', 'highPrice', 'lowPrice', 'maxRedemptionPrice', 'maxSubscriptionPrice', 'openPrice', 'bestBidPrice', 'lastBidPrice', 'bestAskPrice', 'lastAskPrice'; Bloomberg : 'bid', 'mid', 'ask', 'open', 'close', 'last'; Rimes : 'bid', 'mid', 'ask', 'open', 'close', 'last'; ICE : 'ask', 'bid'")
33
+ field: Optional[constr(strict=True, max_length=2048, min_length=0)] = Field(None, description="The field of the quote e.g. bid, mid, ask etc. This should be consistent across a time series of quotes. The allowed values depend on the provider according to the following rules: Client : *Any value is accepted*; DataScope : 'bid', 'mid', 'ask'; Lusid : *Any value is accepted*; Edi : 'bid', 'mid', 'ask', 'open', 'close', 'last'; TraderMade : 'bid', 'mid', 'ask', 'open', 'close', 'high', 'low'; FactSet : 'bid', 'mid', 'ask', 'open', 'close'; SIX : 'bid', 'mid', 'ask', 'open', 'close', 'last', 'referencePrice', 'highPrice', 'lowPrice', 'maxRedemptionPrice', 'maxSubscriptionPrice', 'openPrice', 'bestBidPrice', 'lastBidPrice', 'bestAskPrice', 'lastAskPrice'; Bloomberg : 'bid', 'mid', 'ask', 'open', 'close', 'last'; Rimes : 'bid', 'mid', 'ask', 'open', 'close', 'last'; ICE : 'ask', 'bid'; LSEG : 'ASK', 'BID', 'MID_PRICE'")
34
34
  __properties = ["provider", "priceSource", "instrumentId", "instrumentIdType", "quoteType", "field"]
35
35
 
36
36
  @validator('instrument_id_type')
@@ -25,12 +25,12 @@ class QuoteSeriesId(BaseModel):
25
25
  """
26
26
  The time invariant unique identifier of the quote. Combined with the effective datetime of the quote this uniquely identifies the quote. This can be thought of as a unique identifier for a time series of quotes. # noqa: E501
27
27
  """
28
- provider: constr(strict=True, min_length=1) = Field(..., description="The platform or vendor that provided the quote. The available values are: Client, DataScope, Lusid, Edi, TraderMade, FactSet, SIX, Bloomberg, Rimes, ICE")
28
+ provider: constr(strict=True, min_length=1) = Field(..., description="The platform or vendor that provided the quote. The available values are: Client, DataScope, Lusid, Edi, TraderMade, FactSet, SIX, Bloomberg, Rimes, ICE, LSEG")
29
29
  price_source: Optional[StrictStr] = Field(None, alias="priceSource", description="The source or originator of the quote, e.g. a bank or financial institution.")
30
30
  instrument_id: constr(strict=True, min_length=1) = Field(..., alias="instrumentId", description="The value of the instrument identifier that uniquely identifies the instrument that the quote is for, e.g. 'BBG00JX0P539'.")
31
31
  instrument_id_type: StrictStr = Field(..., alias="instrumentIdType", description="The type of instrument identifier used to uniquely identify the instrument that the quote is for, e.g. 'Figi'. The available values are: LusidInstrumentId, Figi, RIC, QuotePermId, Isin, CurrencyPair, ClientInternal, Sedol, Cusip")
32
32
  quote_type: StrictStr = Field(..., alias="quoteType", description="The type of the quote. This allows for quotes other than prices e.g. rates or spreads to be used. The available values are: Price, Spread, Rate, LogNormalVol, NormalVol, ParSpread, IsdaSpread, Upfront, Index, Ratio, Delta, PoolFactor, InflationAssumption, DirtyPrice, PrincipalWriteOff, InterestDeferred, InterestShortfall")
33
- field: constr(strict=True, min_length=1) = Field(..., description="The field of the quote e.g. bid, mid, ask etc. This should be consistent across a time series of quotes. The allowed values depend on the provider according to the following rules: Client : *Any value is accepted*; DataScope : 'bid', 'mid', 'ask'; Lusid : *Any value is accepted*; Edi : 'bid', 'mid', 'ask', 'open', 'close', 'last'; TraderMade : 'bid', 'mid', 'ask', 'open', 'close', 'high', 'low'; FactSet : 'bid', 'mid', 'ask', 'open', 'close'; SIX : 'bid', 'mid', 'ask', 'open', 'close', 'last', 'referencePrice', 'highPrice', 'lowPrice', 'maxRedemptionPrice', 'maxSubscriptionPrice', 'openPrice', 'bestBidPrice', 'lastBidPrice', 'bestAskPrice', 'lastAskPrice'; Bloomberg : 'bid', 'mid', 'ask', 'open', 'close', 'last'; Rimes : 'bid', 'mid', 'ask', 'open', 'close', 'last'; ICE : 'ask', 'bid'")
33
+ field: constr(strict=True, min_length=1) = Field(..., description="The field of the quote e.g. bid, mid, ask etc. This should be consistent across a time series of quotes. The allowed values depend on the provider according to the following rules: Client : *Any value is accepted*; DataScope : 'bid', 'mid', 'ask'; Lusid : *Any value is accepted*; Edi : 'bid', 'mid', 'ask', 'open', 'close', 'last'; TraderMade : 'bid', 'mid', 'ask', 'open', 'close', 'high', 'low'; FactSet : 'bid', 'mid', 'ask', 'open', 'close'; SIX : 'bid', 'mid', 'ask', 'open', 'close', 'last', 'referencePrice', 'highPrice', 'lowPrice', 'maxRedemptionPrice', 'maxSubscriptionPrice', 'openPrice', 'bestBidPrice', 'lastBidPrice', 'bestAskPrice', 'lastAskPrice'; Bloomberg : 'bid', 'mid', 'ask', 'open', 'close', 'last'; Rimes : 'bid', 'mid', 'ask', 'open', 'close', 'last'; ICE : 'ask', 'bid'; LSEG : 'ASK', 'BID', 'MID_PRICE'")
34
34
  __properties = ["provider", "priceSource", "instrumentId", "instrumentIdType", "quoteType", "field"]
35
35
 
36
36
  @validator('instrument_id_type')
@@ -0,0 +1,153 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ LUSID API
5
+
6
+ FINBOURNE Technology # noqa: E501
7
+
8
+ Contact: info@finbourne.com
9
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
10
+
11
+ Do not edit the class manually.
12
+ """
13
+
14
+
15
+ from __future__ import annotations
16
+ import pprint
17
+ import re # noqa: F401
18
+ import json
19
+
20
+
21
+ from typing import Any, Dict, List, Optional
22
+ from pydantic.v1 import BaseModel, Field, StrictStr, conlist
23
+ from lusid.models.error_detail import ErrorDetail
24
+ from lusid.models.link import Link
25
+ from lusid.models.order import Order
26
+ from lusid.models.response_meta_data import ResponseMetaData
27
+
28
+ class UpdateOrdersResponse(BaseModel):
29
+ """
30
+ UpdateOrdersResponse
31
+ """
32
+ href: Optional[StrictStr] = Field(None, description="The specific Uniform Resource Identifier (URI) for this resource at the requested effective and asAt datetime.")
33
+ values: Optional[Dict[str, Order]] = Field(None, description="The orders which have been successfully updated.")
34
+ failed: Optional[Dict[str, ErrorDetail]] = Field(None, description="The orders that could not be updated, along with a reason for their failure.")
35
+ metadata: Optional[Dict[str, conlist(ResponseMetaData)]] = Field(None, description="Meta data associated with the update event.")
36
+ links: Optional[conlist(Link)] = None
37
+ __properties = ["href", "values", "failed", "metadata", "links"]
38
+
39
+ class Config:
40
+ """Pydantic configuration"""
41
+ allow_population_by_field_name = True
42
+ validate_assignment = True
43
+
44
+ def to_str(self) -> str:
45
+ """Returns the string representation of the model using alias"""
46
+ return pprint.pformat(self.dict(by_alias=True))
47
+
48
+ def to_json(self) -> str:
49
+ """Returns the JSON representation of the model using alias"""
50
+ return json.dumps(self.to_dict())
51
+
52
+ @classmethod
53
+ def from_json(cls, json_str: str) -> UpdateOrdersResponse:
54
+ """Create an instance of UpdateOrdersResponse from a JSON string"""
55
+ return cls.from_dict(json.loads(json_str))
56
+
57
+ def to_dict(self):
58
+ """Returns the dictionary representation of the model using alias"""
59
+ _dict = self.dict(by_alias=True,
60
+ exclude={
61
+ },
62
+ exclude_none=True)
63
+ # override the default output from pydantic by calling `to_dict()` of each value in values (dict)
64
+ _field_dict = {}
65
+ if self.values:
66
+ for _key in self.values:
67
+ if self.values[_key]:
68
+ _field_dict[_key] = self.values[_key].to_dict()
69
+ _dict['values'] = _field_dict
70
+ # override the default output from pydantic by calling `to_dict()` of each value in failed (dict)
71
+ _field_dict = {}
72
+ if self.failed:
73
+ for _key in self.failed:
74
+ if self.failed[_key]:
75
+ _field_dict[_key] = self.failed[_key].to_dict()
76
+ _dict['failed'] = _field_dict
77
+ # override the default output from pydantic by calling `to_dict()` of each value in metadata (dict of array)
78
+ _field_dict_of_array = {}
79
+ if self.metadata:
80
+ for _key in self.metadata:
81
+ if self.metadata[_key]:
82
+ _field_dict_of_array[_key] = [
83
+ _item.to_dict() for _item in self.metadata[_key]
84
+ ]
85
+ _dict['metadata'] = _field_dict_of_array
86
+ # override the default output from pydantic by calling `to_dict()` of each item in links (list)
87
+ _items = []
88
+ if self.links:
89
+ for _item in self.links:
90
+ if _item:
91
+ _items.append(_item.to_dict())
92
+ _dict['links'] = _items
93
+ # set to None if href (nullable) is None
94
+ # and __fields_set__ contains the field
95
+ if self.href is None and "href" in self.__fields_set__:
96
+ _dict['href'] = None
97
+
98
+ # set to None if values (nullable) is None
99
+ # and __fields_set__ contains the field
100
+ if self.values is None and "values" in self.__fields_set__:
101
+ _dict['values'] = None
102
+
103
+ # set to None if failed (nullable) is None
104
+ # and __fields_set__ contains the field
105
+ if self.failed is None and "failed" in self.__fields_set__:
106
+ _dict['failed'] = None
107
+
108
+ # set to None if metadata (nullable) is None
109
+ # and __fields_set__ contains the field
110
+ if self.metadata is None and "metadata" in self.__fields_set__:
111
+ _dict['metadata'] = None
112
+
113
+ # set to None if links (nullable) is None
114
+ # and __fields_set__ contains the field
115
+ if self.links is None and "links" in self.__fields_set__:
116
+ _dict['links'] = None
117
+
118
+ return _dict
119
+
120
+ @classmethod
121
+ def from_dict(cls, obj: dict) -> UpdateOrdersResponse:
122
+ """Create an instance of UpdateOrdersResponse from a dict"""
123
+ if obj is None:
124
+ return None
125
+
126
+ if not isinstance(obj, dict):
127
+ return UpdateOrdersResponse.parse_obj(obj)
128
+
129
+ _obj = UpdateOrdersResponse.parse_obj({
130
+ "href": obj.get("href"),
131
+ "values": dict(
132
+ (_k, Order.from_dict(_v))
133
+ for _k, _v in obj.get("values").items()
134
+ )
135
+ if obj.get("values") is not None
136
+ else None,
137
+ "failed": dict(
138
+ (_k, ErrorDetail.from_dict(_v))
139
+ for _k, _v in obj.get("failed").items()
140
+ )
141
+ if obj.get("failed") is not None
142
+ else None,
143
+ "metadata": dict(
144
+ (_k,
145
+ [ResponseMetaData.from_dict(_item) for _item in _v]
146
+ if _v is not None
147
+ else None
148
+ )
149
+ for _k, _v in obj.get("metadata").items()
150
+ ),
151
+ "links": [Link.from_dict(_item) for _item in obj.get("links")] if obj.get("links") is not None else None
152
+ })
153
+ return _obj
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: lusid-sdk
3
- Version: 2.1.336
3
+ Version: 2.1.340
4
4
  Summary: LUSID API
5
5
  Home-page: https://github.com/finbourne/lusid-sdk-python
6
6
  License: MIT
@@ -318,6 +318,7 @@ Class | Method | HTTP request | Description
318
318
  *OrderManagementApi* | [**move_orders**](docs/OrderManagementApi.md#move_orders) | **POST** /api/ordermanagement/moveorders | [EARLY ACCESS] MoveOrders: Move orders to new or existing block
319
319
  *OrderManagementApi* | [**place_blocks**](docs/OrderManagementApi.md#place_blocks) | **POST** /api/ordermanagement/placeblocks | [EARLY ACCESS] PlaceBlocks: Places blocks for a given list of placement requests.
320
320
  *OrderManagementApi* | [**run_allocation_service**](docs/OrderManagementApi.md#run_allocation_service) | **POST** /api/ordermanagement/allocate | [EXPERIMENTAL] RunAllocationService: Runs the Allocation Service
321
+ *OrderManagementApi* | [**update_orders**](docs/OrderManagementApi.md#update_orders) | **POST** /api/ordermanagement/updateorders | [EARLY ACCESS] UpdateOrders: Update existing orders
321
322
  *OrderManagementApi* | [**update_placements**](docs/OrderManagementApi.md#update_placements) | **POST** /api/ordermanagement/$updateplacements | [EARLY ACCESS] UpdatePlacements: Update existing placements
322
323
  *OrdersApi* | [**delete_order**](docs/OrdersApi.md#delete_order) | **DELETE** /api/orders/{scope}/{code} | [EARLY ACCESS] DeleteOrder: Delete order
323
324
  *OrdersApi* | [**get_order**](docs/OrdersApi.md#get_order) | **GET** /api/orders/{scope}/{code} | [EARLY ACCESS] GetOrder: Get Order
@@ -1114,6 +1115,7 @@ Class | Method | HTTP request | Description
1114
1115
  - [OrderInstructionSetRequest](docs/OrderInstructionSetRequest.md)
1115
1116
  - [OrderRequest](docs/OrderRequest.md)
1116
1117
  - [OrderSetRequest](docs/OrderSetRequest.md)
1118
+ - [OrderUpdateRequest](docs/OrderUpdateRequest.md)
1117
1119
  - [OtcConfirmation](docs/OtcConfirmation.md)
1118
1120
  - [OutputTransaction](docs/OutputTransaction.md)
1119
1121
  - [OutputTransition](docs/OutputTransition.md)
@@ -1523,6 +1525,7 @@ Class | Method | HTTP request | Description
1523
1525
  - [UpdateDerivedPropertyDefinitionRequest](docs/UpdateDerivedPropertyDefinitionRequest.md)
1524
1526
  - [UpdateFeeTypeRequest](docs/UpdateFeeTypeRequest.md)
1525
1527
  - [UpdateInstrumentIdentifierRequest](docs/UpdateInstrumentIdentifierRequest.md)
1528
+ - [UpdateOrdersResponse](docs/UpdateOrdersResponse.md)
1526
1529
  - [UpdatePlacementsResponse](docs/UpdatePlacementsResponse.md)
1527
1530
  - [UpdatePortfolioGroupRequest](docs/UpdatePortfolioGroupRequest.md)
1528
1531
  - [UpdatePortfolioRequest](docs/UpdatePortfolioRequest.md)
@@ -1,4 +1,4 @@
1
- lusid/__init__.py,sha256=jKewBEkQd00ywToJglKUyCU_GLQBjiQnvuoyc6ZiZJ8,114344
1
+ lusid/__init__.py,sha256=jfWnMPrlK5wzfQtIWAMfIPVnW4YEJnr5gGfZcauxxgU,114532
2
2
  lusid/api/__init__.py,sha256=EuHJI-4kmmibn1IVmY9akKMT-R1Bnth9msFll5hlBGY,5652
3
3
  lusid/api/abor_api.py,sha256=AvgsHuWE7qRSYJhKveBE2htSjHpqqS0VNJrysAfwME0,159655
4
4
  lusid/api/abor_configuration_api.py,sha256=G2bKPtMYOZ2GhUrg-nPJtCa9XIZdZYK7oafcbJWDMP8,64033
@@ -34,7 +34,7 @@ lusid/api/legacy_compliance_api.py,sha256=EjYqCQTemq71q2_sfHU9ptr-ULhNk1EJ0Vejrf
34
34
  lusid/api/legal_entities_api.py,sha256=DFpQxYU_illhMl8_CnlmpLKcBEaxOt7ECiHT51Xl49Q,267854
35
35
  lusid/api/order_graph_api.py,sha256=YcL-SdC42ufKcFgbzD_qwVpWRZKkRDRijGpBviizbVU,45280
36
36
  lusid/api/order_instructions_api.py,sha256=HZn9ZwVgp6bF32GIHpBwaejKKri0tG_KLfgHWfllR8U,46091
37
- lusid/api/order_management_api.py,sha256=c8TqR7NdABfR-FRE0k0D9eo4D9aLYjhwlztX9BJ9D4o,68646
37
+ lusid/api/order_management_api.py,sha256=hgm3FP6KkEJ-8cYIdMUUE5a3rlF_DNSOjzjkIjDhUbY,76572
38
38
  lusid/api/orders_api.py,sha256=PjkqtLhbS6lQEEfZiXXAiIa5ls0jLokiqizseg7_nx0,43527
39
39
  lusid/api/packages_api.py,sha256=-2mdoL2HSQ2aCXqYUMxt-1rrlezyQhgCNtevVazqM9o,43985
40
40
  lusid/api/participations_api.py,sha256=nlVzeyfE33X9Ue9HC9rqCW3WACEPKBvcrEjFEmT8wlk,45263
@@ -68,7 +68,7 @@ lusid/api/transaction_portfolios_api.py,sha256=7G5m6iTQXTKCc6ASdxnlVJjvFascHxEgD
68
68
  lusid/api/translation_api.py,sha256=xTAaKEW96JTDIZBXCjxSguCa7Gz4oVd5jdObUE2egwo,20092
69
69
  lusid/api_client.py,sha256=dF6l9RAsdxdQjf6Qn4ny6LB-QXlJmsscWiozCvyyBFA,30709
70
70
  lusid/api_response.py,sha256=6-gnhty6lu8MMAERt3_kTVD7UxQgWFfcjgpcq6iN5IU,855
71
- lusid/configuration.py,sha256=P1Ffzj5d6Z1yI09k8NQNZytn3f7O0otC1oqqXSPlAhc,14404
71
+ lusid/configuration.py,sha256=o1FdzJWj1UXmAff7Ufu6JkB0haSZf3FU2YFH8D4eWOg,14404
72
72
  lusid/exceptions.py,sha256=HIQwgmQrszLlcVCLaqex8dO0laVuejUyOMz7U2ZWJ6s,5326
73
73
  lusid/extensions/__init__.py,sha256=dzDHEzpn-9smd2-_UMWQzeyX6Ha4jGf6fnqx7qxKxNI,630
74
74
  lusid/extensions/api_client.py,sha256=Ob06urm4Em3MLzgP_geyeeGsPCkU225msW_1kpIeABM,30567
@@ -82,7 +82,7 @@ lusid/extensions/rest.py,sha256=tjVCu-cRrYcjp-ttB975vebPKtBNyBWaeoAdO3QXG2I,1269
82
82
  lusid/extensions/retry.py,sha256=orBJ1uF1iT1IncjWX1iGHVqsCgTh0SBe9rtiV_sPnwk,11564
83
83
  lusid/extensions/socket_keep_alive.py,sha256=NGlqsv-E25IjJOLGZhXZY6kUdx51nEF8qCQyVdzayRk,1653
84
84
  lusid/extensions/tcp_keep_alive_connector.py,sha256=zaGtUsygRsxB1_4B3x39K3ILwztdhMLDv5bFZV7zmGE,3877
85
- lusid/models/__init__.py,sha256=-kdSl9Kb7_OuVjlz_7KfE-H0nOKYQbaNRv5W7gbSHXA,107660
85
+ lusid/models/__init__.py,sha256=GkO5sIC1eAmxnnHo05m6I-JNf7NQbDDLnfyHXhz0hOU,107848
86
86
  lusid/models/a2_b_breakdown.py,sha256=Txi12EIQw3mH6NM-25QkOnHSQc3BVAWrP7yl9bZswSY,2947
87
87
  lusid/models/a2_b_category.py,sha256=k6NPAACi0CUjKyhdQac4obQSrPmp2PXD6lkAtCnyEFM,2725
88
88
  lusid/models/a2_b_data_record.py,sha256=zKGS2P4fzNpzdcGJiSIpkY4P3d_jAcawYfyuPCDeQgk,9737
@@ -621,6 +621,7 @@ lusid/models/order_instruction_request.py,sha256=69JFcMA3Aju-lzjGVH0h3fzlcvjnjVd
621
621
  lusid/models/order_instruction_set_request.py,sha256=QucOY45KZ2qGKFeSn4MIFAm9lmRdKVjCTYtRvkFXNDU,2764
622
622
  lusid/models/order_request.py,sha256=hOwerLbLdwdGW4bbETyml3ecg4wdNKvtnRefq6wPk1U,7833
623
623
  lusid/models/order_set_request.py,sha256=RfOrLNJ67eLBKScPgm-eQhO0Nc0QjhO243d_u4qCfmA,2716
624
+ lusid/models/order_update_request.py,sha256=7SFQWUTKs6bYYVGdQiB8yb6nwu39DChhZWGaAZtujT4,4928
624
625
  lusid/models/otc_confirmation.py,sha256=OQF6QzTdyya99HApPCZaF3rkcnSztw4GHkL-qdGh-A4,2419
625
626
  lusid/models/output_transaction.py,sha256=Jqbq3wjB-5OIhWM5eR2CE2nRuk7C8tkUP2-L1wORIos,13905
626
627
  lusid/models/output_transition.py,sha256=1K7llvbd7xO0aesRTbK4AFFGn_V6ZsSyWh2o8wQrTt8,3985
@@ -768,11 +769,11 @@ lusid/models/query_trade_tickets_request.py,sha256=fNQ0Y0sQ_x19G1y3lnqXV2d3L9jZR
768
769
  lusid/models/queryable_key.py,sha256=wuXBcvzYrjRJZ-eZ34cHwJWzRYhoyKMjqWjClosoR9Y,8320
769
770
  lusid/models/quote.py,sha256=zuGCv7tOb-k4bBXJLaEa3g3s7FW_zhbI3Ux9yb2a-DI,4479
770
771
  lusid/models/quote_access_metadata_rule.py,sha256=s0-r0q6h72-XRO4_9G6abSWp88OFM7QUS0MOGXYV9s8,3179
771
- lusid/models/quote_access_metadata_rule_id.py,sha256=qc2bySwq38ZvxuSW105zZehvRFWrIiqVx2aGj6oLtk0,6401
772
+ lusid/models/quote_access_metadata_rule_id.py,sha256=In_O-CU-Qy1Uw6ghmjTwn3dqOFjtePtzBEpoI5rtOtM,6441
772
773
  lusid/models/quote_dependency.py,sha256=1xlJfTJjjLVnN5lTY7JQLUT_5IPEUNtNaLUFfBjDC9E,4595
773
774
  lusid/models/quote_id.py,sha256=dPe08swumG6Hc4Rk2p2YstGQafjJRcdQTF78EqYZEPk,2419
774
775
  lusid/models/quote_instrument_id_type.py,sha256=xLx1GjV_zFUIJcpw2JmCyWmzd9QR6S7ORFajcjtAHBw,886
775
- lusid/models/quote_series_id.py,sha256=_YpNZz5Gr8Fglegkuj6hDmRZj6nngMrjrHb1HsajxGY,5914
776
+ lusid/models/quote_series_id.py,sha256=gv17AoQDryRhyiAQ9udjzDrGYyr7w8I7H6W29RrITno,5954
776
777
  lusid/models/quote_type.py,sha256=18LUYnfqUvhGJ0utX4QZIDjmZGXxHT1_3dooUPVi5OI,1088
777
778
  lusid/models/raw_vendor_event.py,sha256=gj2rgb29Pyy-G8FCpQDiNJcXcr9NhtPX3UPb_2xPE4U,5590
778
779
  lusid/models/re_open_period_diary_entry_request.py,sha256=CcQqX5ekcLT_XTdWFJGZAmNQ2I5NMpzkwoLvfdoJ4X0,2792
@@ -1030,6 +1031,7 @@ lusid/models/update_data_type_request.py,sha256=D9-a9SnXYvk6OLWTjouKu9F2e-SZxCgX
1030
1031
  lusid/models/update_derived_property_definition_request.py,sha256=ywIjoYEVA2VMZo_EYrmGkXIUD3gExDBhBXsW4hi9R3o,3323
1031
1032
  lusid/models/update_fee_type_request.py,sha256=fM6q1vKQUR5cTkPUX9uR3CZrNboo-W3UmOK7QKkY5kY,3585
1032
1033
  lusid/models/update_instrument_identifier_request.py,sha256=lPZDvks6d_cuFN1AGuYJFwRrTSCsbLczkgMU5vSlOCQ,3054
1034
+ lusid/models/update_orders_response.py,sha256=HQG6w8kNYY-xgK9aPkIt2yUmv1hYnvYEwCv8fGpUP9I,5961
1033
1035
  lusid/models/update_placements_response.py,sha256=VwDwHI-bsIhdQ2I1sOKdSrHJ9arhZtuJeoHYSNbFdkw,6017
1034
1036
  lusid/models/update_portfolio_group_request.py,sha256=qp-jCVMlFeXY87_z9PBAz0Kzj6T_ZWALS6UVhIFvg94,2454
1035
1037
  lusid/models/update_portfolio_request.py,sha256=m6OP1BXQ4QQMv57ZGnYuNlWkYWWMZhelqgDmAa9R9Fo,2418
@@ -1116,6 +1118,6 @@ lusid/models/weighted_instruments.py,sha256=1y_y_vw4-LPsbkQx4FOzWdZc5fJnzhVkf1D3
1116
1118
  lusid/models/yield_curve_data.py,sha256=SbxvdJ4-GWK9kpMdw4Fnxc7_kvIMwgsRsd_31UJn7nw,6330
1117
1119
  lusid/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1118
1120
  lusid/rest.py,sha256=TNUzQ3yLNT2L053EdR7R0vNzQh2J3TlYD1T56Dye0W0,10138
1119
- lusid_sdk-2.1.336.dist-info/METADATA,sha256=Kw_xL9HXjNLE-UXROtc1axLBHjbaFn7US-KzscJI25E,188462
1120
- lusid_sdk-2.1.336.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
1121
- lusid_sdk-2.1.336.dist-info/RECORD,,
1121
+ lusid_sdk-2.1.340.dist-info/METADATA,sha256=5ja0g1PoYOXmmQAMU7RyAbyr32lBV5Plgc5GVCcl7BM,188754
1122
+ lusid_sdk-2.1.340.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
1123
+ lusid_sdk-2.1.340.dist-info/RECORD,,