lusid-sdk 2.1.898__py3-none-any.whl → 2.1.899__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
@@ -536,6 +536,8 @@ from lusid.models.fund_properties import FundProperties
536
536
  from lusid.models.fund_request import FundRequest
537
537
  from lusid.models.fund_share_class import FundShareClass
538
538
  from lusid.models.fund_valuation_point_data import FundValuationPointData
539
+ from lusid.models.fund_valuation_request import FundValuationRequest
540
+ from lusid.models.fund_valuation_schedule import FundValuationSchedule
539
541
  from lusid.models.funding_leg import FundingLeg
540
542
  from lusid.models.funding_leg_options import FundingLegOptions
541
543
  from lusid.models.future import Future
@@ -1343,6 +1345,7 @@ from lusid.models.user import User
1343
1345
  from lusid.models.valuation_point_data_query_parameters import ValuationPointDataQueryParameters
1344
1346
  from lusid.models.valuation_point_data_request import ValuationPointDataRequest
1345
1347
  from lusid.models.valuation_point_data_response import ValuationPointDataResponse
1348
+ from lusid.models.valuation_point_fund_calendar_entry import ValuationPointFundCalendarEntry
1346
1349
  from lusid.models.valuation_point_overview import ValuationPointOverview
1347
1350
  from lusid.models.valuation_point_resource_list_of_accounted_transaction import ValuationPointResourceListOfAccountedTransaction
1348
1351
  from lusid.models.valuation_point_resource_list_of_fund_journal_entry_line import ValuationPointResourceListOfFundJournalEntryLine
