lusid-sdk 2.1.502__py3-none-any.whl → 2.1.515__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
@@ -159,6 +159,8 @@ from lusid.models.barrier import Barrier
159
159
  from lusid.models.basket import Basket
160
160
  from lusid.models.basket_identifier import BasketIdentifier
161
161
  from lusid.models.batch_adjust_holdings_response import BatchAdjustHoldingsResponse
162
+ from lusid.models.batch_update_user_review_for_comparison_result_request import BatchUpdateUserReviewForComparisonResultRequest
163
+ from lusid.models.batch_update_user_review_for_comparison_result_response import BatchUpdateUserReviewForComparisonResultResponse
162
164
  from lusid.models.batch_upsert_dates_for_calendar_response import BatchUpsertDatesForCalendarResponse
163
165
  from lusid.models.batch_upsert_instrument_properties_response import BatchUpsertInstrumentPropertiesResponse
164
166
  from lusid.models.batch_upsert_portfolio_access_metadata_request import BatchUpsertPortfolioAccessMetadataRequest
@@ -536,9 +538,11 @@ from lusid.models.group_reconciliation_run_request import GroupReconciliationRun
536
538
  from lusid.models.group_reconciliation_run_response import GroupReconciliationRunResponse
537
539
  from lusid.models.group_reconciliation_summary import GroupReconciliationSummary
538
540
  from lusid.models.group_reconciliation_user_review import GroupReconciliationUserReview
541
+ from lusid.models.group_reconciliation_user_review_add import GroupReconciliationUserReviewAdd
539
542
  from lusid.models.group_reconciliation_user_review_break_code import GroupReconciliationUserReviewBreakCode
540
543
  from lusid.models.group_reconciliation_user_review_comment import GroupReconciliationUserReviewComment
541
544
  from lusid.models.group_reconciliation_user_review_match_key import GroupReconciliationUserReviewMatchKey
545
+ from lusid.models.group_reconciliation_user_review_remove import GroupReconciliationUserReviewRemove
542
546
  from lusid.models.grouped_result_of_address_key import GroupedResultOfAddressKey
543
547
  from lusid.models.holding_adjustment import HoldingAdjustment
544
548
  from lusid.models.holding_adjustment_with_date import HoldingAdjustmentWithDate
