lusid-sdk 2.1.806__py3-none-any.whl → 2.1.808__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
@@ -89,6 +89,7 @@ from lusid.api.timelines_api import TimelinesApi
89
89
  from lusid.api.transaction_configuration_api import TransactionConfigurationApi
90
90
  from lusid.api.transaction_fees_api import TransactionFeesApi
91
91
  from lusid.api.transaction_portfolios_api import TransactionPortfoliosApi
92
+ from lusid.api.transfer_agency_api import TransferAgencyApi
92
93
  from lusid.api.translation_api import TranslationApi
93
94
  from lusid.api.workspace_api import WorkspaceApi
94
95
 
@@ -211,6 +212,8 @@ from lusid.models.bucket import Bucket
211
212
  from lusid.models.bucketed_cash_flow_request import BucketedCashFlowRequest
212
213
  from lusid.models.bucketed_cash_flow_response import BucketedCashFlowResponse
213
214
  from lusid.models.bucketing_schedule import BucketingSchedule
215
+ from lusid.models.calculate_order_dates_request import CalculateOrderDatesRequest
216
+ from lusid.models.calculate_order_dates_response import CalculateOrderDatesResponse
214
217
  from lusid.models.calculation_info import CalculationInfo
215
218
  from lusid.models.calendar import Calendar
216
219
  from lusid.models.calendar_date import CalendarDate
@@ -1183,6 +1186,7 @@ from lusid.models.transaction_type_movement import TransactionTypeMovement
1183
1186
  from lusid.models.transaction_type_property_mapping import TransactionTypePropertyMapping
1184
1187
  from lusid.models.transaction_type_request import TransactionTypeRequest
1185
1188
  from lusid.models.transactions_reconciliations_response import TransactionsReconciliationsResponse
1189
+ from lusid.models.transfer_agency_dates import TransferAgencyDates
1186
1190
  from lusid.models.transition_event import TransitionEvent
1187
1191
  from lusid.models.translate_entities_inlined_request import TranslateEntitiesInlinedRequest
1188
1192
  from lusid.models.translate_entities_request import TranslateEntitiesRequest
