lusid-sdk 2.1.261__py3-none-any.whl → 2.1.320__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 +38 -0
- lusid/api/compliance_api.py +191 -0
- lusid/api/funds_api.py +1 -1
- lusid/api/order_management_api.py +159 -0
- lusid/api/scopes_api.py +38 -9
- lusid/configuration.py +1 -1
- lusid/extensions/configuration_loaders.py +9 -1
- lusid/models/__init__.py +38 -0
- lusid/models/cancel_orders_response.py +153 -0
- lusid/models/cancelled_order_result.py +73 -0
- lusid/models/cash.py +93 -0
- lusid/models/compliance_run_configuration.py +73 -0
- lusid/models/component_filter.py +85 -0
- lusid/models/component_rule.py +13 -19
- lusid/models/contract_for_difference.py +4 -2
- lusid/models/fund.py +6 -1
- lusid/models/fund_amount.py +69 -0
- lusid/models/fund_configuration.py +16 -15
- lusid/models/fund_configuration_request.py +18 -12
- lusid/models/fund_pnl_breakdown.py +110 -0
- lusid/models/fund_previous_nav.py +69 -0
- lusid/models/fund_request.py +6 -1
- lusid/models/fund_valuation_point_data.py +152 -0
- lusid/models/futures_contract_details.py +9 -2
- lusid/models/lusid_instrument.py +3 -2
- lusid/models/market_data_key_rule.py +3 -3
- lusid/models/market_data_specific_rule.py +3 -3
- lusid/models/market_quote.py +3 -3
- lusid/models/model_selection.py +3 -3
- lusid/models/pre_trade_configuration.py +69 -0
- lusid/models/previous_fund_valuation_point_data.py +79 -0
- lusid/models/previous_nav.py +73 -0
- lusid/models/previous_share_class_breakdown.py +81 -0
- lusid/models/pricing_model.py +1 -0
- lusid/models/quote_series_id.py +4 -20
- lusid/models/quote_type.py +3 -0
- lusid/models/share_class_amount.py +73 -0
- lusid/models/share_class_breakdown.py +163 -0
- lusid/models/share_class_data.py +79 -0
- lusid/models/share_class_details.py +108 -0
- lusid/models/share_class_pnl_breakdown.py +110 -0
- lusid/models/staged_modification.py +8 -1
- lusid/models/template_field.py +3 -1
- lusid/models/transaction_configuration_movement_data.py +2 -2
- lusid/models/transaction_configuration_movement_data_request.py +1 -1
- lusid/models/transaction_field_map.py +1 -1
- lusid/models/transaction_type_movement.py +2 -2
- lusid/models/unitisation_data.py +73 -0
- lusid/models/valuation_point_data_response.py +30 -9
- {lusid_sdk-2.1.261.dist-info → lusid_sdk-2.1.320.dist-info}/METADATA +30 -215
- {lusid_sdk-2.1.261.dist-info → lusid_sdk-2.1.320.dist-info}/RECORD +52 -33
- {lusid_sdk-2.1.261.dist-info → lusid_sdk-2.1.320.dist-info}/WHEEL +0 -0
@@ -0,0 +1,152 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
"""
|
4
|
+
LUSID API
|
5
|
+
|
6
|
+
FINBOURNE Technology # noqa: E501
|
7
|
+
|
8
|
+
Contact: info@finbourne.com
|
9
|
+
Generated by OpenAPI Generator (https://openapi-generator.tech)
|
10
|
+
|
11
|
+
Do not edit the class manually.
|
12
|
+
"""
|
13
|
+
|
14
|
+
|
15
|
+
from __future__ import annotations
|
16
|
+
import pprint
|
17
|
+
import re # noqa: F401
|
18
|
+
import json
|
19
|
+
|
20
|
+
|
21
|
+
from typing import Any, Dict, Optional, Union
|
22
|
+
from pydantic.v1 import BaseModel, Field, StrictFloat, StrictInt
|
23
|
+
from lusid.models.fee_accrual import FeeAccrual
|
24
|
+
from lusid.models.fund_amount import FundAmount
|
25
|
+
from lusid.models.fund_pnl_breakdown import FundPnlBreakdown
|
26
|
+
from lusid.models.previous_fund_valuation_point_data import PreviousFundValuationPointData
|
27
|
+
from lusid.models.unitisation_data import UnitisationData
|
28
|
+
|
29
|
+
class FundValuationPointData(BaseModel):
|
30
|
+
"""
|
31
|
+
The Valuation Point Data for a Fund on a specified date. # noqa: E501
|
32
|
+
"""
|
33
|
+
back_out: Dict[str, FundAmount] = Field(..., alias="backOut", description="Bucket of detail for the Valuation Point where data points have been 'backed out'.")
|
34
|
+
dealing: Dict[str, FundAmount] = Field(..., description="Bucket of detail for any 'Dealing' that has occured inside the queried period.")
|
35
|
+
pn_l: FundPnlBreakdown = Field(..., alias="pnL")
|
36
|
+
gav: Union[StrictFloat, StrictInt] = Field(..., description="The Gross Asset Value of the Fund or Share Class at the Valuation Point. This is effectively a summation of all Trial balance entries linked to accounts of types 'Asset' and 'Liabilities'.")
|
37
|
+
fees: Dict[str, FeeAccrual] = Field(..., description="Bucket of detail for any 'Fees' that have been charged in the selected period.")
|
38
|
+
nav: Union[StrictFloat, StrictInt] = Field(..., description="The Net Asset Value of the Fund or Share Class at the Valuation Point. This represents the GAV with any fees applied in the period.")
|
39
|
+
unitisation: Optional[UnitisationData] = None
|
40
|
+
miscellaneous: Optional[Dict[str, FundAmount]] = Field(None, description="Not used directly by the LUSID engines but serves as a holding area for any custom derived data points that may be useful in, for example, fee calculations).")
|
41
|
+
previous_valuation_point_data: Optional[PreviousFundValuationPointData] = Field(None, alias="previousValuationPointData")
|
42
|
+
__properties = ["backOut", "dealing", "pnL", "gav", "fees", "nav", "unitisation", "miscellaneous", "previousValuationPointData"]
|
43
|
+
|
44
|
+
class Config:
|
45
|
+
"""Pydantic configuration"""
|
46
|
+
allow_population_by_field_name = True
|
47
|
+
validate_assignment = True
|
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) -> FundValuationPointData:
|
59
|
+
"""Create an instance of FundValuationPointData 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 back_out (dict)
|
69
|
+
_field_dict = {}
|
70
|
+
if self.back_out:
|
71
|
+
for _key in self.back_out:
|
72
|
+
if self.back_out[_key]:
|
73
|
+
_field_dict[_key] = self.back_out[_key].to_dict()
|
74
|
+
_dict['backOut'] = _field_dict
|
75
|
+
# override the default output from pydantic by calling `to_dict()` of each value in dealing (dict)
|
76
|
+
_field_dict = {}
|
77
|
+
if self.dealing:
|
78
|
+
for _key in self.dealing:
|
79
|
+
if self.dealing[_key]:
|
80
|
+
_field_dict[_key] = self.dealing[_key].to_dict()
|
81
|
+
_dict['dealing'] = _field_dict
|
82
|
+
# override the default output from pydantic by calling `to_dict()` of pn_l
|
83
|
+
if self.pn_l:
|
84
|
+
_dict['pnL'] = self.pn_l.to_dict()
|
85
|
+
# override the default output from pydantic by calling `to_dict()` of each value in fees (dict)
|
86
|
+
_field_dict = {}
|
87
|
+
if self.fees:
|
88
|
+
for _key in self.fees:
|
89
|
+
if self.fees[_key]:
|
90
|
+
_field_dict[_key] = self.fees[_key].to_dict()
|
91
|
+
_dict['fees'] = _field_dict
|
92
|
+
# override the default output from pydantic by calling `to_dict()` of unitisation
|
93
|
+
if self.unitisation:
|
94
|
+
_dict['unitisation'] = self.unitisation.to_dict()
|
95
|
+
# override the default output from pydantic by calling `to_dict()` of each value in miscellaneous (dict)
|
96
|
+
_field_dict = {}
|
97
|
+
if self.miscellaneous:
|
98
|
+
for _key in self.miscellaneous:
|
99
|
+
if self.miscellaneous[_key]:
|
100
|
+
_field_dict[_key] = self.miscellaneous[_key].to_dict()
|
101
|
+
_dict['miscellaneous'] = _field_dict
|
102
|
+
# override the default output from pydantic by calling `to_dict()` of previous_valuation_point_data
|
103
|
+
if self.previous_valuation_point_data:
|
104
|
+
_dict['previousValuationPointData'] = self.previous_valuation_point_data.to_dict()
|
105
|
+
# set to None if miscellaneous (nullable) is None
|
106
|
+
# and __fields_set__ contains the field
|
107
|
+
if self.miscellaneous is None and "miscellaneous" in self.__fields_set__:
|
108
|
+
_dict['miscellaneous'] = None
|
109
|
+
|
110
|
+
return _dict
|
111
|
+
|
112
|
+
@classmethod
|
113
|
+
def from_dict(cls, obj: dict) -> FundValuationPointData:
|
114
|
+
"""Create an instance of FundValuationPointData from a dict"""
|
115
|
+
if obj is None:
|
116
|
+
return None
|
117
|
+
|
118
|
+
if not isinstance(obj, dict):
|
119
|
+
return FundValuationPointData.parse_obj(obj)
|
120
|
+
|
121
|
+
_obj = FundValuationPointData.parse_obj({
|
122
|
+
"back_out": dict(
|
123
|
+
(_k, FundAmount.from_dict(_v))
|
124
|
+
for _k, _v in obj.get("backOut").items()
|
125
|
+
)
|
126
|
+
if obj.get("backOut") is not None
|
127
|
+
else None,
|
128
|
+
"dealing": dict(
|
129
|
+
(_k, FundAmount.from_dict(_v))
|
130
|
+
for _k, _v in obj.get("dealing").items()
|
131
|
+
)
|
132
|
+
if obj.get("dealing") is not None
|
133
|
+
else None,
|
134
|
+
"pn_l": FundPnlBreakdown.from_dict(obj.get("pnL")) if obj.get("pnL") is not None else None,
|
135
|
+
"gav": obj.get("gav"),
|
136
|
+
"fees": dict(
|
137
|
+
(_k, FeeAccrual.from_dict(_v))
|
138
|
+
for _k, _v in obj.get("fees").items()
|
139
|
+
)
|
140
|
+
if obj.get("fees") is not None
|
141
|
+
else None,
|
142
|
+
"nav": obj.get("nav"),
|
143
|
+
"unitisation": UnitisationData.from_dict(obj.get("unitisation")) if obj.get("unitisation") is not None else None,
|
144
|
+
"miscellaneous": dict(
|
145
|
+
(_k, FundAmount.from_dict(_v))
|
146
|
+
for _k, _v in obj.get("miscellaneous").items()
|
147
|
+
)
|
148
|
+
if obj.get("miscellaneous") is not None
|
149
|
+
else None,
|
150
|
+
"previous_valuation_point_data": PreviousFundValuationPointData.from_dict(obj.get("previousValuationPointData")) if obj.get("previousValuationPointData") is not None else None
|
151
|
+
})
|
152
|
+
return _obj
|
@@ -39,7 +39,8 @@ class FuturesContractDetails(BaseModel):
|
|
39
39
|
ticker_step: Optional[Union[StrictFloat, StrictInt]] = Field(None, alias="tickerStep", description="Minimal step size change in ticker.")
|
40
40
|
unit_value: Optional[Union[StrictFloat, StrictInt]] = Field(None, alias="unitValue", description="The value in the currency of a 1 unit change in the contract price.")
|
41
41
|
calendars: Optional[conlist(StrictStr)] = Field(None, description="Holiday calendars that apply to yield-to-price conversions (i.e. for BRL futures).")
|
42
|
-
|
42
|
+
delivery_type: Optional[StrictStr] = Field(None, alias="deliveryType", description="Delivery type to be used on settling the contract. Optional: Defaults to DeliveryType.Physical if not provided. Supported string (enumeration) values are: [Cash, Physical].")
|
43
|
+
__properties = ["domCcy", "fgnCcy", "assetClass", "contractCode", "contractMonth", "contractSize", "convention", "country", "description", "exchangeCode", "exchangeName", "tickerStep", "unitValue", "calendars", "deliveryType"]
|
43
44
|
|
44
45
|
class Config:
|
45
46
|
"""Pydantic configuration"""
|
@@ -100,6 +101,11 @@ class FuturesContractDetails(BaseModel):
|
|
100
101
|
if self.calendars is None and "calendars" in self.__fields_set__:
|
101
102
|
_dict['calendars'] = None
|
102
103
|
|
104
|
+
# set to None if delivery_type (nullable) is None
|
105
|
+
# and __fields_set__ contains the field
|
106
|
+
if self.delivery_type is None and "delivery_type" in self.__fields_set__:
|
107
|
+
_dict['deliveryType'] = None
|
108
|
+
|
103
109
|
return _dict
|
104
110
|
|
105
111
|
@classmethod
|
@@ -125,6 +131,7 @@ class FuturesContractDetails(BaseModel):
|
|
125
131
|
"exchange_name": obj.get("exchangeName"),
|
126
132
|
"ticker_step": obj.get("tickerStep"),
|
127
133
|
"unit_value": obj.get("unitValue"),
|
128
|
-
"calendars": obj.get("calendars")
|
134
|
+
"calendars": obj.get("calendars"),
|
135
|
+
"delivery_type": obj.get("deliveryType")
|
129
136
|
})
|
130
137
|
return _obj
|
lusid/models/lusid_instrument.py
CHANGED
@@ -49,6 +49,7 @@ class LusidInstrument(BaseModel):
|
|
49
49
|
'Basket': 'Basket',
|
50
50
|
'Bond': 'Bond',
|
51
51
|
'CapFloor': 'CapFloor',
|
52
|
+
'Cash': 'Cash',
|
52
53
|
'CashPerpetual': 'CashPerpetual',
|
53
54
|
'CdsIndex': 'CdsIndex',
|
54
55
|
'ComplexBond': 'ComplexBond',
|
@@ -101,7 +102,7 @@ class LusidInstrument(BaseModel):
|
|
101
102
|
return json.dumps(self.to_dict())
|
102
103
|
|
103
104
|
@classmethod
|
104
|
-
def from_json(cls, json_str: str) -> Union(Basket, Bond, CapFloor, CashPerpetual, CdsIndex, ComplexBond, ContractForDifference, CreditDefaultSwap, Equity, EquityOption, EquitySwap, ExchangeTradedOption, ExoticInstrument, FlexibleLoan, ForwardRateAgreement, FundShareClass, Future, FxForward, FxOption, FxSwap, InflationLeg, InflationLinkedBond, InflationSwap, InstrumentLeg, InterestRateSwap, InterestRateSwaption, ReferenceInstrument, Repo, SimpleCashFlowLoan, SimpleInstrument, TermDeposit, TotalReturnSwap):
|
105
|
+
def from_json(cls, json_str: str) -> Union(Basket, Bond, CapFloor, Cash, CashPerpetual, CdsIndex, ComplexBond, ContractForDifference, CreditDefaultSwap, Equity, EquityOption, EquitySwap, ExchangeTradedOption, ExoticInstrument, FlexibleLoan, ForwardRateAgreement, FundShareClass, Future, FxForward, FxOption, FxSwap, InflationLeg, InflationLinkedBond, InflationSwap, InstrumentLeg, InterestRateSwap, InterestRateSwaption, ReferenceInstrument, Repo, SimpleCashFlowLoan, SimpleInstrument, TermDeposit, TotalReturnSwap):
|
105
106
|
"""Create an instance of LusidInstrument from a JSON string"""
|
106
107
|
return cls.from_dict(json.loads(json_str))
|
107
108
|
|
@@ -114,7 +115,7 @@ class LusidInstrument(BaseModel):
|
|
114
115
|
return _dict
|
115
116
|
|
116
117
|
@classmethod
|
117
|
-
def from_dict(cls, obj: dict) -> Union(Basket, Bond, CapFloor, CashPerpetual, CdsIndex, ComplexBond, ContractForDifference, CreditDefaultSwap, Equity, EquityOption, EquitySwap, ExchangeTradedOption, ExoticInstrument, FlexibleLoan, ForwardRateAgreement, FundShareClass, Future, FxForward, FxOption, FxSwap, InflationLeg, InflationLinkedBond, InflationSwap, InstrumentLeg, InterestRateSwap, InterestRateSwaption, ReferenceInstrument, Repo, SimpleCashFlowLoan, SimpleInstrument, TermDeposit, TotalReturnSwap):
|
118
|
+
def from_dict(cls, obj: dict) -> Union(Basket, Bond, CapFloor, Cash, CashPerpetual, CdsIndex, ComplexBond, ContractForDifference, CreditDefaultSwap, Equity, EquityOption, EquitySwap, ExchangeTradedOption, ExoticInstrument, FlexibleLoan, ForwardRateAgreement, FundShareClass, Future, FxForward, FxOption, FxSwap, InflationLeg, InflationLinkedBond, InflationSwap, InstrumentLeg, InterestRateSwap, InterestRateSwaption, ReferenceInstrument, Repo, SimpleCashFlowLoan, SimpleInstrument, TermDeposit, TotalReturnSwap):
|
118
119
|
"""Create an instance of LusidInstrument from a dict"""
|
119
120
|
# look up the object type based on discriminator mapping
|
120
121
|
object_type = cls.get_discriminator_value(obj)
|
@@ -28,7 +28,7 @@ class MarketDataKeyRule(BaseModel):
|
|
28
28
|
key: constr(strict=True, max_length=128, min_length=0) = Field(..., description="A dot-separated string that defines a pattern for matching market data dependencies. The form of the string depends on the type of the dependency; see below for basic types and the Knowledge Base for further info. Quote lookup: \"Quote.{CodeType}.*\" e.g. \"Quote.RIC.*\" refers to 'any RIC quote' Fx rates: \"Fx.CurrencyPair.*\", which refers to 'any FX rate' Discounting curves: \"Rates.{Currency}.{Currency}OIS e.g. \"Rates.USD.USDOIS\" refers to the OIS USD discounting curve For non-fx and non-quote rules, trailing parameters can be replaced by the wildcard character '*'. e.g. \"Rates.*.*\" matches any dependency on a discounting curve.")
|
29
29
|
supplier: constr(strict=True, max_length=32, min_length=0) = Field(..., description="The market data supplier (where the data comes from)")
|
30
30
|
data_scope: constr(strict=True, max_length=256, min_length=1) = Field(..., alias="dataScope", description="The scope in which the data should be found when using this rule.")
|
31
|
-
quote_type: StrictStr = Field(..., alias="quoteType", description="The available values are: Price, Spread, Rate, LogNormalVol, NormalVol, ParSpread, IsdaSpread, Upfront, Index, Ratio, Delta, PoolFactor, InflationAssumption, DirtyPrice")
|
31
|
+
quote_type: StrictStr = Field(..., alias="quoteType", description="The available values are: Price, Spread, Rate, LogNormalVol, NormalVol, ParSpread, IsdaSpread, Upfront, Index, Ratio, Delta, PoolFactor, InflationAssumption, DirtyPrice, PrincipalWriteOff, InterestDeferred, InterestShortfall")
|
32
32
|
field: Optional[constr(strict=True, max_length=32, min_length=0)] = Field(None, description="The conceptual qualification for the field, typically 'bid', 'mid' (default), or 'ask', but can also be 'open', 'close', etc. When resolving quotes from LUSID's database, only quotes whose Field is identical to the Field specified here will be accepted as market data. When resolving data from an external supplier, the Field must be one of a defined set for the given supplier. Note: Applies to the retrieval of quotes only. Has no impact on the resolution of complex market data.")
|
33
33
|
quote_interval: Optional[constr(strict=True, max_length=16, min_length=0)] = Field(None, alias="quoteInterval", description="Shorthand for the time interval used to select market data. This must be a dot-separated string nominating a start and end date, for example '5D.0D' to look back 5 days from today (0 days ago). The syntax is <i>int</i><i>char</i>.<i>int</i><i>char</i>, where <i>char</i> is one of D(ay), Bd(business day), W(eek), M(onth) or Y(ear). Business days are calculated using the calendars specified on the Valuation Request. If no calendar is provided in the request, then it will default to only skipping weekends. For example, if the valuation date is a Monday, then a quote interval of \"1Bd\" would behave as \"3D\", looking back to the Friday. Data with effectiveAt on the weekend will still be found in that window.")
|
34
34
|
as_at: Optional[datetime] = Field(None, alias="asAt", description="The AsAt predicate specification.")
|
@@ -47,8 +47,8 @@ class MarketDataKeyRule(BaseModel):
|
|
47
47
|
@validator('quote_type')
|
48
48
|
def quote_type_validate_enum(cls, value):
|
49
49
|
"""Validates the enum"""
|
50
|
-
if value not in ('Price', 'Spread', 'Rate', 'LogNormalVol', 'NormalVol', 'ParSpread', 'IsdaSpread', 'Upfront', 'Index', 'Ratio', 'Delta', 'PoolFactor', 'InflationAssumption', 'DirtyPrice'):
|
51
|
-
raise ValueError("must be one of enum values ('Price', 'Spread', 'Rate', 'LogNormalVol', 'NormalVol', 'ParSpread', 'IsdaSpread', 'Upfront', 'Index', 'Ratio', 'Delta', 'PoolFactor', 'InflationAssumption', 'DirtyPrice')")
|
50
|
+
if value not in ('Price', 'Spread', 'Rate', 'LogNormalVol', 'NormalVol', 'ParSpread', 'IsdaSpread', 'Upfront', 'Index', 'Ratio', 'Delta', 'PoolFactor', 'InflationAssumption', 'DirtyPrice', 'PrincipalWriteOff', 'InterestDeferred', 'InterestShortfall'):
|
51
|
+
raise ValueError("must be one of enum values ('Price', 'Spread', 'Rate', 'LogNormalVol', 'NormalVol', 'ParSpread', 'IsdaSpread', 'Upfront', 'Index', 'Ratio', 'Delta', 'PoolFactor', 'InflationAssumption', 'DirtyPrice', 'PrincipalWriteOff', 'InterestDeferred', 'InterestShortfall')")
|
52
52
|
return value
|
53
53
|
|
54
54
|
class Config:
|
@@ -29,7 +29,7 @@ class MarketDataSpecificRule(BaseModel):
|
|
29
29
|
key: constr(strict=True, max_length=128, min_length=0) = Field(..., description="The market data key pattern which this is a rule for. A dot separated string (A.B.C.D.*)")
|
30
30
|
supplier: constr(strict=True, max_length=32, min_length=0) = Field(..., description="The market data supplier (where the data comes from)")
|
31
31
|
data_scope: constr(strict=True, max_length=256, min_length=1) = Field(..., alias="dataScope", description="The scope in which the data should be found when using this rule.")
|
32
|
-
quote_type: StrictStr = Field(..., alias="quoteType", description="The available values are: Price, Spread, Rate, LogNormalVol, NormalVol, ParSpread, IsdaSpread, Upfront, Index, Ratio, Delta, PoolFactor, InflationAssumption, DirtyPrice")
|
32
|
+
quote_type: StrictStr = Field(..., alias="quoteType", description="The available values are: Price, Spread, Rate, LogNormalVol, NormalVol, ParSpread, IsdaSpread, Upfront, Index, Ratio, Delta, PoolFactor, InflationAssumption, DirtyPrice, PrincipalWriteOff, InterestDeferred, InterestShortfall")
|
33
33
|
field: constr(strict=True, max_length=32, min_length=0) = Field(..., description="The conceptual qualification for the field, such as bid, mid, or ask. The field must be one of a defined set for the given supplier, in the same way as it is for the Finbourne.WebApi.Interface.Dto.Quotes.QuoteSeriesId")
|
34
34
|
quote_interval: Optional[constr(strict=True, max_length=16, min_length=0)] = Field(None, alias="quoteInterval", description="Shorthand for the time interval used to select market data. This must be a dot-separated string nominating a start and end date, for example '5D.0D' to look back 5 days from today (0 days ago). The syntax is <i>int</i><i>char</i>.<i>int</i><i>char</i>, where <i>char</i> is one of D(ay), W(eek), M(onth) or Y(ear).")
|
35
35
|
as_at: Optional[datetime] = Field(None, alias="asAt", description="The AsAt predicate specification.")
|
@@ -49,8 +49,8 @@ class MarketDataSpecificRule(BaseModel):
|
|
49
49
|
@validator('quote_type')
|
50
50
|
def quote_type_validate_enum(cls, value):
|
51
51
|
"""Validates the enum"""
|
52
|
-
if value not in ('Price', 'Spread', 'Rate', 'LogNormalVol', 'NormalVol', 'ParSpread', 'IsdaSpread', 'Upfront', 'Index', 'Ratio', 'Delta', 'PoolFactor', 'InflationAssumption', 'DirtyPrice'):
|
53
|
-
raise ValueError("must be one of enum values ('Price', 'Spread', 'Rate', 'LogNormalVol', 'NormalVol', 'ParSpread', 'IsdaSpread', 'Upfront', 'Index', 'Ratio', 'Delta', 'PoolFactor', 'InflationAssumption', 'DirtyPrice')")
|
52
|
+
if value not in ('Price', 'Spread', 'Rate', 'LogNormalVol', 'NormalVol', 'ParSpread', 'IsdaSpread', 'Upfront', 'Index', 'Ratio', 'Delta', 'PoolFactor', 'InflationAssumption', 'DirtyPrice', 'PrincipalWriteOff', 'InterestDeferred', 'InterestShortfall'):
|
53
|
+
raise ValueError("must be one of enum values ('Price', 'Spread', 'Rate', 'LogNormalVol', 'NormalVol', 'ParSpread', 'IsdaSpread', 'Upfront', 'Index', 'Ratio', 'Delta', 'PoolFactor', 'InflationAssumption', 'DirtyPrice', 'PrincipalWriteOff', 'InterestDeferred', 'InterestShortfall')")
|
54
54
|
return value
|
55
55
|
|
56
56
|
class Config:
|
lusid/models/market_quote.py
CHANGED
@@ -25,15 +25,15 @@ class MarketQuote(BaseModel):
|
|
25
25
|
"""
|
26
26
|
The market quote for an observable which will be used to calibrate the market data, including the format of the quote. e.g. a volatility quote for a specific strike and expiry the par rate of a swap This is a slimmed down version of a full Quote that can be stored in our QuoteStore to remove lineage, price source etc. for ease of use when creating complex market data. # noqa: E501
|
27
27
|
"""
|
28
|
-
quote_type: StrictStr = Field(..., alias="quoteType", description="The available values are: Price, Spread, Rate, LogNormalVol, NormalVol, ParSpread, IsdaSpread, Upfront, Index, Ratio, Delta, PoolFactor, InflationAssumption, DirtyPrice")
|
28
|
+
quote_type: StrictStr = Field(..., alias="quoteType", description="The available values are: Price, Spread, Rate, LogNormalVol, NormalVol, ParSpread, IsdaSpread, Upfront, Index, Ratio, Delta, PoolFactor, InflationAssumption, DirtyPrice, PrincipalWriteOff, InterestDeferred, InterestShortfall")
|
29
29
|
value: Union[StrictFloat, StrictInt] = Field(..., description="Numeric value of the quote")
|
30
30
|
__properties = ["quoteType", "value"]
|
31
31
|
|
32
32
|
@validator('quote_type')
|
33
33
|
def quote_type_validate_enum(cls, value):
|
34
34
|
"""Validates the enum"""
|
35
|
-
if value not in ('Price', 'Spread', 'Rate', 'LogNormalVol', 'NormalVol', 'ParSpread', 'IsdaSpread', 'Upfront', 'Index', 'Ratio', 'Delta', 'PoolFactor', 'InflationAssumption', 'DirtyPrice'):
|
36
|
-
raise ValueError("must be one of enum values ('Price', 'Spread', 'Rate', 'LogNormalVol', 'NormalVol', 'ParSpread', 'IsdaSpread', 'Upfront', 'Index', 'Ratio', 'Delta', 'PoolFactor', 'InflationAssumption', 'DirtyPrice')")
|
35
|
+
if value not in ('Price', 'Spread', 'Rate', 'LogNormalVol', 'NormalVol', 'ParSpread', 'IsdaSpread', 'Upfront', 'Index', 'Ratio', 'Delta', 'PoolFactor', 'InflationAssumption', 'DirtyPrice', 'PrincipalWriteOff', 'InterestDeferred', 'InterestShortfall'):
|
36
|
+
raise ValueError("must be one of enum values ('Price', 'Spread', 'Rate', 'LogNormalVol', 'NormalVol', 'ParSpread', 'IsdaSpread', 'Upfront', 'Index', 'Ratio', 'Delta', 'PoolFactor', 'InflationAssumption', 'DirtyPrice', 'PrincipalWriteOff', 'InterestDeferred', 'InterestShortfall')")
|
37
37
|
return value
|
38
38
|
|
39
39
|
class Config:
|
lusid/models/model_selection.py
CHANGED
@@ -26,7 +26,7 @@ class ModelSelection(BaseModel):
|
|
26
26
|
The combination of a library to use and a model in that library that defines which pricing code will evaluate instruments having a particular type/class. This allows us to control the model type and library for a given instrument. # noqa: E501
|
27
27
|
"""
|
28
28
|
library: StrictStr = Field(..., description="The available values are: Lusid, RefinitivQps, RefinitivTracsWeb, VolMaster, IsdaCds, YieldBook, LusidCalc")
|
29
|
-
model: StrictStr = Field(..., description="The available values are: SimpleStatic, Discounting, VendorDefault, BlackScholes, ConstantTimeValueOfMoney, Bachelier, ForwardWithPoints, ForwardWithPointsUndiscounted, ForwardSpecifiedRate, ForwardSpecifiedRateUndiscounted, IndexNav, IndexPrice, InlinedIndex, ForwardFromCurve, ForwardFromCurveUndiscounted, BlackScholesDigital, BjerksundStensland1993, BondLookupPricer, FlexibleLoanPricer")
|
29
|
+
model: StrictStr = Field(..., description="The available values are: SimpleStatic, Discounting, VendorDefault, BlackScholes, ConstantTimeValueOfMoney, Bachelier, ForwardWithPoints, ForwardWithPointsUndiscounted, ForwardSpecifiedRate, ForwardSpecifiedRateUndiscounted, IndexNav, IndexPrice, InlinedIndex, ForwardFromCurve, ForwardFromCurveUndiscounted, BlackScholesDigital, BjerksundStensland1993, BondLookupPricer, FlexibleLoanPricer, CdsLookupPricer")
|
30
30
|
__properties = ["library", "model"]
|
31
31
|
|
32
32
|
@validator('library')
|
@@ -39,8 +39,8 @@ class ModelSelection(BaseModel):
|
|
39
39
|
@validator('model')
|
40
40
|
def model_validate_enum(cls, value):
|
41
41
|
"""Validates the enum"""
|
42
|
-
if value not in ('SimpleStatic', 'Discounting', 'VendorDefault', 'BlackScholes', 'ConstantTimeValueOfMoney', 'Bachelier', 'ForwardWithPoints', 'ForwardWithPointsUndiscounted', 'ForwardSpecifiedRate', 'ForwardSpecifiedRateUndiscounted', 'IndexNav', 'IndexPrice', 'InlinedIndex', 'ForwardFromCurve', 'ForwardFromCurveUndiscounted', 'BlackScholesDigital', 'BjerksundStensland1993', 'BondLookupPricer', 'FlexibleLoanPricer'):
|
43
|
-
raise ValueError("must be one of enum values ('SimpleStatic', 'Discounting', 'VendorDefault', 'BlackScholes', 'ConstantTimeValueOfMoney', 'Bachelier', 'ForwardWithPoints', 'ForwardWithPointsUndiscounted', 'ForwardSpecifiedRate', 'ForwardSpecifiedRateUndiscounted', 'IndexNav', 'IndexPrice', 'InlinedIndex', 'ForwardFromCurve', 'ForwardFromCurveUndiscounted', 'BlackScholesDigital', 'BjerksundStensland1993', 'BondLookupPricer', 'FlexibleLoanPricer')")
|
42
|
+
if value not in ('SimpleStatic', 'Discounting', 'VendorDefault', 'BlackScholes', 'ConstantTimeValueOfMoney', 'Bachelier', 'ForwardWithPoints', 'ForwardWithPointsUndiscounted', 'ForwardSpecifiedRate', 'ForwardSpecifiedRateUndiscounted', 'IndexNav', 'IndexPrice', 'InlinedIndex', 'ForwardFromCurve', 'ForwardFromCurveUndiscounted', 'BlackScholesDigital', 'BjerksundStensland1993', 'BondLookupPricer', 'FlexibleLoanPricer', 'CdsLookupPricer'):
|
43
|
+
raise ValueError("must be one of enum values ('SimpleStatic', 'Discounting', 'VendorDefault', 'BlackScholes', 'ConstantTimeValueOfMoney', 'Bachelier', 'ForwardWithPoints', 'ForwardWithPointsUndiscounted', 'ForwardSpecifiedRate', 'ForwardSpecifiedRateUndiscounted', 'IndexNav', 'IndexPrice', 'InlinedIndex', 'ForwardFromCurve', 'ForwardFromCurveUndiscounted', 'BlackScholesDigital', 'BjerksundStensland1993', 'BondLookupPricer', 'FlexibleLoanPricer', 'CdsLookupPricer')")
|
44
44
|
return value
|
45
45
|
|
46
46
|
class Config:
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
"""
|
4
|
+
LUSID API
|
5
|
+
|
6
|
+
FINBOURNE Technology # noqa: E501
|
7
|
+
|
8
|
+
Contact: info@finbourne.com
|
9
|
+
Generated by OpenAPI Generator (https://openapi-generator.tech)
|
10
|
+
|
11
|
+
Do not edit the class manually.
|
12
|
+
"""
|
13
|
+
|
14
|
+
|
15
|
+
from __future__ import annotations
|
16
|
+
import pprint
|
17
|
+
import re # noqa: F401
|
18
|
+
import json
|
19
|
+
|
20
|
+
|
21
|
+
from typing import Any, Dict
|
22
|
+
from pydantic.v1 import BaseModel, Field, constr
|
23
|
+
|
24
|
+
class PreTradeConfiguration(BaseModel):
|
25
|
+
"""
|
26
|
+
Specification object for the pre trade configuration parameters of a compliance run # noqa: E501
|
27
|
+
"""
|
28
|
+
include_entity_types: constr(strict=True, min_length=1) = Field(..., alias="includeEntityTypes", description="Controls whether Orders and Allocations orders are included in the Portfolio valuation done for this compliance run. Valid values are: None (to account for Transactions only), Allocations (to include Allocations and Transactions) and OrdersAndAllocations (to include Orders, Allocations and Transactions).")
|
29
|
+
__properties = ["includeEntityTypes"]
|
30
|
+
|
31
|
+
class Config:
|
32
|
+
"""Pydantic configuration"""
|
33
|
+
allow_population_by_field_name = True
|
34
|
+
validate_assignment = True
|
35
|
+
|
36
|
+
def to_str(self) -> str:
|
37
|
+
"""Returns the string representation of the model using alias"""
|
38
|
+
return pprint.pformat(self.dict(by_alias=True))
|
39
|
+
|
40
|
+
def to_json(self) -> str:
|
41
|
+
"""Returns the JSON representation of the model using alias"""
|
42
|
+
return json.dumps(self.to_dict())
|
43
|
+
|
44
|
+
@classmethod
|
45
|
+
def from_json(cls, json_str: str) -> PreTradeConfiguration:
|
46
|
+
"""Create an instance of PreTradeConfiguration from a JSON string"""
|
47
|
+
return cls.from_dict(json.loads(json_str))
|
48
|
+
|
49
|
+
def to_dict(self):
|
50
|
+
"""Returns the dictionary representation of the model using alias"""
|
51
|
+
_dict = self.dict(by_alias=True,
|
52
|
+
exclude={
|
53
|
+
},
|
54
|
+
exclude_none=True)
|
55
|
+
return _dict
|
56
|
+
|
57
|
+
@classmethod
|
58
|
+
def from_dict(cls, obj: dict) -> PreTradeConfiguration:
|
59
|
+
"""Create an instance of PreTradeConfiguration from a dict"""
|
60
|
+
if obj is None:
|
61
|
+
return None
|
62
|
+
|
63
|
+
if not isinstance(obj, dict):
|
64
|
+
return PreTradeConfiguration.parse_obj(obj)
|
65
|
+
|
66
|
+
_obj = PreTradeConfiguration.parse_obj({
|
67
|
+
"include_entity_types": obj.get("includeEntityTypes")
|
68
|
+
})
|
69
|
+
return _obj
|
@@ -0,0 +1,79 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
"""
|
4
|
+
LUSID API
|
5
|
+
|
6
|
+
FINBOURNE Technology # noqa: E501
|
7
|
+
|
8
|
+
Contact: info@finbourne.com
|
9
|
+
Generated by OpenAPI Generator (https://openapi-generator.tech)
|
10
|
+
|
11
|
+
Do not edit the class manually.
|
12
|
+
"""
|
13
|
+
|
14
|
+
|
15
|
+
from __future__ import annotations
|
16
|
+
import pprint
|
17
|
+
import re # noqa: F401
|
18
|
+
import json
|
19
|
+
|
20
|
+
|
21
|
+
from typing import Any, Dict, Optional
|
22
|
+
from pydantic.v1 import BaseModel, Field
|
23
|
+
from lusid.models.fund_previous_nav import FundPreviousNAV
|
24
|
+
from lusid.models.unitisation_data import UnitisationData
|
25
|
+
|
26
|
+
class PreviousFundValuationPointData(BaseModel):
|
27
|
+
"""
|
28
|
+
The data for a Fund at the previous valuation point. # noqa: E501
|
29
|
+
"""
|
30
|
+
nav: FundPreviousNAV = Field(...)
|
31
|
+
unitisation: Optional[UnitisationData] = None
|
32
|
+
__properties = ["nav", "unitisation"]
|
33
|
+
|
34
|
+
class Config:
|
35
|
+
"""Pydantic configuration"""
|
36
|
+
allow_population_by_field_name = True
|
37
|
+
validate_assignment = True
|
38
|
+
|
39
|
+
def to_str(self) -> str:
|
40
|
+
"""Returns the string representation of the model using alias"""
|
41
|
+
return pprint.pformat(self.dict(by_alias=True))
|
42
|
+
|
43
|
+
def to_json(self) -> str:
|
44
|
+
"""Returns the JSON representation of the model using alias"""
|
45
|
+
return json.dumps(self.to_dict())
|
46
|
+
|
47
|
+
@classmethod
|
48
|
+
def from_json(cls, json_str: str) -> PreviousFundValuationPointData:
|
49
|
+
"""Create an instance of PreviousFundValuationPointData from a JSON string"""
|
50
|
+
return cls.from_dict(json.loads(json_str))
|
51
|
+
|
52
|
+
def to_dict(self):
|
53
|
+
"""Returns the dictionary representation of the model using alias"""
|
54
|
+
_dict = self.dict(by_alias=True,
|
55
|
+
exclude={
|
56
|
+
},
|
57
|
+
exclude_none=True)
|
58
|
+
# override the default output from pydantic by calling `to_dict()` of nav
|
59
|
+
if self.nav:
|
60
|
+
_dict['nav'] = self.nav.to_dict()
|
61
|
+
# override the default output from pydantic by calling `to_dict()` of unitisation
|
62
|
+
if self.unitisation:
|
63
|
+
_dict['unitisation'] = self.unitisation.to_dict()
|
64
|
+
return _dict
|
65
|
+
|
66
|
+
@classmethod
|
67
|
+
def from_dict(cls, obj: dict) -> PreviousFundValuationPointData:
|
68
|
+
"""Create an instance of PreviousFundValuationPointData from a dict"""
|
69
|
+
if obj is None:
|
70
|
+
return None
|
71
|
+
|
72
|
+
if not isinstance(obj, dict):
|
73
|
+
return PreviousFundValuationPointData.parse_obj(obj)
|
74
|
+
|
75
|
+
_obj = PreviousFundValuationPointData.parse_obj({
|
76
|
+
"nav": FundPreviousNAV.from_dict(obj.get("nav")) if obj.get("nav") is not None else None,
|
77
|
+
"unitisation": UnitisationData.from_dict(obj.get("unitisation")) if obj.get("unitisation") is not None else None
|
78
|
+
})
|
79
|
+
return _obj
|
@@ -0,0 +1,73 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
"""
|
4
|
+
LUSID API
|
5
|
+
|
6
|
+
FINBOURNE Technology # noqa: E501
|
7
|
+
|
8
|
+
Contact: info@finbourne.com
|
9
|
+
Generated by OpenAPI Generator (https://openapi-generator.tech)
|
10
|
+
|
11
|
+
Do not edit the class manually.
|
12
|
+
"""
|
13
|
+
|
14
|
+
|
15
|
+
from __future__ import annotations
|
16
|
+
import pprint
|
17
|
+
import re # noqa: F401
|
18
|
+
import json
|
19
|
+
|
20
|
+
|
21
|
+
from typing import Any, Dict, Optional
|
22
|
+
from pydantic.v1 import BaseModel
|
23
|
+
from lusid.models.multi_currency_amounts import MultiCurrencyAmounts
|
24
|
+
|
25
|
+
class PreviousNAV(BaseModel):
|
26
|
+
"""
|
27
|
+
PreviousNAV
|
28
|
+
"""
|
29
|
+
amount: Optional[MultiCurrencyAmounts] = None
|
30
|
+
__properties = ["amount"]
|
31
|
+
|
32
|
+
class Config:
|
33
|
+
"""Pydantic configuration"""
|
34
|
+
allow_population_by_field_name = True
|
35
|
+
validate_assignment = True
|
36
|
+
|
37
|
+
def to_str(self) -> str:
|
38
|
+
"""Returns the string representation of the model using alias"""
|
39
|
+
return pprint.pformat(self.dict(by_alias=True))
|
40
|
+
|
41
|
+
def to_json(self) -> str:
|
42
|
+
"""Returns the JSON representation of the model using alias"""
|
43
|
+
return json.dumps(self.to_dict())
|
44
|
+
|
45
|
+
@classmethod
|
46
|
+
def from_json(cls, json_str: str) -> PreviousNAV:
|
47
|
+
"""Create an instance of PreviousNAV from a JSON string"""
|
48
|
+
return cls.from_dict(json.loads(json_str))
|
49
|
+
|
50
|
+
def to_dict(self):
|
51
|
+
"""Returns the dictionary representation of the model using alias"""
|
52
|
+
_dict = self.dict(by_alias=True,
|
53
|
+
exclude={
|
54
|
+
},
|
55
|
+
exclude_none=True)
|
56
|
+
# override the default output from pydantic by calling `to_dict()` of amount
|
57
|
+
if self.amount:
|
58
|
+
_dict['amount'] = self.amount.to_dict()
|
59
|
+
return _dict
|
60
|
+
|
61
|
+
@classmethod
|
62
|
+
def from_dict(cls, obj: dict) -> PreviousNAV:
|
63
|
+
"""Create an instance of PreviousNAV from a dict"""
|
64
|
+
if obj is None:
|
65
|
+
return None
|
66
|
+
|
67
|
+
if not isinstance(obj, dict):
|
68
|
+
return PreviousNAV.parse_obj(obj)
|
69
|
+
|
70
|
+
_obj = PreviousNAV.parse_obj({
|
71
|
+
"amount": MultiCurrencyAmounts.from_dict(obj.get("amount")) if obj.get("amount") is not None else None
|
72
|
+
})
|
73
|
+
return _obj
|
@@ -0,0 +1,81 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
"""
|
4
|
+
LUSID API
|
5
|
+
|
6
|
+
FINBOURNE Technology # noqa: E501
|
7
|
+
|
8
|
+
Contact: info@finbourne.com
|
9
|
+
Generated by OpenAPI Generator (https://openapi-generator.tech)
|
10
|
+
|
11
|
+
Do not edit the class manually.
|
12
|
+
"""
|
13
|
+
|
14
|
+
|
15
|
+
from __future__ import annotations
|
16
|
+
import pprint
|
17
|
+
import re # noqa: F401
|
18
|
+
import json
|
19
|
+
|
20
|
+
|
21
|
+
from typing import Any, Dict, Optional, Union
|
22
|
+
from pydantic.v1 import BaseModel, Field, StrictFloat, StrictInt
|
23
|
+
from lusid.models.previous_nav import PreviousNAV
|
24
|
+
from lusid.models.unitisation_data import UnitisationData
|
25
|
+
|
26
|
+
class PreviousShareClassBreakdown(BaseModel):
|
27
|
+
"""
|
28
|
+
The data for a Share Class at the previous valuation point. # noqa: E501
|
29
|
+
"""
|
30
|
+
nav: PreviousNAV = Field(...)
|
31
|
+
unitisation: Optional[UnitisationData] = None
|
32
|
+
share_class_to_fund_fx_rate: Union[StrictFloat, StrictInt] = Field(..., alias="shareClassToFundFxRate", description="The fx rate from the Share Class currency to the fund currency at this valuation point.")
|
33
|
+
__properties = ["nav", "unitisation", "shareClassToFundFxRate"]
|
34
|
+
|
35
|
+
class Config:
|
36
|
+
"""Pydantic configuration"""
|
37
|
+
allow_population_by_field_name = True
|
38
|
+
validate_assignment = True
|
39
|
+
|
40
|
+
def to_str(self) -> str:
|
41
|
+
"""Returns the string representation of the model using alias"""
|
42
|
+
return pprint.pformat(self.dict(by_alias=True))
|
43
|
+
|
44
|
+
def to_json(self) -> str:
|
45
|
+
"""Returns the JSON representation of the model using alias"""
|
46
|
+
return json.dumps(self.to_dict())
|
47
|
+
|
48
|
+
@classmethod
|
49
|
+
def from_json(cls, json_str: str) -> PreviousShareClassBreakdown:
|
50
|
+
"""Create an instance of PreviousShareClassBreakdown from a JSON string"""
|
51
|
+
return cls.from_dict(json.loads(json_str))
|
52
|
+
|
53
|
+
def to_dict(self):
|
54
|
+
"""Returns the dictionary representation of the model using alias"""
|
55
|
+
_dict = self.dict(by_alias=True,
|
56
|
+
exclude={
|
57
|
+
},
|
58
|
+
exclude_none=True)
|
59
|
+
# override the default output from pydantic by calling `to_dict()` of nav
|
60
|
+
if self.nav:
|
61
|
+
_dict['nav'] = self.nav.to_dict()
|
62
|
+
# override the default output from pydantic by calling `to_dict()` of unitisation
|
63
|
+
if self.unitisation:
|
64
|
+
_dict['unitisation'] = self.unitisation.to_dict()
|
65
|
+
return _dict
|
66
|
+
|
67
|
+
@classmethod
|
68
|
+
def from_dict(cls, obj: dict) -> PreviousShareClassBreakdown:
|
69
|
+
"""Create an instance of PreviousShareClassBreakdown from a dict"""
|
70
|
+
if obj is None:
|
71
|
+
return None
|
72
|
+
|
73
|
+
if not isinstance(obj, dict):
|
74
|
+
return PreviousShareClassBreakdown.parse_obj(obj)
|
75
|
+
|
76
|
+
_obj = PreviousShareClassBreakdown.parse_obj({
|
77
|
+
"nav": PreviousNAV.from_dict(obj.get("nav")) if obj.get("nav") is not None else None,
|
78
|
+
"unitisation": UnitisationData.from_dict(obj.get("unitisation")) if obj.get("unitisation") is not None else None,
|
79
|
+
"share_class_to_fund_fx_rate": obj.get("shareClassToFundFxRate")
|
80
|
+
})
|
81
|
+
return _obj
|
lusid/models/pricing_model.py
CHANGED
@@ -48,6 +48,7 @@ class PricingModel(str, Enum):
|
|
48
48
|
BJERKSUNDSTENSLAND1993 = 'BjerksundStensland1993'
|
49
49
|
BONDLOOKUPPRICER = 'BondLookupPricer'
|
50
50
|
FLEXIBLELOANPRICER = 'FlexibleLoanPricer'
|
51
|
+
CDSLOOKUPPRICER = 'CdsLookupPricer'
|
51
52
|
|
52
53
|
@classmethod
|
53
54
|
def from_json(cls, json_str: str) -> PricingModel:
|