@@ -1370,6 +1374,8 @@ __all__ = [
1370
1374
  "Basket",
1371
1375
  "BasketIdentifier",
1372
1376
  "BatchAdjustHoldingsResponse",
1377
+ "BatchUpdateUserReviewForComparisonResultRequest",
1378
+ "BatchUpdateUserReviewForComparisonResultResponse",
1373
1379
  "BatchUpsertDatesForCalendarResponse",
1374
1380
  "BatchUpsertInstrumentPropertiesResponse",
1375
1381
  "BatchUpsertPortfolioAccessMetadataRequest",
@@ -1747,9 +1753,11 @@ __all__ = [
1747
1753
  "GroupReconciliationRunResponse",
1748
1754
  "GroupReconciliationSummary",
1749
1755
  "GroupReconciliationUserReview",
1756
+ "GroupReconciliationUserReviewAdd",
1750
1757
  "GroupReconciliationUserReviewBreakCode",
1751
1758
  "GroupReconciliationUserReviewComment",
1752
1759
  "GroupReconciliationUserReviewMatchKey",
1760
+ "GroupReconciliationUserReviewRemove",
1753
1761
  "GroupedResultOfAddressKey",
1754
1762
  "HoldingAdjustment",
1755
1763
  "HoldingAdjustmentWithDate",
@@ -26,6 +26,8 @@ from pydantic.v1 import Field, StrictStr, conint, conlist, constr, validator
26
26
 
27
27
  from typing import Optional
28
28
 
29
+ from lusid.models.batch_update_user_review_for_comparison_result_request import BatchUpdateUserReviewForComparisonResultRequest
30
+ from lusid.models.batch_update_user_review_for_comparison_result_response import BatchUpdateUserReviewForComparisonResultResponse
29
31
  from lusid.models.create_group_reconciliation_comparison_ruleset_request import CreateGroupReconciliationComparisonRulesetRequest
30
32
  from lusid.models.create_group_reconciliation_definition_request import CreateGroupReconciliationDefinitionRequest
31
33
  from lusid.models.deleted_entity_response import DeletedEntityResponse
@@ -61,6 +63,188 @@ class GroupReconciliationsApi:
61
63
  api_client = ApiClient.get_default()
62
64
  self.api_client = api_client
63
65
 
66
+ @overload
67
+ async def batch_update_comparison_results(self, scope : Annotated[constr(strict=True, max_length=64, min_length=1), Field(..., description="Shared Scope of the GroupReconciliationDefinition and GroupReconciliationComparisonResults.")], code : Annotated[constr(strict=True, max_length=64, min_length=1), Field(..., description="GroupReconciliationDefinitionId code.")], batch_update_user_review_for_comparison_result_request : Annotated[conlist(BatchUpdateUserReviewForComparisonResultRequest), Field(..., description="A collection of the comparison result Ids and their user review entries to be added or removed. Single request contains resultId, break code/match key/comment to add and break code/match key/comment to remove by added timestamp.")], success_mode : Annotated[Optional[constr(strict=True, max_length=64, min_length=1)], Field(description="Defines whether the request should fail if at least one of the entries is failed to update or process all the entries regardless and return collections of successful and failed updates. \"Partial\" (default) | \"Atomic\".")] = None, **kwargs) -> BatchUpdateUserReviewForComparisonResultResponse: # noqa: E501
68
+ ...
69
+
70
+ @overload
71
+ def batch_update_comparison_results(self, scope : Annotated[constr(strict=True, max_length=64, min_length=1), Field(..., description="Shared Scope of the GroupReconciliationDefinition and GroupReconciliationComparisonResults.")], code : Annotated[constr(strict=True, max_length=64, min_length=1), Field(..., description="GroupReconciliationDefinitionId code.")], batch_update_user_review_for_comparison_result_request : Annotated[conlist(BatchUpdateUserReviewForComparisonResultRequest), Field(..., description="A collection of the comparison result Ids and their user review entries to be added or removed. Single request contains resultId, break code/match key/comment to add and break code/match key/comment to remove by added timestamp.")], success_mode : Annotated[Optional[constr(strict=True, max_length=64, min_length=1)], Field(description="Defines whether the request should fail if at least one of the entries is failed to update or process all the entries regardless and return collections of successful and failed updates. \"Partial\" (default) | \"Atomic\".")] = None, async_req: Optional[bool]=True, **kwargs) -> BatchUpdateUserReviewForComparisonResultResponse: # noqa: E501
72
+ ...
73
+
74
+ @validate_arguments
75
+ def batch_update_comparison_results(self, scope : Annotated[constr(strict=True, max_length=64, min_length=1), Field(..., description="Shared Scope of the GroupReconciliationDefinition and GroupReconciliationComparisonResults.")], code : Annotated[constr(strict=True, max_length=64, min_length=1), Field(..., description="GroupReconciliationDefinitionId code.")], batch_update_user_review_for_comparison_result_request : Annotated[conlist(BatchUpdateUserReviewForComparisonResultRequest), Field(..., description="A collection of the comparison result Ids and their user review entries to be added or removed. Single request contains resultId, break code/match key/comment to add and break code/match key/comment to remove by added timestamp.")], success_mode : Annotated[Optional[constr(strict=True, max_length=64, min_length=1)], Field(description="Defines whether the request should fail if at least one of the entries is failed to update or process all the entries regardless and return collections of successful and failed updates. \"Partial\" (default) | \"Atomic\".")] = None, async_req: Optional[bool]=None, **kwargs) -> Union[BatchUpdateUserReviewForComparisonResultResponse, Awaitable[BatchUpdateUserReviewForComparisonResultResponse]]: # noqa: E501
76
+ """[EXPERIMENTAL] BatchUpdateComparisonResults: Add User Review entries for a range of comparison results related to a specific GroupReconciliationDefinition. # noqa: E501
77
+
78
+ Allows to update multiple Group Reconciliation Comparison Results related to the same definition specified by the Finbourne.Identifiers.Abstractions.Scope and Finbourne.Identifiers.Abstractions.Code. Updates User Review with new entries and sets the relevant Review Status. Supports partial success when all the entries that haven't passed validation or are not related to the definition will be returned with respectful error details. # noqa: E501
79
+ This method makes a synchronous HTTP request by default. To make an
80
+ asynchronous HTTP request, please pass async_req=True
81
+
82
+ >>> thread = api.batch_update_comparison_results(scope, code, batch_update_user_review_for_comparison_result_request, success_mode, async_req=True)
83
+ >>> result = thread.get()
84
+
85
+ :param scope: Shared Scope of the GroupReconciliationDefinition and GroupReconciliationComparisonResults. (required)
86
+ :type scope: str
87
+ :param code: GroupReconciliationDefinitionId code. (required)
88
+ :type code: str
89
+ :param batch_update_user_review_for_comparison_result_request: A collection of the comparison result Ids and their user review entries to be added or removed. Single request contains resultId, break code/match key/comment to add and break code/match key/comment to remove by added timestamp. (required)
90
+ :type batch_update_user_review_for_comparison_result_request: List[BatchUpdateUserReviewForComparisonResultRequest]
91
+ :param success_mode: Defines whether the request should fail if at least one of the entries is failed to update or process all the entries regardless and return collections of successful and failed updates. \"Partial\" (default) | \"Atomic\".
92
+ :type success_mode: str
93
+ :param async_req: Whether to execute the request asynchronously.
94
+ :type async_req: bool, optional
95
+ :param _request_timeout: Timeout setting. Do not use - use the opts parameter instead
96
+ :param opts: Configuration options for this request
97
+ :type opts: ConfigurationOptions, optional
98
+ :return: Returns the result object.
99
+ If the method is called asynchronously,
100
+ returns the request thread.
101
+ :rtype: BatchUpdateUserReviewForComparisonResultResponse
102
+ """
103
+ kwargs['_return_http_data_only'] = True
104
+ if '_preload_content' in kwargs:
105
+ message = "Error! Please call the batch_update_comparison_results_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501
106
+ raise ValueError(message)
107
+ if async_req is not None:
108
+ kwargs['async_req'] = async_req
109
+ return self.batch_update_comparison_results_with_http_info(scope, code, batch_update_user_review_for_comparison_result_request, success_mode, **kwargs) # noqa: E501
110
+
111
+ @validate_arguments
112
+ def batch_update_comparison_results_with_http_info(self, scope : Annotated[constr(strict=True, max_length=64, min_length=1), Field(..., description="Shared Scope of the GroupReconciliationDefinition and GroupReconciliationComparisonResults.")], code : Annotated[constr(strict=True, max_length=64, min_length=1), Field(..., description="GroupReconciliationDefinitionId code.")], batch_update_user_review_for_comparison_result_request : Annotated[conlist(BatchUpdateUserReviewForComparisonResultRequest), Field(..., description="A collection of the comparison result Ids and their user review entries to be added or removed. Single request contains resultId, break code/match key/comment to add and break code/match key/comment to remove by added timestamp.")], success_mode : Annotated[Optional[constr(strict=True, max_length=64, min_length=1)], Field(description="Defines whether the request should fail if at least one of the entries is failed to update or process all the entries regardless and return collections of successful and failed updates. \"Partial\" (default) | \"Atomic\".")] = None, **kwargs) -> ApiResponse: # noqa: E501
113
+ """[EXPERIMENTAL] BatchUpdateComparisonResults: Add User Review entries for a range of comparison results related to a specific GroupReconciliationDefinition. # noqa: E501
114
+
115
+ Allows to update multiple Group Reconciliation Comparison Results related to the same definition specified by the Finbourne.Identifiers.Abstractions.Scope and Finbourne.Identifiers.Abstractions.Code. Updates User Review with new entries and sets the relevant Review Status. Supports partial success when all the entries that haven't passed validation or are not related to the definition will be returned with respectful error details. # noqa: E501
116
+ This method makes a synchronous HTTP request by default. To make an
117
+ asynchronous HTTP request, please pass async_req=True
118
+
119
+ >>> thread = api.batch_update_comparison_results_with_http_info(scope, code, batch_update_user_review_for_comparison_result_request, success_mode, async_req=True)
120
+ >>> result = thread.get()
121
+
122
+ :param scope: Shared Scope of the GroupReconciliationDefinition and GroupReconciliationComparisonResults. (required)
123
+ :type scope: str
124
+ :param code: GroupReconciliationDefinitionId code. (required)
125
+ :type code: str
126
+ :param batch_update_user_review_for_comparison_result_request: A collection of the comparison result Ids and their user review entries to be added or removed. Single request contains resultId, break code/match key/comment to add and break code/match key/comment to remove by added timestamp. (required)
127
+ :type batch_update_user_review_for_comparison_result_request: List[BatchUpdateUserReviewForComparisonResultRequest]
128
+ :param success_mode: Defines whether the request should fail if at least one of the entries is failed to update or process all the entries regardless and return collections of successful and failed updates. \"Partial\" (default) | \"Atomic\".
129
+ :type success_mode: str
130
+ :param async_req: Whether to execute the request asynchronously.
131
+ :type async_req: bool, optional
132
+ :param _preload_content: if False, the ApiResponse.data will
133
+ be set to none and raw_data will store the
134
+ HTTP response body without reading/decoding.
135
+ Default is True.
136
+ :type _preload_content: bool, optional
137
+ :param _return_http_data_only: response data instead of ApiResponse
138
+ object with status code, headers, etc
139
+ :type _return_http_data_only: bool, optional
140
+ :param _request_timeout: Timeout setting. Do not use - use the opts parameter instead
141
+ :param opts: Configuration options for this request
142
+ :type opts: ConfigurationOptions, optional
143
+ :param _request_auth: set to override the auth_settings for an a single
144
+ request; this effectively ignores the authentication
145
+ in the spec for a single request.
146
+ :type _request_auth: dict, optional
147
+ :type _content_type: string, optional: force content-type for the request
148
+ :return: Returns the result object.
149
+ If the method is called asynchronously,
150
+ returns the request thread.
151
+ :rtype: tuple(BatchUpdateUserReviewForComparisonResultResponse, status_code(int), headers(HTTPHeaderDict))
152
+ """
153
+
154
+ _params = locals()
155
+
156
+ _all_params = [
157
+ 'scope',
158
+ 'code',
159
+ 'batch_update_user_review_for_comparison_result_request',
160
+ 'success_mode'
161
+ ]
162
+ _all_params.extend(
163
+ [
164
+ 'async_req',
165
+ '_return_http_data_only',
166
+ '_preload_content',
167
+ '_request_timeout',
168
+ '_request_auth',
169
+ '_content_type',
170
+ '_headers',
171
+ 'opts'
172
+ ]
173
+ )
174
+
175
+ # validate the arguments
176
+ for _key, _val in _params['kwargs'].items():
177
+ if _key not in _all_params:
178
+ raise ApiTypeError(
179
+ "Got an unexpected keyword argument '%s'"
180
+ " to method batch_update_comparison_results" % _key
181
+ )
182
+ _params[_key] = _val
183
+ del _params['kwargs']
184
+
185
+ _collection_formats = {}
186
+
187
+ # process the path parameters
188
+ _path_params = {}
189
+ if _params['scope']:
190
+ _path_params['scope'] = _params['scope']
191
+
192
+ if _params['code']:
193
+ _path_params['code'] = _params['code']
194
+
195
+
196
+ # process the query parameters
197
+ _query_params = []
198
+ if _params.get('success_mode') is not None: # noqa: E501
199
+ _query_params.append(('successMode', _params['success_mode']))
200
+
201
+ # process the header parameters
202
+ _header_params = dict(_params.get('_headers', {}))
203
+ # process the form parameters
204
+ _form_params = []
205
+ _files = {}
206
+ # process the body parameter
207
+ _body_params = None
208
+ if _params['batch_update_user_review_for_comparison_result_request'] is not None:
209
+ _body_params = _params['batch_update_user_review_for_comparison_result_request']
210
+
211
+ # set the HTTP header `Accept`
212
+ _header_params['Accept'] = self.api_client.select_header_accept(
213
+ ['text/plain', 'application/json', 'text/json']) # noqa: E501
214
+
215
+ # set the HTTP header `Content-Type`
216
+ _content_types_list = _params.get('_content_type',
217
+ self.api_client.select_header_content_type(
218
+ ['application/json-patch+json', 'application/json', 'text/json', 'application/*+json']))
219
+ if _content_types_list:
220
+ _header_params['Content-Type'] = _content_types_list
221
+
222
+ # authentication setting
223
+ _auth_settings = ['oauth2'] # noqa: E501
224
+
225
+ _response_types_map = {
226
+ '200': "BatchUpdateUserReviewForComparisonResultResponse",
227
+ '400': "LusidValidationProblemDetails",
228
+ }
229
+
230
+ return self.api_client.call_api(
231
+ '/api/reconciliations/groupreconciliationdefinitions/{scope}/{code}/comparisonresults/$batchReview', 'POST',
232
+ _path_params,
233
+ _query_params,
234
+ _header_params,
235
+ body=_body_params,
236
+ post_params=_form_params,
237
+ files=_files,
238
+ response_types_map=_response_types_map,
239
+ auth_settings=_auth_settings,
240
+ async_req=_params.get('async_req'),
241
+ _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501
242
+ _preload_content=_params.get('_preload_content', True),
243
+ _request_timeout=_params.get('_request_timeout'),
244
+ opts=_params.get('opts'),
245
+ collection_formats=_collection_formats,
246
+ _request_auth=_params.get('_request_auth'))
247
+
64
248
  @overload
65
249
  async def create_comparison_ruleset(self, create_group_reconciliation_comparison_ruleset_request : Annotated[Optional[CreateGroupReconciliationComparisonRulesetRequest], Field(description="The request containing the details of the ruleset")] = None, **kwargs) -> GroupReconciliationComparisonRuleset: # noqa: E501
66
250
  ...
lusid/configuration.py CHANGED
@@ -445,7 +445,7 @@ class Configuration:
445
445
  return "Python SDK Debug Report:\n"\
446
446
  "OS: {env}\n"\
447
447
  "Python Version: {pyversion}\n"\
448
- "Version of the API: 0.11.6931\n"\
448
+ "Version of the API: 0.11.6944\n"\
449
449
  "SDK Package Version: {package_version}".\
450
450
  format(env=sys.platform, pyversion=sys.version, package_version=package_version)
451
451
 
lusid/models/__init__.py CHANGED
@@ -78,6 +78,8 @@ from lusid.models.barrier import Barrier
78
78
  from lusid.models.basket import Basket
79
79
  from lusid.models.basket_identifier import BasketIdentifier
80
80
  from lusid.models.batch_adjust_holdings_response import BatchAdjustHoldingsResponse
81
+ from lusid.models.batch_update_user_review_for_comparison_result_request import BatchUpdateUserReviewForComparisonResultRequest
82
+ from lusid.models.batch_update_user_review_for_comparison_result_response import BatchUpdateUserReviewForComparisonResultResponse
81
83
  from lusid.models.batch_upsert_dates_for_calendar_response import BatchUpsertDatesForCalendarResponse
82
84
  from lusid.models.batch_upsert_instrument_properties_response import BatchUpsertInstrumentPropertiesResponse
83
85
  from lusid.models.batch_upsert_portfolio_access_metadata_request import BatchUpsertPortfolioAccessMetadataRequest
@@ -455,9 +457,11 @@ from lusid.models.group_reconciliation_run_request import GroupReconciliationRun
455
457
  from lusid.models.group_reconciliation_run_response import GroupReconciliationRunResponse
456
458
  from lusid.models.group_reconciliation_summary import GroupReconciliationSummary
457
459
  from lusid.models.group_reconciliation_user_review import GroupReconciliationUserReview
460
+ from lusid.models.group_reconciliation_user_review_add import GroupReconciliationUserReviewAdd
458
461
  from lusid.models.group_reconciliation_user_review_break_code import GroupReconciliationUserReviewBreakCode
459
462
  from lusid.models.group_reconciliation_user_review_comment import GroupReconciliationUserReviewComment
460
463
  from lusid.models.group_reconciliation_user_review_match_key import GroupReconciliationUserReviewMatchKey
464
+ from lusid.models.group_reconciliation_user_review_remove import GroupReconciliationUserReviewRemove
461
465
  from lusid.models.grouped_result_of_address_key import GroupedResultOfAddressKey
462
466
  from lusid.models.holding_adjustment import HoldingAdjustment
463
467
  from lusid.models.holding_adjustment_with_date import HoldingAdjustmentWithDate
@@ -1209,6 +1213,8 @@ __all__ = [
1209
1213
  "Basket",
1210
1214
  "BasketIdentifier",
1211
1215
  "BatchAdjustHoldingsResponse",
1216
+ "BatchUpdateUserReviewForComparisonResultRequest",
1217
+ "BatchUpdateUserReviewForComparisonResultResponse",
1212
1218
  "BatchUpsertDatesForCalendarResponse",
1213
1219
  "BatchUpsertInstrumentPropertiesResponse",
1214
1220
  "BatchUpsertPortfolioAccessMetadataRequest",
@@ -1586,9 +1592,11 @@ __all__ = [
1586
1592
  "GroupReconciliationRunResponse",
1587
1593
  "GroupReconciliationSummary",
1588
1594
  "GroupReconciliationUserReview",
1595
+ "GroupReconciliationUserReviewAdd",
1589
1596
  "GroupReconciliationUserReviewBreakCode",
1590
1597
  "GroupReconciliationUserReviewComment",
1591
1598
  "GroupReconciliationUserReviewMatchKey",
1599
+ "GroupReconciliationUserReviewRemove",
1592
1600
  "GroupedResultOfAddressKey",
1593
1601
  "HoldingAdjustment",
1594
1602
  "HoldingAdjustmentWithDate",
@@ -19,7 +19,7 @@ import json
19
19
 
20
20
 
21
21
  from typing import Any, Dict, List, Optional
22
- from pydantic.v1 import BaseModel, Field, StrictInt, conlist, constr
22
+ from pydantic.v1 import BaseModel, Field, StrictInt, StrictStr, conlist, constr
23
23
  from lusid.models.generated_event_diagnostics import GeneratedEventDiagnostics
24
24
  from lusid.models.instrument_event_holder import InstrumentEventHolder
25
25
  from lusid.models.resource_id import ResourceId
@@ -40,7 +40,7 @@ class ApplicableInstrumentEvent(BaseModel):
40
40
  generated_event: Optional[InstrumentEventHolder] = Field(None, alias="generatedEvent")
41
41
  generated_event_diagnostics: Optional[GeneratedEventDiagnostics] = Field(None, alias="generatedEventDiagnostics")
42
42
  loaded_event: Optional[InstrumentEventHolder] = Field(None, alias="loadedEvent")
43
- applied_instrument_event_instruction_id: constr(strict=True, min_length=1) = Field(..., alias="appliedInstrumentEventInstructionId")
43
+ applied_instrument_event_instruction_id: Optional[StrictStr] = Field(None, alias="appliedInstrumentEventInstructionId")
44
44
  transactions: Optional[conlist(Transaction)] = None
45
45
  transaction_diagnostics: Optional[TransactionDiagnostics] = Field(None, alias="transactionDiagnostics")
46
46
  __properties = ["portfolioId", "holdingId", "lusidInstrumentId", "instrumentScope", "instrumentType", "instrumentEventType", "instrumentEventId", "generatedEvent", "generatedEventDiagnostics", "loadedEvent", "appliedInstrumentEventInstructionId", "transactions", "transactionDiagnostics"]
@@ -91,6 +91,11 @@ class ApplicableInstrumentEvent(BaseModel):
91
91
  # override the default output from pydantic by calling `to_dict()` of transaction_diagnostics
92
92
  if self.transaction_diagnostics:
93
93
  _dict['transactionDiagnostics'] = self.transaction_diagnostics.to_dict()
94
+ # set to None if applied_instrument_event_instruction_id (nullable) is None
95
+ # and __fields_set__ contains the field
96
+ if self.applied_instrument_event_instruction_id is None and "applied_instrument_event_instruction_id" in self.__fields_set__:
97
+ _dict['appliedInstrumentEventInstructionId'] = None
98
+
94
99
  # set to None if transactions (nullable) is None
95
100
  # and __fields_set__ contains the field
96
101
  if self.transactions is None and "transactions" in self.__fields_set__:
@@ -0,0 +1,81 @@
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
22
+ from pydantic.v1 import BaseModel, Field, constr
23
+ from lusid.models.group_reconciliation_user_review_add import GroupReconciliationUserReviewAdd
24
+ from lusid.models.group_reconciliation_user_review_remove import GroupReconciliationUserReviewRemove
25
+
26
+ class BatchUpdateUserReviewForComparisonResultRequest(BaseModel):
27
+ """
28
+ BatchUpdateUserReviewForComparisonResultRequest
29
+ """
30
+ comparison_result_id: constr(strict=True, min_length=1) = Field(..., alias="comparisonResultId", description="Comparison result identifier, encoded value for core attribute results, aggregate attribute results, reconciliation type and run instanceId.")
31
+ user_review_add: Optional[GroupReconciliationUserReviewAdd] = Field(None, alias="userReviewAdd")
32
+ user_review_remove: Optional[GroupReconciliationUserReviewRemove] = Field(None, alias="userReviewRemove")
33
+ __properties = ["comparisonResultId", "userReviewAdd", "userReviewRemove"]
34
+
35
+ class Config:
36
+ """Pydantic configuration"""
37
+ allow_population_by_field_name = True
38
+ validate_assignment = True
39
+
40
+ def to_str(self) -> str:
41
+ """Returns the string representation of the model using alias"""
42
+ return pprint.pformat(self.dict(by_alias=True))
43
+
44
+ def to_json(self) -> str:
45
+ """Returns the JSON representation of the model using alias"""
46
+ return json.dumps(self.to_dict())
47
+
48
+ @classmethod
49
+ def from_json(cls, json_str: str) -> BatchUpdateUserReviewForComparisonResultRequest:
50
+ """Create an instance of BatchUpdateUserReviewForComparisonResultRequest from a JSON string"""
51
+ return cls.from_dict(json.loads(json_str))
52
+
53
+ def to_dict(self):
54
+ """Returns the dictionary representation of the model using alias"""
55
+ _dict = self.dict(by_alias=True,
56
+ exclude={
57
+ },
58
+ exclude_none=True)
59
+ # override the default output from pydantic by calling `to_dict()` of user_review_add
60
+ if self.user_review_add:
61
+ _dict['userReviewAdd'] = self.user_review_add.to_dict()
62
+ # override the default output from pydantic by calling `to_dict()` of user_review_remove
63
+ if self.user_review_remove:
64
+ _dict['userReviewRemove'] = self.user_review_remove.to_dict()
65
+ return _dict
66
+
67
+ @classmethod
68
+ def from_dict(cls, obj: dict) -> BatchUpdateUserReviewForComparisonResultRequest:
69
+ """Create an instance of BatchUpdateUserReviewForComparisonResultRequest from a dict"""
70
+ if obj is None:
71
+ return None
72
+
73
+ if not isinstance(obj, dict):
74
+ return BatchUpdateUserReviewForComparisonResultRequest.parse_obj(obj)
75
+
76
+ _obj = BatchUpdateUserReviewForComparisonResultRequest.parse_obj({
77
+ "comparison_result_id": obj.get("comparisonResultId"),
78
+ "user_review_add": GroupReconciliationUserReviewAdd.from_dict(obj.get("userReviewAdd")) if obj.get("userReviewAdd") is not None else None,
79
+ "user_review_remove": GroupReconciliationUserReviewRemove.from_dict(obj.get("userReviewRemove")) if obj.get("userReviewRemove") is not None else None
80
+ })
81
+ return _obj
@@ -0,0 +1,146 @@
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, conlist
23
+ from lusid.models.error_detail import ErrorDetail
24
+ from lusid.models.group_reconciliation_comparison_result import GroupReconciliationComparisonResult
25
+ from lusid.models.link import Link
26
+ from lusid.models.response_meta_data import ResponseMetaData
27
+
28
+ class BatchUpdateUserReviewForComparisonResultResponse(BaseModel):
29
+ """
30
+ BatchUpdateUserReviewForComparisonResultResponse
31
+ """
32
+ values: Optional[Dict[str, GroupReconciliationComparisonResult]] = Field(None, description="The collection of comparison results that have been successfully updated.")
33
+ failed: Optional[Dict[str, ErrorDetail]] = Field(None, description="The collection of comparison results that could not be updated with the provided user input along with a reason for their failure.")
34
+ metadata: Optional[Dict[str, conlist(ResponseMetaData)]] = Field(None, description="Contains warnings related to the updated comparison result user input")
35
+ links: Optional[conlist(Link)] = None
36
+ __properties = ["values", "failed", "metadata", "links"]
37
+
38
+ class Config:
39
+ """Pydantic configuration"""
40
+ allow_population_by_field_name = True
41
+ validate_assignment = True
42
+
43
+ def to_str(self) -> str:
44
+ """Returns the string representation of the model using alias"""
45
+ return pprint.pformat(self.dict(by_alias=True))
46
+
47
+ def to_json(self) -> str:
48
+ """Returns the JSON representation of the model using alias"""
49
+ return json.dumps(self.to_dict())
50
+
51
+ @classmethod
52
+ def from_json(cls, json_str: str) -> BatchUpdateUserReviewForComparisonResultResponse:
53
+ """Create an instance of BatchUpdateUserReviewForComparisonResultResponse from a JSON string"""
54
+ return cls.from_dict(json.loads(json_str))
55
+
56
+ def to_dict(self):
57
+ """Returns the dictionary representation of the model using alias"""
58
+ _dict = self.dict(by_alias=True,
59
+ exclude={
60
+ },
61
+ exclude_none=True)
62
+ # override the default output from pydantic by calling `to_dict()` of each value in values (dict)
63
+ _field_dict = {}
64
+ if self.values:
65
+ for _key in self.values:
66
+ if self.values[_key]:
67
+ _field_dict[_key] = self.values[_key].to_dict()
68
+ _dict['values'] = _field_dict
69
+ # override the default output from pydantic by calling `to_dict()` of each value in failed (dict)
70
+ _field_dict = {}
71
+ if self.failed:
72
+ for _key in self.failed:
73
+ if self.failed[_key]:
74
+ _field_dict[_key] = self.failed[_key].to_dict()
75
+ _dict['failed'] = _field_dict
76
+ # override the default output from pydantic by calling `to_dict()` of each value in metadata (dict of array)
77
+ _field_dict_of_array = {}
78
+ if self.metadata:
79
+ for _key in self.metadata:
80
+ if self.metadata[_key]:
81
+ _field_dict_of_array[_key] = [
82
+ _item.to_dict() for _item in self.metadata[_key]
83
+ ]
84
+ _dict['metadata'] = _field_dict_of_array
85
+ # override the default output from pydantic by calling `to_dict()` of each item in links (list)
86
+ _items = []
87
+ if self.links:
88
+ for _item in self.links:
89
+ if _item:
90
+ _items.append(_item.to_dict())
91
+ _dict['links'] = _items
92
+ # set to None if values (nullable) is None
93
+ # and __fields_set__ contains the field
94
+ if self.values is None and "values" in self.__fields_set__:
95
+ _dict['values'] = None
96
+
97
+ # set to None if failed (nullable) is None
98
+ # and __fields_set__ contains the field
99
+ if self.failed is None and "failed" in self.__fields_set__:
100
+ _dict['failed'] = None
101
+
102
+ # set to None if metadata (nullable) is None
103
+ # and __fields_set__ contains the field
104
+ if self.metadata is None and "metadata" in self.__fields_set__:
105
+ _dict['metadata'] = None
106
+
107
+ # set to None if links (nullable) is None
108
+ # and __fields_set__ contains the field
109
+ if self.links is None and "links" in self.__fields_set__:
110
+ _dict['links'] = None
111
+
112
+ return _dict
113
+
114
+ @classmethod
115
+ def from_dict(cls, obj: dict) -> BatchUpdateUserReviewForComparisonResultResponse:
116
+ """Create an instance of BatchUpdateUserReviewForComparisonResultResponse from a dict"""
117
+ if obj is None:
118
+ return None
119
+
120
+ if not isinstance(obj, dict):
121
+ return BatchUpdateUserReviewForComparisonResultResponse.parse_obj(obj)
122
+
123
+ _obj = BatchUpdateUserReviewForComparisonResultResponse.parse_obj({
124
+ "values": dict(
125
+ (_k, GroupReconciliationComparisonResult.from_dict(_v))
126
+ for _k, _v in obj.get("values").items()
127
+ )
128
+ if obj.get("values") is not None
129
+ else None,
130
+ "failed": dict(
131
+ (_k, ErrorDetail.from_dict(_v))
132
+ for _k, _v in obj.get("failed").items()
133
+ )
134
+ if obj.get("failed") is not None
135
+ else None,
136
+ "metadata": dict(
137
+ (_k,
138
+ [ResponseMetaData.from_dict(_item) for _item in _v]
139
+ if _v is not None
140
+ else None
141
+ )
142
+ for _k, _v in obj.get("metadata").items()
143
+ ),
144
+ "links": [Link.from_dict(_item) for _item in obj.get("links")] if obj.get("links") is not None else None
145
+ })
146
+ return _obj
@@ -40,9 +40,10 @@ class EquityOption(LusidInstrument):
40
40
  number_of_shares: Optional[Union[StrictFloat, StrictInt]] = Field(None, alias="numberOfShares", description="The amount of shares to exchange if the option is exercised.")
41
41
  premium: Optional[Premium] = None
42
42
  exercise_type: Optional[StrictStr] = Field(None, alias="exerciseType", description="Type of optionality that is present; European, American. Supported string (enumeration) values are: [European, American].")
43
+ underlying: Optional[LusidInstrument] = None
43
44
  instrument_type: StrictStr = Field(..., alias="instrumentType", description="The available values are: QuotedSecurity, InterestRateSwap, FxForward, Future, ExoticInstrument, FxOption, CreditDefaultSwap, InterestRateSwaption, Bond, EquityOption, FixedLeg, FloatingLeg, BespokeCashFlowsLeg, Unknown, TermDeposit, ContractForDifference, EquitySwap, CashPerpetual, CapFloor, CashSettled, CdsIndex, Basket, FundingLeg, FxSwap, ForwardRateAgreement, SimpleInstrument, Repo, Equity, ExchangeTradedOption, ReferenceInstrument, ComplexBond, InflationLinkedBond, InflationSwap, SimpleCashFlowLoan, TotalReturnSwap, InflationLeg, FundShareClass, FlexibleLoan, UnsettledCash, Cash, MasteredInstrument, LoanFacility")
44
45
  additional_properties: Dict[str, Any] = {}
45
- __properties = ["instrumentType", "startDate", "optionMaturityDate", "optionSettlementDate", "deliveryType", "optionType", "strike", "domCcy", "underlyingIdentifier", "code", "equityOptionType", "numberOfShares", "premium", "exerciseType"]
46
+ __properties = ["instrumentType", "startDate", "optionMaturityDate", "optionSettlementDate", "deliveryType", "optionType", "strike", "domCcy", "underlyingIdentifier", "code", "equityOptionType", "numberOfShares", "premium", "exerciseType", "underlying"]
46
47
 
47
48
  @validator('instrument_type')
48
49
  def instrument_type_validate_enum(cls, value):
@@ -79,6 +80,9 @@ class EquityOption(LusidInstrument):
79
80
  # override the default output from pydantic by calling `to_dict()` of premium
80
81
  if self.premium:
81
82
  _dict['premium'] = self.premium.to_dict()
83
+ # override the default output from pydantic by calling `to_dict()` of underlying
84
+ if self.underlying:
85
+ _dict['underlying'] = self.underlying.to_dict()
82
86
  # puts key-value pairs in additional_properties in the top level
83
87
  if self.additional_properties is not None:
84
88
  for _key, _value in self.additional_properties.items():
@@ -124,7 +128,8 @@ class EquityOption(LusidInstrument):
124
128
  "equity_option_type": obj.get("equityOptionType"),
125
129
  "number_of_shares": obj.get("numberOfShares"),
126
130
  "premium": Premium.from_dict(obj.get("premium")) if obj.get("premium") is not None else None,
127
- "exercise_type": obj.get("exerciseType")
131
+ "exercise_type": obj.get("exerciseType"),
132
+ "underlying": LusidInstrument.from_dict(obj.get("underlying")) if obj.get("underlying") is not None else None
128
133
  })
129
134
  # store additional fields in additional_properties
130
135
  for _key in obj.keys():
@@ -33,7 +33,7 @@ class ExchangeTradedOptionContractDetails(BaseModel):
33
33
  delivery_type: constr(strict=True, min_length=1) = Field(..., alias="deliveryType", description="The delivery type, cash or physical. An option on a future is physically settled if upon exercising the holder receives a future. Supported string (enumeration) values are: [Cash, Physical].")
34
34
  description: constr(strict=True, min_length=1) = Field(..., description="Description of contract")
35
35
  exchange_code: constr(strict=True, min_length=1) = Field(..., alias="exchangeCode", description="Exchange code for contract. This can be any string to uniquely identify the exchange (e.g. Exchange Name, MIC, BBG code).")
36
- exercise_date: datetime = Field(..., alias="exerciseDate", description="Exercise Date.")
36
+ exercise_date: datetime = Field(..., alias="exerciseDate", description="The last exercise date of the option.")
37
37
  exercise_type: constr(strict=True, min_length=1) = Field(..., alias="exerciseType", description="The exercise type, European, American or Bermudan. Supported string (enumeration) values are: [European, Bermudan, American].")
38
38
  option_code: constr(strict=True, min_length=1) = Field(..., alias="optionCode", description="Option Contract Code, typically one or two letters, e.g. OG => Option on Gold.")
39
39
  option_type: constr(strict=True, min_length=1) = Field(..., alias="optionType", description="The option type, Call or Put. Supported string (enumeration) values are: [Call, Put].")
@@ -0,0 +1,88 @@
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
22
+ from pydantic.v1 import BaseModel, Field, StrictStr
23
+
24
+ class GroupReconciliationUserReviewAdd(BaseModel):
25
+ """
26
+ GroupReconciliationUserReviewAdd
27
+ """
28
+ break_code: Optional[StrictStr] = Field(None, alias="breakCode", description="The break code of the reconciliation result.")
29
+ match_key: Optional[StrictStr] = Field(None, alias="matchKey", description="The match key of the reconciliation result.")
30
+ comment_text: Optional[StrictStr] = Field(None, alias="commentText", description="User's comment regarding the reconciliation result.")
31
+ __properties = ["breakCode", "matchKey", "commentText"]
32
+
33
+ class Config:
34
+ """Pydantic configuration"""
35
+ allow_population_by_field_name = True
36
+ validate_assignment = True
37
+
38
+ def to_str(self) -> str:
39
+ """Returns the string representation of the model using alias"""
40
+ return pprint.pformat(self.dict(by_alias=True))
41
+
42
+ def to_json(self) -> str:
43
+ """Returns the JSON representation of the model using alias"""
44
+ return json.dumps(self.to_dict())
45
+
46
+ @classmethod
47
+ def from_json(cls, json_str: str) -> GroupReconciliationUserReviewAdd:
48
+ """Create an instance of GroupReconciliationUserReviewAdd from a JSON string"""
49
+ return cls.from_dict(json.loads(json_str))
50
+
51
+ def to_dict(self):
52
+ """Returns the dictionary representation of the model using alias"""
53
+ _dict = self.dict(by_alias=True,
54
+ exclude={
55
+ },
56
+ exclude_none=True)
57
+ # set to None if break_code (nullable) is None
58
+ # and __fields_set__ contains the field
59
+ if self.break_code is None and "break_code" in self.__fields_set__:
60
+ _dict['breakCode'] = None
61
+
62
+ # set to None if match_key (nullable) is None
63
+ # and __fields_set__ contains the field
64
+ if self.match_key is None and "match_key" in self.__fields_set__:
65
+ _dict['matchKey'] = None
66
+
67
+ # set to None if comment_text (nullable) is None
68
+ # and __fields_set__ contains the field
69
+ if self.comment_text is None and "comment_text" in self.__fields_set__:
70
+ _dict['commentText'] = None
71
+
72
+ return _dict
73
+
74
+ @classmethod
75
+ def from_dict(cls, obj: dict) -> GroupReconciliationUserReviewAdd:
76
+ """Create an instance of GroupReconciliationUserReviewAdd from a dict"""
77
+ if obj is None:
78
+ return None
79
+
80
+ if not isinstance(obj, dict):
81
+ return GroupReconciliationUserReviewAdd.parse_obj(obj)
82
+
83
+ _obj = GroupReconciliationUserReviewAdd.parse_obj({
84
+ "break_code": obj.get("breakCode"),
85
+ "match_key": obj.get("matchKey"),
86
+ "comment_text": obj.get("commentText")
87
+ })
88
+ return _obj
@@ -0,0 +1,88 @@
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
+ from datetime import datetime
21
+ from typing import Any, Dict, Optional
22
+ from pydantic.v1 import BaseModel, Field
23
+
24
+ class GroupReconciliationUserReviewRemove(BaseModel):
25
+ """
26
+ GroupReconciliationUserReviewRemove
27
+ """
28
+ break_code_as_at_added: Optional[datetime] = Field(None, alias="breakCodeAsAtAdded", description="The timestamp of the added User Review input.")
29
+ match_key_as_at_added: Optional[datetime] = Field(None, alias="matchKeyAsAtAdded", description="The timestamp of the added User Review input.")
30
+ comment_text_as_at_added: Optional[datetime] = Field(None, alias="commentTextAsAtAdded", description="The timestamp of the added User Review input.")
31
+ __properties = ["breakCodeAsAtAdded", "matchKeyAsAtAdded", "commentTextAsAtAdded"]
32
+
33
+ class Config:
34
+ """Pydantic configuration"""
35
+ allow_population_by_field_name = True
36
+ validate_assignment = True
37
+
38
+ def to_str(self) -> str:
39
+ """Returns the string representation of the model using alias"""
40
+ return pprint.pformat(self.dict(by_alias=True))
41
+
42
+ def to_json(self) -> str:
43
+ """Returns the JSON representation of the model using alias"""
44
+ return json.dumps(self.to_dict())
45
+
46
+ @classmethod
47
+ def from_json(cls, json_str: str) -> GroupReconciliationUserReviewRemove:
48
+ """Create an instance of GroupReconciliationUserReviewRemove from a JSON string"""
49
+ return cls.from_dict(json.loads(json_str))
50
+
51
+ def to_dict(self):
52
+ """Returns the dictionary representation of the model using alias"""
53
+ _dict = self.dict(by_alias=True,
54
+ exclude={
55
+ },
56
+ exclude_none=True)
57
+ # set to None if break_code_as_at_added (nullable) is None
58
+ # and __fields_set__ contains the field
59
+ if self.break_code_as_at_added is None and "break_code_as_at_added" in self.__fields_set__:
60
+ _dict['breakCodeAsAtAdded'] = None
61
+
62
+ # set to None if match_key_as_at_added (nullable) is None
63
+ # and __fields_set__ contains the field
64
+ if self.match_key_as_at_added is None and "match_key_as_at_added" in self.__fields_set__:
65
+ _dict['matchKeyAsAtAdded'] = None
66
+
67
+ # set to None if comment_text_as_at_added (nullable) is None
68
+ # and __fields_set__ contains the field
69
+ if self.comment_text_as_at_added is None and "comment_text_as_at_added" in self.__fields_set__:
70
+ _dict['commentTextAsAtAdded'] = None
71
+
72
+ return _dict
73
+
74
+ @classmethod
75
+ def from_dict(cls, obj: dict) -> GroupReconciliationUserReviewRemove:
76
+ """Create an instance of GroupReconciliationUserReviewRemove from a dict"""
77
+ if obj is None:
78
+ return None
79
+
80
+ if not isinstance(obj, dict):
81
+ return GroupReconciliationUserReviewRemove.parse_obj(obj)
82
+
83
+ _obj = GroupReconciliationUserReviewRemove.parse_obj({
84
+ "break_code_as_at_added": obj.get("breakCodeAsAtAdded"),
85
+ "match_key_as_at_added": obj.get("matchKeyAsAtAdded"),
86
+ "comment_text_as_at_added": obj.get("commentTextAsAtAdded")
87
+ })
88
+ return _obj
@@ -32,7 +32,10 @@ class TargetTaxLot(BaseModel):
32
32
  price: Optional[Union[StrictFloat, StrictInt]] = Field(None, description="The purchase price of each unit of the instrument held in this tax-lot. This forms part of the unique key required for multiple tax-lots.")
33
33
  purchase_date: Optional[datetime] = Field(None, alias="purchaseDate", description="The purchase date of this tax-lot. This forms part of the unique key required for multiple tax-lots.")
34
34
  settlement_date: Optional[datetime] = Field(None, alias="settlementDate", description="The settlement date of the tax-lot's opening transaction.")
35
- __properties = ["units", "cost", "portfolioCost", "price", "purchaseDate", "settlementDate"]
35
+ notional_cost: Optional[Union[StrictFloat, StrictInt]] = Field(None, alias="notionalCost", description="The notional cost of the tax-lot's opening transaction.")
36
+ variation_margin: Optional[Union[StrictFloat, StrictInt]] = Field(None, alias="variationMargin", description="The variation margin of the tax-lot's opening transaction.")
37
+ variation_margin_portfolio_ccy: Optional[Union[StrictFloat, StrictInt]] = Field(None, alias="variationMarginPortfolioCcy", description="The variation margin in portfolio currency of the tax-lot's opening transaction.")
38
+ __properties = ["units", "cost", "portfolioCost", "price", "purchaseDate", "settlementDate", "notionalCost", "variationMargin", "variationMarginPortfolioCcy"]
36
39
 
37
40
  class Config:
38
41
  """Pydantic configuration"""
@@ -81,6 +84,21 @@ class TargetTaxLot(BaseModel):
81
84
  if self.settlement_date is None and "settlement_date" in self.__fields_set__:
82
85
  _dict['settlementDate'] = None
83
86
 
87
+ # set to None if notional_cost (nullable) is None
88
+ # and __fields_set__ contains the field
89
+ if self.notional_cost is None and "notional_cost" in self.__fields_set__:
90
+ _dict['notionalCost'] = None
91
+
92
+ # set to None if variation_margin (nullable) is None
93
+ # and __fields_set__ contains the field
94
+ if self.variation_margin is None and "variation_margin" in self.__fields_set__:
95
+ _dict['variationMargin'] = None
96
+
97
+ # set to None if variation_margin_portfolio_ccy (nullable) is None
98
+ # and __fields_set__ contains the field
99
+ if self.variation_margin_portfolio_ccy is None and "variation_margin_portfolio_ccy" in self.__fields_set__:
100
+ _dict['variationMarginPortfolioCcy'] = None
101
+
84
102
  return _dict
85
103
 
86
104
  @classmethod
@@ -98,6 +116,9 @@ class TargetTaxLot(BaseModel):
98
116
  "portfolio_cost": obj.get("portfolioCost"),
99
117
  "price": obj.get("price"),
100
118
  "purchase_date": obj.get("purchaseDate"),
101
- "settlement_date": obj.get("settlementDate")
119
+ "settlement_date": obj.get("settlementDate"),
120
+ "notional_cost": obj.get("notionalCost"),
121
+ "variation_margin": obj.get("variationMargin"),
122
+ "variation_margin_portfolio_ccy": obj.get("variationMarginPortfolioCcy")
102
123
  })