@@ -1410,6 +1414,7 @@ __all__ = [
1410
1414
  "TransactionConfigurationApi",
1411
1415
  "TransactionFeesApi",
1412
1416
  "TransactionPortfoliosApi",
1417
+ "TransferAgencyApi",
1413
1418
  "TranslationApi",
1414
1419
  "WorkspaceApi",
1415
1420
  "A2BBreakdown",
@@ -1522,6 +1527,8 @@ __all__ = [
1522
1527
  "BucketedCashFlowRequest",
1523
1528
  "BucketedCashFlowResponse",
1524
1529
  "BucketingSchedule",
1530
+ "CalculateOrderDatesRequest",
1531
+ "CalculateOrderDatesResponse",
1525
1532
  "CalculationInfo",
1526
1533
  "Calendar",
1527
1534
  "CalendarDate",
@@ -2494,6 +2501,7 @@ __all__ = [
2494
2501
  "TransactionTypePropertyMapping",
2495
2502
  "TransactionTypeRequest",
2496
2503
  "TransactionsReconciliationsResponse",
2504
+ "TransferAgencyDates",
2497
2505
  "TransitionEvent",
2498
2506
  "TranslateEntitiesInlinedRequest",
2499
2507
  "TranslateEntitiesRequest",
lusid/api/__init__.py CHANGED
@@ -73,6 +73,7 @@ from lusid.api.timelines_api import TimelinesApi
73
73
  from lusid.api.transaction_configuration_api import TransactionConfigurationApi
74
74
  from lusid.api.transaction_fees_api import TransactionFeesApi
75
75
  from lusid.api.transaction_portfolios_api import TransactionPortfoliosApi
76
+ from lusid.api.transfer_agency_api import TransferAgencyApi
76
77
  from lusid.api.translation_api import TranslationApi
77
78
  from lusid.api.workspace_api import WorkspaceApi
78
79
 
@@ -150,6 +151,7 @@ __all__ = [
150
151
  "TransactionConfigurationApi",
151
152
  "TransactionFeesApi",
152
153
  "TransactionPortfoliosApi",
154
+ "TransferAgencyApi",
153
155
  "TranslationApi",
154
156
  "WorkspaceApi"
155
157
  ]
@@ -0,0 +1,212 @@
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
+ import re # noqa: F401
16
+ import io
17
+ import warnings
18
+
19
+ from pydantic.v1 import validate_arguments, ValidationError
20
+ from typing import overload, Optional, Union, Awaitable
21
+
22
+ from typing_extensions import Annotated
23
+ from pydantic.v1 import Field
24
+
25
+ from typing import Dict
26
+
27
+ from lusid.models.calculate_order_dates_request import CalculateOrderDatesRequest
28
+ from lusid.models.calculate_order_dates_response import CalculateOrderDatesResponse
29
+
30
+ from lusid.api_client import ApiClient
31
+ from lusid.api_response import ApiResponse
32
+ from lusid.exceptions import ( # noqa: F401
33
+ ApiTypeError,
34
+ ApiValueError
35
+ )
36
+ from lusid.extensions.configuration_options import ConfigurationOptions
37
+
38
+ # ensure templated type usages are imported
39
+ from pydantic.v1 import Field, StrictStr
40
+ from typing import Optional
41
+ from typing_extensions import Annotated
42
+
43
+ class TransferAgencyApi:
44
+ """NOTE: This class is auto generated by OpenAPI Generator
45
+ Ref: https://openapi-generator.tech
46
+
47
+ Do not edit the class manually.
48
+ """
49
+
50
+ def __init__(self, api_client=None) -> None:
51
+ if api_client is None:
52
+ api_client = ApiClient.get_default()
53
+ self.api_client = api_client
54
+
55
+
56
+ @overload
57
+ async def calculate_order_dates(self, request_body : Annotated[Dict[str, CalculateOrderDatesRequest], Field(..., description="The request containing the dates used for calculation")], **kwargs) -> CalculateOrderDatesResponse: # noqa: E501
58
+ ...
59
+
60
+ @overload
61
+ def calculate_order_dates(self, request_body : Annotated[Dict[str, CalculateOrderDatesRequest], Field(..., description="The request containing the dates used for calculation")], async_req: Optional[bool]=True, **kwargs) -> CalculateOrderDatesResponse: # noqa: E501
62
+ ...
63
+
64
+ @validate_arguments
65
+ def calculate_order_dates(self, request_body : Annotated[Dict[str, CalculateOrderDatesRequest], Field(..., description="The request containing the dates used for calculation")], async_req: Optional[bool]=None, **kwargs) -> Union[CalculateOrderDatesResponse, Awaitable[CalculateOrderDatesResponse]]: # noqa: E501
66
+ """[EXPERIMENTAL] CalculateOrderDates: Calculate the key dates associated with transfer agency orders # noqa: E501
67
+
68
+ The response contains both the collection of successfully calculated dates and any failed calculations, each in the form of a dictionary keyed by the request's keys. For each failure, a reason is provided. It is important to check the failed set for unsuccessful results. # noqa: E501
69
+ This method makes a synchronous HTTP request by default. To make an
70
+ asynchronous HTTP request, please pass async_req=True
71
+
72
+ >>> thread = api.calculate_order_dates(request_body, async_req=True)
73
+ >>> result = thread.get()
74
+
75
+ :param request_body: The request containing the dates used for calculation (required)
76
+ :type request_body: Dict[str, CalculateOrderDatesRequest]
77
+ :param async_req: Whether to execute the request asynchronously.
78
+ :type async_req: bool, optional
79
+ :param _request_timeout: Timeout setting. Do not use - use the opts parameter instead
80
+ :param opts: Configuration options for this request
81
+ :type opts: ConfigurationOptions, optional
82
+ :return: Returns the result object.
83
+ If the method is called asynchronously,
84
+ returns the request thread.
85
+ :rtype: CalculateOrderDatesResponse
86
+ """
87
+ kwargs['_return_http_data_only'] = True
88
+ if '_preload_content' in kwargs:
89
+ message = "Error! Please call the calculate_order_dates_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501
90
+ raise ValueError(message)
91
+ if async_req is not None:
92
+ kwargs['async_req'] = async_req
93
+ return self.calculate_order_dates_with_http_info(request_body, **kwargs) # noqa: E501
94
+
95
+ @validate_arguments
96
+ def calculate_order_dates_with_http_info(self, request_body : Annotated[Dict[str, CalculateOrderDatesRequest], Field(..., description="The request containing the dates used for calculation")], **kwargs) -> ApiResponse: # noqa: E501
97
+ """[EXPERIMENTAL] CalculateOrderDates: Calculate the key dates associated with transfer agency orders # noqa: E501
98
+
99
+ The response contains both the collection of successfully calculated dates and any failed calculations, each in the form of a dictionary keyed by the request's keys. For each failure, a reason is provided. It is important to check the failed set for unsuccessful results. # noqa: E501
100
+ This method makes a synchronous HTTP request by default. To make an
101
+ asynchronous HTTP request, please pass async_req=True
102
+
103
+ >>> thread = api.calculate_order_dates_with_http_info(request_body, async_req=True)
104
+ >>> result = thread.get()
105
+
106
+ :param request_body: The request containing the dates used for calculation (required)
107
+ :type request_body: Dict[str, CalculateOrderDatesRequest]
108
+ :param async_req: Whether to execute the request asynchronously.
109
+ :type async_req: bool, optional
110
+ :param _preload_content: if False, the ApiResponse.data will
111
+ be set to none and raw_data will store the
112
+ HTTP response body without reading/decoding.
113
+ Default is True.
114
+ :type _preload_content: bool, optional
115
+ :param _return_http_data_only: response data instead of ApiResponse
116
+ object with status code, headers, etc
117
+ :type _return_http_data_only: bool, optional
118
+ :param _request_timeout: Timeout setting. Do not use - use the opts parameter instead
119
+ :param opts: Configuration options for this request
120
+ :type opts: ConfigurationOptions, optional
121
+ :param _request_auth: set to override the auth_settings for an a single
122
+ request; this effectively ignores the authentication
123
+ in the spec for a single request.
124
+ :type _request_auth: dict, optional
125
+ :type _content_type: string, optional: force content-type for the request
126
+ :return: Returns the result object.
127
+ If the method is called asynchronously,
128
+ returns the request thread.
129
+ :rtype: tuple(CalculateOrderDatesResponse, status_code(int), headers(HTTPHeaderDict))
130
+ """
131
+
132
+ _params = locals()
133
+
134
+ _all_params = [
135
+ 'request_body'
136
+ ]
137
+ _all_params.extend(
138
+ [
139
+ 'async_req',
140
+ '_return_http_data_only',
141
+ '_preload_content',
142
+ '_request_timeout',
143
+ '_request_auth',
144
+ '_content_type',
145
+ '_headers',
146
+ 'opts'
147
+ ]
148
+ )
149
+
150
+ # validate the arguments
151
+ for _key, _val in _params['kwargs'].items():
152
+ if _key not in _all_params:
153
+ raise ApiTypeError(
154
+ "Got an unexpected keyword argument '%s'"
155
+ " to method calculate_order_dates" % _key
156
+ )
157
+ _params[_key] = _val
158
+ del _params['kwargs']
159
+
160
+ _collection_formats = {}
161
+
162
+ # process the path parameters
163
+ _path_params = {}
164
+
165
+ # process the query parameters
166
+ _query_params = []
167
+ # process the header parameters
168
+ _header_params = dict(_params.get('_headers', {}))
169
+ # process the form parameters
170
+ _form_params = []
171
+ _files = {}
172
+ # process the body parameter
173
+ _body_params = None
174
+ if _params['request_body'] is not None:
175
+ _body_params = _params['request_body']
176
+
177
+ # set the HTTP header `Accept`
178
+ _header_params['Accept'] = self.api_client.select_header_accept(
179
+ ['text/plain', 'application/json', 'text/json']) # noqa: E501
180
+
181
+ # set the HTTP header `Content-Type`
182
+ _content_types_list = _params.get('_content_type',
183
+ self.api_client.select_header_content_type(
184
+ ['application/json-patch+json', 'application/json', 'text/json', 'application/*+json']))
185
+ if _content_types_list:
186
+ _header_params['Content-Type'] = _content_types_list
187
+
188
+ # authentication setting
189
+ _auth_settings = ['oauth2'] # noqa: E501
190
+
191
+ _response_types_map = {
192
+ '200': "CalculateOrderDatesResponse",
193
+ '400': "LusidValidationProblemDetails",
194
+ }
195
+
196
+ return self.api_client.call_api(
197
+ '/api/transferagency/orderdates', 'POST',
198
+ _path_params,
199
+ _query_params,
200
+ _header_params,
201
+ body=_body_params,
202
+ post_params=_form_params,
203
+ files=_files,
204
+ response_types_map=_response_types_map,
205
+ auth_settings=_auth_settings,
206
+ async_req=_params.get('async_req'),
207
+ _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501
208
+ _preload_content=_params.get('_preload_content', True),
209
+ _request_timeout=_params.get('_request_timeout'),
210
+ opts=_params.get('opts'),
211
+ collection_formats=_collection_formats,
212
+ _request_auth=_params.get('_request_auth'))
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.7831\n"\
448
+ "Version of the API: 0.11.7837\n"\
449
449
  "SDK Package Version: {package_version}".\
450
450
  format(env=sys.platform, pyversion=sys.version, package_version=package_version)
451
451
 
@@ -2,6 +2,7 @@ from typing import Sequence
2
2
  import socket
3
3
  import logging
4
4
  from urllib3.connection import HTTPConnection
5
+ import platform
5
6
 
6
7
  __logger__ = logging.getLogger(__name__)
7
8
 
@@ -24,29 +25,34 @@ def keep_alive_socket_options() -> Sequence:
24
25
  Sequence
25
26
  Set of socket options.
26
27
  """
27
- try:
28
- # linux and some windows runtimes
29
- return HTTPConnection.default_socket_options + [
28
+ base_options = HTTPConnection.default_socket_options
29
+ system = platform.system().title()
30
+
31
+ if system == "Windows":
32
+ # Only SO_KEEPALIVE is supported and safe on Windows Server 2016
33
+ __logger__.info("Setting socket settings for Windows")
34
+ return base_options + [
35
+ (socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
36
+ ]
37
+ elif system == "Darwin":
38
+ # macOS specific
39
+ __logger__.info("Setting socket settings for Darwin (macOS)")
40
+ TCP_KEEPALIVE = 0x10 # from <netinet/tcp.h>
41
+ return base_options + [
30
42
  (socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1),
31
- (socket.IPPROTO_TCP, socket.TCP_KEEPIDLE, TCP_KEEP_IDLE),
32
- (socket.IPPROTO_TCP, socket.TCP_KEEPINTVL, TCP_KEEPALIVE_INTERVAL),
33
- (socket.IPPROTO_TCP, socket.TCP_KEEPCNT, TCP_KEEP_CNT),
43
+ (socket.IPPROTO_TCP, TCP_KEEPALIVE, 60)
34
44
  ]
35
- except AttributeError:
36
- pass
37
- try:
38
- # darwin
39
- return HTTPConnection.default_socket_options + [
45
+ elif system == "Linux":
46
+ # Safe on Linux
47
+ __logger__.info("Setting socket settings for Linux")
48
+ return base_options + [
40
49
  (socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1),
41
- (socket.IPPROTO_TCP, TCP_KEEPALIVE, TCP_KEEPALIVE_INTERVAL),
50
+ (socket.IPPROTO_TCP, socket.TCP_KEEPIDLE, 60),
51
+ (socket.IPPROTO_TCP, socket.TCP_KEEPINTVL, 60),
52
+ (socket.IPPROTO_TCP, socket.TCP_KEEPCNT, 3)
42
53
  ]
43
- except AttributeError:
44
- pass
45
- try:
46
- # windows
47
- return HTTPConnection.default_socket_options + [
54
+ else:
55
+ __logger__.warning("Unsupported platform for TCP keep-alive fine-tuning. Using basic SO_KEEPALIVE.")
56
+ return base_options + [
48
57
  (socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
49
58
  ]
50
- except AttributeError:
51
- __logger__.exception("Unable to set TCP Keep-alive socket options")
52
- raise
lusid/models/__init__.py CHANGED
@@ -124,6 +124,8 @@ from lusid.models.bucket import Bucket
124
124
  from lusid.models.bucketed_cash_flow_request import BucketedCashFlowRequest
125
125
  from lusid.models.bucketed_cash_flow_response import BucketedCashFlowResponse
126
126
  from lusid.models.bucketing_schedule import BucketingSchedule
127
+ from lusid.models.calculate_order_dates_request import CalculateOrderDatesRequest
128
+ from lusid.models.calculate_order_dates_response import CalculateOrderDatesResponse
127
129
  from lusid.models.calculation_info import CalculationInfo
128
130
  from lusid.models.calendar import Calendar
129
131
  from lusid.models.calendar_date import CalendarDate
@@ -1096,6 +1098,7 @@ from lusid.models.transaction_type_movement import TransactionTypeMovement
1096
1098
  from lusid.models.transaction_type_property_mapping import TransactionTypePropertyMapping
1097
1099
  from lusid.models.transaction_type_request import TransactionTypeRequest
1098
1100
  from lusid.models.transactions_reconciliations_response import TransactionsReconciliationsResponse
1101
+ from lusid.models.transfer_agency_dates import TransferAgencyDates
1099
1102
  from lusid.models.transition_event import TransitionEvent
1100
1103
  from lusid.models.translate_entities_inlined_request import TranslateEntitiesInlinedRequest
1101
1104
  from lusid.models.translate_entities_request import TranslateEntitiesRequest
@@ -1349,6 +1352,8 @@ __all__ = [
1349
1352
  "BucketedCashFlowRequest",
1350
1353
  "BucketedCashFlowResponse",
1351
1354
  "BucketingSchedule",
1355
+ "CalculateOrderDatesRequest",
1356
+ "CalculateOrderDatesResponse",
1352
1357
  "CalculationInfo",
1353
1358
  "Calendar",
1354
1359
  "CalendarDate",
@@ -2321,6 +2326,7 @@ __all__ = [
2321
2326
  "TransactionTypePropertyMapping",
2322
2327
  "TransactionTypeRequest",
2323
2328
  "TransactionsReconciliationsResponse",
2329
+ "TransferAgencyDates",
2324
2330
  "TransitionEvent",
2325
2331
  "TranslateEntitiesInlinedRequest",
2326
2332
  "TranslateEntitiesRequest",
@@ -0,0 +1,118 @@
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 StrictStr, Field, BaseModel, Field, StrictStr, constr, validator
23
+
24
+ class CalculateOrderDatesRequest(BaseModel):
25
+ """
26
+ CalculateOrderDatesRequest
27
+ """
28
+ instrument_identifier_type: StrictStr = Field(...,alias="instrumentIdentifierType")
29
+ instrument_identifier: StrictStr = Field(...,alias="instrumentIdentifier")
30
+ instrument_scope: Optional[StrictStr] = Field(None,alias="instrumentScope")
31
+ received_date: Optional[datetime] = Field(None, alias="receivedDate")
32
+ price_date: Optional[datetime] = Field(None, alias="priceDate")
33
+ transaction_category: Optional[StrictStr] = Field(None,alias="transactionCategory")
34
+ liquidating_share_class_identifier: Optional[StrictStr] = Field(None,alias="liquidatingShareClassIdentifier")
35
+ liquidating_share_class_identifier_type: Optional[StrictStr] = Field(None,alias="liquidatingShareClassIdentifierType")
36
+ liquidating_share_class_instrument_scope: Optional[StrictStr] = Field(None,alias="liquidatingShareClassInstrumentScope")
37
+ __properties = ["instrumentIdentifierType", "instrumentIdentifier", "instrumentScope", "receivedDate", "priceDate", "transactionCategory", "liquidatingShareClassIdentifier", "liquidatingShareClassIdentifierType", "liquidatingShareClassInstrumentScope"]
38
+
39
+ class Config:
40
+ """Pydantic configuration"""
41
+ allow_population_by_field_name = True
42
+ validate_assignment = True
43
+
44
+ def __str__(self):
45
+ """For `print` and `pprint`"""
46
+ return pprint.pformat(self.dict(by_alias=False))
47
+
48
+ def __repr__(self):
49
+ """For `print` and `pprint`"""
50
+ return self.to_str()
51
+
52
+ def to_str(self) -> str:
53
+ """Returns the string representation of the model using alias"""
54
+ return pprint.pformat(self.dict(by_alias=True))
55
+
56
+ def to_json(self) -> str:
57
+ """Returns the JSON representation of the model using alias"""
58
+ return json.dumps(self.to_dict())
59
+
60
+ @classmethod
61
+ def from_json(cls, json_str: str) -> CalculateOrderDatesRequest:
62
+ """Create an instance of CalculateOrderDatesRequest from a JSON string"""
63
+ return cls.from_dict(json.loads(json_str))
64
+
65
+ def to_dict(self):
66
+ """Returns the dictionary representation of the model using alias"""
67
+ _dict = self.dict(by_alias=True,
68
+ exclude={
69
+ },
70
+ exclude_none=True)
71
+ # set to None if instrument_scope (nullable) is None
72
+ # and __fields_set__ contains the field
73
+ if self.instrument_scope is None and "instrument_scope" in self.__fields_set__:
74
+ _dict['instrumentScope'] = None
75
+
76
+ # set to None if transaction_category (nullable) is None
77
+ # and __fields_set__ contains the field
78
+ if self.transaction_category is None and "transaction_category" in self.__fields_set__:
79
+ _dict['transactionCategory'] = None
80
+
81
+ # set to None if liquidating_share_class_identifier (nullable) is None
82
+ # and __fields_set__ contains the field
83
+ if self.liquidating_share_class_identifier is None and "liquidating_share_class_identifier" in self.__fields_set__:
84
+ _dict['liquidatingShareClassIdentifier'] = None
85
+
86
+ # set to None if liquidating_share_class_identifier_type (nullable) is None
87
+ # and __fields_set__ contains the field
88
+ if self.liquidating_share_class_identifier_type is None and "liquidating_share_class_identifier_type" in self.__fields_set__:
89
+ _dict['liquidatingShareClassIdentifierType'] = None
90
+
91
+ # set to None if liquidating_share_class_instrument_scope (nullable) is None
92
+ # and __fields_set__ contains the field
93
+ if self.liquidating_share_class_instrument_scope is None and "liquidating_share_class_instrument_scope" in self.__fields_set__:
94
+ _dict['liquidatingShareClassInstrumentScope'] = None
95
+
96
+ return _dict
97
+
98
+ @classmethod
99
+ def from_dict(cls, obj: dict) -> CalculateOrderDatesRequest:
100
+ """Create an instance of CalculateOrderDatesRequest from a dict"""
101
+ if obj is None:
102
+ return None
103
+
104
+ if not isinstance(obj, dict):
105
+ return CalculateOrderDatesRequest.parse_obj(obj)
106
+
107
+ _obj = CalculateOrderDatesRequest.parse_obj({
108
+ "instrument_identifier_type": obj.get("instrumentIdentifierType"),
109
+ "instrument_identifier": obj.get("instrumentIdentifier"),
110
+ "instrument_scope": obj.get("instrumentScope"),
111
+ "received_date": obj.get("receivedDate"),
112
+ "price_date": obj.get("priceDate"),
113
+ "transaction_category": obj.get("transactionCategory"),
114
+ "liquidating_share_class_identifier": obj.get("liquidatingShareClassIdentifier"),
115
+ "liquidating_share_class_identifier_type": obj.get("liquidatingShareClassIdentifierType"),
116
+ "liquidating_share_class_instrument_scope": obj.get("liquidatingShareClassInstrumentScope")
117
+ })
118
+ return _obj
@@ -0,0 +1,130 @@
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 StrictStr, Field, BaseModel, Field, conlist
23
+ from lusid.models.error_detail import ErrorDetail
24
+ from lusid.models.link import Link
25
+ from lusid.models.transfer_agency_dates import TransferAgencyDates
26
+
27
+ class CalculateOrderDatesResponse(BaseModel):
28
+ """
29
+ CalculateOrderDatesResponse
30
+ """
31
+ successes: Optional[Dict[str, TransferAgencyDates]] = Field(None, description="A dictionary of successful date calculations, keyed by the request key.")
32
+ failed: Optional[Dict[str, ErrorDetail]] = Field(None, description="A dictionary of failed date calculations, keyed by the request key, containing the error details of any failures that occurred during the calculation.")
33
+ links: Optional[conlist(Link)] = None
34
+ __properties = ["successes", "failed", "links"]
35
+
36
+ class Config:
37
+ """Pydantic configuration"""
38
+ allow_population_by_field_name = True
39
+ validate_assignment = True
40
+
41
+ def __str__(self):
42
+ """For `print` and `pprint`"""
43
+ return pprint.pformat(self.dict(by_alias=False))
44
+
45
+ def __repr__(self):
46
+ """For `print` and `pprint`"""
47
+ return self.to_str()
48
+
49
+ def to_str(self) -> str:
50
+ """Returns the string representation of the model using alias"""
51
+ return pprint.pformat(self.dict(by_alias=True))
52
+
53
+ def to_json(self) -> str:
54
+ """Returns the JSON representation of the model using alias"""
55
+ return json.dumps(self.to_dict())
56
+
57
+ @classmethod
58
+ def from_json(cls, json_str: str) -> CalculateOrderDatesResponse:
59
+ """Create an instance of CalculateOrderDatesResponse from a JSON string"""
60
+ return cls.from_dict(json.loads(json_str))
61
+
62
+ def to_dict(self):
63
+ """Returns the dictionary representation of the model using alias"""
64
+ _dict = self.dict(by_alias=True,
65
+ exclude={
66
+ },
67
+ exclude_none=True)
68
+ # override the default output from pydantic by calling `to_dict()` of each value in successes (dict)
69
+ _field_dict = {}
70
+ if self.successes:
71
+ for _key in self.successes:
72
+ if self.successes[_key]:
73
+ _field_dict[_key] = self.successes[_key].to_dict()
74
+ _dict['successes'] = _field_dict
75
+ # override the default output from pydantic by calling `to_dict()` of each value in failed (dict)
76
+ _field_dict = {}
77
+ if self.failed:
78
+ for _key in self.failed:
79
+ if self.failed[_key]:
80
+ _field_dict[_key] = self.failed[_key].to_dict()
81
+ _dict['failed'] = _field_dict
82
+ # override the default output from pydantic by calling `to_dict()` of each item in links (list)
83
+ _items = []
84
+ if self.links:
85
+ for _item in self.links:
86
+ if _item:
87
+ _items.append(_item.to_dict())
88
+ _dict['links'] = _items
89
+ # set to None if successes (nullable) is None
90
+ # and __fields_set__ contains the field
91
+ if self.successes is None and "successes" in self.__fields_set__:
92
+ _dict['successes'] = None
93
+
94
+ # set to None if failed (nullable) is None
95
+ # and __fields_set__ contains the field
96
+ if self.failed is None and "failed" in self.__fields_set__:
97
+ _dict['failed'] = None
98
+
99
+ # set to None if links (nullable) is None
100
+ # and __fields_set__ contains the field
101
+ if self.links is None and "links" in self.__fields_set__:
102
+ _dict['links'] = None
103
+
104
+ return _dict
105
+
106
+ @classmethod
107
+ def from_dict(cls, obj: dict) -> CalculateOrderDatesResponse:
108
+ """Create an instance of CalculateOrderDatesResponse from a dict"""
109
+ if obj is None:
110
+ return None
111
+
112
+ if not isinstance(obj, dict):
113
+ return CalculateOrderDatesResponse.parse_obj(obj)
114
+
115
+ _obj = CalculateOrderDatesResponse.parse_obj({
116
+ "successes": dict(
117
+ (_k, TransferAgencyDates.from_dict(_v))
118
+ for _k, _v in obj.get("successes").items()
119
+ )
120
+ if obj.get("successes") is not None
121
+ else None,
122
+ "failed": dict(
123
+ (_k, ErrorDetail.from_dict(_v))
124
+ for _k, _v in obj.get("failed").items()
125
+ )
126
+ if obj.get("failed") is not None
127
+ else None,
128
+ "links": [Link.from_dict(_item) for _item in obj.get("links")] if obj.get("links") is not None else None
129
+ })
130
+ return _obj
@@ -0,0 +1,96 @@
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, List, Optional
22
+ from pydantic.v1 import StrictStr, Field, BaseModel, Field, conlist
23
+ from lusid.models.link import Link
24
+
25
+ class TransferAgencyDates(BaseModel):
26
+ """
27
+ TransferAgencyDates
28
+ """
29
+ price_date: Optional[datetime] = Field(None, alias="priceDate", description="The date at which the fund is priced, for the order received on ReceivedDate. Can be passed into the request instead of the ReceivedDate to calculate the TransactionDate and ExpectedPaymentDate.")
30
+ transaction_date: Optional[datetime] = Field(None, alias="transactionDate", description="The date at which the transaction into or out of the fund is made.")
31
+ expected_payment_date: Optional[datetime] = Field(None, alias="expectedPaymentDate", description="The date by which the cash is expected to be paid to or from the fund.")
32
+ links: Optional[conlist(Link)] = None
33
+ __properties = ["priceDate", "transactionDate", "expectedPaymentDate", "links"]
34
+
35
+ class Config:
36
+ """Pydantic configuration"""
37
+ allow_population_by_field_name = True
38
+ validate_assignment = True
39
+
40
+ def __str__(self):
41
+ """For `print` and `pprint`"""
42
+ return pprint.pformat(self.dict(by_alias=False))
43
+
44
+ def __repr__(self):
45
+ """For `print` and `pprint`"""
46
+ return self.to_str()
47
+
48
+ def to_str(self) -> str:
49
+ """Returns the string representation of the model using alias"""
50
+ return pprint.pformat(self.dict(by_alias=True))
51
+
52
+ def to_json(self) -> str:
53
+ """Returns the JSON representation of the model using alias"""
54
+ return json.dumps(self.to_dict())
55
+
56
+ @classmethod
57
+ def from_json(cls, json_str: str) -> TransferAgencyDates:
58
+ """Create an instance of TransferAgencyDates from a JSON string"""
59
+ return cls.from_dict(json.loads(json_str))
60
+
61
+ def to_dict(self):
62
+ """Returns the dictionary representation of the model using alias"""
63
+ _dict = self.dict(by_alias=True,
64
+ exclude={
65
+ },
66
+ exclude_none=True)
67
+ # override the default output from pydantic by calling `to_dict()` of each item in links (list)
68
+ _items = []
69
+ if self.links:
70
+ for _item in self.links:
71
+ if _item:
72
+ _items.append(_item.to_dict())
73
+ _dict['links'] = _items
74
+ # set to None if links (nullable) is None
75
+ # and __fields_set__ contains the field
76
+ if self.links is None and "links" in self.__fields_set__:
77
+ _dict['links'] = None
78
+
79
+ return _dict
80
+
81
+ @classmethod
82
+ def from_dict(cls, obj: dict) -> TransferAgencyDates:
83
+ """Create an instance of TransferAgencyDates from a dict"""
84
+ if obj is None:
85
+ return None
86
+
87
+ if not isinstance(obj, dict):
88
+ return TransferAgencyDates.parse_obj(obj)
89
+
90
+ _obj = TransferAgencyDates.parse_obj({
91
+ "price_date": obj.get("priceDate"),
92
+ "transaction_date": obj.get("transactionDate"),
93
+ "expected_payment_date": obj.get("expectedPaymentDate"),
94
+ "links": [Link.from_dict(_item) for _item in obj.get("links")] if obj.get("links") is not None else None
95
+ })
96
+ return _obj
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: lusid-sdk
3
- Version: 2.1.806
3
+ Version: 2.1.808
4
4
  Summary: LUSID API
5
5
  Home-page: https://github.com/finbourne/lusid-sdk-python
6
6
  License: MIT
@@ -643,6 +643,7 @@ Class | Method | HTTP request | Description
643
643
  *TransactionPortfoliosApi* | [**upsert_portfolio_details**](docs/TransactionPortfoliosApi.md#upsert_portfolio_details) | **POST** /api/transactionportfolios/{scope}/{code}/details | UpsertPortfolioDetails: Upsert portfolio details
644
644
  *TransactionPortfoliosApi* | [**upsert_transaction_properties**](docs/TransactionPortfoliosApi.md#upsert_transaction_properties) | **POST** /api/transactionportfolios/{scope}/{code}/transactions/{transactionId}/properties | UpsertTransactionProperties: Upsert transaction properties
645
645
  *TransactionPortfoliosApi* | [**upsert_transactions**](docs/TransactionPortfoliosApi.md#upsert_transactions) | **POST** /api/transactionportfolios/{scope}/{code}/transactions | UpsertTransactions: Upsert transactions
646
+ *TransferAgencyApi* | [**calculate_order_dates**](docs/TransferAgencyApi.md#calculate_order_dates) | **POST** /api/transferagency/orderdates | [EXPERIMENTAL] CalculateOrderDates: Calculate the key dates associated with transfer agency orders
646
647
  *TranslationApi* | [**translate_instrument_definitions**](docs/TranslationApi.md#translate_instrument_definitions) | **POST** /api/translation/instrumentdefinitions | [EXPERIMENTAL] TranslateInstrumentDefinitions: Translate instruments
647
648
  *TranslationApi* | [**translate_trade_tickets**](docs/TranslationApi.md#translate_trade_tickets) | **POST** /api/translation/tradetickets | [EXPERIMENTAL] TranslateTradeTickets: Translate trade ticket
648
649
  *WorkspaceApi* | [**create_item**](docs/WorkspaceApi.md#create_item) | **POST** /api/workspaces/{visibility}/{workspaceName}/items | [EXPERIMENTAL] CreateItem: Create a new item in a workspace.
@@ -771,6 +772,8 @@ Class | Method | HTTP request | Description
771
772
  - [BucketedCashFlowRequest](docs/BucketedCashFlowRequest.md)
772
773
  - [BucketedCashFlowResponse](docs/BucketedCashFlowResponse.md)
773
774
  - [BucketingSchedule](docs/BucketingSchedule.md)
775
+ - [CalculateOrderDatesRequest](docs/CalculateOrderDatesRequest.md)
776
+ - [CalculateOrderDatesResponse](docs/CalculateOrderDatesResponse.md)
774
777
  - [CalculationInfo](docs/CalculationInfo.md)
775
778
  - [Calendar](docs/Calendar.md)
776
779
  - [CalendarDate](docs/CalendarDate.md)
@@ -1743,6 +1746,7 @@ Class | Method | HTTP request | Description
1743
1746
  - [TransactionTypePropertyMapping](docs/TransactionTypePropertyMapping.md)
1744
1747
  - [TransactionTypeRequest](docs/TransactionTypeRequest.md)
1745
1748
  - [TransactionsReconciliationsResponse](docs/TransactionsReconciliationsResponse.md)
1749
+ - [TransferAgencyDates](docs/TransferAgencyDates.md)
1746
1750
  - [TransitionEvent](docs/TransitionEvent.md)
1747
1751
  - [TranslateEntitiesInlinedRequest](docs/TranslateEntitiesInlinedRequest.md)
1748
1752
  - [TranslateEntitiesRequest](docs/TranslateEntitiesRequest.md)
@@ -1,5 +1,5 @@
1
- lusid/__init__.py,sha256=p798jyuPeJVwvWUxgMm5YrdrIUGV-1Pa_KWtEhBaRTU,138124
2
- lusid/api/__init__.py,sha256=EQ3XKHP9QY2QeLD97_6ePDtx6g6tykdAzwWWHaW0dYo,6386
1
+ lusid/__init__.py,sha256=MS2nJ4n5r6HfgM4ia9nhH1EySkuAvcbTnZmJDAOye4A,138538
2
+ lusid/api/__init__.py,sha256=rDMCQ5xxj5K43PAE4v9joIu4G8XxM2QNi2Dj0vFQA8A,6471
3
3
  lusid/api/abor_api.py,sha256=oAvtx9mQGWa5ZQRKjhzkJJH110GiIqiPIefIYNoiT14,166017
4
4
  lusid/api/abor_configuration_api.py,sha256=3Y3KwOOJqPsCsl7rfP-ScCYrKvVsQSP5adbsAsJ9G1s,74238
5
5
  lusid/api/address_key_definition_api.py,sha256=m1nlEYBeggP_6XUW-i7ah9G0Vmz8hNuKuYtM6Z9VTzA,31350
@@ -72,11 +72,12 @@ lusid/api/timelines_api.py,sha256=1Gsn61jN6WZ_OaggLKjfvkX8f1gjgazQaAnEd8z2B-g,99
72
72
  lusid/api/transaction_configuration_api.py,sha256=OHs853-U1RWs2oApEO3raiMxixxiMQMcXu566qsm5v4,103968
73
73
  lusid/api/transaction_fees_api.py,sha256=r8Gl44-WYZebyJ_Uw2stLsf3-hPi1bK6Ij64Kx0L6A8,62698
74
74
  lusid/api/transaction_portfolios_api.py,sha256=zUeIr5l_Zeh4LL7uHIcR7pxiRteqb-EHzk9Gsprmp8o,608633
75
+ lusid/api/transfer_agency_api.py,sha256=m-o3srFi7ZcUcWlO_lpOJiYZJvDSt2JLy7QPcXQoPh4,9545
75
76
  lusid/api/translation_api.py,sha256=xpRuTfwQvYBlWe6r_L2EI_uVpXqHFnEOim-i-kVQ85E,20227
76
77
  lusid/api/workspace_api.py,sha256=0pCNi3ZCRbIo0NXKa85XE7vtq0WV5YOKcQKvFlcLUaY,120708
77
78
  lusid/api_client.py,sha256=ewMTmf9SRurY8pYnUx9jy24RdldPCOa4US38pnrVxjA,31140
78
79
  lusid/api_response.py,sha256=6-gnhty6lu8MMAERt3_kTVD7UxQgWFfcjgpcq6iN5IU,855
79
- lusid/configuration.py,sha256=yLEviPYX2KBNA9VoSPZ-Y5CbHAO97yMOwd0Uo6rlu5w,17972
80
+ lusid/configuration.py,sha256=7IAO4j__PgFN-pnfdzpHwhx4mmMUb1i_5O065TM9JjM,17972
80
81
  lusid/exceptions.py,sha256=HIQwgmQrszLlcVCLaqex8dO0laVuejUyOMz7U2ZWJ6s,5326
81
82
  lusid/extensions/__init__.py,sha256=dzDHEzpn-9smd2-_UMWQzeyX6Ha4jGf6fnqx7qxKxNI,630
82
83
  lusid/extensions/api_client.py,sha256=GzygWg_h603QK1QS2HvAijuE2R1TnvoF6-Yg0CeM3ug,30943
@@ -89,9 +90,9 @@ lusid/extensions/proxy_config.py,sha256=UUHQhd8ub-mKVIVbzDbmNQYLLemPX1b209ZcDrCF
89
90
  lusid/extensions/refreshing_token.py,sha256=i5z2-LS8WG_VKWuFX1IM_f4waAr-fAQOzusFv2Vc7NA,11032
90
91
  lusid/extensions/rest.py,sha256=dp-bD_LMR2zAL1tmC3-urhWKLomXx7r5iGN1VteMBVQ,16012
91
92
  lusid/extensions/retry.py,sha256=EhW9OKJmGHipxN3H7eROH5DiMlAnfBVl95NQrttcsdg,14834
92
- lusid/extensions/socket_keep_alive.py,sha256=NGlqsv-E25IjJOLGZhXZY6kUdx51nEF8qCQyVdzayRk,1653
93
+ lusid/extensions/socket_keep_alive.py,sha256=eX5ICvGfVzUCGIm80Q2RknfFZrBQAdnrcpY61M29V_k,1997
93
94
  lusid/extensions/tcp_keep_alive_connector.py,sha256=zaGtUsygRsxB1_4B3x39K3ILwztdhMLDv5bFZV7zmGE,3877
94
- lusid/models/__init__.py,sha256=-mNYBDBp1XpfQBPr8hGCwKmJpUbxlVfhUAhSNtbbNO0,130706
95
+ lusid/models/__init__.py,sha256=IrF70EJdizVcJ6nb8YKkkd2qVDTLUm6oOIjT19ttb1U,131035
95
96
  lusid/models/a2_b_breakdown.py,sha256=-FXgILrvtZXQDmvS0ARaJVGBq5LJ4AH-o3HjujFVmS4,3198
96
97
  lusid/models/a2_b_category.py,sha256=WunXUgx-dCnApPeLC8Qo5tVCX8Ywxkehib1vmNqNgNs,2957
97
98
  lusid/models/a2_b_data_record.py,sha256=qANTmV1_HUEo4l72-F8qzZjlQxOe0Onc9WPz7h-WWuY,9993
@@ -202,6 +203,8 @@ lusid/models/bucket.py,sha256=1yLnFMTFHkbtI91UnczpMLcbabVC3ekF9mgfQQ1V1TE,5872
202
203
  lusid/models/bucketed_cash_flow_request.py,sha256=kLK-PFcbIihoiBWYO-c_e6mlL9T_Em1yUoNXbz0Hi2I,10289
203
204
  lusid/models/bucketed_cash_flow_response.py,sha256=DFdxnP1H8ymR-mETx3d0FTYBYQGplkRU28tEOPonESk,5866
204
205
  lusid/models/bucketing_schedule.py,sha256=NPKNhLsz5_trw048YicdQNLaBpSF7ocoQD2imLYhpPU,2348
206
+ lusid/models/calculate_order_dates_request.py,sha256=5CK-QGK62M2KZ99uWchkEhJD3x_9pqvBm4n-QN0KyAQ,5363
207
+ lusid/models/calculate_order_dates_response.py,sha256=gB4WeWKOuzKi_V_720a3aj0lR12KNSLA5Vt2WeBlYfE,4861
205
208
  lusid/models/calculation_info.py,sha256=Blmyf09CMHtre8thwX0vCUQQ_0pW8rH5bxIwJwVyDYo,2686
206
209
  lusid/models/calendar.py,sha256=bkZbq9lEiO44pQaMEVAc58rliOlzGoioZ2-7uJHKP3g,4883
207
210
  lusid/models/calendar_date.py,sha256=JPCvskfo9UT8QbGQzsPM2LnnDJoKnC5eriOGqRZRLLI,3880
@@ -1174,6 +1177,7 @@ lusid/models/transaction_type_movement.py,sha256=nX7PXR7qLOsQNrEqL_XYq040uvVGIls
1174
1177
  lusid/models/transaction_type_property_mapping.py,sha256=32rbl8i3SsaAqT97yz3Vfoq71pvScKpgJ3XYipFemDg,4004
1175
1178
  lusid/models/transaction_type_request.py,sha256=99W8xIumF_fhZAeIzf88bFPohCV_4WlNTS1FuQtCXLQ,5353
1176
1179
  lusid/models/transactions_reconciliations_response.py,sha256=40rrkANUl0DMhuDH4q_mk4_83FSMY7Xc0rfLFJbx9ko,3315
1180
+ lusid/models/transfer_agency_dates.py,sha256=8YkoN2L04Cscn186nlgf1q1s3-q13nw5hyYRrl6mTOY,3590
1177
1181
  lusid/models/transition_event.py,sha256=iaLSatclVbeV0n0CvwauNAwixduIpGUkDhdrvHv_cZk,12617
1178
1182
  lusid/models/translate_entities_inlined_request.py,sha256=_PzemiVHZMV4guBnuMkX8RJjU7MK2bJfZVcHxwcBGzE,3766
1179
1183
  lusid/models/translate_entities_request.py,sha256=Nsp48fINKKIbgH1J-sjrTlRT4xFjNjZD1st-LYgvwZs,4022
@@ -1316,6 +1320,6 @@ lusid/models/year_month_day.py,sha256=gwSoxFwlD_wffKdddo1wfvAcLq3Cht3FHQidiaHzAA
1316
1320
  lusid/models/yield_curve_data.py,sha256=I1ZSWxHMgUxj9OQt6i9a4S91KB4_XtmrfFxpN_PV3YQ,9561
1317
1321
  lusid/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1318
1322
  lusid/rest.py,sha256=HQT__5LQEMu6_1sLKvYj-DI4FH1DJXBIPYfZCTTyrY4,13431
1319
- lusid_sdk-2.1.806.dist-info/METADATA,sha256=H6Zj0f0xhmJOhxYd2Hu6teak91CzzUVOtYs-lWvXDlc,220719
1320
- lusid_sdk-2.1.806.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
1321
- lusid_sdk-2.1.806.dist-info/RECORD,,
1323
+ lusid_sdk-2.1.808.dist-info/METADATA,sha256=hR2vxqZglXrNtFYpmnOm2P_XHlcVSZkFXJdkAfP4BfE,221153
1324
+ lusid_sdk-2.1.808.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
1325
+ lusid_sdk-2.1.808.dist-info/RECORD,,