@@ -1907,6 +1910,8 @@ __all__ = [
1907
1910
  "FundRequest",
1908
1911
  "FundShareClass",
1909
1912
  "FundValuationPointData",
1913
+ "FundValuationRequest",
1914
+ "FundValuationSchedule",
1910
1915
  "FundingLeg",
1911
1916
  "FundingLegOptions",
1912
1917
  "Future",
@@ -2714,6 +2719,7 @@ __all__ = [
2714
2719
  "ValuationPointDataQueryParameters",
2715
2720
  "ValuationPointDataRequest",
2716
2721
  "ValuationPointDataResponse",
2722
+ "ValuationPointFundCalendarEntry",
2717
2723
  "ValuationPointOverview",
2718
2724
  "ValuationPointResourceListOfAccountedTransaction",
2719
2725
  "ValuationPointResourceListOfFundJournalEntryLine",
lusid/api/funds_api.py CHANGED
@@ -36,6 +36,8 @@ from lusid.models.fund import Fund
36
36
  from lusid.models.fund_definition_request import FundDefinitionRequest
37
37
  from lusid.models.fund_properties import FundProperties
38
38
  from lusid.models.fund_request import FundRequest
39
+ from lusid.models.fund_valuation_request import FundValuationRequest
40
+ from lusid.models.list_aggregation_response import ListAggregationResponse
39
41
  from lusid.models.model_property import ModelProperty
40
42
  from lusid.models.operation import Operation
41
43
  from lusid.models.paged_resource_list_of_fee import PagedResourceListOfFee
@@ -2444,6 +2446,189 @@ class FundsApi:
2444
2446
  _request_auth=_params.get('_request_auth'))
2445
2447
 
2446
2448
 
2449
+ @overload
2450
+ async def get_valuation_for_fund(self, scope : Annotated[StrictStr, Field(..., description="The scope of the Fund")], code : Annotated[StrictStr, Field(..., description="The code of the Fund")], nav_type_code : Annotated[Optional[StrictStr], Field( description="When provided runs against the specified NAV Type, otherwise the Primary NAV Type will be used.")] = None, fund_valuation_request : Annotated[Optional[FundValuationRequest], Field(description="The request specifying the dates (or DiaryEntry) on which to calculate a set of valuation metrics")] = None, **kwargs) -> ListAggregationResponse: # noqa: E501
2451
+ ...
2452
+
2453
+ @overload
2454
+ def get_valuation_for_fund(self, scope : Annotated[StrictStr, Field(..., description="The scope of the Fund")], code : Annotated[StrictStr, Field(..., description="The code of the Fund")], nav_type_code : Annotated[Optional[StrictStr], Field( description="When provided runs against the specified NAV Type, otherwise the Primary NAV Type will be used.")] = None, fund_valuation_request : Annotated[Optional[FundValuationRequest], Field(description="The request specifying the dates (or DiaryEntry) on which to calculate a set of valuation metrics")] = None, async_req: Optional[bool]=True, **kwargs) -> ListAggregationResponse: # noqa: E501
2455
+ ...
2456
+
2457
+ @validate_arguments
2458
+ def get_valuation_for_fund(self, scope : Annotated[StrictStr, Field(..., description="The scope of the Fund")], code : Annotated[StrictStr, Field(..., description="The code of the Fund")], nav_type_code : Annotated[Optional[StrictStr], Field( description="When provided runs against the specified NAV Type, otherwise the Primary NAV Type will be used.")] = None, fund_valuation_request : Annotated[Optional[FundValuationRequest], Field(description="The request specifying the dates (or DiaryEntry) on which to calculate a set of valuation metrics")] = None, async_req: Optional[bool]=None, **kwargs) -> Union[ListAggregationResponse, Awaitable[ListAggregationResponse]]: # noqa: E501
2459
+ """[EXPERIMENTAL] GetValuationForFund: Perform valuation for a Fund # noqa: E501
2460
+
2461
+ Perform valuation on a specified Fund. # noqa: E501
2462
+ This method makes a synchronous HTTP request by default. To make an
2463
+ asynchronous HTTP request, please pass async_req=True
2464
+
2465
+ >>> thread = api.get_valuation_for_fund(scope, code, nav_type_code, fund_valuation_request, async_req=True)
2466
+ >>> result = thread.get()
2467
+
2468
+ :param scope: The scope of the Fund (required)
2469
+ :type scope: str
2470
+ :param code: The code of the Fund (required)
2471
+ :type code: str
2472
+ :param nav_type_code: When provided runs against the specified NAV Type, otherwise the Primary NAV Type will be used.
2473
+ :type nav_type_code: str
2474
+ :param fund_valuation_request: The request specifying the dates (or DiaryEntry) on which to calculate a set of valuation metrics
2475
+ :type fund_valuation_request: FundValuationRequest
2476
+ :param async_req: Whether to execute the request asynchronously.
2477
+ :type async_req: bool, optional
2478
+ :param _request_timeout: Timeout setting. Do not use - use the opts parameter instead
2479
+ :param opts: Configuration options for this request
2480
+ :type opts: ConfigurationOptions, optional
2481
+ :return: Returns the result object.
2482
+ If the method is called asynchronously,
2483
+ returns the request thread.
2484
+ :rtype: ListAggregationResponse
2485
+ """
2486
+ kwargs['_return_http_data_only'] = True
2487
+ if '_preload_content' in kwargs:
2488
+ message = "Error! Please call the get_valuation_for_fund_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501
2489
+ raise ValueError(message)
2490
+ if async_req is not None:
2491
+ kwargs['async_req'] = async_req
2492
+ return self.get_valuation_for_fund_with_http_info(scope, code, nav_type_code, fund_valuation_request, **kwargs) # noqa: E501
2493
+
2494
+ @validate_arguments
2495
+ def get_valuation_for_fund_with_http_info(self, scope : Annotated[StrictStr, Field(..., description="The scope of the Fund")], code : Annotated[StrictStr, Field(..., description="The code of the Fund")], nav_type_code : Annotated[Optional[StrictStr], Field( description="When provided runs against the specified NAV Type, otherwise the Primary NAV Type will be used.")] = None, fund_valuation_request : Annotated[Optional[FundValuationRequest], Field(description="The request specifying the dates (or DiaryEntry) on which to calculate a set of valuation metrics")] = None, **kwargs) -> ApiResponse: # noqa: E501
2496
+ """[EXPERIMENTAL] GetValuationForFund: Perform valuation for a Fund # noqa: E501
2497
+
2498
+ Perform valuation on a specified Fund. # noqa: E501
2499
+ This method makes a synchronous HTTP request by default. To make an
2500
+ asynchronous HTTP request, please pass async_req=True
2501
+
2502
+ >>> thread = api.get_valuation_for_fund_with_http_info(scope, code, nav_type_code, fund_valuation_request, async_req=True)
2503
+ >>> result = thread.get()
2504
+
2505
+ :param scope: The scope of the Fund (required)
2506
+ :type scope: str
2507
+ :param code: The code of the Fund (required)
2508
+ :type code: str
2509
+ :param nav_type_code: When provided runs against the specified NAV Type, otherwise the Primary NAV Type will be used.
2510
+ :type nav_type_code: str
2511
+ :param fund_valuation_request: The request specifying the dates (or DiaryEntry) on which to calculate a set of valuation metrics
2512
+ :type fund_valuation_request: FundValuationRequest
2513
+ :param async_req: Whether to execute the request asynchronously.
2514
+ :type async_req: bool, optional
2515
+ :param _preload_content: if False, the ApiResponse.data will
2516
+ be set to none and raw_data will store the
2517
+ HTTP response body without reading/decoding.
2518
+ Default is True.
2519
+ :type _preload_content: bool, optional
2520
+ :param _return_http_data_only: response data instead of ApiResponse
2521
+ object with status code, headers, etc
2522
+ :type _return_http_data_only: bool, optional
2523
+ :param _request_timeout: Timeout setting. Do not use - use the opts parameter instead
2524
+ :param opts: Configuration options for this request
2525
+ :type opts: ConfigurationOptions, optional
2526
+ :param _request_auth: set to override the auth_settings for an a single
2527
+ request; this effectively ignores the authentication
2528
+ in the spec for a single request.
2529
+ :type _request_auth: dict, optional
2530
+ :type _content_type: string, optional: force content-type for the request
2531
+ :return: Returns the result object.
2532
+ If the method is called asynchronously,
2533
+ returns the request thread.
2534
+ :rtype: tuple(ListAggregationResponse, status_code(int), headers(HTTPHeaderDict))
2535
+ """
2536
+
2537
+ _params = locals()
2538
+
2539
+ _all_params = [
2540
+ 'scope',
2541
+ 'code',
2542
+ 'nav_type_code',
2543
+ 'fund_valuation_request'
2544
+ ]
2545
+ _all_params.extend(
2546
+ [
2547
+ 'async_req',
2548
+ '_return_http_data_only',
2549
+ '_preload_content',
2550
+ '_request_timeout',
2551
+ '_request_auth',
2552
+ '_content_type',
2553
+ '_headers',
2554
+ 'opts'
2555
+ ]
2556
+ )
2557
+
2558
+ # validate the arguments
2559
+ for _key, _val in _params['kwargs'].items():
2560
+ if _key not in _all_params:
2561
+ raise ApiTypeError(
2562
+ "Got an unexpected keyword argument '%s'"
2563
+ " to method get_valuation_for_fund" % _key
2564
+ )
2565
+ _params[_key] = _val
2566
+ del _params['kwargs']
2567
+
2568
+ _collection_formats = {}
2569
+
2570
+ # process the path parameters
2571
+ _path_params = {}
2572
+ if _params['scope']:
2573
+ _path_params['scope'] = _params['scope']
2574
+
2575
+ if _params['code']:
2576
+ _path_params['code'] = _params['code']
2577
+
2578
+
2579
+ # process the query parameters
2580
+ _query_params = []
2581
+ if _params.get('nav_type_code') is not None: # noqa: E501
2582
+ _query_params.append(('navTypeCode', _params['nav_type_code']))
2583
+
2584
+ # process the header parameters
2585
+ _header_params = dict(_params.get('_headers', {}))
2586
+ # process the form parameters
2587
+ _form_params = []
2588
+ _files = {}
2589
+ # process the body parameter
2590
+ _body_params = None
2591
+ if _params['fund_valuation_request'] is not None:
2592
+ _body_params = _params['fund_valuation_request']
2593
+
2594
+ # set the HTTP header `Accept`
2595
+ _header_params['Accept'] = self.api_client.select_header_accept(
2596
+ ['text/plain', 'application/json', 'text/json']) # noqa: E501
2597
+
2598
+ # set the HTTP header `Content-Type`
2599
+ _content_types_list = _params.get('_content_type',
2600
+ self.api_client.select_header_content_type(
2601
+ ['application/json-patch+json', 'application/json', 'text/json', 'application/*+json']))
2602
+ if _content_types_list:
2603
+ _header_params['Content-Type'] = _content_types_list
2604
+
2605
+ # authentication setting
2606
+ _auth_settings = ['oauth2'] # noqa: E501
2607
+
2608
+ _response_types_map = {
2609
+ '200': "ListAggregationResponse",
2610
+ '400': "LusidValidationProblemDetails",
2611
+ }
2612
+
2613
+ return self.api_client.call_api(
2614
+ '/api/funds/{scope}/{code}/$valuation', 'POST',
2615
+ _path_params,
2616
+ _query_params,
2617
+ _header_params,
2618
+ body=_body_params,
2619
+ post_params=_form_params,
2620
+ files=_files,
2621
+ response_types_map=_response_types_map,
2622
+ auth_settings=_auth_settings,
2623
+ async_req=_params.get('async_req'),
2624
+ _return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501
2625
+ _preload_content=_params.get('_preload_content', True),
2626
+ _request_timeout=_params.get('_request_timeout'),
2627
+ opts=_params.get('opts'),
2628
+ collection_formats=_collection_formats,
2629
+ _request_auth=_params.get('_request_auth'))
2630
+
2631
+
2447
2632
  @overload
2448
2633
  async def get_valuation_point_data(self, scope : Annotated[StrictStr, Field(..., description="The scope of the Fund.")], code : Annotated[StrictStr, Field(..., description="The code of the Fund. Together with the scope this uniquely identifies the Fund.")], valuation_point_data_query_parameters : Annotated[ValuationPointDataQueryParameters, Field(..., description="The arguments to use for querying the Valuation Point data")], as_at : Annotated[Optional[datetime], Field(description="The asAt datetime at which to retrieve the Fund definition. Defaults to returning the latest version of the Fund definition if not specified.")] = None, nav_type_code : Annotated[Optional[StrictStr], Field( description="When provided runs against the specified NAV Type, otherwise the Primary NAV Type will be used.")] = None, **kwargs) -> ValuationPointDataResponse: # noqa: E501
2449
2634
  ...
@@ -4606,7 +4791,7 @@ class FundsApi:
4606
4791
  def patch_fund(self, scope : Annotated[StrictStr, Field(..., description="The scope of the Fund.")], code : Annotated[StrictStr, Field(..., description="The code of the Fund. Together with the scope this uniquely identifies the Fund.")], operation : Annotated[conlist(Operation), Field(..., description="The json patch document. For more information see: https://datatracker.ietf.org/doc/html/rfc6902.")], async_req: Optional[bool]=None, **kwargs) -> Union[Fund, Awaitable[Fund]]: # noqa: E501
4607
4792
  """[EXPERIMENTAL] PatchFund: Patch a Fund. # noqa: E501
4608
4793
 
4609
- Update fields on a Fund. The behaviour is defined by the JSON Patch specification. Currently supported fields are: DisplayName, Description, BaseCurrency, PortfolioIds, FundConfigurationId, ShareClassInstrumentScopes, ShareClassInstruments, Type, InceptionDate, DecimalPlaces, PrimaryNavType, AdditionalNavTypes, AborId, YearEndDate. # noqa: E501
4794
+ Update fields on a Fund. The behaviour is defined by the JSON Patch specification. Currently supported fields are: DisplayName, Description, PortfolioIds, FundConfigurationId, ShareClassInstruments, Type, InceptionDate, DecimalPlaces, PrimaryNavType, AdditionalNavTypes, AborId, YearEndDate. # noqa: E501
4610
4795
  This method makes a synchronous HTTP request by default. To make an
4611
4796
  asynchronous HTTP request, please pass async_req=True
4612
4797
 
@@ -4641,7 +4826,7 @@ class FundsApi:
4641
4826
  def patch_fund_with_http_info(self, scope : Annotated[StrictStr, Field(..., description="The scope of the Fund.")], code : Annotated[StrictStr, Field(..., description="The code of the Fund. Together with the scope this uniquely identifies the Fund.")], operation : Annotated[conlist(Operation), Field(..., description="The json patch document. For more information see: https://datatracker.ietf.org/doc/html/rfc6902.")], **kwargs) -> ApiResponse: # noqa: E501
4642
4827
  """[EXPERIMENTAL] PatchFund: Patch a Fund. # noqa: E501
4643
4828
 
4644
- Update fields on a Fund. The behaviour is defined by the JSON Patch specification. Currently supported fields are: DisplayName, Description, BaseCurrency, PortfolioIds, FundConfigurationId, ShareClassInstrumentScopes, ShareClassInstruments, Type, InceptionDate, DecimalPlaces, PrimaryNavType, AdditionalNavTypes, AborId, YearEndDate. # noqa: E501
4829
+ Update fields on a Fund. The behaviour is defined by the JSON Patch specification. Currently supported fields are: DisplayName, Description, PortfolioIds, FundConfigurationId, ShareClassInstruments, Type, InceptionDate, DecimalPlaces, PrimaryNavType, AdditionalNavTypes, AborId, YearEndDate. # noqa: E501
4645
4830
  This method makes a synchronous HTTP request by default. To make an
4646
4831
  asynchronous HTTP request, please pass async_req=True
4647
4832
 
@@ -101,22 +101,22 @@ class TransactionPortfoliosApi:
101
101
 
102
102
 
103
103
  @overload
104
- async def adjust_holdings(self, scope : Annotated[StrictStr, Field(..., description="The scope of the transaction portfolio.")], code : Annotated[StrictStr, Field(..., description="The code of the transaction portfolio. Together with the scope this uniquely identifies the transaction portfolio.")], effective_at : Annotated[StrictStr, Field(..., description="The effective datetime or cut label at which the holdings should be set to the provided targets.")], adjust_holding_request : Annotated[conlist(AdjustHoldingRequest), Field(..., description="The selected set of holdings to adjust to the provided targets for the transaction portfolio.")], reconciliation_methods : Annotated[Optional[conlist(StrictStr)], Field(description="Optional parameter for specifying a reconciliation method: e.g. FxForward.")] = None, **kwargs) -> AdjustHolding: # noqa: E501
104
+ async def adjust_holdings(self, scope : Annotated[StrictStr, Field(..., description="The scope of the transaction portfolio.")], code : Annotated[StrictStr, Field(..., description="The code of the transaction portfolio. Together with the scope this uniquely identifies the transaction portfolio.")], effective_at : Annotated[StrictStr, Field(..., description="The effective datetime or cut label at which the holdings should be set to the provided targets.")], adjust_holding_request : Annotated[conlist(AdjustHoldingRequest), Field(..., description="The selected set of holdings to adjust to the provided targets for the transaction portfolio.")], reconciliation_methods : Annotated[Optional[conlist(StrictStr)], Field(description="Optional parameter for specifying a reconciliation method: e.g. FxForward.")] = None, override_movement_name : Annotated[Optional[StrictStr], Field( description="Optional parameter to override movement name for the set holdings.")] = None, override_offset_movement_name : Annotated[Optional[StrictStr], Field( description="Optional parameter will create an additional offset movement for the set holdings with this new name and transaction type: CarryAsPnl")] = None, **kwargs) -> AdjustHolding: # noqa: E501
105
105
  ...
106
106
 
107
107
  @overload
108
- def adjust_holdings(self, scope : Annotated[StrictStr, Field(..., description="The scope of the transaction portfolio.")], code : Annotated[StrictStr, Field(..., description="The code of the transaction portfolio. Together with the scope this uniquely identifies the transaction portfolio.")], effective_at : Annotated[StrictStr, Field(..., description="The effective datetime or cut label at which the holdings should be set to the provided targets.")], adjust_holding_request : Annotated[conlist(AdjustHoldingRequest), Field(..., description="The selected set of holdings to adjust to the provided targets for the transaction portfolio.")], reconciliation_methods : Annotated[Optional[conlist(StrictStr)], Field(description="Optional parameter for specifying a reconciliation method: e.g. FxForward.")] = None, async_req: Optional[bool]=True, **kwargs) -> AdjustHolding: # noqa: E501
108
+ def adjust_holdings(self, scope : Annotated[StrictStr, Field(..., description="The scope of the transaction portfolio.")], code : Annotated[StrictStr, Field(..., description="The code of the transaction portfolio. Together with the scope this uniquely identifies the transaction portfolio.")], effective_at : Annotated[StrictStr, Field(..., description="The effective datetime or cut label at which the holdings should be set to the provided targets.")], adjust_holding_request : Annotated[conlist(AdjustHoldingRequest), Field(..., description="The selected set of holdings to adjust to the provided targets for the transaction portfolio.")], reconciliation_methods : Annotated[Optional[conlist(StrictStr)], Field(description="Optional parameter for specifying a reconciliation method: e.g. FxForward.")] = None, override_movement_name : Annotated[Optional[StrictStr], Field( description="Optional parameter to override movement name for the set holdings.")] = None, override_offset_movement_name : Annotated[Optional[StrictStr], Field( description="Optional parameter will create an additional offset movement for the set holdings with this new name and transaction type: CarryAsPnl")] = None, async_req: Optional[bool]=True, **kwargs) -> AdjustHolding: # noqa: E501
109
109
  ...
110
110
 
111
111
  @validate_arguments
112
- def adjust_holdings(self, scope : Annotated[StrictStr, Field(..., description="The scope of the transaction portfolio.")], code : Annotated[StrictStr, Field(..., description="The code of the transaction portfolio. Together with the scope this uniquely identifies the transaction portfolio.")], effective_at : Annotated[StrictStr, Field(..., description="The effective datetime or cut label at which the holdings should be set to the provided targets.")], adjust_holding_request : Annotated[conlist(AdjustHoldingRequest), Field(..., description="The selected set of holdings to adjust to the provided targets for the transaction portfolio.")], reconciliation_methods : Annotated[Optional[conlist(StrictStr)], Field(description="Optional parameter for specifying a reconciliation method: e.g. FxForward.")] = None, async_req: Optional[bool]=None, **kwargs) -> Union[AdjustHolding, Awaitable[AdjustHolding]]: # noqa: E501
112
+ def adjust_holdings(self, scope : Annotated[StrictStr, Field(..., description="The scope of the transaction portfolio.")], code : Annotated[StrictStr, Field(..., description="The code of the transaction portfolio. Together with the scope this uniquely identifies the transaction portfolio.")], effective_at : Annotated[StrictStr, Field(..., description="The effective datetime or cut label at which the holdings should be set to the provided targets.")], adjust_holding_request : Annotated[conlist(AdjustHoldingRequest), Field(..., description="The selected set of holdings to adjust to the provided targets for the transaction portfolio.")], reconciliation_methods : Annotated[Optional[conlist(StrictStr)], Field(description="Optional parameter for specifying a reconciliation method: e.g. FxForward.")] = None, override_movement_name : Annotated[Optional[StrictStr], Field( description="Optional parameter to override movement name for the set holdings.")] = None, override_offset_movement_name : Annotated[Optional[StrictStr], Field( description="Optional parameter will create an additional offset movement for the set holdings with this new name and transaction type: CarryAsPnl")] = None, async_req: Optional[bool]=None, **kwargs) -> Union[AdjustHolding, Awaitable[AdjustHolding]]: # noqa: E501
113
113
  """AdjustHoldings: Adjust holdings # noqa: E501
114
114
 
115
115
  Adjust one or more holdings of the specified transaction portfolio to the provided targets. LUSID will automatically construct adjustment transactions to ensure that the holdings which have been adjusted are always set to the provided targets for the specified effective datetime. Read more about the difference between adjusting and setting holdings here https://support.lusid.com/docs/how-do-i-manually-adjust-or-set-holdings. # noqa: E501
116
116
  This method makes a synchronous HTTP request by default. To make an
117
117
  asynchronous HTTP request, please pass async_req=True
118
118
 
119
- >>> thread = api.adjust_holdings(scope, code, effective_at, adjust_holding_request, reconciliation_methods, async_req=True)
119
+ >>> thread = api.adjust_holdings(scope, code, effective_at, adjust_holding_request, reconciliation_methods, override_movement_name, override_offset_movement_name, async_req=True)
120
120
  >>> result = thread.get()
121
121
 
122
122
  :param scope: The scope of the transaction portfolio. (required)
@@ -129,6 +129,10 @@ class TransactionPortfoliosApi:
129
129
  :type adjust_holding_request: List[AdjustHoldingRequest]
130
130
  :param reconciliation_methods: Optional parameter for specifying a reconciliation method: e.g. FxForward.
131
131
  :type reconciliation_methods: List[str]
132
+ :param override_movement_name: Optional parameter to override movement name for the set holdings.
133
+ :type override_movement_name: str
134
+ :param override_offset_movement_name: Optional parameter will create an additional offset movement for the set holdings with this new name and transaction type: CarryAsPnl
135
+ :type override_offset_movement_name: str
132
136
  :param async_req: Whether to execute the request asynchronously.
133
137
  :type async_req: bool, optional
134
138
  :param _request_timeout: Timeout setting. Do not use - use the opts parameter instead
@@ -145,17 +149,17 @@ class TransactionPortfoliosApi:
145
149
  raise ValueError(message)
146
150
  if async_req is not None:
147
151
  kwargs['async_req'] = async_req
148
- return self.adjust_holdings_with_http_info(scope, code, effective_at, adjust_holding_request, reconciliation_methods, **kwargs) # noqa: E501
152
+ return self.adjust_holdings_with_http_info(scope, code, effective_at, adjust_holding_request, reconciliation_methods, override_movement_name, override_offset_movement_name, **kwargs) # noqa: E501
149
153
 
150
154
  @validate_arguments
151
- def adjust_holdings_with_http_info(self, scope : Annotated[StrictStr, Field(..., description="The scope of the transaction portfolio.")], code : Annotated[StrictStr, Field(..., description="The code of the transaction portfolio. Together with the scope this uniquely identifies the transaction portfolio.")], effective_at : Annotated[StrictStr, Field(..., description="The effective datetime or cut label at which the holdings should be set to the provided targets.")], adjust_holding_request : Annotated[conlist(AdjustHoldingRequest), Field(..., description="The selected set of holdings to adjust to the provided targets for the transaction portfolio.")], reconciliation_methods : Annotated[Optional[conlist(StrictStr)], Field(description="Optional parameter for specifying a reconciliation method: e.g. FxForward.")] = None, **kwargs) -> ApiResponse: # noqa: E501
155
+ def adjust_holdings_with_http_info(self, scope : Annotated[StrictStr, Field(..., description="The scope of the transaction portfolio.")], code : Annotated[StrictStr, Field(..., description="The code of the transaction portfolio. Together with the scope this uniquely identifies the transaction portfolio.")], effective_at : Annotated[StrictStr, Field(..., description="The effective datetime or cut label at which the holdings should be set to the provided targets.")], adjust_holding_request : Annotated[conlist(AdjustHoldingRequest), Field(..., description="The selected set of holdings to adjust to the provided targets for the transaction portfolio.")], reconciliation_methods : Annotated[Optional[conlist(StrictStr)], Field(description="Optional parameter for specifying a reconciliation method: e.g. FxForward.")] = None, override_movement_name : Annotated[Optional[StrictStr], Field( description="Optional parameter to override movement name for the set holdings.")] = None, override_offset_movement_name : Annotated[Optional[StrictStr], Field( description="Optional parameter will create an additional offset movement for the set holdings with this new name and transaction type: CarryAsPnl")] = None, **kwargs) -> ApiResponse: # noqa: E501
152
156
  """AdjustHoldings: Adjust holdings # noqa: E501
153
157
 
154
158
  Adjust one or more holdings of the specified transaction portfolio to the provided targets. LUSID will automatically construct adjustment transactions to ensure that the holdings which have been adjusted are always set to the provided targets for the specified effective datetime. Read more about the difference between adjusting and setting holdings here https://support.lusid.com/docs/how-do-i-manually-adjust-or-set-holdings. # noqa: E501
155
159
  This method makes a synchronous HTTP request by default. To make an
156
160
  asynchronous HTTP request, please pass async_req=True
157
161
 
158
- >>> thread = api.adjust_holdings_with_http_info(scope, code, effective_at, adjust_holding_request, reconciliation_methods, async_req=True)
162
+ >>> thread = api.adjust_holdings_with_http_info(scope, code, effective_at, adjust_holding_request, reconciliation_methods, override_movement_name, override_offset_movement_name, async_req=True)
159
163
  >>> result = thread.get()
160
164
 
161
165
  :param scope: The scope of the transaction portfolio. (required)
@@ -168,6 +172,10 @@ class TransactionPortfoliosApi:
168
172
  :type adjust_holding_request: List[AdjustHoldingRequest]
169
173
  :param reconciliation_methods: Optional parameter for specifying a reconciliation method: e.g. FxForward.
170
174
  :type reconciliation_methods: List[str]
175
+ :param override_movement_name: Optional parameter to override movement name for the set holdings.
176
+ :type override_movement_name: str
177
+ :param override_offset_movement_name: Optional parameter will create an additional offset movement for the set holdings with this new name and transaction type: CarryAsPnl
178
+ :type override_offset_movement_name: str
171
179
  :param async_req: Whether to execute the request asynchronously.
172
180
  :type async_req: bool, optional
173
181
  :param _preload_content: if False, the ApiResponse.data will
@@ -199,7 +207,9 @@ class TransactionPortfoliosApi:
199
207
  'code',
200
208
  'effective_at',
201
209
  'adjust_holding_request',
202
- 'reconciliation_methods'
210
+ 'reconciliation_methods',
211
+ 'override_movement_name',
212
+ 'override_offset_movement_name'
203
213
  ]