103
124
  return _obj
@@ -32,7 +32,10 @@ class TargetTaxLotRequest(BaseModel):
32
32
  price: Optional[Union[StrictFloat, StrictInt]] = Field(None, description="The purchase price of each unit of the instrument held in this tax-lot. This forms part of the unique key required for multiple tax-lots.")
33
33
  purchase_date: Optional[datetime] = Field(None, alias="purchaseDate", description="The purchase date of this tax-lot. This forms part of the unique key required for multiple tax-lots.")
34
34
  settlement_date: Optional[datetime] = Field(None, alias="settlementDate", description="The settlement date of the tax-lot's opening transaction.")
35
- __properties = ["units", "cost", "portfolioCost", "price", "purchaseDate", "settlementDate"]
35
+ notional_cost: Optional[Union[StrictFloat, StrictInt]] = Field(None, alias="notionalCost", description="The notional cost of the tax-lot's opening transaction.")
36
+ variation_margin: Optional[Union[StrictFloat, StrictInt]] = Field(None, alias="variationMargin", description="The variation margin of the tax-lot's opening transaction.")
37
+ variation_margin_portfolio_ccy: Optional[Union[StrictFloat, StrictInt]] = Field(None, alias="variationMarginPortfolioCcy", description="The variation margin in portfolio currency of the tax-lot's opening transaction.")
38
+ __properties = ["units", "cost", "portfolioCost", "price", "purchaseDate", "settlementDate", "notionalCost", "variationMargin", "variationMarginPortfolioCcy"]
36
39
 
