lusid-sdk 2.1.395__py3-none-any.whl → 2.1.400__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.basket import Basket
159
159
  from lusid.models.basket_identifier import BasketIdentifier
160
160
  from lusid.models.batch_adjust_holdings_response import BatchAdjustHoldingsResponse
161
161
  from lusid.models.batch_upsert_instrument_properties_response import BatchUpsertInstrumentPropertiesResponse
162
+ from lusid.models.batch_upsert_portfolio_access_metadata_request import BatchUpsertPortfolioAccessMetadataRequest
163
+ from lusid.models.batch_upsert_portfolio_access_metadata_response import BatchUpsertPortfolioAccessMetadataResponse
162
164
  from lusid.models.batch_upsert_portfolio_transactions_response import BatchUpsertPortfolioTransactionsResponse
163
165
  from lusid.models.batch_upsert_property_definition_properties_response import BatchUpsertPropertyDefinitionPropertiesResponse
164
166
  from lusid.models.block import Block
@@ -597,6 +599,8 @@ from lusid.models.market_quote import MarketQuote
597
599
  from lusid.models.match_criterion import MatchCriterion
598
600
  from lusid.models.maturity_event import MaturityEvent
599
601
  from lusid.models.merger_event import MergerEvent
602
+ from lusid.models.metadata_key_value import MetadataKeyValue
603
+ from lusid.models.metadata_key_value_response import MetadataKeyValueResponse
600
604
  from lusid.models.metric_value import MetricValue
601
605
  from lusid.models.model_options import ModelOptions
602
606
  from lusid.models.model_options_type import ModelOptionsType