204
214
  _all_params.extend(
205
215
  [
@@ -244,6 +254,12 @@ class TransactionPortfoliosApi:
244
254
  _query_params.append(('reconciliationMethods', _params['reconciliation_methods']))
245
255
  _collection_formats['reconciliationMethods'] = 'multi'
246
256
 
257
+ if _params.get('override_movement_name') is not None: # noqa: E501
258
+ _query_params.append(('overrideMovementName', _params['override_movement_name']))
259
+
260
+ if _params.get('override_offset_movement_name') is not None: # noqa: E501
261
+ _query_params.append(('overrideOffsetMovementName', _params['override_offset_movement_name']))
262
+
247
263
  # process the header parameters
248
264
  _header_params = dict(_params.get('_headers', {}))
249
265
  # process the form parameters
@@ -7313,22 +7329,22 @@ class TransactionPortfoliosApi:
7313
7329
 
7314
7330
 
7315
7331
  @overload
7316
- async def set_holdings(self, scope : Annotated[StrictStr, Field(..., description="The scope of the transaction portfolio.")], code : Annotated[StrictStr, Field(..., description="The code of the transaction portfolio. Together with the scope this uniquely identifies the transaction portfolio.")], effective_at : Annotated[StrictStr, Field(..., description="The effective datetime or cut label at which the holdings should be set to the provided targets.")], adjust_holding_request : Annotated[conlist(AdjustHoldingRequest), Field(..., description="The complete set of target holdings for the transaction portfolio.")], reconciliation_methods : Annotated[Optional[conlist(StrictStr)], Field(description="Optional parameter for specifying a reconciliation method: e.g. FxForward.")] = None, **kwargs) -> AdjustHolding: # noqa: E501
7332
+ async def set_holdings(self, scope : Annotated[StrictStr, Field(..., description="The scope of the transaction portfolio.")], code : Annotated[StrictStr, Field(..., description="The code of the transaction portfolio. Together with the scope this uniquely identifies the transaction portfolio.")], effective_at : Annotated[StrictStr, Field(..., description="The effective datetime or cut label at which the holdings should be set to the provided targets.")], adjust_holding_request : Annotated[conlist(AdjustHoldingRequest), Field(..., description="The complete set of target holdings for the transaction portfolio.")], reconciliation_methods : Annotated[Optional[conlist(StrictStr)], Field(description="Optional parameter for specifying a reconciliation method: e.g. FxForward.")] = None, override_movement_name : Annotated[Optional[StrictStr], Field( description="Optional parameter to override movement name for the set holdings.")] = None, override_offset_movement_name : Annotated[Optional[StrictStr], Field( description="Optional parameter will create an additional offset movement for the set holdings with this new name and transaction type: CarryAsPnl")] = None, **kwargs) -> AdjustHolding: # noqa: E501
7317
7333
  ...
7318
7334
 
7319
7335
  @overload
7320
- def set_holdings(self, scope : Annotated[StrictStr, Field(..., description="The scope of the transaction portfolio.")], code : Annotated[StrictStr, Field(..., description="The code of the transaction portfolio. Together with the scope this uniquely identifies the transaction portfolio.")], effective_at : Annotated[StrictStr, Field(..., description="The effective datetime or cut label at which the holdings should be set to the provided targets.")], adjust_holding_request : Annotated[conlist(AdjustHoldingRequest), Field(..., description="The complete set of target holdings for the transaction portfolio.")], reconciliation_methods : Annotated[Optional[conlist(StrictStr)], Field(description="Optional parameter for specifying a reconciliation method: e.g. FxForward.")] = None, async_req: Optional[bool]=True, **kwargs) -> AdjustHolding: # noqa: E501
7336
+ def set_holdings(self, scope : Annotated[StrictStr, Field(..., description="The scope of the transaction portfolio.")], code : Annotated[StrictStr, Field(..., description="The code of the transaction portfolio. Together with the scope this uniquely identifies the transaction portfolio.")], effective_at : Annotated[StrictStr, Field(..., description="The effective datetime or cut label at which the holdings should be set to the provided targets.")], adjust_holding_request : Annotated[conlist(AdjustHoldingRequest), Field(..., description="The complete set of target holdings for the transaction portfolio.")], reconciliation_methods : Annotated[Optional[conlist(StrictStr)], Field(description="Optional parameter for specifying a reconciliation method: e.g. FxForward.")] = None, override_movement_name : Annotated[Optional[StrictStr], Field( description="Optional parameter to override movement name for the set holdings.")] = None, override_offset_movement_name : Annotated[Optional[StrictStr], Field( description="Optional parameter will create an additional offset movement for the set holdings with this new name and transaction type: CarryAsPnl")] = None, async_req: Optional[bool]=True, **kwargs) -> AdjustHolding: # noqa: E501
7321
7337
  ...
7322
7338
 
7323
7339
  @validate_arguments
7324
- def set_holdings(self, scope : Annotated[StrictStr, Field(..., description="The scope of the transaction portfolio.")], code : Annotated[StrictStr, Field(..., description="The code of the transaction portfolio. Together with the scope this uniquely identifies the transaction portfolio.")], effective_at : Annotated[StrictStr, Field(..., description="The effective datetime or cut label at which the holdings should be set to the provided targets.")], adjust_holding_request : Annotated[conlist(AdjustHoldingRequest), Field(..., description="The complete set of target holdings for the transaction portfolio.")], reconciliation_methods : Annotated[Optional[conlist(StrictStr)], Field(description="Optional parameter for specifying a reconciliation method: e.g. FxForward.")] = None, async_req: Optional[bool]=None, **kwargs) -> Union[AdjustHolding, Awaitable[AdjustHolding]]: # noqa: E501
7340
+ def set_holdings(self, scope : Annotated[StrictStr, Field(..., description="The scope of the transaction portfolio.")], code : Annotated[StrictStr, Field(..., description="The code of the transaction portfolio. Together with the scope this uniquely identifies the transaction portfolio.")], effective_at : Annotated[StrictStr, Field(..., description="The effective datetime or cut label at which the holdings should be set to the provided targets.")], adjust_holding_request : Annotated[conlist(AdjustHoldingRequest), Field(..., description="The complete set of target holdings for the transaction portfolio.")], reconciliation_methods : Annotated[Optional[conlist(StrictStr)], Field(description="Optional parameter for specifying a reconciliation method: e.g. FxForward.")] = None, override_movement_name : Annotated[Optional[StrictStr], Field( description="Optional parameter to override movement name for the set holdings.")] = None, override_offset_movement_name : Annotated[Optional[StrictStr], Field( description="Optional parameter will create an additional offset movement for the set holdings with this new name and transaction type: CarryAsPnl")] = None, async_req: Optional[bool]=None, **kwargs) -> Union[AdjustHolding, Awaitable[AdjustHolding]]: # noqa: E501
7325
7341
  """SetHoldings: Set holdings # noqa: E501
7326
7342
 
7327
7343
  Set the holdings of the specified transaction portfolio to the provided targets. LUSID will automatically construct adjustment transactions to ensure that the entire set of holdings for the transaction portfolio are always set to the provided targets for the specified effective datetime. Read more about the difference between adjusting and setting holdings here https://support.lusid.com/docs/how-do-i-manually-adjust-or-set-holdings. # noqa: E501
7328
7344
  This method makes a synchronous HTTP request by default. To make an
7329
7345
  asynchronous HTTP request, please pass async_req=True
7330
7346
 
7331
- >>> thread = api.set_holdings(scope, code, effective_at, adjust_holding_request, reconciliation_methods, async_req=True)
7347
+ >>> thread = api.set_holdings(scope, code, effective_at, adjust_holding_request, reconciliation_methods, override_movement_name, override_offset_movement_name, async_req=True)
7332
7348
  >>> result = thread.get()
7333
7349
 
7334
7350
  :param scope: The scope of the transaction portfolio. (required)
@@ -7341,6 +7357,10 @@ class TransactionPortfoliosApi:
7341
7357
  :type adjust_holding_request: List[AdjustHoldingRequest]
7342
7358
  :param reconciliation_methods: Optional parameter for specifying a reconciliation method: e.g. FxForward.
7343
7359
  :type reconciliation_methods: List[str]
7360
+ :param override_movement_name: Optional parameter to override movement name for the set holdings.
7361
+ :type override_movement_name: str
7362
+ :param override_offset_movement_name: Optional parameter will create an additional offset movement for the set holdings with this new name and transaction type: CarryAsPnl
7363
+ :type override_offset_movement_name: str
7344
7364
  :param async_req: Whether to execute the request asynchronously.
7345
7365
  :type async_req: bool, optional
7346
7366
  :param _request_timeout: Timeout setting. Do not use - use the opts parameter instead
@@ -7357,17 +7377,17 @@ class TransactionPortfoliosApi:
7357
7377
  raise ValueError(message)
7358
7378
  if async_req is not None:
7359
7379
  kwargs['async_req'] = async_req
7360
- return self.set_holdings_with_http_info(scope, code, effective_at, adjust_holding_request, reconciliation_methods, **kwargs) # noqa: E501
7380
+ return self.set_holdings_with_http_info(scope, code, effective_at, adjust_holding_request, reconciliation_methods, override_movement_name, override_offset_movement_name, **kwargs) # noqa: E501
7361
7381
 
7362
7382
  @validate_arguments
7363
- def set_holdings_with_http_info(self, scope : Annotated[StrictStr, Field(..., description="The scope of the transaction portfolio.")], code : Annotated[StrictStr, Field(..., description="The code of the transaction portfolio. Together with the scope this uniquely identifies the transaction portfolio.")], effective_at : Annotated[StrictStr, Field(..., description="The effective datetime or cut label at which the holdings should be set to the provided targets.")], adjust_holding_request : Annotated[conlist(AdjustHoldingRequest), Field(..., description="The complete set of target holdings for the transaction portfolio.")], reconciliation_methods : Annotated[Optional[conlist(StrictStr)], Field(description="Optional parameter for specifying a reconciliation method: e.g. FxForward.")] = None, **kwargs) -> ApiResponse: # noqa: E501
7383
+ def set_holdings_with_http_info(self, scope : Annotated[StrictStr, Field(..., description="The scope of the transaction portfolio.")], code : Annotated[StrictStr, Field(..., description="The code of the transaction portfolio. Together with the scope this uniquely identifies the transaction portfolio.")], effective_at : Annotated[StrictStr, Field(..., description="The effective datetime or cut label at which the holdings should be set to the provided targets.")], adjust_holding_request : Annotated[conlist(AdjustHoldingRequest), Field(..., description="The complete set of target holdings for the transaction portfolio.")], reconciliation_methods : Annotated[Optional[conlist(StrictStr)], Field(description="Optional parameter for specifying a reconciliation method: e.g. FxForward.")] = None, override_movement_name : Annotated[Optional[StrictStr], Field( description="Optional parameter to override movement name for the set holdings.")] = None, override_offset_movement_name : Annotated[Optional[StrictStr], Field( description="Optional parameter will create an additional offset movement for the set holdings with this new name and transaction type: CarryAsPnl")] = None, **kwargs) -> ApiResponse: # noqa: E501
7364
7384
  """SetHoldings: Set holdings # noqa: E501
7365
7385
 
7366
7386
  Set the holdings of the specified transaction portfolio to the provided targets. LUSID will automatically construct adjustment transactions to ensure that the entire set of holdings for the transaction portfolio are always set to the provided targets for the specified effective datetime. Read more about the difference between adjusting and setting holdings here https://support.lusid.com/docs/how-do-i-manually-adjust-or-set-holdings. # noqa: E501
7367
7387
  This method makes a synchronous HTTP request by default. To make an
7368
7388
  asynchronous HTTP request, please pass async_req=True
7369
7389
 
7370
- >>> thread = api.set_holdings_with_http_info(scope, code, effective_at, adjust_holding_request, reconciliation_methods, async_req=True)
7390
+ >>> thread = api.set_holdings_with_http_info(scope, code, effective_at, adjust_holding_request, reconciliation_methods, override_movement_name, override_offset_movement_name, async_req=True)
7371
7391
  >>> result = thread.get()
7372
7392
 
7373
7393
  :param scope: The scope of the transaction portfolio. (required)
@@ -7380,6 +7400,10 @@ class TransactionPortfoliosApi:
7380
7400
  :type adjust_holding_request: List[AdjustHoldingRequest]
7381
7401
  :param reconciliation_methods: Optional parameter for specifying a reconciliation method: e.g. FxForward.
7382
7402
  :type reconciliation_methods: List[str]
7403
+ :param override_movement_name: Optional parameter to override movement name for the set holdings.
7404
+ :type override_movement_name: str
7405
+ :param override_offset_movement_name: Optional parameter will create an additional offset movement for the set holdings with this new name and transaction type: CarryAsPnl
7406
+ :type override_offset_movement_name: str
7383
7407
  :param async_req: Whether to execute the request asynchronously.
7384
7408
  :type async_req: bool, optional
7385
7409
  :param _preload_content: if False, the ApiResponse.data will
@@ -7411,7 +7435,9 @@ class TransactionPortfoliosApi:
7411
7435
  'code',
7412
7436
  'effective_at',
7413
7437
  'adjust_holding_request',
7414
- 'reconciliation_methods'
7438
+ 'reconciliation_methods',
7439
+ 'override_movement_name',
7440
+ 'override_offset_movement_name'
7415
7441
  ]
7416
7442
  _all_params.extend(
7417
7443
  [
@@ -7456,6 +7482,12 @@ class TransactionPortfoliosApi:
7456
7482
  _query_params.append(('reconciliationMethods', _params['reconciliation_methods']))
7457
7483
  _collection_formats['reconciliationMethods'] = 'multi'
7458
7484
 
7485
+ if _params.get('override_movement_name') is not None: # noqa: E501
7486
+ _query_params.append(('overrideMovementName', _params['override_movement_name']))
7487
+
7488
+ if _params.get('override_offset_movement_name') is not None: # noqa: E501
7489
+ _query_params.append(('overrideOffsetMovementName', _params['override_offset_movement_name']))
7490
+
7459
7491
  # process the header parameters
7460
7492
  _header_params = dict(_params.get('_headers', {}))
7461
7493
  # process the form parameters
lusid/configuration.py CHANGED
@@ -128,7 +128,7 @@ class Configuration:
128
128
  rate_limit_retries=DEFAULT_RATE_LIMIT_RETRIES) -> None:
129
129
  """Constructor
130
130
  """
131
- self._base_path = "https://www.lusid.com/api" if host is None else host
131
+ self._base_path = "https://fbn-prd.lusid.com/api" if host is None else host
132
132
  """Default Base url
133
133
  """
134
134
  self.server_index = 0 if server_index is None and host is None else server_index
@@ -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.8131\n"\
448
+ "Version of the API: 0.11.8138\n"\
449
449
  "SDK Package Version: {package_version}".\
450
450
  format(env=sys.platform, pyversion=sys.version, package_version=package_version)
451
451
 
@@ -456,7 +456,7 @@ class Configuration:
456
456
  """
457
457
  return [
458
458
  {
459
- 'url': "https://www.lusid.com/api",
459
+ 'url': "https://fbn-prd.lusid.com/api",
460
460
  'description': "No description provided",
461
461
  }
462
462
  ]
lusid/models/__init__.py CHANGED
@@ -445,6 +445,8 @@ from lusid.models.fund_properties import FundProperties
445
445
  from lusid.models.fund_request import FundRequest
446
446
  from lusid.models.fund_share_class import FundShareClass
447
447
  from lusid.models.fund_valuation_point_data import FundValuationPointData
448
+ from lusid.models.fund_valuation_request import FundValuationRequest
449
+ from lusid.models.fund_valuation_schedule import FundValuationSchedule
448
450
  from lusid.models.funding_leg import FundingLeg
449
451
  from lusid.models.funding_leg_options import FundingLegOptions
450
452
  from lusid.models.future import Future
@@ -1252,6 +1254,7 @@ from lusid.models.user import User
1252
1254
  from lusid.models.valuation_point_data_query_parameters import ValuationPointDataQueryParameters
1253
1255
  from lusid.models.valuation_point_data_request import ValuationPointDataRequest
1254
1256
  from lusid.models.valuation_point_data_response import ValuationPointDataResponse
1257
+ from lusid.models.valuation_point_fund_calendar_entry import ValuationPointFundCalendarEntry
1255
1258
  from lusid.models.valuation_point_overview import ValuationPointOverview
1256
1259
  from lusid.models.valuation_point_resource_list_of_accounted_transaction import ValuationPointResourceListOfAccountedTransaction
1257
1260
  from lusid.models.valuation_point_resource_list_of_fund_journal_entry_line import ValuationPointResourceListOfFundJournalEntryLine
@@ -1726,6 +1729,8 @@ __all__ = [
1726
1729
  "FundRequest",
1727
1730
  "FundShareClass",
1728
1731
  "FundValuationPointData",
1732
+ "FundValuationRequest",
1733
+ "FundValuationSchedule",
1729
1734
  "FundingLeg",
1730
1735
  "FundingLegOptions",
1731
1736
  "Future",
@@ -2533,6 +2538,7 @@ __all__ = [
2533
2538
  "ValuationPointDataQueryParameters",
2534
2539
  "ValuationPointDataRequest",
2535
2540
  "ValuationPointDataResponse",
2541
+ "ValuationPointFundCalendarEntry",
2536
2542
  "ValuationPointOverview",
2537
2543
  "ValuationPointResourceListOfAccountedTransaction",
2538
2544
  "ValuationPointResourceListOfFundJournalEntryLine",
@@ -17,25 +17,17 @@ import pprint
17
17
  import re # noqa: F401
18
18
  import json
19
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
- from lusid.models.version import Version
20
+
21
+ from typing import Any, Dict, Union
22
+ from pydantic.v1 import StrictStr, Field, BaseModel, Field, StrictStr, validator
23
+ import lusid.models
24
24
 
25
25
  class FundCalendarEntry(BaseModel):
26
26
  """
27
27
  FundCalendarEntry
28
28
  """
29
- code: StrictStr = Field(...,alias="code", description="The unique Code of the Calendar Entry. The Calendar Entry, together with the Fund Scope and Code, uniquely identifies a Fund Calendar Entry")
30
- display_name: StrictStr = Field(...,alias="displayName", description="The name of the Fund Calendar entry.")
31
- description: Optional[StrictStr] = Field(None,alias="description", description="A description for the Fund Calendar entry.")
32
- nav_type_code: StrictStr = Field(...,alias="navTypeCode", description="The navTypeCode of the Fund Calendar Entry. This is the code of the NAV type that this Calendar Entry is associated with.")
33
- effective_at: Optional[datetime] = Field(None, alias="effectiveAt", description="The effective at of the Calendar Entry.")
34
- as_at: Optional[datetime] = Field(None, alias="asAt", description="The asAt datetime for the Calendar Entry.")
35
29
  entry_type: StrictStr = Field(...,alias="entryType", description="The type of the Fund Calendar Entry. Only 'ValuationPoint' currently supported. The available values are: ValuationPointFundCalendarEntry")
36
- version: Version = Field(...)
37
- href: Optional[StrictStr] = Field(None,alias="href", description="The specific Uniform Resource Identifier (URI) for this resource at the requested asAt datetime.")
38
- __properties = ["code", "displayName", "description", "navTypeCode", "effectiveAt", "asAt", "entryType", "version", "href"]
30
+ __properties = ["entryType"]
39
31
 
40
32
  @validator('entry_type')
41
33
  def entry_type_validate_enum(cls, value):
@@ -101,6 +93,23 @@ class FundCalendarEntry(BaseModel):
101
93
  allow_population_by_field_name = True
102
94
  validate_assignment = True
103
95
 
96
+ # JSON field name that stores the object type
97
+ __discriminator_property_name = 'entryType'
98
+
99
+ # discriminator mappings
100
+ __discriminator_value_class_map = {
101
+ 'ValuationPointFundCalendarEntry': 'ValuationPointFundCalendarEntry'
102
+ }
103
+
104
+ @classmethod
105
+ def get_discriminator_value(cls, obj: dict) -> str:
106
+ """Returns the discriminator value (object type) of the data"""
107
+ discriminator_value = obj[cls.__discriminator_property_name]
108
+ if discriminator_value:
109
+ return cls.__discriminator_value_class_map.get(discriminator_value)
110
+ else:
111
+ return None
112
+
104
113
  def __str__(self):
105
114
  """For `print` and `pprint`"""
106
115
  return pprint.pformat(self.dict(by_alias=False))
@@ -118,7 +127,7 @@ class FundCalendarEntry(BaseModel):
118
127
  return json.dumps(self.to_dict())
119
128
 
120
129
  @classmethod
121
- def from_json(cls, json_str: str) -> FundCalendarEntry:
130
+ def from_json(cls, json_str: str) -> Union(ValuationPointFundCalendarEntry):
122
131
  """Create an instance of FundCalendarEntry from a JSON string"""
123
132
  return cls.from_dict(json.loads(json_str))
124
133
 
@@ -128,39 +137,17 @@ class FundCalendarEntry(BaseModel):
128
137
  exclude={
129
138
  },
130
139
  exclude_none=True)
131
- # override the default output from pydantic by calling `to_dict()` of version
132
- if self.version:
133
- _dict['version'] = self.version.to_dict()
134
- # set to None if description (nullable) is None
135
- # and __fields_set__ contains the field
136
- if self.description is None and "description" in self.__fields_set__:
137
- _dict['description'] = None
138
-
139
- # set to None if href (nullable) is None
140
- # and __fields_set__ contains the field
141
- if self.href is None and "href" in self.__fields_set__:
142
- _dict['href'] = None
143
-
144
140
  return _dict
145
141
 
146
142
  @classmethod
147
- def from_dict(cls, obj: dict) -> FundCalendarEntry:
143
+ def from_dict(cls, obj: dict) -> Union(ValuationPointFundCalendarEntry):
148
144
  """Create an instance of FundCalendarEntry from a dict"""
149
- if obj is None:
150
- return None
151
-
152
- if not isinstance(obj, dict):
153
- return FundCalendarEntry.parse_obj(obj)
154
-
155
- _obj = FundCalendarEntry.parse_obj({
156
- "code": obj.get("code"),
157
- "display_name": obj.get("displayName"),
158
- "description": obj.get("description"),
159
- "nav_type_code": obj.get("navTypeCode"),
160
- "effective_at": obj.get("effectiveAt"),
161
- "as_at": obj.get("asAt"),
162
- "entry_type": obj.get("entryType"),
163
- "version": Version.from_dict(obj.get("version")) if obj.get("version") is not None else None,
164
- "href": obj.get("href")
165
- })
166
- return _obj
145
+ # look up the object type based on discriminator mapping
146
+ object_type = cls.get_discriminator_value(obj)
147
+ if object_type:
148
+ klass = getattr(lusid.models, object_type)
149
+ return klass.from_dict(obj)
150
+ else:
151
+ raise ValueError("FundCalendarEntry failed to lookup discriminator value from " +
152
+ json.dumps(obj) + ". Discriminator property name: " + cls.__discriminator_property_name +
153
+ ", mapping: " + json.dumps(cls.__discriminator_value_class_map))
@@ -0,0 +1,157 @@
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, StrictBool, StrictStr, conlist
23
+ from lusid.models.aggregate_spec import AggregateSpec
24
+ from lusid.models.fund_valuation_schedule import FundValuationSchedule
25
+ from lusid.models.market_data_overrides import MarketDataOverrides
26
+ from lusid.models.order_by_spec import OrderBySpec
27
+ from lusid.models.order_flow_configuration import OrderFlowConfiguration
28
+ from lusid.models.property_filter import PropertyFilter
29
+ from lusid.models.resource_id import ResourceId
30
+
31
+ class FundValuationRequest(BaseModel):
32
+ """
33
+ Specification object for the parameters of a valuation # noqa: E501
34
+ """
35
+ as_at: Optional[datetime] = Field(None, alias="asAt", description="The asAt date to use.")
36
+ metrics: conlist(AggregateSpec) = Field(..., description="The set of specifications to calculate or retrieve during the valuation and present in the results. For example: AggregateSpec('Valuation/PV','Sum') for returning the PV (present value) of holdings AggregateSpec('Holding/default/Units','Sum') for returning the units of holidays AggregateSpec('Instrument/default/LusidInstrumentId','Value') for returning the Lusid Instrument identifier")
37
+ group_by: Optional[conlist(StrictStr)] = Field(None, alias="groupBy", description="The set of items by which to perform grouping. This primarily matters when one or more of the metric operators is a mapping that reduces set size, e.g. sum or proportion. The group-by statement determines the set of keys by which to break the results out.")
38
+ filters: Optional[conlist(PropertyFilter)] = Field(None, description="A set of filters to use to reduce the data found in a request. Equivalent to the 'where ...' part of a Sql select statement. For example, filter a set of values within a given range or matching a particular value.")
39
+ sort: Optional[conlist(OrderBySpec)] = Field(None, description="A (possibly empty/null) set of specifications for how to order the results.")
40
+ equip_with_subtotals: Optional[StrictBool] = Field(None, alias="equipWithSubtotals", description="Flag directing the Valuation call to populate the results with subtotals of aggregates.")
41
+ return_result_as_expanded_types: Optional[StrictBool] = Field(None, alias="returnResultAsExpandedTypes", description="Financially meaningful results can be presented as either simple flat types or more complex expanded types. For example, the present value (PV) of a holding could be represented either as a simple decimal (with currency implied) or as a decimal-currency pair. This flag allows either representation to be returned. In the PV example, the returned value would be the decimal-currency pair if this flag is true, or the decimal only if this flag is false.")
42
+ include_order_flow: Optional[OrderFlowConfiguration] = Field(None, alias="includeOrderFlow")
43
+ fund_valuation_schedule: FundValuationSchedule = Field(..., alias="fundValuationSchedule")
44
+ market_data_overrides: Optional[MarketDataOverrides] = Field(None, alias="marketDataOverrides")
45
+ corporate_action_source_id: Optional[ResourceId] = Field(None, alias="corporateActionSourceId")
46
+ __properties = ["asAt", "metrics", "groupBy", "filters", "sort", "equipWithSubtotals", "returnResultAsExpandedTypes", "includeOrderFlow", "fundValuationSchedule", "marketDataOverrides", "corporateActionSourceId"]
47
+
48
+ class Config:
49
+ """Pydantic configuration"""
50
+ allow_population_by_field_name = True
51
+ validate_assignment = True
52
+
53
+ def __str__(self):
54
+ """For `print` and `pprint`"""
55
+ return pprint.pformat(self.dict(by_alias=False))
56
+
57
+ def __repr__(self):
58
+ """For `print` and `pprint`"""
59
+ return self.to_str()
60
+
61
+ def to_str(self) -> str:
62
+ """Returns the string representation of the model using alias"""
63
+ return pprint.pformat(self.dict(by_alias=True))
64
+
65
+ def to_json(self) -> str:
66
+ """Returns the JSON representation of the model using alias"""
67
+ return json.dumps(self.to_dict())
68
+
69
+ @classmethod
70
+ def from_json(cls, json_str: str) -> FundValuationRequest:
71
+ """Create an instance of FundValuationRequest from a JSON string"""
72
+ return cls.from_dict(json.loads(json_str))
73
+
74
+ def to_dict(self):
75
+ """Returns the dictionary representation of the model using alias"""
76
+ _dict = self.dict(by_alias=True,
77
+ exclude={
78
+ },
79
+ exclude_none=True)
80
+ # override the default output from pydantic by calling `to_dict()` of each item in metrics (list)
81
+ _items = []
82
+ if self.metrics:
83
+ for _item in self.metrics:
84
+ if _item:
85
+ _items.append(_item.to_dict())
86
+ _dict['metrics'] = _items
87
+ # override the default output from pydantic by calling `to_dict()` of each item in filters (list)
88
+ _items = []
89
+ if self.filters:
90
+ for _item in self.filters:
91
+ if _item:
92
+ _items.append(_item.to_dict())
93
+ _dict['filters'] = _items
94
+ # override the default output from pydantic by calling `to_dict()` of each item in sort (list)
95
+ _items = []
96
+ if self.sort:
97
+ for _item in self.sort:
98
+ if _item:
99
+ _items.append(_item.to_dict())
100
+ _dict['sort'] = _items
101
+ # override the default output from pydantic by calling `to_dict()` of include_order_flow
102
+ if self.include_order_flow:
103
+ _dict['includeOrderFlow'] = self.include_order_flow.to_dict()
104
+ # override the default output from pydantic by calling `to_dict()` of fund_valuation_schedule
105
+ if self.fund_valuation_schedule:
106
+ _dict['fundValuationSchedule'] = self.fund_valuation_schedule.to_dict()
107
+ # override the default output from pydantic by calling `to_dict()` of market_data_overrides
108
+ if self.market_data_overrides:
109
+ _dict['marketDataOverrides'] = self.market_data_overrides.to_dict()
110
+ # override the default output from pydantic by calling `to_dict()` of corporate_action_source_id
111
+ if self.corporate_action_source_id:
112
+ _dict['corporateActionSourceId'] = self.corporate_action_source_id.to_dict()
113
+ # set to None if as_at (nullable) is None
114
+ # and __fields_set__ contains the field
115
+ if self.as_at is None and "as_at" in self.__fields_set__:
116
+ _dict['asAt'] = None
117
+
118
+ # set to None if group_by (nullable) is None
119
+ # and __fields_set__ contains the field
120
+ if self.group_by is None and "group_by" in self.__fields_set__:
121
+ _dict['groupBy'] = None
122
+
123
+ # set to None if filters (nullable) is None
124
+ # and __fields_set__ contains the field
125
+ if self.filters is None and "filters" in self.__fields_set__:
126
+ _dict['filters'] = None
127
+
128
+ # set to None if sort (nullable) is None
129
+ # and __fields_set__ contains the field
130
+ if self.sort is None and "sort" in self.__fields_set__:
131
+ _dict['sort'] = None
132
+
133
+ return _dict
134
+
135
+ @classmethod
136
+ def from_dict(cls, obj: dict) -> FundValuationRequest:
137
+ """Create an instance of FundValuationRequest from a dict"""
138
+ if obj is None:
139
+ return None
140
+
141
+ if not isinstance(obj, dict):
142
+ return FundValuationRequest.parse_obj(obj)
143
+
144
+ _obj = FundValuationRequest.parse_obj({
145
+ "as_at": obj.get("asAt"),
146
+ "metrics": [AggregateSpec.from_dict(_item) for _item in obj.get("metrics")] if obj.get("metrics") is not None else None,
147
+ "group_by": obj.get("groupBy"),
148
+ "filters": [PropertyFilter.from_dict(_item) for _item in obj.get("filters")] if obj.get("filters") is not None else None,
149
+ "sort": [OrderBySpec.from_dict(_item) for _item in obj.get("sort")] if obj.get("sort") is not None else None,
150
+ "equip_with_subtotals": obj.get("equipWithSubtotals"),
151
+ "return_result_as_expanded_types": obj.get("returnResultAsExpandedTypes"),
152
+ "include_order_flow": OrderFlowConfiguration.from_dict(obj.get("includeOrderFlow")) if obj.get("includeOrderFlow") is not None else None,
153
+ "fund_valuation_schedule": FundValuationSchedule.from_dict(obj.get("fundValuationSchedule")) if obj.get("fundValuationSchedule") is not None else None,
154
+ "market_data_overrides": MarketDataOverrides.from_dict(obj.get("marketDataOverrides")) if obj.get("marketDataOverrides") is not None else None,
155
+ "corporate_action_source_id": ResourceId.from_dict(obj.get("corporateActionSourceId")) if obj.get("corporateActionSourceId") is not None else None
156
+ })
157
+ return _obj
@@ -0,0 +1,131 @@
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, StrictStr, conlist, constr, validator
23
+
24
+ class FundValuationSchedule(BaseModel):
25
+ """
26
+ Specification object for the valuation schedule, how do we determine which days we wish to perform a valuation upon. # noqa: E501
27
+ """
28
+ effective_from: Optional[StrictStr] = Field(None,alias="effectiveFrom", description="If present, the EffectiveFrom and EffectiveAt dates are interpreted as a range of dates for which to perform a valuation. In this case, valuation is calculated for the portfolio(s) for each business day in the given range.")
29
+ effective_at: Optional[StrictStr] = Field(None,alias="effectiveAt", description="The market data time, i.e. the time to run the valuation request effective of.")
30
+ diary_entry: Optional[StrictStr] = Field(None,alias="diaryEntry", description="The diary entry to use for the valuation schedule. This is used to determine the date on which the valuation should be performed.")
31
+ tenor: Optional[StrictStr] = Field(None,alias="tenor", description="Tenor, e.g \"1D\", \"1M\" to be used in generating the date schedule when effectiveFrom and effectiveAt are both given and are not the same.")
32
+ roll_convention: Optional[StrictStr] = Field(None,alias="rollConvention", description="When Tenor is given and is \"1M\" or longer, this specifies the rule which should be used to generate the date schedule. For example, \"EndOfMonth\" to generate end of month dates, or \"1\" to specify the first day of the applicable month.")
33
+ holiday_calendars: Optional[conlist(StrictStr)] = Field(None, alias="holidayCalendars", description="The holiday calendar(s) that should be used in determining the date schedule. Holiday calendar(s) are supplied by their names, for example, \"CoppClark\". Note that when the calendars are not available (e.g. when the user has insufficient permissions), a recipe setting will be used to determine whether the whole batch should then fail or whether the calendar not being available should simply be ignored.")
34
+ valuation_date_times: Optional[conlist(StrictStr)] = Field(None, alias="valuationDateTimes", description="If given, this is the exact set of dates on which to perform a valuation. This will replace/override all other specified values if given.")
35
+ business_day_convention: Optional[StrictStr] = Field(None,alias="businessDayConvention", description="When Tenor is given and is not equal to \"1D\", there may be cases where \"date + tenor\" land on non-business days around month end. In that case, the BusinessDayConvention, e.g. modified following \"MF\" would be applied to determine the next GBD.")
36
+ __properties = ["effectiveFrom", "effectiveAt", "diaryEntry", "tenor", "rollConvention", "holidayCalendars", "valuationDateTimes", "businessDayConvention"]
37
+
38
+ class Config:
39
+ """Pydantic configuration"""
40
+ allow_population_by_field_name = True
41
+ validate_assignment = True
42
+
43
+ def __str__(self):
44
+ """For `print` and `pprint`"""
45
+ return pprint.pformat(self.dict(by_alias=False))
46
+
47
+ def __repr__(self):
48
+ """For `print` and `pprint`"""
49
+ return self.to_str()
50
+
51
+ def to_str(self) -> str:
52
+ """Returns the string representation of the model using alias"""
53
+ return pprint.pformat(self.dict(by_alias=True))
54
+
55
+ def to_json(self) -> str:
56
+ """Returns the JSON representation of the model using alias"""
57
+ return json.dumps(self.to_dict())
58
+
59
+ @classmethod
60
+ def from_json(cls, json_str: str) -> FundValuationSchedule:
61
+ """Create an instance of FundValuationSchedule from a JSON string"""
62
+ return cls.from_dict(json.loads(json_str))
63
+
64
+ def to_dict(self):
65
+ """Returns the dictionary representation of the model using alias"""
66
+ _dict = self.dict(by_alias=True,
67
+ exclude={
68
+ },
69
+ exclude_none=True)
70
+ # set to None if effective_from (nullable) is None
71
+ # and __fields_set__ contains the field
72
+ if self.effective_from is None and "effective_from" in self.__fields_set__:
73
+ _dict['effectiveFrom'] = None
74
+
75
+ # set to None if effective_at (nullable) is None
76
+ # and __fields_set__ contains the field
77
+ if self.effective_at is None and "effective_at" in self.__fields_set__:
78
+ _dict['effectiveAt'] = None
79
+
80
+ # set to None if diary_entry (nullable) is None
81
+ # and __fields_set__ contains the field
82
+ if self.diary_entry is None and "diary_entry" in self.__fields_set__:
83
+ _dict['diaryEntry'] = None
84
+
85
+ # set to None if tenor (nullable) is None
86
+ # and __fields_set__ contains the field
87
+ if self.tenor is None and "tenor" in self.__fields_set__:
88
+ _dict['tenor'] = None
89
+
90
+ # set to None if roll_convention (nullable) is None
91
+ # and __fields_set__ contains the field
92
+ if self.roll_convention is None and "roll_convention" in self.__fields_set__:
93
+ _dict['rollConvention'] = None
94
+
95
+ # set to None if holiday_calendars (nullable) is None
96
+ # and __fields_set__ contains the field
97
+ if self.holiday_calendars is None and "holiday_calendars" in self.__fields_set__:
98
+ _dict['holidayCalendars'] = None
99
+
100
+ # set to None if valuation_date_times (nullable) is None
101
+ # and __fields_set__ contains the field
102
+ if self.valuation_date_times is None and "valuation_date_times" in self.__fields_set__:
103
+ _dict['valuationDateTimes'] = None
104
+
105
+ # set to None if business_day_convention (nullable) is None
106
+ # and __fields_set__ contains the field
107
+ if self.business_day_convention is None and "business_day_convention" in self.__fields_set__:
108
+ _dict['businessDayConvention'] = None
109
+
110
+ return _dict
111
+
112
+ @classmethod
113
+ def from_dict(cls, obj: dict) -> FundValuationSchedule:
114
+ """Create an instance of FundValuationSchedule from a dict"""
115
+ if obj is None:
116
+ return None
117
+
118
+ if not isinstance(obj, dict):
119
+ return FundValuationSchedule.parse_obj(obj)
120
+
121
+ _obj = FundValuationSchedule.parse_obj({
122
+ "effective_from": obj.get("effectiveFrom"),
123
+ "effective_at": obj.get("effectiveAt"),
124
+ "diary_entry": obj.get("diaryEntry"),
125
+ "tenor": obj.get("tenor"),
126
+ "roll_convention": obj.get("rollConvention"),
127
+ "holiday_calendars": obj.get("holidayCalendars"),
128
+ "valuation_date_times": obj.get("valuationDateTimes"),
129
+ "business_day_convention": obj.get("businessDayConvention")
130
+ })
131
+ return _obj
@@ -0,0 +1,181 @@
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, Field, StrictStr, constr, validator
23
+ from lusid.models.fund_calendar_entry import FundCalendarEntry
24
+ from lusid.models.version import Version
25
+
26
+ class ValuationPointFundCalendarEntry(FundCalendarEntry):
27
+ """
28
+ ValuationPointFundCalendarEntry
29
+ """
30
+ code: StrictStr = Field(...,alias="code", description="The unique Code of the Calendar Entry. The Calendar Entry, together with the Fund Scope and Code, uniquely identifies a Fund Calendar Entry")
31
+ display_name: StrictStr = Field(...,alias="displayName", description="The name of the Fund Calendar entry.")
32
+ description: Optional[StrictStr] = Field(None,alias="description", description="A description for the Fund Calendar entry.")
33
+ nav_type_code: StrictStr = Field(...,alias="navTypeCode", description="The navTypeCode of the Fund Calendar Entry. This is the code of the NAV type that this Calendar Entry is associated with.")
34
+ effective_at: datetime = Field(..., alias="effectiveAt", description="The effective at of the Calendar Entry.")
35
+ as_at: datetime = Field(..., alias="asAt", description="The asAt datetime for the Calendar Entry.")
36
+ status: StrictStr = Field(...,alias="status", description="The status of the Fund Calendar Entry. Can be 'Estimate', 'Candidate' or 'Final'.")
37
+ version: Version = Field(...)
38
+ href: Optional[StrictStr] = Field(None,alias="href", description="The specific Uniform Resource Identifier (URI) for this resource at the requested asAt datetime.")
39
+ entry_type: StrictStr = Field(...,alias="entryType", description="The type of the Fund Calendar Entry. Only 'ValuationPoint' currently supported. The available values are: ValuationPointFundCalendarEntry")
40
+ additional_properties: Dict[str, Any] = {}
41
+ __properties = ["entryType", "code", "displayName", "description", "navTypeCode", "effectiveAt", "asAt", "status", "version", "href"]
42
+
43
+ @validator('entry_type')
44
+ def entry_type_validate_enum(cls, value):
45
+ """Validates the enum"""
46
+
47
+ # Finbourne have removed enum validation on all models, except for this use case:
48
+ # Workflow and notification application SDK use the property name 'type' as the discriminator on a number of classes.
49
+ # During instantiation, the value of 'type' is checked against the enum values,
50
+
51
+
52
+ # check it's a class that uses the 'type' property as a discriminator
53
+ # list of classes can be found by searching for 'actual_instance: Union[' in the generated code
54
+ if 'ValuationPointFundCalendarEntry' not in [
55
+ # For notification application classes
56
+ 'AmazonSqsNotificationType',
57
+ 'AmazonSqsNotificationTypeResponse',
58
+ 'AmazonSqsPrincipalAuthNotificationType',
59
+ 'AmazonSqsPrincipalAuthNotificationTypeResponse',
60
+ 'AzureServiceBusTypeResponse',
61
+ 'AzureServiceBusNotificationType',
62
+ 'EmailNotificationType',
63
+ 'EmailNotificationTypeResponse',
64
+ 'SmsNotificationType',
65
+ 'SmsNotificationTypeResponse',
66
+ 'WebhookNotificationType',
67
+ 'WebhookNotificationTypeResponse',
68
+
69
+ # For workflow application classes
70
+ 'CreateChildTasksAction',
71
+ 'RunWorkerAction',
72
+ 'TriggerParentTaskAction',
73
+ 'CreateChildTasksActionResponse',
74
+ 'RunWorkerActionResponse',
75
+ 'TriggerParentTaskActionResponse',
76
+ 'CreateNewTaskActivity',
77
+ 'UpdateMatchingTasksActivity',
78
+ 'CreateNewTaskActivityResponse',
79
+ 'UpdateMatchingTasksActivityResponse',
80
+ 'Fail',
81
+ 'GroupReconciliation',
82
+ 'HealthCheck',
83
+ 'LuminesceView',
84
+ 'SchedulerJob',
85
+ 'Sleep',
86
+ 'FailResponse',
87
+ 'GroupReconciliationResponse',
88
+ 'HealthCheckResponse',
89
+ 'LuminesceViewResponse',
90
+ 'SchedulerJobResponse',
91
+ 'SleepResponse']:
92
+ return value
93
+
94
+ # Only validate the 'type' property of the class
95
+ if "entry_type" != "type":
96
+ return value
97
+
98
+ if value not in ('ValuationPointFundCalendarEntry'):
99
+ raise ValueError("must be one of enum values ('ValuationPointFundCalendarEntry')")
100
+ return value
101
+
102
+ class Config:
103
+ """Pydantic configuration"""
104
+ allow_population_by_field_name = True
105
+ validate_assignment = True
106
+
107
+ def __str__(self):
108
+ """For `print` and `pprint`"""
109
+ return pprint.pformat(self.dict(by_alias=False))
110
+
111
+ def __repr__(self):
112
+ """For `print` and `pprint`"""
113
+ return self.to_str()
114
+
115
+ def to_str(self) -> str:
116
+ """Returns the string representation of the model using alias"""
117
+ return pprint.pformat(self.dict(by_alias=True))
118
+
119
+ def to_json(self) -> str:
120
+ """Returns the JSON representation of the model using alias"""
121
+ return json.dumps(self.to_dict())
122
+
123
+ @classmethod
124
+ def from_json(cls, json_str: str) -> ValuationPointFundCalendarEntry:
125
+ """Create an instance of ValuationPointFundCalendarEntry from a JSON string"""
126
+ return cls.from_dict(json.loads(json_str))
127
+
128
+ def to_dict(self):
129
+ """Returns the dictionary representation of the model using alias"""
130
+ _dict = self.dict(by_alias=True,
131
+ exclude={
132
+ "additional_properties"
133
+ },
134
+ exclude_none=True)
135
+ # override the default output from pydantic by calling `to_dict()` of version
136
+ if self.version:
137
+ _dict['version'] = self.version.to_dict()
138
+ # puts key-value pairs in additional_properties in the top level
139
+ if self.additional_properties is not None:
140
+ for _key, _value in self.additional_properties.items():
141
+ _dict[_key] = _value
142
+
143
+ # set to None if description (nullable) is None
144
+ # and __fields_set__ contains the field
145
+ if self.description is None and "description" in self.__fields_set__:
146
+ _dict['description'] = None
147
+
148
+ # set to None if href (nullable) is None
149
+ # and __fields_set__ contains the field
150
+ if self.href is None and "href" in self.__fields_set__:
151
+ _dict['href'] = None
152
+
153
+ return _dict
154
+
155
+ @classmethod
156
+ def from_dict(cls, obj: dict) -> ValuationPointFundCalendarEntry:
157
+ """Create an instance of ValuationPointFundCalendarEntry from a dict"""
158
+ if obj is None:
159
+ return None
160
+
161
+ if not isinstance(obj, dict):
162
+ return ValuationPointFundCalendarEntry.parse_obj(obj)
163
+
164
+ _obj = ValuationPointFundCalendarEntry.parse_obj({
165
+ "entry_type": obj.get("entryType"),
166
+ "code": obj.get("code"),
167
+ "display_name": obj.get("displayName"),
168
+ "description": obj.get("description"),
169
+ "nav_type_code": obj.get("navTypeCode"),
170
+ "effective_at": obj.get("effectiveAt"),
171
+ "as_at": obj.get("asAt"),
172
+ "status": obj.get("status"),
173
+ "version": Version.from_dict(obj.get("version")) if obj.get("version") is not None else None,
174
+ "href": obj.get("href")
175
+ })
176
+ # store additional fields in additional_properties
177
+ for _key in obj.keys():
178
+ if _key not in cls.__properties:
179
+ _obj.additional_properties[_key] = obj.get(_key)
180
+
181
+ return _obj
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: lusid-sdk
3
- Version: 2.1.898
3
+ Version: 2.1.899
4
4
  Summary: LUSID API
5
5
  Home-page: https://github.com/finbourne/lusid-sdk-python
6
6
  License: MIT
@@ -28,7 +28,7 @@ Description-Content-Type: text/markdown
28
28
  <a id="documentation-for-api-endpoints"></a>
29
29
  ## Documentation for API Endpoints
30
30
 
31
- All URIs are relative to *https://www.lusid.com/api*
31
+ All URIs are relative to *https://fbn-prd.lusid.com/api*
32
32
 
33
33
  Class | Method | HTTP request | Description
34
34
  ------------ | ------------- | ------------- | -------------
@@ -273,6 +273,7 @@ Class | Method | HTTP request | Description
273
273
  *FundsApi* | [**get_fund**](docs/FundsApi.md#get_fund) | **GET** /api/funds/{scope}/{code} | [EXPERIMENTAL] GetFund: Get a Fund.
274
274
  *FundsApi* | [**get_fund_properties**](docs/FundsApi.md#get_fund_properties) | **GET** /api/funds/{scope}/{code}/properties | [EXPERIMENTAL] GetFundProperties: Get Fund properties
275
275
  *FundsApi* | [**get_holdings_for_fund**](docs/FundsApi.md#get_holdings_for_fund) | **POST** /api/funds/{scope}/{code}/$holdings | [EXPERIMENTAL] GetHoldingsForFund: Get holdings for transaction portfolios in a Fund.
276
+ *FundsApi* | [**get_valuation_for_fund**](docs/FundsApi.md#get_valuation_for_fund) | **POST** /api/funds/{scope}/{code}/$valuation | [EXPERIMENTAL] GetValuationForFund: Perform valuation for a Fund
276
277
  *FundsApi* | [**get_valuation_point_data**](docs/FundsApi.md#get_valuation_point_data) | **POST** /api/funds/{scope}/{code}/valuationpoints/$query | [EXPERIMENTAL] GetValuationPointData: Get Valuation Point Data for a Fund.
277
278
  *FundsApi* | [**get_valuation_point_journal_entry_lines**](docs/FundsApi.md#get_valuation_point_journal_entry_lines) | **POST** /api/funds/{scope}/{code}/valuationpoints/journalentrylines/$query | [EXPERIMENTAL] GetValuationPointJournalEntryLines: Get the Journal Entry lines for the given Fund.
278
279
  *FundsApi* | [**get_valuation_point_pnl_summary**](docs/FundsApi.md#get_valuation_point_pnl_summary) | **POST** /api/funds/{scope}/{code}/valuationpoints/pnlsummary/$query | [EXPERIMENTAL] GetValuationPointPnlSummary: Get a PnL summary for the given Valuation Point in the Fund.
@@ -1116,6 +1117,8 @@ Class | Method | HTTP request | Description
1116
1117
  - [FundRequest](docs/FundRequest.md)
1117
1118
  - [FundShareClass](docs/FundShareClass.md)
1118
1119
  - [FundValuationPointData](docs/FundValuationPointData.md)
1120
+ - [FundValuationRequest](docs/FundValuationRequest.md)
1121
+ - [FundValuationSchedule](docs/FundValuationSchedule.md)
1119
1122
  - [FundingLeg](docs/FundingLeg.md)
1120
1123
  - [FundingLegOptions](docs/FundingLegOptions.md)
1121
1124
  - [Future](docs/Future.md)
@@ -1923,6 +1926,7 @@ Class | Method | HTTP request | Description
1923
1926
  - [ValuationPointDataQueryParameters](docs/ValuationPointDataQueryParameters.md)
1924
1927
  - [ValuationPointDataRequest](docs/ValuationPointDataRequest.md)
1925
1928
  - [ValuationPointDataResponse](docs/ValuationPointDataResponse.md)
1929
+ - [ValuationPointFundCalendarEntry](docs/ValuationPointFundCalendarEntry.md)
1926
1930
  - [ValuationPointOverview](docs/ValuationPointOverview.md)
1927
1931
  - [ValuationPointResourceListOfAccountedTransaction](docs/ValuationPointResourceListOfAccountedTransaction.md)
1928
1932
  - [ValuationPointResourceListOfFundJournalEntryLine](docs/ValuationPointResourceListOfFundJournalEntryLine.md)
@@ -1,4 +1,4 @@
1
- lusid/__init__.py,sha256=KxN8KWC7amErA_n9jmR3em7bnb5svtgbELLqXNXq5vw,145025
1
+ lusid/__init__.py,sha256=DFi3WLP7riZhL0P5akCmxuAFzjhILvneV4jtoaV2lCg,145354
2
2
  lusid/api/__init__.py,sha256=yCGwgeQBZ1RZovOUo7Jq24Txz4o6naRgnWAzQVGdHAk,6784
3
3
  lusid/api/abor_api.py,sha256=N7Wsh0395mXOvpJI8z0Nrx5OY4nCP5FN9RkbtdHaZbM,165987
4
4
  lusid/api/abor_configuration_api.py,sha256=xQ9HcXm02eDFhCdWUHjqFRWl1oQMxm2LNObJ9kcLauU,84216
@@ -29,7 +29,7 @@ lusid/api/entities_api.py,sha256=uImduqQPNkudngZn85Zwk35oAG-JEFvGEpADfJeMf_E,836
29
29
  lusid/api/executions_api.py,sha256=ZL8xmOxGpjIJtdU7lCdwcapILElWx7FGBDr8cjskCZs,44076
30
30
  lusid/api/fee_types_api.py,sha256=qRVfNS91XHBlD_CrewsPMsetIHB6M0mn3RWbD4LTuro,54620
31
31
  lusid/api/fund_configuration_api.py,sha256=18oHsK1ncAobjd8_uDHAI7UbWz4Vm5bPVubFmBdoERo,72665
32
- lusid/api/funds_api.py,sha256=kA17OvvZw199SqxOJK1HwgesvngfZqrf-oEYFnBMzMw,368797
32
+ lusid/api/funds_api.py,sha256=eRpH4RR-Qt8s8ymPyb1barY-mIMZ9LdG9OIQ377zjAg,379210
33
33
  lusid/api/group_reconciliations_api.py,sha256=U8qg3jGd39E1epaiOcjOV_uO8BUivbvKAdujvQ5fFNE,163197
34
34
  lusid/api/identifier_definitions_api.py,sha256=x79uhIBI0BJITjwmE7oPMWFOtox60FrrL9Dq4YH60MI,64305
35
35
  lusid/api/instrument_event_types_api.py,sha256=RHuGNd8Xf8x0vyvAUFwRNgEB_kpzQTtbsBwlFC3QJcs,79862
@@ -74,13 +74,13 @@ lusid/api/tax_rule_sets_api.py,sha256=ia8zjTdwlgLGC8KDWFBT21agOrfWgn1zC_ik75mNDJ
74
74
  lusid/api/timelines_api.py,sha256=uxSMdLi9dI6y8LSaezsLXEVedy9I7A-k22RAKY0Rw4k,109878
75
75
  lusid/api/transaction_configuration_api.py,sha256=OHs853-U1RWs2oApEO3raiMxixxiMQMcXu566qsm5v4,103968
76
76
  lusid/api/transaction_fees_api.py,sha256=r8Gl44-WYZebyJ_Uw2stLsf3-hPi1bK6Ij64Kx0L6A8,62698
77
- lusid/api/transaction_portfolios_api.py,sha256=LpY2J0zvjo5uomcE7n2dsJ3GquI2dgB9MuTvt2RKm8E,647596
77
+ lusid/api/transaction_portfolios_api.py,sha256=ei-JM4lSrP1SB5fFc8UhMHw_2HjF4Dhw7pedxjbBsQ8,653380
78
78
  lusid/api/transfer_agency_api.py,sha256=m-o3srFi7ZcUcWlO_lpOJiYZJvDSt2JLy7QPcXQoPh4,9545
79
79
  lusid/api/translation_api.py,sha256=xpRuTfwQvYBlWe6r_L2EI_uVpXqHFnEOim-i-kVQ85E,20227
80
80
  lusid/api/workspace_api.py,sha256=0pCNi3ZCRbIo0NXKa85XE7vtq0WV5YOKcQKvFlcLUaY,120708
81
81
  lusid/api_client.py,sha256=ewMTmf9SRurY8pYnUx9jy24RdldPCOa4US38pnrVxjA,31140
82
82
  lusid/api_response.py,sha256=6-gnhty6lu8MMAERt3_kTVD7UxQgWFfcjgpcq6iN5IU,855
83
- lusid/configuration.py,sha256=q2KDYFPHaDno61iXPPwZ1MuhJDmkYuUKGLRX-EYybg8,17972
83
+ lusid/configuration.py,sha256=mvhRaW37KrkYJqTdW9F85j1o5CgsR7S_HvxeYyxARVc,17980
84
84
  lusid/exceptions.py,sha256=HIQwgmQrszLlcVCLaqex8dO0laVuejUyOMz7U2ZWJ6s,5326
85
85
  lusid/extensions/__init__.py,sha256=dzDHEzpn-9smd2-_UMWQzeyX6Ha4jGf6fnqx7qxKxNI,630
86
86
  lusid/extensions/api_client.py,sha256=GzygWg_h603QK1QS2HvAijuE2R1TnvoF6-Yg0CeM3ug,30943
@@ -95,7 +95,7 @@ lusid/extensions/rest.py,sha256=dp-bD_LMR2zAL1tmC3-urhWKLomXx7r5iGN1VteMBVQ,1601
95
95
  lusid/extensions/retry.py,sha256=EhW9OKJmGHipxN3H7eROH5DiMlAnfBVl95NQrttcsdg,14834
96
96
  lusid/extensions/socket_keep_alive.py,sha256=eX5ICvGfVzUCGIm80Q2RknfFZrBQAdnrcpY61M29V_k,1997
97
97
  lusid/extensions/tcp_keep_alive_connector.py,sha256=zaGtUsygRsxB1_4B3x39K3ILwztdhMLDv5bFZV7zmGE,3877
98
- lusid/models/__init__.py,sha256=YAn7jyFz19hGeXMtDae1IZaZMH2mkBSXnpuaqcDvJNI,137209
98
+ lusid/models/__init__.py,sha256=p3uXRaR67aCwt60V0VT-u1t2rndi4M7yNTIdiYz_S8E,137538
99
99
  lusid/models/a2_b_breakdown.py,sha256=-FXgILrvtZXQDmvS0ARaJVGBq5LJ4AH-o3HjujFVmS4,3198
100
100
  lusid/models/a2_b_category.py,sha256=WunXUgx-dCnApPeLC8Qo5tVCX8Ywxkehib1vmNqNgNs,2957
101
101
  lusid/models/a2_b_data_record.py,sha256=qANTmV1_HUEo4l72-F8qzZjlQxOe0Onc9WPz7h-WWuY,9993
@@ -512,7 +512,7 @@ lusid/models/forward_rate_agreement.py,sha256=2huB94ltI8O9UKnFXc2oAYz278FMwPnaFE
512
512
  lusid/models/from_recipe.py,sha256=yUnu4kUNme_mFEHE9p-N6k-ETFBNxvmjsL8u2fKIHyk,2538
513
513
  lusid/models/fund.py,sha256=YWMy0wrbBPv5ExNwugI8EelMbRhHvx1ap-TgjtgnMms,11904
514
514
  lusid/models/fund_amount.py,sha256=xGFl9O7wn4GTCaMq_SxSkzzo_9Pw3scDIDm3835C64Q,2132
515
- lusid/models/fund_calendar_entry.py,sha256=OnpYCWCINcPUcDrlV9PRF8OXnX4xfMs3q1UdX8VHwrQ,7861
515
+ lusid/models/fund_calendar_entry.py,sha256=cZYxM3Ch9YFjL2WO8SXqHXgyN8cfmOL1SvW2kMwJ2TM,6555
516
516
  lusid/models/fund_calendar_entry_type.py,sha256=QiQwfo_IXs4gOWgS4LSOVyBiflltFK4Ot1BcBP2kBJo,718
517
517
  lusid/models/fund_configuration.py,sha256=wC-L5FcOKsoep9C4in6LFrDigHKdB_q2Zno2L-wpVqo,9606
518
518
  lusid/models/fund_configuration_properties.py,sha256=b-4hJF9TltJf3lmaSyDjeGUhjjhxbs_-kYZ0MpM8kgk,4620
@@ -527,6 +527,8 @@ lusid/models/fund_properties.py,sha256=SfdvEcARxxk_Akxr92DTGxM_0Ode9T6bBcExeG6K7
527
527
  lusid/models/fund_request.py,sha256=edLnVKYbKVHVeTCMCGueA61VRdmBgDJJ5bSnE8jnWAg,7819
528
528
  lusid/models/fund_share_class.py,sha256=53IOptw8PPRMiYxzYXNDTTzAi6dUI-3ldTeB3n3Ku_w,12230
529
529
  lusid/models/fund_valuation_point_data.py,sha256=e4AoY_OBFZLpMvpoChDzm7oD-KUluVPcfeWH1VdalxQ,7042
530
+ lusid/models/fund_valuation_request.py,sha256=4V-96DXA31XMa1jGVBrRFbwEzW9-bv3jBPHBouD-l6U,9094
531
+ lusid/models/fund_valuation_schedule.py,sha256=amj9iVWaTXe4YEIRoqRscEVDeETaUG13TdOB9o6K_lE,7040
530
532
  lusid/models/funding_leg.py,sha256=Q9aTj-1ks89zLPXIs1pxnWxsAujLk00Yd6aZS9j1ra0,11480
531
533
  lusid/models/funding_leg_options.py,sha256=_QadJmBSUzIrA_uJrbWvLwKC_E9QzBx3-veegNvEDHc,6806
532
534
  lusid/models/future.py,sha256=Ff5Cx4c8zGbb9qJXurFXEPpPRy2ryidlUhsvY39Q894,14539
@@ -1334,6 +1336,7 @@ lusid/models/user.py,sha256=w0Ci15MQI00_eoPaUiWnHnPDzDThuAAR3g4UvlsHt9I,2273
1334
1336
  lusid/models/valuation_point_data_query_parameters.py,sha256=y3zPKw_ygbFGIhxv9Og3xcw-zRU2IF1Koc2SoS4ci4s,2826
1335
1337
  lusid/models/valuation_point_data_request.py,sha256=3haNAxaWwqsd_AhNuf5rxuPC4ehEd9LZiH2TgOG59NI,2274
1336
1338
  lusid/models/valuation_point_data_response.py,sha256=b1YVkLsk4Jr1HgjYMwlqvovYgu6supAdRolHKwWwUo4,6759
1339
+ lusid/models/valuation_point_fund_calendar_entry.py,sha256=BX7hnOeLhcNV2ne8ajlozKbaGRsdHpCgnxojT8d6jNY,8756
1337
1340
  lusid/models/valuation_point_overview.py,sha256=91p71fdjFacSMBc3hpd0f9oWtvjuMfmG7Z3IsPhLPHg,5952
1338
1341
  lusid/models/valuation_point_resource_list_of_accounted_transaction.py,sha256=OGdk06THfLMFFXAe0Vq79KeI61dLJXz5UEEUF7rByR4,5541
1339
1342
  lusid/models/valuation_point_resource_list_of_fund_journal_entry_line.py,sha256=wtoGMyc07w7IUadLy_bGIUvexvoY_M50_XDai1Oj4Mg,5543
@@ -1376,6 +1379,6 @@ lusid/models/year_month_day.py,sha256=gwSoxFwlD_wffKdddo1wfvAcLq3Cht3FHQidiaHzAA
1376
1379
  lusid/models/yield_curve_data.py,sha256=I1ZSWxHMgUxj9OQt6i9a4S91KB4_XtmrfFxpN_PV3YQ,9561
1377
1380
  lusid/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1378
1381
  lusid/rest.py,sha256=HQT__5LQEMu6_1sLKvYj-DI4FH1DJXBIPYfZCTTyrY4,13431
1379
- lusid_sdk-2.1.898.dist-info/METADATA,sha256=5M6VoUQ-N5KbKr-y7UwnquJ0tgo8w3ym3-meEvLq8hA,230422
1380
- lusid_sdk-2.1.898.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
1381
- lusid_sdk-2.1.898.dist-info/RECORD,,
1382
+ lusid_sdk-2.1.899.dist-info/METADATA,sha256=JhAud8JksKeMfAB8yfTID9t11C2NZXgOLxTI_wgVg3o,230816
1383
+ lusid_sdk-2.1.899.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
1384
+ lusid_sdk-2.1.899.dist-info/RECORD,,