37
40
  class Config:
38
41
  """Pydantic configuration"""
@@ -81,6 +84,21 @@ class TargetTaxLotRequest(BaseModel):
81
84
  if self.settlement_date is None and "settlement_date" in self.__fields_set__:
82
85
  _dict['settlementDate'] = None
83
86
 
87
+ # set to None if notional_cost (nullable) is None
88
+ # and __fields_set__ contains the field
89
+ if self.notional_cost is None and "notional_cost" in self.__fields_set__:
90
+ _dict['notionalCost'] = None
91
+
92
+ # set to None if variation_margin (nullable) is None
93
+ # and __fields_set__ contains the field
94
+ if self.variation_margin is None and "variation_margin" in self.__fields_set__:
95
+ _dict['variationMargin'] = None
96
+
97
+ # set to None if variation_margin_portfolio_ccy (nullable) is None
98
+ # and __fields_set__ contains the field
99
+ if self.variation_margin_portfolio_ccy is None and "variation_margin_portfolio_ccy" in self.__fields_set__:
100
+ _dict['variationMarginPortfolioCcy'] = None
101
+
84
102
  return _dict
85
103
 
86
104
  @classmethod
@@ -98,6 +116,9 @@ class TargetTaxLotRequest(BaseModel):
98
116
  "portfolio_cost": obj.get("portfolioCost"),