@@ -1303,6 +1307,8 @@ __all__ = [
1303
1307
  "BasketIdentifier",
1304
1308
  "BatchAdjustHoldingsResponse",
1305
1309
  "BatchUpsertInstrumentPropertiesResponse",
1310
+ "BatchUpsertPortfolioAccessMetadataRequest",
1311
+ "BatchUpsertPortfolioAccessMetadataResponse",
1306
1312
  "BatchUpsertPortfolioTransactionsResponse",
1307
1313
  "BatchUpsertPropertyDefinitionPropertiesResponse",
1308
1314
  "Block",
@@ -1741,6 +1747,8 @@ __all__ = [
1741
1747
  "MatchCriterion",
1742
1748
  "MaturityEvent",
1743
1749
  "MergerEvent",
1750
+ "MetadataKeyValue",
1751
+ "MetadataKeyValueResponse",
1744
1752
  "MetricValue",
1745
1753
  "ModelOptions",
1746
1754
  "ModelOptionsType",
@@ -31,6 +31,8 @@ from lusid.models.access_metadata_value import AccessMetadataValue
31
31
  from lusid.models.aggregated_returns_dispersion_request import AggregatedReturnsDispersionRequest
32
32
  from lusid.models.aggregated_returns_request import AggregatedReturnsRequest
33
33
  from lusid.models.aggregated_returns_response import AggregatedReturnsResponse
34
+ from lusid.models.batch_upsert_portfolio_access_metadata_request import BatchUpsertPortfolioAccessMetadataRequest
35
+ from lusid.models.batch_upsert_portfolio_access_metadata_response import BatchUpsertPortfolioAccessMetadataResponse
34
36
  from lusid.models.composite_breakdown_request import CompositeBreakdownRequest
35
37
  from lusid.models.composite_breakdown_response import CompositeBreakdownResponse
36
38
  from lusid.models.composite_dispersion_response import CompositeDispersionResponse
@@ -77,6 +79,183 @@ class PortfoliosApi:
77
79
  api_client = ApiClient.get_default()
78
80
  self.api_client = api_client
79
81
 
82
+ @overload
83
+ async def batch_upsert_portfolio_access_metadata(self, batch_upsert_portfolio_access_metadata_request : Annotated[BatchUpsertPortfolioAccessMetadataRequest, Field(..., description="The Portfolio Access Metadata Rule to update or insert")], effective_at : Annotated[Optional[StrictStr], Field(description="The date this rule will effective from")] = None, effective_until : Annotated[Optional[datetime], Field(description="The effective date until which the Access Metadata is valid. If not supplied this will be valid indefinitely, or until the next 'effectiveAt' date of the Access Metadata")] = None, **kwargs) -> BatchUpsertPortfolioAccessMetadataResponse: # noqa: E501
84
+ ...
85
+
86
+ @overload
87
+ def batch_upsert_portfolio_access_metadata(self, batch_upsert_portfolio_access_metadata_request : Annotated[BatchUpsertPortfolioAccessMetadataRequest, Field(..., description="The Portfolio Access Metadata Rule to update or insert")], effective_at : Annotated[Optional[StrictStr], Field(description="The date this rule will effective from")] = None, effective_until : Annotated[Optional[datetime], Field(description="The effective date until which the Access Metadata is valid. If not supplied this will be valid indefinitely, or until the next 'effectiveAt' date of the Access Metadata")] = None, async_req: Optional[bool]=True, **kwargs) -> BatchUpsertPortfolioAccessMetadataResponse: # noqa: E501
88
+ ...
89
+
90
+ @validate_arguments
91
+ def batch_upsert_portfolio_access_metadata(self, batch_upsert_portfolio_access_metadata_request : Annotated[BatchUpsertPortfolioAccessMetadataRequest, Field(..., description="The Portfolio Access Metadata Rule to update or insert")], effective_at : Annotated[Optional[StrictStr], Field(description="The date this rule will effective from")] = None, effective_until : Annotated[Optional[datetime], Field(description="The effective date until which the Access Metadata is valid. If not supplied this will be valid indefinitely, or until the next 'effectiveAt' date of the Access Metadata")] = None, async_req: Optional[bool]=None, **kwargs) -> Union[BatchUpsertPortfolioAccessMetadataResponse, Awaitable[BatchUpsertPortfolioAccessMetadataResponse]]: # noqa: E501
92
+ """[EXPERIMENTAL] BatchUpsertPortfolioAccessMetadata: Upsert multiple portfolio access metadata with different keys to multiple portfolios # noqa: E501
93
+
94
+ Update or insert multiple Portfolios Access Metadata Rule in multiple scopes. Items will be updated if it already exists and inserted if it does not. No other items will be affected The response will return the successfully updated or inserted Portfolio Access Metadata Rules or failure message if unsuccessful It is important to always check to verify success (or failure). Multiple rules for a metadataKey can exist with different effective at dates, when resources are accessed the rule that is active for the current time will be fetched # noqa: E501
95
+ This method makes a synchronous HTTP request by default. To make an
96
+ asynchronous HTTP request, please pass async_req=True
97
+
98
+ >>> thread = api.batch_upsert_portfolio_access_metadata(batch_upsert_portfolio_access_metadata_request, effective_at, effective_until, async_req=True)
99
+ >>> result = thread.get()
100
+
101
+ :param batch_upsert_portfolio_access_metadata_request: The Portfolio Access Metadata Rule to update or insert (required)
102
+ :type batch_upsert_portfolio_access_metadata_request: BatchUpsertPortfolioAccessMetadataRequest
103
+ :param effective_at: The date this rule will effective from
104
+ :type effective_at: str
105
+ :param effective_until: The effective date until which the Access Metadata is valid. If not supplied this will be valid indefinitely, or until the next 'effectiveAt' date of the Access Metadata
106
+ :type effective_until: datetime
107
+ :param async_req: Whether to execute the request asynchronously.
108
+ :type async_req: bool, optional
109
+ :param _request_timeout: timeout setting for this request.
110
+ If one number provided, it will be total request
111
+ timeout. It can also be a pair (tuple) of
112
+ (connection, read) timeouts.
113
+ :return: Returns the result object.
114
+ If the method is called asynchronously,
115
+ returns the request thread.
116
+ :rtype: BatchUpsertPortfolioAccessMetadataResponse
117
+ """
118
+ kwargs['_return_http_data_only'] = True
119
+ if '_preload_content' in kwargs:
120
+ message = "Error! Please call the batch_upsert_portfolio_access_metadata_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501
121
+ raise ValueError(message)
122
+ if async_req is not None:
123
+ kwargs['async_req'] = async_req
124
+ return self.batch_upsert_portfolio_access_metadata_with_http_info(batch_upsert_portfolio_access_metadata_request, effective_at, effective_until, **kwargs) # noqa: E501
125
+
126
+ @validate_arguments
127
+ def batch_upsert_portfolio_access_metadata_with_http_info(self, batch_upsert_portfolio_access_metadata_request : Annotated[BatchUpsertPortfolioAccessMetadataRequest, Field(..., description="The Portfolio Access Metadata Rule to update or insert")], effective_at : Annotated[Optional[StrictStr], Field(description="The date this rule will effective from")] = None, effective_until : Annotated[Optional[datetime], Field(description="The effective date until which the Access Metadata is valid. If not supplied this will be valid indefinitely, or until the next 'effectiveAt' date of the Access Metadata")] = None, **kwargs) -> ApiResponse: # noqa: E501
128
+ """[EXPERIMENTAL] BatchUpsertPortfolioAccessMetadata: Upsert multiple portfolio access metadata with different keys to multiple portfolios # noqa: E501
129
+
130
+ Update or insert multiple Portfolios Access Metadata Rule in multiple scopes. Items will be updated if it already exists and inserted if it does not. No other items will be affected The response will return the successfully updated or inserted Portfolio Access Metadata Rules or failure message if unsuccessful It is important to always check to verify success (or failure). Multiple rules for a metadataKey can exist with different effective at dates, when resources are accessed the rule that is active for the current time will be fetched # noqa: E501
131
+ This method makes a synchronous HTTP request by default. To make an
132
+ asynchronous HTTP request, please pass async_req=True
133
+
134
+ >>> thread = api.batch_upsert_portfolio_access_metadata_with_http_info(batch_upsert_portfolio_access_metadata_request, effective_at, effective_until, async_req=True)
135
+ >>> result = thread.get()
136
+
137
+ :param batch_upsert_portfolio_access_metadata_request: The Portfolio Access Metadata Rule to update or insert (required)
138
+ :type batch_upsert_portfolio_access_metadata_request: BatchUpsertPortfolioAccessMetadataRequest
139
+ :param effective_at: The date this rule will effective from
140
+ :type effective_at: str
141
+ :param effective_until: The effective date until which the Access Metadata is valid. If not supplied this will be valid indefinitely, or until the next 'effectiveAt' date of the Access Metadata
142
+ :type effective_until: datetime
143
+ :param async_req: Whether to execute the request asynchronously.
144
+ :type async_req: bool, optional
145
+ :param _preload_content: if False, the ApiResponse.data will
146
+ be set to none and raw_data will store the
147
+ HTTP response body without reading/decoding.
148
+ Default is True.
149
+ :type _preload_content: bool, optional
150
+ :param _return_http_data_only: response data instead of ApiResponse
151
+ object with status code, headers, etc
152
+ :type _return_http_data_only: bool, optional
153
+ :param _request_timeout: timeout setting for this request. If one
154
+ number provided, it will be total request
155
+ timeout. It can also be a pair (tuple) of
156
+ (connection, read) timeouts.
157
+ :param _request_auth: set to override the auth_settings for an a single
158
+ request; this effectively ignores the authentication
159
+ in the spec for a single request.
160
+ :type _request_auth: dict, optional
161
+ :type _content_type: string, optional: force content-type for the request
162
+ :return: Returns the result object.
163
+ If the method is called asynchronously,
164
+ returns the request thread.
165
+ :rtype: tuple(BatchUpsertPortfolioAccessMetadataResponse, status_code(int), headers(HTTPHeaderDict))
166
+ """
167
+
168
+ _params = locals()
169
+
170
+ _all_params = [
171
+ 'batch_upsert_portfolio_access_metadata_request',
172
+ 'effective_at',
173
+ 'effective_until'
174
+ ]
175
+ _all_params.extend(
176
+ [
177
+ 'async_req',
178
+ '_return_http_data_only',
179
+ '_preload_content',
180
+ '_request_timeout',
181
+ '_request_auth',
182
+ '_content_type',
183
+ '_headers'
184
+ ]
185
+ )
186
+
187
+ # validate the arguments
188
+ for _key, _val in _params['kwargs'].items():
189
+ if _key not in _all_params:
190
+ raise ApiTypeError(
191
+ "Got an unexpected keyword argument '%s'"
192
+ " to method batch_upsert_portfolio_access_metadata" % _key
193
+ )
194
+ _params[_key] = _val
195
+ del _params['kwargs']
196
+
197
+ _collection_formats = {}
198
+
199
+ # process the path parameters
200
+ _path_params = {}
201
+
202
+ # process the query parameters
203
+ _query_params = []
204
+ if _params.get('effective_at') is not None: # noqa: E501
205
+ _query_params.append(('effectiveAt', _params['effective_at']))
206
+
207
+ if _params.get('effective_until') is not None: # noqa: E501
208
+ if isinstance(_params['effective_until'], datetime):
209
+ _query_params.append(('effectiveUntil', _params['effective_until'].strftime(self.api_client.configuration.datetime_format)))
210
+ else:
211
+ _query_params.append(('effectiveUntil', _params['effective_until']))
212
+
213
+ # process the header parameters
214
+ _header_params = dict(_params.get('_headers', {}))
215
+ # process the form parameters
216
+ _form_params = []
217
+ _files = {}
218
+ # process the body parameter
219
+ _body_params = None
220
+ if _params['batch_upsert_portfolio_access_metadata_request'] is not None:
221
+ _body_params = _params['batch_upsert_portfolio_access_metadata_request']
222
+
223
+ # set the HTTP header `Accept`
224
+ _header_params['Accept'] = self.api_client.select_header_accept(
225
+ ['text/plain', 'application/json', 'text/json']) # noqa: E501
226
+
227
+ # set the HTTP header `Content-Type`
228
+ _content_types_list = _params.get('_content_type',
229
+ self.api_client.select_header_content_type(
230
+ ['application/json-patch+json', 'application/json', 'text/json', 'application/*+json']))
231
+ if _content_types_list:
232
+ _header_params['Content-Type'] = _content_types_list
233
+
234
+ # authentication setting
235
+ _auth_settings = ['oauth2'] # noqa: E501
236
+
237
+ _response_types_map = {
238
+ '200': "BatchUpsertPortfolioAccessMetadataResponse",
239
+ '400': "LusidValidationProblemDetails",
240
+ }
241
+
242
+ return self.api_client.call_api(
243
+ '/api/portfolios/metadata', 'PUT',
244
+ _path_params,
245
+ _query_params,
246
+ _header_params,
247
+ body=_body_params,
248
+ post_params=_form_params,
249
+ files=_files,
250
+ response_types_map=_response_types_map,
251
+ auth_settings=_auth_settings,
252
+ async_req=_params.get('async_req'),
253
+ _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501
254
+ _preload_content=_params.get('_preload_content', True),
255
+ _request_timeout=_params.get('_request_timeout'),
256
+ collection_formats=_collection_formats,
257
+ _request_auth=_params.get('_request_auth'))
258
+
80
259
  @overload
81
260
  async def delete_instrument_event_instruction(self, scope : Annotated[constr(strict=True, max_length=64, min_length=1), Field(..., description="The scope of the portfolio.")], code : Annotated[constr(strict=True, max_length=64, min_length=1), Field(..., description="The code of the portfolio. Together with the scope this uniquely identifies the portfolio.")], instrument_event_instruction_id : Annotated[StrictStr, Field(..., description="The id of the instruction to be deleted.")], portfolio_effective_at : Annotated[Optional[constr(strict=True, max_length=6000, min_length=0)], Field(description="The effective date at which the portfolio will be resolved. Defaults to current time if not specified.")] = None, **kwargs) -> DeletedEntityResponse: # noqa: E501
82
261
  ...
lusid/configuration.py CHANGED
@@ -382,7 +382,7 @@ class Configuration:
382
382
  return "Python SDK Debug Report:\n"\
383
383
  "OS: {env}\n"\
384
384
  "Python Version: {pyversion}\n"\
385
- "Version of the API: 0.11.6825\n"\
385
+ "Version of the API: 0.11.6830\n"\
386
386
  "SDK Package Version: {package_version}".\
387
387
  format(env=sys.platform, pyversion=sys.version, package_version=package_version)
388
388
 
lusid/models/__init__.py CHANGED
@@ -78,6 +78,8 @@ from lusid.models.basket import Basket
78
78
  from lusid.models.basket_identifier import BasketIdentifier
79
79
  from lusid.models.batch_adjust_holdings_response import BatchAdjustHoldingsResponse
80
80
  from lusid.models.batch_upsert_instrument_properties_response import BatchUpsertInstrumentPropertiesResponse
81
+ from lusid.models.batch_upsert_portfolio_access_metadata_request import BatchUpsertPortfolioAccessMetadataRequest
82
+ from lusid.models.batch_upsert_portfolio_access_metadata_response import BatchUpsertPortfolioAccessMetadataResponse
81
83
  from lusid.models.batch_upsert_portfolio_transactions_response import BatchUpsertPortfolioTransactionsResponse
82
84
  from lusid.models.batch_upsert_property_definition_properties_response import BatchUpsertPropertyDefinitionPropertiesResponse
83
85
  from lusid.models.block import Block
@@ -516,6 +518,8 @@ from lusid.models.market_quote import MarketQuote
516
518
  from lusid.models.match_criterion import MatchCriterion
517
519
  from lusid.models.maturity_event import MaturityEvent
518
520
  from lusid.models.merger_event import MergerEvent
521
+ from lusid.models.metadata_key_value import MetadataKeyValue
522
+ from lusid.models.metadata_key_value_response import MetadataKeyValueResponse
519
523
  from lusid.models.metric_value import MetricValue
520
524
  from lusid.models.model_options import ModelOptions
521
525
  from lusid.models.model_options_type import ModelOptionsType
@@ -1142,6 +1146,8 @@ __all__ = [
1142
1146
  "BasketIdentifier",
1143
1147
  "BatchAdjustHoldingsResponse",
1144
1148
  "BatchUpsertInstrumentPropertiesResponse",
1149
+ "BatchUpsertPortfolioAccessMetadataRequest",
1150
+ "BatchUpsertPortfolioAccessMetadataResponse",
1145
1151
  "BatchUpsertPortfolioTransactionsResponse",
1146
1152
  "BatchUpsertPropertyDefinitionPropertiesResponse",
1147
1153
  "Block",
@@ -1580,6 +1586,8 @@ __all__ = [
1580
1586
  "MatchCriterion",
1581
1587
  "MaturityEvent",
1582
1588
  "MergerEvent",
1589
+ "MetadataKeyValue",
1590
+ "MetadataKeyValueResponse",
1583
1591
  "MetricValue",
1584
1592
  "ModelOptions",
1585
1593
  "ModelOptionsType",
@@ -0,0 +1,82 @@
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
22
+ from pydantic.v1 import BaseModel, Field
23
+ from lusid.models.metadata_key_value import MetadataKeyValue
24
+
25
+ class BatchUpsertPortfolioAccessMetadataRequest(BaseModel):
26
+ """
27
+ BatchUpsertPortfolioAccessMetadataRequest
28
+ """
29
+ portfolios_with_metadata: Dict[str, MetadataKeyValue] = Field(..., alias="portfoliosWithMetadata", description="The set of portfolios with the access control metadata")
30
+ __properties = ["portfoliosWithMetadata"]
31
+
32
+ class Config:
33
+ """Pydantic configuration"""
34
+ allow_population_by_field_name = True
35
+ validate_assignment = True
36
+
37
+ def to_str(self) -> str:
38
+ """Returns the string representation of the model using alias"""
39
+ return pprint.pformat(self.dict(by_alias=True))
40
+
41
+ def to_json(self) -> str:
42
+ """Returns the JSON representation of the model using alias"""
43
+ return json.dumps(self.to_dict())
44
+
45
+ @classmethod
46
+ def from_json(cls, json_str: str) -> BatchUpsertPortfolioAccessMetadataRequest:
47
+ """Create an instance of BatchUpsertPortfolioAccessMetadataRequest from a JSON string"""
48
+ return cls.from_dict(json.loads(json_str))
49
+
50
+ def to_dict(self):
51
+ """Returns the dictionary representation of the model using alias"""
52
+ _dict = self.dict(by_alias=True,
53
+ exclude={
54
+ },
55
+ exclude_none=True)
56
+ # override the default output from pydantic by calling `to_dict()` of each value in portfolios_with_metadata (dict)
57
+ _field_dict = {}
58
+ if self.portfolios_with_metadata:
59
+ for _key in self.portfolios_with_metadata:
60
+ if self.portfolios_with_metadata[_key]:
61
+ _field_dict[_key] = self.portfolios_with_metadata[_key].to_dict()
62
+ _dict['portfoliosWithMetadata'] = _field_dict
63
+ return _dict
64
+
65
+ @classmethod
66
+ def from_dict(cls, obj: dict) -> BatchUpsertPortfolioAccessMetadataRequest:
67
+ """Create an instance of BatchUpsertPortfolioAccessMetadataRequest from a dict"""
68
+ if obj is None:
69
+ return None
70
+
71
+ if not isinstance(obj, dict):
72
+ return BatchUpsertPortfolioAccessMetadataRequest.parse_obj(obj)
73
+
74
+ _obj = BatchUpsertPortfolioAccessMetadataRequest.parse_obj({
75
+ "portfolios_with_metadata": dict(
76
+ (_k, MetadataKeyValue.from_dict(_v))
77
+ for _k, _v in obj.get("portfoliosWithMetadata").items()
78
+ )
79
+ if obj.get("portfoliosWithMetadata") is not None
80
+ else None
81
+ })
82
+ return _obj
@@ -0,0 +1,82 @@
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
22
+ from pydantic.v1 import BaseModel, Field
23
+ from lusid.models.metadata_key_value_response import MetadataKeyValueResponse
24
+
25
+ class BatchUpsertPortfolioAccessMetadataResponse(BaseModel):
26
+ """
27
+ BatchUpsertPortfolioAccessMetadataResponse
28
+ """
29
+ portfolios_with_metadata: Dict[str, MetadataKeyValueResponse] = Field(..., alias="portfoliosWithMetadata", description="The set of portfolios with the access control metadata")
30
+ __properties = ["portfoliosWithMetadata"]
31
+
32
+ class Config:
33
+ """Pydantic configuration"""
34
+ allow_population_by_field_name = True
35
+ validate_assignment = True
36
+
37
+ def to_str(self) -> str:
38
+ """Returns the string representation of the model using alias"""
39
+ return pprint.pformat(self.dict(by_alias=True))
40
+
41
+ def to_json(self) -> str:
42
+ """Returns the JSON representation of the model using alias"""
43
+ return json.dumps(self.to_dict())
44
+
45
+ @classmethod
46
+ def from_json(cls, json_str: str) -> BatchUpsertPortfolioAccessMetadataResponse:
47
+ """Create an instance of BatchUpsertPortfolioAccessMetadataResponse from a JSON string"""
48
+ return cls.from_dict(json.loads(json_str))
49
+
50
+ def to_dict(self):
51
+ """Returns the dictionary representation of the model using alias"""
52
+ _dict = self.dict(by_alias=True,
53
+ exclude={
54
+ },
55
+ exclude_none=True)
56
+ # override the default output from pydantic by calling `to_dict()` of each value in portfolios_with_metadata (dict)
57
+ _field_dict = {}
58
+ if self.portfolios_with_metadata:
59
+ for _key in self.portfolios_with_metadata:
60
+ if self.portfolios_with_metadata[_key]:
61
+ _field_dict[_key] = self.portfolios_with_metadata[_key].to_dict()
62
+ _dict['portfoliosWithMetadata'] = _field_dict
63
+ return _dict
64
+
65
+ @classmethod
66
+ def from_dict(cls, obj: dict) -> BatchUpsertPortfolioAccessMetadataResponse:
67
+ """Create an instance of BatchUpsertPortfolioAccessMetadataResponse from a dict"""
68
+ if obj is None:
69
+ return None
70
+
71
+ if not isinstance(obj, dict):
72
+ return BatchUpsertPortfolioAccessMetadataResponse.parse_obj(obj)
73
+
74
+ _obj = BatchUpsertPortfolioAccessMetadataResponse.parse_obj({
75
+ "portfolios_with_metadata": dict(
76
+ (_k, MetadataKeyValueResponse.from_dict(_v))
77
+ for _k, _v in obj.get("portfoliosWithMetadata").items()
78
+ )
79
+ if obj.get("portfoliosWithMetadata") is not None
80
+ else None
81
+ })
82
+ return _obj
@@ -0,0 +1,86 @@
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
22
+ from pydantic.v1 import BaseModel, Field, conlist
23
+ from lusid.models.access_metadata_value import AccessMetadataValue
24
+
25
+ class MetadataKeyValue(BaseModel):
26
+ """
27
+ MetadataKeyValue
28
+ """
29
+ metadata: Dict[str, conlist(AccessMetadataValue)] = Field(...)
30
+ __properties = ["metadata"]
31
+
32
+ class Config:
33
+ """Pydantic configuration"""
34
+ allow_population_by_field_name = True
35
+ validate_assignment = True
36
+
37
+ def to_str(self) -> str:
38
+ """Returns the string representation of the model using alias"""
39
+ return pprint.pformat(self.dict(by_alias=True))
40
+
41
+ def to_json(self) -> str:
42
+ """Returns the JSON representation of the model using alias"""
43
+ return json.dumps(self.to_dict())
44
+
45
+ @classmethod
46
+ def from_json(cls, json_str: str) -> MetadataKeyValue:
47
+ """Create an instance of MetadataKeyValue from a JSON string"""
48
+ return cls.from_dict(json.loads(json_str))
49
+
50
+ def to_dict(self):
51
+ """Returns the dictionary representation of the model using alias"""
52
+ _dict = self.dict(by_alias=True,
53
+ exclude={
54
+ },
55
+ exclude_none=True)
56
+ # override the default output from pydantic by calling `to_dict()` of each value in metadata (dict of array)
57
+ _field_dict_of_array = {}
58
+ if self.metadata:
59
+ for _key in self.metadata:
60
+ if self.metadata[_key]:
61
+ _field_dict_of_array[_key] = [
62
+ _item.to_dict() for _item in self.metadata[_key]
63
+ ]
64
+ _dict['metadata'] = _field_dict_of_array
65
+ return _dict
66
+
67
+ @classmethod
68
+ def from_dict(cls, obj: dict) -> MetadataKeyValue:
69
+ """Create an instance of MetadataKeyValue from a dict"""
70
+ if obj is None:
71
+ return None
72
+
73
+ if not isinstance(obj, dict):
74
+ return MetadataKeyValue.parse_obj(obj)
75
+
76
+ _obj = MetadataKeyValue.parse_obj({
77
+ "metadata": dict(
78
+ (_k,
79
+ [AccessMetadataValue.from_dict(_item) for _item in _v]
80
+ if _v is not None
81
+ else None
82
+ )
83
+ for _k, _v in obj.get("metadata").items()
84
+ )
85
+ })
86
+ return _obj
@@ -0,0 +1,86 @@
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
22
+ from pydantic.v1 import BaseModel, Field, conlist
23
+ from lusid.models.access_metadata_value import AccessMetadataValue
24
+
25
+ class MetadataKeyValueResponse(BaseModel):
26
+ """
27
+ MetadataKeyValueResponse
28
+ """
29
+ metadata: Dict[str, conlist(AccessMetadataValue)] = Field(...)
30
+ __properties = ["metadata"]
31
+
32
+ class Config:
33
+ """Pydantic configuration"""
34
+ allow_population_by_field_name = True
35
+ validate_assignment = True
36
+
37
+ def to_str(self) -> str:
38
+ """Returns the string representation of the model using alias"""
39
+ return pprint.pformat(self.dict(by_alias=True))
40
+
41
+ def to_json(self) -> str:
42
+ """Returns the JSON representation of the model using alias"""
43
+ return json.dumps(self.to_dict())
44
+
45
+ @classmethod
46
+ def from_json(cls, json_str: str) -> MetadataKeyValueResponse:
47
+ """Create an instance of MetadataKeyValueResponse from a JSON string"""
48
+ return cls.from_dict(json.loads(json_str))
49
+
50
+ def to_dict(self):
51
+ """Returns the dictionary representation of the model using alias"""
52
+ _dict = self.dict(by_alias=True,
53
+ exclude={
54
+ },
55
+ exclude_none=True)
56
+ # override the default output from pydantic by calling `to_dict()` of each value in metadata (dict of array)
57
+ _field_dict_of_array = {}
58
+ if self.metadata:
59
+ for _key in self.metadata:
60
+ if self.metadata[_key]:
61
+ _field_dict_of_array[_key] = [
62
+ _item.to_dict() for _item in self.metadata[_key]
63
+ ]
64
+ _dict['metadata'] = _field_dict_of_array
65
+ return _dict
66
+
67
+ @classmethod
68
+ def from_dict(cls, obj: dict) -> MetadataKeyValueResponse:
69
+ """Create an instance of MetadataKeyValueResponse from a dict"""
70
+ if obj is None:
71
+ return None
72
+
73
+ if not isinstance(obj, dict):
74
+ return MetadataKeyValueResponse.parse_obj(obj)
75
+
76
+ _obj = MetadataKeyValueResponse.parse_obj({
77
+ "metadata": dict(
78
+ (_k,
79
+ [AccessMetadataValue.from_dict(_item) for _item in _v]
80
+ if _v is not None
81
+ else None
82
+ )
83
+ for _k, _v in obj.get("metadata").items()
84
+ )
85
+ })
86
+ return _obj
@@ -39,6 +39,7 @@ class StagedModification(BaseModel):
39
39
  decisions: Optional[conlist(StagedModificationDecision)] = Field(None, description="Object containing information relating to the decision on the staged modification.")
40
40
  decisions_count: Optional[StrictInt] = Field(None, alias="decisionsCount", description="Number of decisions made.")
41
41
  status: Optional[StrictStr] = Field(None, description="The status of the staged modification.")
42
+ as_at_closed: Optional[datetime] = Field(None, alias="asAtClosed", description="Time at which the modification was closed by either rejection or approval.")
42
43
  entity_type: Optional[StrictStr] = Field(None, alias="entityType", description="The type of the entity that the staged modification applies to.")
43
44
  scope: Optional[StrictStr] = Field(None, description="The scope of the entity that this staged modification applies to.")
44
45
  entity_unique_id: Optional[StrictStr] = Field(None, alias="entityUniqueId", description="The unique Id of the entity the staged modification applies to.")
@@ -46,7 +47,7 @@ class StagedModification(BaseModel):
46
47
  entity_hrefs: Optional[StagedModificationsEntityHrefs] = Field(None, alias="entityHrefs")
47
48
  display_name: Optional[StrictStr] = Field(None, alias="displayName", description="The display name of the entity the staged modification applies to.")
48
49
  links: Optional[conlist(Link)] = None
49
- __properties = ["id", "asAtStaged", "userIdStaged", "requestedIdStaged", "action", "stagingRule", "decisions", "decisionsCount", "status", "entityType", "scope", "entityUniqueId", "requestedChanges", "entityHrefs", "displayName", "links"]
50
+ __properties = ["id", "asAtStaged", "userIdStaged", "requestedIdStaged", "action", "stagingRule", "decisions", "decisionsCount", "status", "asAtClosed", "entityType", "scope", "entityUniqueId", "requestedChanges", "entityHrefs", "displayName", "links"]
50
51
 
51
52
  class Config:
52
53
  """Pydantic configuration"""
@@ -125,6 +126,11 @@ class StagedModification(BaseModel):
125
126
  if self.status is None and "status" in self.__fields_set__:
126
127
  _dict['status'] = None
127
128
 
129
+ # set to None if as_at_closed (nullable) is None
130
+ # and __fields_set__ contains the field
131
+ if self.as_at_closed is None and "as_at_closed" in self.__fields_set__:
132
+ _dict['asAtClosed'] = None
133
+
128
134
  # set to None if entity_type (nullable) is None
129
135
  # and __fields_set__ contains the field
130
136
  if self.entity_type is None and "entity_type" in self.__fields_set__:
@@ -171,6 +177,7 @@ class StagedModification(BaseModel):
171
177
  "decisions": [StagedModificationDecision.from_dict(_item) for _item in obj.get("decisions")] if obj.get("decisions") is not None else None,
172
178
  "decisions_count": obj.get("decisionsCount"),
173
179
  "status": obj.get("status"),
180
+ "as_at_closed": obj.get("asAtClosed"),
174
181
  "entity_type": obj.get("entityType"),
175
182
  "scope": obj.get("scope"),
176
183
  "entity_unique_id": obj.get("entityUniqueId"),
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: lusid-sdk
3
- Version: 2.1.395
3
+ Version: 2.1.400
4
4
  Summary: LUSID API
5
5
  Home-page: https://github.com/finbourne/lusid-sdk-python
6
6
  License: MIT
@@ -384,6 +384,7 @@ Class | Method | HTTP request | Description
384
384
  *PortfolioGroupsApi* | [**update_portfolio_group**](docs/PortfolioGroupsApi.md#update_portfolio_group) | **PUT** /api/portfoliogroups/{scope}/{code} | [EARLY ACCESS] UpdatePortfolioGroup: Update portfolio group
385
385
  *PortfolioGroupsApi* | [**upsert_group_properties**](docs/PortfolioGroupsApi.md#upsert_group_properties) | **POST** /api/portfoliogroups/{scope}/{code}/properties/$upsert | [EARLY ACCESS] UpsertGroupProperties: Upsert group properties
386
386
  *PortfolioGroupsApi* | [**upsert_portfolio_group_access_metadata**](docs/PortfolioGroupsApi.md#upsert_portfolio_group_access_metadata) | **PUT** /api/portfoliogroups/{scope}/{code}/metadata/{metadataKey} | UpsertPortfolioGroupAccessMetadata: Upsert a Portfolio Group Access Metadata entry associated with a specific metadataKey. This creates or updates the data in LUSID.
387
+ *PortfoliosApi* | [**batch_upsert_portfolio_access_metadata**](docs/PortfoliosApi.md#batch_upsert_portfolio_access_metadata) | **PUT** /api/portfolios/metadata | [EXPERIMENTAL] BatchUpsertPortfolioAccessMetadata: Upsert multiple portfolio access metadata with different keys to multiple portfolios
387
388
  *PortfoliosApi* | [**delete_instrument_event_instruction**](docs/PortfoliosApi.md#delete_instrument_event_instruction) | **DELETE** /api/portfolios/{scope}/{code}/instrumenteventinstructions/{instrumentEventInstructionId} | [EARLY ACCESS] DeleteInstrumentEventInstruction: Delete Instrument Event Instruction
388
389
  *PortfoliosApi* | [**delete_key_from_portfolio_access_metadata**](docs/PortfoliosApi.md#delete_key_from_portfolio_access_metadata) | **DELETE** /api/portfolios/{scope}/{code}/metadata/{metadataKey} | DeleteKeyFromPortfolioAccessMetadata: Delete a Portfolio Access Metadata Rule
389
390
  *PortfoliosApi* | [**delete_portfolio**](docs/PortfoliosApi.md#delete_portfolio) | **DELETE** /api/portfolios/{scope}/{code} | DeletePortfolio: Delete portfolio
@@ -665,6 +666,8 @@ Class | Method | HTTP request | Description
665
666
  - [BasketIdentifier](docs/BasketIdentifier.md)
666
667
  - [BatchAdjustHoldingsResponse](docs/BatchAdjustHoldingsResponse.md)
667
668
  - [BatchUpsertInstrumentPropertiesResponse](docs/BatchUpsertInstrumentPropertiesResponse.md)
669
+ - [BatchUpsertPortfolioAccessMetadataRequest](docs/BatchUpsertPortfolioAccessMetadataRequest.md)
670
+ - [BatchUpsertPortfolioAccessMetadataResponse](docs/BatchUpsertPortfolioAccessMetadataResponse.md)
668
671
  - [BatchUpsertPortfolioTransactionsResponse](docs/BatchUpsertPortfolioTransactionsResponse.md)
669
672
  - [BatchUpsertPropertyDefinitionPropertiesResponse](docs/BatchUpsertPropertyDefinitionPropertiesResponse.md)
670
673
  - [Block](docs/Block.md)
@@ -1103,6 +1106,8 @@ Class | Method | HTTP request | Description
1103
1106
  - [MatchCriterion](docs/MatchCriterion.md)
1104
1107
  - [MaturityEvent](docs/MaturityEvent.md)
1105
1108
  - [MergerEvent](docs/MergerEvent.md)
1109
+ - [MetadataKeyValue](docs/MetadataKeyValue.md)
1110
+ - [MetadataKeyValueResponse](docs/MetadataKeyValueResponse.md)
1106
1111
  - [MetricValue](docs/MetricValue.md)
1107
1112
  - [ModelOptions](docs/ModelOptions.md)
1108
1113
  - [ModelOptionsType](docs/ModelOptionsType.md)
@@ -1,4 +1,4 @@
1
- lusid/__init__.py,sha256=PAz7_G32DWdLvPl9ZQpzNAsdMuv8-EuTPKUkPqBW3jo,118114
1
+ lusid/__init__.py,sha256=aAn-r6xm3PnHcGlbs6Y5Ya04Rp32iiwTxUq5RYMgXKs,118638
2
2
  lusid/api/__init__.py,sha256=PcSZQXr1WZ0bijnKFOIf_xpuAuCF6zMxQQZvMecw2U4,5824
3
3
  lusid/api/abor_api.py,sha256=AvgsHuWE7qRSYJhKveBE2htSjHpqqS0VNJrysAfwME0,159655
4
4
  lusid/api/abor_configuration_api.py,sha256=G2bKPtMYOZ2GhUrg-nPJtCa9XIZdZYK7oafcbJWDMP8,64033
@@ -42,7 +42,7 @@ lusid/api/participations_api.py,sha256=nlVzeyfE33X9Ue9HC9rqCW3WACEPKBvcrEjFEmT8w
42
42
  lusid/api/persons_api.py,sha256=wYB_EaDB9LXTXuSIQr8SIR4h-0NrTgisfwd5uShz8JQ,256317
43
43
  lusid/api/placements_api.py,sha256=bsX7VHZlvnxJiZ3ZPtlJ8md_exerU-Qa_BkHGVRphH8,45797
44
44
  lusid/api/portfolio_groups_api.py,sha256=IueIpi-krYvm5w-I0gkvkYAgxHXfiWejRYcW6DW8400,380452
45
- lusid/api/portfolios_api.py,sha256=pXwxugbm-zQf901tDlh_zbC4odf384sQKclu1rrIWXk,421231
45
+ lusid/api/portfolios_api.py,sha256=K8PpMVwZ4Q-O8TlafI8pdY1NHE4eY_X1R-RtiOGRPzs,433889
46
46
  lusid/api/property_definitions_api.py,sha256=I3aISrQ3USeB-Vkx8OVyakx345aEhPATghGmEtL6ApU,140367
47
47
  lusid/api/queryable_keys_api.py,sha256=1HafmN22bU1bV5H5nua8EZ5oL0pe0LZ5xkVDQTDSezg,10281
48
48
  lusid/api/quotes_api.py,sha256=QPSJ6rFAI-hsvei1QA-PoCzpHRJlcvF_SiCxyGyG678,115595
@@ -70,7 +70,7 @@ lusid/api/translation_api.py,sha256=xTAaKEW96JTDIZBXCjxSguCa7Gz4oVd5jdObUE2egwo,
70
70
  lusid/api/workspace_api.py,sha256=GtjOpr7UDgtXa3KmlwmFX4LJEa5dg53qzTyfy-FY0d4,192167
71
71
  lusid/api_client.py,sha256=dF6l9RAsdxdQjf6Qn4ny6LB-QXlJmsscWiozCvyyBFA,30709
72
72
  lusid/api_response.py,sha256=6-gnhty6lu8MMAERt3_kTVD7UxQgWFfcjgpcq6iN5IU,855
73
- lusid/configuration.py,sha256=M-wxrukpbuOcDxtt19CWXlKTyUi8xNwKD4AkCP_azvg,14733
73
+ lusid/configuration.py,sha256=ALkV4ACrE_qhz2YgIH7Sn_C6rcSj3pVdi8NZerz3siU,14733
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=Ob06urm4Em3MLzgP_geyeeGsPCkU225msW_1kpIeABM,30567
@@ -84,7 +84,7 @@ lusid/extensions/rest.py,sha256=tjVCu-cRrYcjp-ttB975vebPKtBNyBWaeoAdO3QXG2I,1269
84
84
  lusid/extensions/retry.py,sha256=orBJ1uF1iT1IncjWX1iGHVqsCgTh0SBe9rtiV_sPnwk,11564
85
85
  lusid/extensions/socket_keep_alive.py,sha256=NGlqsv-E25IjJOLGZhXZY6kUdx51nEF8qCQyVdzayRk,1653
86
86
  lusid/extensions/tcp_keep_alive_connector.py,sha256=zaGtUsygRsxB1_4B3x39K3ILwztdhMLDv5bFZV7zmGE,3877
87
- lusid/models/__init__.py,sha256=XT5xiwqTnYV7vPRsrNlAvTPRHwaILtS6XnG2i-oQZiA,111258
87
+ lusid/models/__init__.py,sha256=V57h_NBkz3LXGGhL1dTQGvvVyfeVWRqZ7imt5oSyO8I,111782
88
88
  lusid/models/a2_b_breakdown.py,sha256=Txi12EIQw3mH6NM-25QkOnHSQc3BVAWrP7yl9bZswSY,2947
89
89
  lusid/models/a2_b_category.py,sha256=k6NPAACi0CUjKyhdQac4obQSrPmp2PXD6lkAtCnyEFM,2725
90
90
  lusid/models/a2_b_data_record.py,sha256=zKGS2P4fzNpzdcGJiSIpkY4P3d_jAcawYfyuPCDeQgk,9737
@@ -149,6 +149,8 @@ lusid/models/basket.py,sha256=Xu390DRo-j2mkzM7KBE1SIY4wgQ9xbP-shuHfMJotlo,5957
149
149
  lusid/models/basket_identifier.py,sha256=Fn2M8buKDbj7h9_1TSEpwsqICFdkPtF6_YI_Wc6KDJw,2562
150
150
  lusid/models/batch_adjust_holdings_response.py,sha256=G7YVmb6acbhitvRw_Vs7oAXTcxS5zt844jybc4lXOCY,5687
151
151
  lusid/models/batch_upsert_instrument_properties_response.py,sha256=5ZYvAlLZDj9iZ6NytbqzFN11K46Jeum8bLQIw7qx1o4,4543
152
+ lusid/models/batch_upsert_portfolio_access_metadata_request.py,sha256=q1L5sg_og3qRSEwk7W5j-XtLff8VYU6A8RUX3ktsXk0,2908
153
+ lusid/models/batch_upsert_portfolio_access_metadata_response.py,sha256=cuDgQKCHix3IMxqH3TWnQ2NmvGEpgyKAUOQ2S_AA1RQ,2949
152
154
  lusid/models/batch_upsert_portfolio_transactions_response.py,sha256=Mp6_7vGBkzqRNlpjOhn0ZokSKukKWyANAVBDxJIj9qs,5803
153
155
  lusid/models/batch_upsert_property_definition_properties_response.py,sha256=usZ-NS6zUvgma-xjye6VcpwkAyvAYV2C6oo6l_vDbxk,4424
154
156
  lusid/models/block.py,sha256=JPc2-U_zDYuVoqo8g6-NZzPMieUXEWolpquih6BEY8E,7158
@@ -587,6 +589,8 @@ lusid/models/market_quote.py,sha256=Ra6tOiimR6Rdf7pAESEWW2IMZG669jU8eNje8NepYZg,
587
589
  lusid/models/match_criterion.py,sha256=cnLfFgO9k05dH7ooGS7s3d8BvyJNuVMDUh3Yt-SPuec,3568
588
590
  lusid/models/maturity_event.py,sha256=pIqFyDQYrmcWQSNL5TI292ePWrgVaqQCyCJnvELTZtU,5093
589
591
  lusid/models/merger_event.py,sha256=81kyNE4Mxq2FB5J-88MFi7mM1ypQLyj7NVzAHvHuv2s,11174
592
+ lusid/models/metadata_key_value.py,sha256=3zTNnm-mAn9GblTfhQVEqcjd5CCNa407ATEQqkF7jXw,2646
593
+ lusid/models/metadata_key_value_response.py,sha256=zvlscsIOrmW5MBAdOQJVH55KhRkvPVNnIbhWBPNISbE,2710
590
594
  lusid/models/metric_value.py,sha256=QycljuRptuyuEisuUKhJ9kSSlDPJrAykErN9wPZ-x7o,2187
591
595
  lusid/models/model_options.py,sha256=MaLJVMOfpgwL_ZLIIrLbLwpC1lhZKNkzMOGlFlVFgSM,4202
592
596
  lusid/models/model_options_type.py,sha256=9vvfKHqvTqomRGVbnhsjA9hhCouD-acEgOeMK4OZ8AE,931
@@ -955,7 +959,7 @@ lusid/models/simple_cash_flow_loan.py,sha256=9iHHvivjXERGxq5TlRj48zHzDmpjka83V11
955
959
  lusid/models/simple_instrument.py,sha256=Cerk4RI9xGwP59xF19u0ar6JVMqHcEqC9mAysPCIlps,6849
956
960
  lusid/models/sort_order.py,sha256=tx9hNHkrcdw2gQkSLTGQ-JED7cqZoFJ60abVdqkD-GM,644
957
961
  lusid/models/spin_off_event.py,sha256=nnm2nQ-Zvgvtqdu1VRCFC5YrqDPJ5YDxFCZ4bOCaWl0,8851
958
- lusid/models/staged_modification.py,sha256=SMPrCbKed3JZ8Sv5qOzdCY_S41tA37PcO5jv2QZ7ij8,9179
962
+ lusid/models/staged_modification.py,sha256=LGM7EU5w7C7W7fuW9bYEDySqevWEV6edaW206n9LxS4,9630
959
963
  lusid/models/staged_modification_decision.py,sha256=IUIpOwYjk41vLP_nMWDzZgI354cCtM9L6Yrf-K_DP4s,3544
960
964
  lusid/models/staged_modification_decision_request.py,sha256=6PlH7coUQUIJe1-2GcwpatO3tpcqHIBelpgrd_BZ8qQ,2257
961
965
  lusid/models/staged_modification_effective_range.py,sha256=G9oChBwQ_358d41tVDab-j1dGqOwiaRj_wDSDJYcsIU,2256
@@ -1148,6 +1152,6 @@ lusid/models/workspace_update_request.py,sha256=uUXEpX-dJ5UiL9w1wMxIFeovSBiTJ-vi
1148
1152
  lusid/models/yield_curve_data.py,sha256=SbxvdJ4-GWK9kpMdw4Fnxc7_kvIMwgsRsd_31UJn7nw,6330
1149
1153
  lusid/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1150
1154
  lusid/rest.py,sha256=TNUzQ3yLNT2L053EdR7R0vNzQh2J3TlYD1T56Dye0W0,10138
1151
- lusid_sdk-2.1.395.dist-info/METADATA,sha256=kycZfxEIHLmjWr7HD98gXn_1-UoxalKEeL2uxCPfniQ,195999
1152
- lusid_sdk-2.1.395.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
1153
- lusid_sdk-2.1.395.dist-info/RECORD,,
1155
+ lusid_sdk-2.1.400.dist-info/METADATA,sha256=yywPJ627svpQqUhPbdUZ2frzzBzXPbR_YtcbK9QXba0,196607
1156
+ lusid_sdk-2.1.400.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
1157
+ lusid_sdk-2.1.400.dist-info/RECORD,,