99
117
  "price": obj.get("price"),
100
118
  "purchase_date": obj.get("purchaseDate"),
101
- "settlement_date": obj.get("settlementDate")
119
+ "settlement_date": obj.get("settlementDate"),
120
+ "notional_cost": obj.get("notionalCost"),
121
+ "variation_margin": obj.get("variationMargin"),
122
+ "variation_margin_portfolio_ccy": obj.get("variationMarginPortfolioCcy")
102
123
  })
103
124
  return _obj
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: lusid-sdk
3
- Version: 2.1.502
3
+ Version: 2.1.515
4
4
  Summary: LUSID API
5
5
  Home-page: https://github.com/finbourne/lusid-sdk-python
6
6
  License: MIT
@@ -255,6 +255,7 @@ Class | Method | HTTP request | Description
255
255
  *FundsApi* | [**upsert_diary_entry_type_valuation_point**](docs/FundsApi.md#upsert_diary_entry_type_valuation_point) | **POST** /api/funds/{scope}/{code}/valuationpoints | [EXPERIMENTAL] UpsertDiaryEntryTypeValuationPoint: Upsert Valuation Point.
256
256
  *FundsApi* | [**upsert_fee_properties**](docs/FundsApi.md#upsert_fee_properties) | **POST** /api/funds/{scope}/{code}/fees/{feeCode}/properties/$upsert | [EXPERIMENTAL] UpsertFeeProperties: Upsert Fee properties.
257
257
  *FundsApi* | [**upsert_fund_properties**](docs/FundsApi.md#upsert_fund_properties) | **POST** /api/funds/{scope}/{code}/properties/$upsert | [EXPERIMENTAL] UpsertFundProperties: Upsert Fund properties.
258
+ *GroupReconciliationsApi* | [**batch_update_comparison_results**](docs/GroupReconciliationsApi.md#batch_update_comparison_results) | **POST** /api/reconciliations/groupreconciliationdefinitions/{scope}/{code}/comparisonresults/$batchReview | [EXPERIMENTAL] BatchUpdateComparisonResults: Add User Review entries for a range of comparison results related to a specific GroupReconciliationDefinition.
258
259
  *GroupReconciliationsApi* | [**create_comparison_ruleset**](docs/GroupReconciliationsApi.md#create_comparison_ruleset) | **POST** /api/reconciliations/comparisonrulesets | [EXPERIMENTAL] CreateComparisonRuleset: Create a Group Reconciliation Comparison Ruleset
259
260
  *GroupReconciliationsApi* | [**create_group_reconciliation_definition**](docs/GroupReconciliationsApi.md#create_group_reconciliation_definition) | **POST** /api/reconciliations/groupreconciliationdefinitions | [EXPERIMENTAL] CreateGroupReconciliationDefinition: Create Group Reconciliation Definition
260
261
  *GroupReconciliationsApi* | [**delete_comparison_ruleset**](docs/GroupReconciliationsApi.md#delete_comparison_ruleset) | **DELETE** /api/reconciliations/comparisonrulesets/{scope}/{code} | [EXPERIMENTAL] DeleteComparisonRuleset: Deletes a particular Group Reconciliation Comparison Ruleset
@@ -690,6 +691,8 @@ Class | Method | HTTP request | Description
690
691
  - [Basket](docs/Basket.md)
691
692
  - [BasketIdentifier](docs/BasketIdentifier.md)
692
693
  - [BatchAdjustHoldingsResponse](docs/BatchAdjustHoldingsResponse.md)
694
+ - [BatchUpdateUserReviewForComparisonResultRequest](docs/BatchUpdateUserReviewForComparisonResultRequest.md)
695
+ - [BatchUpdateUserReviewForComparisonResultResponse](docs/BatchUpdateUserReviewForComparisonResultResponse.md)
693
696
  - [BatchUpsertDatesForCalendarResponse](docs/BatchUpsertDatesForCalendarResponse.md)
694
697
  - [BatchUpsertInstrumentPropertiesResponse](docs/BatchUpsertInstrumentPropertiesResponse.md)
695
698
  - [BatchUpsertPortfolioAccessMetadataRequest](docs/BatchUpsertPortfolioAccessMetadataRequest.md)
@@ -1067,9 +1070,11 @@ Class | Method | HTTP request | Description
1067
1070
  - [GroupReconciliationRunResponse](docs/GroupReconciliationRunResponse.md)
1068
1071
  - [GroupReconciliationSummary](docs/GroupReconciliationSummary.md)
1069
1072
  - [GroupReconciliationUserReview](docs/GroupReconciliationUserReview.md)
1073
+ - [GroupReconciliationUserReviewAdd](docs/GroupReconciliationUserReviewAdd.md)
1070
1074
  - [GroupReconciliationUserReviewBreakCode](docs/GroupReconciliationUserReviewBreakCode.md)
1071
1075
  - [GroupReconciliationUserReviewComment](docs/GroupReconciliationUserReviewComment.md)
1072
1076
  - [GroupReconciliationUserReviewMatchKey](docs/GroupReconciliationUserReviewMatchKey.md)
1077
+ - [GroupReconciliationUserReviewRemove](docs/GroupReconciliationUserReviewRemove.md)
1073
1078
  - [GroupedResultOfAddressKey](docs/GroupedResultOfAddressKey.md)
1074
1079
  - [HoldingAdjustment](docs/HoldingAdjustment.md)
1075
1080
  - [HoldingAdjustmentWithDate](docs/HoldingAdjustmentWithDate.md)
@@ -1,4 +1,4 @@
1
- lusid/__init__.py,sha256=vPuAwZ0zD9qXTGxCaahBN-EiupqN4whhnsn1Qf-4uL0,126925
1
+ lusid/__init__.py,sha256=exwougLvof23B3q2U4izCZMyUUUsPCSV1GGoD8jd3IE,127573
2
2
  lusid/api/__init__.py,sha256=6h2et93uMZgjdpV3C3_ITp_VbSBlwYu5BtqZ2puZPoI,5821
3
3
  lusid/api/abor_api.py,sha256=CC0f6Aqqiqkgmpguvoqe8teU0bRRuc771AdUSyI4rJw,158222
4
4
  lusid/api/abor_configuration_api.py,sha256=TmssMn5ni0mZV1q7LyPXYhBqqUGJqLYZapo8By8DFuI,63875
@@ -27,7 +27,7 @@ lusid/api/executions_api.py,sha256=QW6_mT0rsZTiW1R5tG-_fa-UT6khiMYfHsnapbzlVmo,4
27
27
  lusid/api/fee_types_api.py,sha256=vcDM_7QOAX0LjNz5Wr7lTV_LVYtrmhZ8-59-ZRjL2Sg,55933
28
28
  lusid/api/fund_configuration_api.py,sha256=sItl8nbm7PsJYVZYMLWKtGQG80y_y6LP7D_r6NjxbOc,74272
29
29
  lusid/api/funds_api.py,sha256=cfiP9aomuX9SNepJfrF8FpEy1_2rSg0ROPZDGVKU-aU,224540
30
- lusid/api/group_reconciliations_api.py,sha256=s1euub-QaKTVvR6BYVSowezwqa7r7WX-k6W9ge5sUfE,152341
30
+ lusid/api/group_reconciliations_api.py,sha256=0zuSvNM9c61ZhzdxSCVen_y3-y9gPeykflxgNzv9-8U,167598
31
31
  lusid/api/instrument_event_types_api.py,sha256=G4gpfM6eWl77dtF3DC7b0lUOby_EREyLmXTxSyo9-ew,81296
32
32
  lusid/api/instrument_events_api.py,sha256=HJoC-pHztF2jKfX5xhXItEn3svBya8RNzd_hMDbmZKI,58350
33
33
  lusid/api/instruments_api.py,sha256=bsFgBfz5dPAd4uNxrWn5m0m8B7ne85z10jvVagL3FWs,293269
@@ -70,7 +70,7 @@ lusid/api/translation_api.py,sha256=nIyuLncCvVC5k2d7Nm32zR8AQ1dkrVm1OThkmELY_OM,
70
70
  lusid/api/workspace_api.py,sha256=mYQPqFUVf1VKYeWQUV5VkcdSqwejSmPDGd66Az86-_E,191319
71
71
  lusid/api_client.py,sha256=ewMTmf9SRurY8pYnUx9jy24RdldPCOa4US38pnrVxjA,31140
72
72
  lusid/api_response.py,sha256=6-gnhty6lu8MMAERt3_kTVD7UxQgWFfcjgpcq6iN5IU,855
73
- lusid/configuration.py,sha256=hLT45EIgBHMV4db7DTH5xHnPuWziuXLkqK0jRN3L9KU,17972
73
+ lusid/configuration.py,sha256=xXddz9f5JHcM52RpAzqke9XZn5IXjejiJAgQ3uUPM0U,17972
74
74
  lusid/exceptions.py,sha256=HIQwgmQrszLlcVCLaqex8dO0laVuejUyOMz7U2ZWJ6s,5326
75
75
  lusid/extensions/__init__.py,sha256=dzDHEzpn-9smd2-_UMWQzeyX6Ha4jGf6fnqx7qxKxNI,630
76
76
  lusid/extensions/api_client.py,sha256=GzygWg_h603QK1QS2HvAijuE2R1TnvoF6-Yg0CeM3ug,30943
@@ -85,7 +85,7 @@ lusid/extensions/rest.py,sha256=dp-bD_LMR2zAL1tmC3-urhWKLomXx7r5iGN1VteMBVQ,1601
85
85
  lusid/extensions/retry.py,sha256=EhW9OKJmGHipxN3H7eROH5DiMlAnfBVl95NQrttcsdg,14834
86
86
  lusid/extensions/socket_keep_alive.py,sha256=NGlqsv-E25IjJOLGZhXZY6kUdx51nEF8qCQyVdzayRk,1653
87
87
  lusid/extensions/tcp_keep_alive_connector.py,sha256=zaGtUsygRsxB1_4B3x39K3ILwztdhMLDv5bFZV7zmGE,3877
88
- lusid/models/__init__.py,sha256=10MSMt61D_LYbf4i4dk6ztrvqIaqzwJjfCC3Eg_d-1Q,120072
88
+ lusid/models/__init__.py,sha256=73WiAF0zZb91-aFsIRdCeZRnJlJKKGeASHsOKfwYGSk,120720
89
89
  lusid/models/a2_b_breakdown.py,sha256=Txi12EIQw3mH6NM-25QkOnHSQc3BVAWrP7yl9bZswSY,2947
90
90
  lusid/models/a2_b_category.py,sha256=k6NPAACi0CUjKyhdQac4obQSrPmp2PXD6lkAtCnyEFM,2725
91
91
  lusid/models/a2_b_data_record.py,sha256=zKGS2P4fzNpzdcGJiSIpkY4P3d_jAcawYfyuPCDeQgk,9737
@@ -143,13 +143,15 @@ lusid/models/amount.py,sha256=2Yg4t7pUw1LBK2OFzXY-fesXvIGejXMO2dvriNHABZg,1793
143
143
  lusid/models/annul_quotes_response.py,sha256=mYZSWeQx2veyirZnrWl2HWLB1nLYxqfLC-kAD87L2Qo,4347
144
144
  lusid/models/annul_single_structured_data_response.py,sha256=8PLdLJ-9anIqCr8JYhYQnfwVvfEEMjY8euqfdvHTNKM,3328
145
145
  lusid/models/annul_structured_data_response.py,sha256=m_PPmlTTJmHWbjwlFVOY4fRS8O1eL2K5ZZYLWyjcXJM,4499
146
- lusid/models/applicable_instrument_event.py,sha256=_S4HnxNFi2rZfhCuw5Fmx6CfZV4rt2KtGvENiql3PQE,6617
146
+ lusid/models/applicable_instrument_event.py,sha256=E2rfA-mlBf0knNeWTFRvjIAfTaKLoYzSDBCf1YpPbL0,6946
147
147
  lusid/models/asset_class.py,sha256=yurc1IbYS3HCMRBncPFfIl8pBiYnt64MP4tiBYJ8usU,793
148
148
  lusid/models/asset_leg.py,sha256=8wh1kb3gWB0FF1VTD-nkx58zOfRV3R-CJNXquBLIvEo,2625
149
149
  lusid/models/barrier.py,sha256=NP7eTStjcFn5wV3KkKPnwCOjQpmbIp5aMm8rJmpwjmU,2745
150
150
  lusid/models/basket.py,sha256=Yh6emkzaAELuu7KrkHQF7yU0Cf09U2YzV4NNc0XJwCo,6067
151
151
  lusid/models/basket_identifier.py,sha256=Fn2M8buKDbj7h9_1TSEpwsqICFdkPtF6_YI_Wc6KDJw,2562
152
152
  lusid/models/batch_adjust_holdings_response.py,sha256=G7YVmb6acbhitvRw_Vs7oAXTcxS5zt844jybc4lXOCY,5687
153
+ lusid/models/batch_update_user_review_for_comparison_result_request.py,sha256=Q7jwihDXRNjCWA6c3QIM5E0GCeQjmibUob4FdyNwOII,3505
154
+ lusid/models/batch_update_user_review_for_comparison_result_response.py,sha256=DGlIi-d1rLpR2N0sG51Tg4NYxqfcOgTn63dc1dfmFK4,5992
153
155
  lusid/models/batch_upsert_dates_for_calendar_response.py,sha256=ps4wkj03c4gvQv4-E9iec-t25b2CVxBXR8xcBct9P_A,5692
154
156
  lusid/models/batch_upsert_instrument_properties_response.py,sha256=5ZYvAlLZDj9iZ6NytbqzFN11K46Jeum8bLQIw7qx1o4,4543
155
157
  lusid/models/batch_upsert_portfolio_access_metadata_request.py,sha256=fT9WgSY2l_L54ptjkUe9lP6DinS9j7Ax_J8T5SlMmTs,3278
@@ -396,7 +398,7 @@ lusid/models/equity_all_of_identifiers.py,sha256=WrnLJAqy2KOa84viXXZ5tyVDjAlQZ7Z
396
398
  lusid/models/equity_curve_by_prices_data.py,sha256=bfvm9uAlWWiI_jhLacOXk-v_IvdyTF-pqkopNR0ZFss,5621
397
399
  lusid/models/equity_curve_dependency.py,sha256=bXyEO_TzvZtxmi16cFQYZwL9W6qApALe5pIHC4M8jRc,5028
398
400
  lusid/models/equity_model_options.py,sha256=taOqGGZiLmchhJRrv8wjvrKPKCh32njkp0DgfwAb7AE,3698
399
- lusid/models/equity_option.py,sha256=9vWH9I5uc_OzTjjYoAN_Jsh6ooDtpIKnXsa4w42kk98,8890
401
+ lusid/models/equity_option.py,sha256=P7HA9TwaR2_FB53AjU2__OF5p_vXW1CYlquBvyufsIo,9253
400
402
  lusid/models/equity_swap.py,sha256=7Cx4rwmc_EkIAuF8YODYDBATM17BuCRhL1TeeD2Mgog,9522
401
403
  lusid/models/equity_vol_dependency.py,sha256=GcZrPW9sJS5nKXBjVNjcUKIp4UDeovABErfg6uZXGH0,4909
402
404
  lusid/models/equity_vol_surface_data.py,sha256=INLwejaCYkya6fjf_rrG33B_z2FFcgFaIEwWUokfh2Y,5865
@@ -404,7 +406,7 @@ lusid/models/error_detail.py,sha256=XkNJc5yCGsIri9wDciaONqobIbADaU90i5UrI71WM4c,
404
406
  lusid/models/event_date_range.py,sha256=5JHxchKA0cjiv_dgYzDUrnj08Za90WDasnXpP9pM85s,2252
405
407
  lusid/models/ex_dividend_configuration.py,sha256=TFJwnRyy5TBp3jTYUkV9zc2Av5Zc3TVWl8ukfQOU2Kc,3511
406
408
  lusid/models/exchange_traded_option.py,sha256=b01E6S7CUPsFfm4Yh9LHxJj59CBKNOjr_iO8tIDro2U,6181
407
- lusid/models/exchange_traded_option_contract_details.py,sha256=kTmC8XarImx5iMSCmWUVeYPmvMJLMDInjaWI7ykju1o,5578
409
+ lusid/models/exchange_traded_option_contract_details.py,sha256=deXRIMrBJkkIdUHM3gsk2-ff1rFkBUZrDNtfe8yoe3E,5601
408
410
  lusid/models/execution.py,sha256=xgTGRwDwyKoIs2Pr1bO2gyqCZse_xbUX-FawwhMDgS8,8094
409
411
  lusid/models/execution_request.py,sha256=QIRsZXIKhl_YftXWBWjaT1IZuvIzSi766FWAx7I6Qlc,6720
410
412
  lusid/models/execution_set_request.py,sha256=CXGgbdH8abVfPqnUs4J1xR_mHI3byH4ES_T7IGDm0nM,2672
@@ -527,9 +529,11 @@ lusid/models/group_reconciliation_run_request.py,sha256=_VCLVJIPxQPzq1PwRKY5yiPY
527
529
  lusid/models/group_reconciliation_run_response.py,sha256=E63Hnj7WyvJ81xD0EMbdj2aYvnCoi2-eU_ocwCWatLg,2769
528
530
  lusid/models/group_reconciliation_summary.py,sha256=iYBU-D6AqP7hELgDzurHKu56gHHfP3GUc1XUHekPn7k,7056
529
531
  lusid/models/group_reconciliation_user_review.py,sha256=RmmfuG7AY5CTGZ-V1zizIp2DHnnAaeaMjT3WQ6ytNFs,4954
532
+ lusid/models/group_reconciliation_user_review_add.py,sha256=tJzFtb62BlXLtcRw6NQ6zSVqGDI4eDVvZ78619SRzIY,3121
530
533
  lusid/models/group_reconciliation_user_review_break_code.py,sha256=z9FDs7OiD2HM_3mjXRw9oRsHUnyTfAZ7syKjycCaYRw,3049
531
534
  lusid/models/group_reconciliation_user_review_comment.py,sha256=OyFRv1tKph4NG9JDgRT6ihTQJt98z4hxoGOBq40d5k4,3050
532
535
  lusid/models/group_reconciliation_user_review_match_key.py,sha256=Zr5OygFLv-4HpceAQcFAbNuUnkC5olsK684G6KOpRuM,3035
536
+ lusid/models/group_reconciliation_user_review_remove.py,sha256=dgbh3QcLx-to4gvS2G9QAhZd8FKfPavYqG9Ab9xzsqk,3445
533
537
  lusid/models/grouped_result_of_address_key.py,sha256=0QJiqtjI9E1HAVTk7z-djloCLgmBzmPo4F89lPnDGRM,3114
534
538
  lusid/models/holding_adjustment.py,sha256=r1aezT3lh-Gk0DED9Oost7ZDjYUHPd8kNzIayfTU3EM,6451
535
539
  lusid/models/holding_adjustment_with_date.py,sha256=NYeZyehQe5lE7G0Yh0nukm236WUHgrTjcCI-wpIwCMo,6726
@@ -1041,8 +1045,8 @@ lusid/models/structured_result_data_id.py,sha256=R15RxvxzgMy9R4zW0Ya1fSaYpMsXSij
1041
1045
  lusid/models/sub_holding_key_value_equals.py,sha256=2puONsExwFEYItLhbzwdwo-C2B5VVRYfJwbcDviclDg,3498
1042
1046
  lusid/models/swap_cash_flow_event.py,sha256=rVON6lFAKJkD10fJj8A9m1-4eRknlvvu487dR3V-ofA,6687
1043
1047
  lusid/models/swap_principal_event.py,sha256=OjL02OqOJdJdAOI4FuW7TePE2UP7Jvqhud3KPwl7bYA,6691
1044
- lusid/models/target_tax_lot.py,sha256=0rexGWPhEdOaj5_Z6OLxb-7AVTMYL4PfaI_Xcw5ZLm8,4296
1045
- lusid/models/target_tax_lot_request.py,sha256=UwhPoC9hMlbjBZ3dL28Yq2orn1v3vJ7eLctnEGkjKy4,4290
1048
+ lusid/models/target_tax_lot.py,sha256=86FGFBYlSmW2dcqCwMDpSlU-17FchhVP_V6EDZzs9fw,5894
1049
+ lusid/models/target_tax_lot_request.py,sha256=Q9U5dEZviQQjeH6xXVVHhYzFZi281sZQrJ-UYmh8eNM,5888
1046
1050
  lusid/models/tax_rule.py,sha256=Mwc712YrMyeqXxJB6aUgNjCxy872or0_dtoNUZFNOBw,3530
1047
1051
  lusid/models/tax_rule_set.py,sha256=aBWdkCHrurQHB4ZdyVUxOj0CJaZ6muaCcCenCtpJlqc,5007
1048
1052
  lusid/models/template_field.py,sha256=uwh7AKQ-BnT54KvMZrVmyi3o0NUUzmtLvxwoXHwNs9A,2473
@@ -1216,6 +1220,6 @@ lusid/models/workspace_update_request.py,sha256=uUXEpX-dJ5UiL9w1wMxIFeovSBiTJ-vi
1216
1220
  lusid/models/yield_curve_data.py,sha256=SbxvdJ4-GWK9kpMdw4Fnxc7_kvIMwgsRsd_31UJn7nw,6330
1217
1221
  lusid/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1218
1222
  lusid/rest.py,sha256=HQT__5LQEMu6_1sLKvYj-DI4FH1DJXBIPYfZCTTyrY4,13431
1219
- lusid_sdk-2.1.502.dist-info/METADATA,sha256=aBJH9G1y-grUw196CoRsA689SPMD0_BG-YfVeoJgiTw,207723
1220
- lusid_sdk-2.1.502.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
1221
- lusid_sdk-2.1.502.dist-info/RECORD,,
1223
+ lusid_sdk-2.1.515.dist-info/METADATA,sha256=AoQLx_qwxZqLc60ZAOyhVsSteV5JGGd6YscbKc2ytZ4,208509
1224
+ lusid_sdk-2.1.515.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
1225
+ lusid_sdk-2.1.515.dist-info/RECORD,,