lusid-sdk 2.1.191__py3-none-any.whl → 2.1.242__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.

Potentially problematic release.


This version of lusid-sdk might be problematic. Click here for more details.

Files changed (112) hide show
  1. lusid/__init__.py +8 -0
  2. lusid/api/funds_api.py +8 -16
  3. lusid/api/persons_api.py +167 -0
  4. lusid/api/portfolios_api.py +2 -2
  5. lusid/configuration.py +1 -1
  6. lusid/extensions/__init__.py +1 -1
  7. lusid/models/__init__.py +8 -0
  8. lusid/models/address_key_compliance_parameter.py +3 -3
  9. lusid/models/address_key_list_compliance_parameter.py +3 -3
  10. lusid/models/basket.py +3 -3
  11. lusid/models/bond.py +3 -3
  12. lusid/models/bool_compliance_parameter.py +3 -3
  13. lusid/models/bool_list_compliance_parameter.py +3 -3
  14. lusid/models/branch_step.py +3 -3
  15. lusid/models/branch_step_request.py +10 -3
  16. lusid/models/cap_floor.py +3 -3
  17. lusid/models/cash_perpetual.py +3 -3
  18. lusid/models/cds_index.py +3 -3
  19. lusid/models/check_step.py +3 -3
  20. lusid/models/check_step_request.py +10 -3
  21. lusid/models/complex_bond.py +3 -3
  22. lusid/models/compliance_parameter.py +6 -5
  23. lusid/models/compliance_parameter_type.py +1 -0
  24. lusid/models/compliance_step.py +6 -5
  25. lusid/models/compliance_step_request.py +7 -6
  26. lusid/models/compliance_step_type.py +1 -0
  27. lusid/models/compliance_step_type_request.py +1 -0
  28. lusid/models/contract_for_difference.py +3 -3
  29. lusid/models/create_derived_property_definition_request.py +3 -3
  30. lusid/models/create_property_definition_request.py +3 -3
  31. lusid/models/credit_default_swap.py +3 -3
  32. lusid/models/currency_and_amount.py +2 -7
  33. lusid/models/date_time_compliance_parameter.py +3 -3
  34. lusid/models/date_time_list_compliance_parameter.py +3 -3
  35. lusid/models/decimal_compliance_parameter.py +3 -3
  36. lusid/models/decimal_list_compliance_parameter.py +3 -3
  37. lusid/models/equity.py +3 -3
  38. lusid/models/equity_option.py +3 -3
  39. lusid/models/equity_swap.py +3 -3
  40. lusid/models/exchange_traded_option.py +3 -3
  41. lusid/models/exotic_instrument.py +3 -3
  42. lusid/models/fee.py +1 -15
  43. lusid/models/fee_accrual.py +32 -14
  44. lusid/models/fee_request.py +10 -1
  45. lusid/models/filter_predicate_compliance_parameter.py +3 -3
  46. lusid/models/filter_step.py +3 -3
  47. lusid/models/filter_step_request.py +10 -3
  48. lusid/models/fixed_leg.py +3 -3
  49. lusid/models/flexible_loan.py +3 -3
  50. lusid/models/floating_leg.py +3 -3
  51. lusid/models/forward_rate_agreement.py +3 -3
  52. lusid/models/fund_share_class.py +3 -3
  53. lusid/models/funding_leg.py +3 -3
  54. lusid/models/future.py +3 -3
  55. lusid/models/fx_forward.py +3 -3
  56. lusid/models/fx_option.py +3 -3
  57. lusid/models/fx_swap.py +3 -3
  58. lusid/models/group_by_selector_compliance_parameter.py +3 -3
  59. lusid/models/group_by_step.py +3 -3
  60. lusid/models/group_by_step_request.py +10 -3
  61. lusid/models/group_calculation_compliance_parameter.py +91 -0
  62. lusid/models/group_filter_predicate_compliance_parameter.py +3 -3
  63. lusid/models/group_filter_step.py +3 -3
  64. lusid/models/group_filter_step_request.py +10 -3
  65. lusid/models/inflation_leg.py +3 -3
  66. lusid/models/inflation_linked_bond.py +3 -3
  67. lusid/models/inflation_swap.py +3 -3
  68. lusid/models/instrument.py +7 -1
  69. lusid/models/instrument_leg.py +3 -3
  70. lusid/models/instrument_list_compliance_parameter.py +3 -3
  71. lusid/models/instrument_type.py +2 -0
  72. lusid/models/interest_rate_swap.py +3 -3
  73. lusid/models/interest_rate_swaption.py +3 -3
  74. lusid/models/intermediate_compliance_step.py +3 -3
  75. lusid/models/intermediate_compliance_step_request.py +10 -3
  76. lusid/models/lusid_instrument.py +3 -3
  77. lusid/models/order_flow_configuration.py +1 -1
  78. lusid/models/percent_check_step.py +110 -0
  79. lusid/models/percent_check_step_request.py +98 -0
  80. lusid/models/portfolio_details.py +7 -1
  81. lusid/models/portfolio_group_id_compliance_parameter.py +3 -3
  82. lusid/models/portfolio_group_id_list_compliance_parameter.py +3 -3
  83. lusid/models/portfolio_id_compliance_parameter.py +3 -3
  84. lusid/models/portfolio_id_list_compliance_parameter.py +3 -3
  85. lusid/models/property_definition.py +3 -3
  86. lusid/models/property_definition_search_result.py +3 -3
  87. lusid/models/property_domain.py +34 -0
  88. lusid/models/property_key_compliance_parameter.py +3 -3
  89. lusid/models/property_key_list_compliance_parameter.py +3 -3
  90. lusid/models/property_list_compliance_parameter.py +3 -3
  91. lusid/models/quote_access_metadata_rule_id.py +2 -2
  92. lusid/models/quote_series_id.py +2 -2
  93. lusid/models/realised_gain_loss.py +2 -2
  94. lusid/models/recombine_step.py +3 -3
  95. lusid/models/reference_instrument.py +3 -3
  96. lusid/models/repo.py +3 -3
  97. lusid/models/simple_cash_flow_loan.py +3 -3
  98. lusid/models/simple_instrument.py +3 -3
  99. lusid/models/staging_rule_approval_criteria.py +10 -3
  100. lusid/models/string_compliance_parameter.py +3 -3
  101. lusid/models/string_list_compliance_parameter.py +3 -3
  102. lusid/models/term_deposit.py +3 -3
  103. lusid/models/total_return_swap.py +3 -3
  104. lusid/models/transaction_configuration_movement_data.py +1 -1
  105. lusid/models/transaction_configuration_movement_data_request.py +1 -1
  106. lusid/models/transaction_type_calculation.py +11 -14
  107. lusid/models/transaction_type_movement.py +20 -3
  108. lusid/models/upsert_instruments_response.py +20 -1
  109. lusid/models/upsert_persons_response.py +114 -0
  110. {lusid_sdk-2.1.191.dist-info → lusid_sdk-2.1.242.dist-info}/METADATA +9 -4
  111. {lusid_sdk-2.1.191.dist-info → lusid_sdk-2.1.242.dist-info}/RECORD +112 -108
  112. {lusid_sdk-2.1.191.dist-info → lusid_sdk-2.1.242.dist-info}/WHEEL +0 -0
@@ -32,15 +32,15 @@ class TotalReturnSwap(LusidInstrument):
32
32
  maturity_date: datetime = Field(..., alias="maturityDate", description="The final maturity date of the instrument. This means the last date on which the instruments makes a payment of any amount. For the avoidance of doubt, that is not necessarily prior to its last sensitivity date for the purposes of risk; e.g. instruments such as Constant Maturity Swaps (CMS) often have sensitivities to rates that may well be observed or set prior to the maturity date, but refer to a termination date beyond it.")
33
33
  asset_leg: AssetLeg = Field(..., alias="assetLeg")
34
34
  funding_leg: InstrumentLeg = Field(..., alias="fundingLeg")
35
- instrument_type: StrictStr = Field(..., alias="instrumentType", description="The available values are: QuotedSecurity, InterestRateSwap, FxForward, Future, ExoticInstrument, FxOption, CreditDefaultSwap, InterestRateSwaption, Bond, EquityOption, FixedLeg, FloatingLeg, BespokeCashFlowsLeg, Unknown, TermDeposit, ContractForDifference, EquitySwap, CashPerpetual, CapFloor, CashSettled, CdsIndex, Basket, FundingLeg, FxSwap, ForwardRateAgreement, SimpleInstrument, Repo, Equity, ExchangeTradedOption, ReferenceInstrument, ComplexBond, InflationLinkedBond, InflationSwap, SimpleCashFlowLoan, TotalReturnSwap, InflationLeg, FundShareClass, FlexibleLoan")
35
+ instrument_type: StrictStr = Field(..., alias="instrumentType", description="The available values are: QuotedSecurity, InterestRateSwap, FxForward, Future, ExoticInstrument, FxOption, CreditDefaultSwap, InterestRateSwaption, Bond, EquityOption, FixedLeg, FloatingLeg, BespokeCashFlowsLeg, Unknown, TermDeposit, ContractForDifference, EquitySwap, CashPerpetual, CapFloor, CashSettled, CdsIndex, Basket, FundingLeg, FxSwap, ForwardRateAgreement, SimpleInstrument, Repo, Equity, ExchangeTradedOption, ReferenceInstrument, ComplexBond, InflationLinkedBond, InflationSwap, SimpleCashFlowLoan, TotalReturnSwap, InflationLeg, FundShareClass, FlexibleLoan, UnsettledCash, Cash")
36
36
  additional_properties: Dict[str, Any] = {}
37
37
  __properties = ["instrumentType", "startDate", "maturityDate", "assetLeg", "fundingLeg"]
38
38
 
39
39
  @validator('instrument_type')
40
40
  def instrument_type_validate_enum(cls, value):
41
41
  """Validates the enum"""
42
- if value not in ('QuotedSecurity', 'InterestRateSwap', 'FxForward', 'Future', 'ExoticInstrument', 'FxOption', 'CreditDefaultSwap', 'InterestRateSwaption', 'Bond', 'EquityOption', 'FixedLeg', 'FloatingLeg', 'BespokeCashFlowsLeg', 'Unknown', 'TermDeposit', 'ContractForDifference', 'EquitySwap', 'CashPerpetual', 'CapFloor', 'CashSettled', 'CdsIndex', 'Basket', 'FundingLeg', 'FxSwap', 'ForwardRateAgreement', 'SimpleInstrument', 'Repo', 'Equity', 'ExchangeTradedOption', 'ReferenceInstrument', 'ComplexBond', 'InflationLinkedBond', 'InflationSwap', 'SimpleCashFlowLoan', 'TotalReturnSwap', 'InflationLeg', 'FundShareClass', 'FlexibleLoan'):
43
- raise ValueError("must be one of enum values ('QuotedSecurity', 'InterestRateSwap', 'FxForward', 'Future', 'ExoticInstrument', 'FxOption', 'CreditDefaultSwap', 'InterestRateSwaption', 'Bond', 'EquityOption', 'FixedLeg', 'FloatingLeg', 'BespokeCashFlowsLeg', 'Unknown', 'TermDeposit', 'ContractForDifference', 'EquitySwap', 'CashPerpetual', 'CapFloor', 'CashSettled', 'CdsIndex', 'Basket', 'FundingLeg', 'FxSwap', 'ForwardRateAgreement', 'SimpleInstrument', 'Repo', 'Equity', 'ExchangeTradedOption', 'ReferenceInstrument', 'ComplexBond', 'InflationLinkedBond', 'InflationSwap', 'SimpleCashFlowLoan', 'TotalReturnSwap', 'InflationLeg', 'FundShareClass', 'FlexibleLoan')")
42
+ if value not in ('QuotedSecurity', 'InterestRateSwap', 'FxForward', 'Future', 'ExoticInstrument', 'FxOption', 'CreditDefaultSwap', 'InterestRateSwaption', 'Bond', 'EquityOption', 'FixedLeg', 'FloatingLeg', 'BespokeCashFlowsLeg', 'Unknown', 'TermDeposit', 'ContractForDifference', 'EquitySwap', 'CashPerpetual', 'CapFloor', 'CashSettled', 'CdsIndex', 'Basket', 'FundingLeg', 'FxSwap', 'ForwardRateAgreement', 'SimpleInstrument', 'Repo', 'Equity', 'ExchangeTradedOption', 'ReferenceInstrument', 'ComplexBond', 'InflationLinkedBond', 'InflationSwap', 'SimpleCashFlowLoan', 'TotalReturnSwap', 'InflationLeg', 'FundShareClass', 'FlexibleLoan', 'UnsettledCash', 'Cash'):
43
+ raise ValueError("must be one of enum values ('QuotedSecurity', 'InterestRateSwap', 'FxForward', 'Future', 'ExoticInstrument', 'FxOption', 'CreditDefaultSwap', 'InterestRateSwaption', 'Bond', 'EquityOption', 'FixedLeg', 'FloatingLeg', 'BespokeCashFlowsLeg', 'Unknown', 'TermDeposit', 'ContractForDifference', 'EquitySwap', 'CashPerpetual', 'CapFloor', 'CashSettled', 'CdsIndex', 'Basket', 'FundingLeg', 'FxSwap', 'ForwardRateAgreement', 'SimpleInstrument', 'Repo', 'Equity', 'ExchangeTradedOption', 'ReferenceInstrument', 'ComplexBond', 'InflationLinkedBond', 'InflationSwap', 'SimpleCashFlowLoan', 'TotalReturnSwap', 'InflationLeg', 'FundShareClass', 'FlexibleLoan', 'UnsettledCash', 'Cash')")
44
44
  return value
45
45
 
46
46
  class Config:
@@ -33,7 +33,7 @@ class TransactionConfigurationMovementData(BaseModel):
33
33
  properties: Optional[Dict[str, PerpetualProperty]] = Field(None, description="The properties associated with the underlying Movement")
34
34
  mappings: Optional[conlist(TransactionPropertyMapping)] = Field(None, description="This allows you to map a transaction property to a property on the underlying holding")
35
35
  name: Optional[StrictStr] = Field(None, description="The movement name (optional)")
36
- movement_options: Optional[conlist(StrictStr)] = Field(None, alias="movementOptions", description="Allows extra specifications for the movement. The only option currently available is 'DirectAdjustment'. A movement type of 'StockMovement' with an option of 'DirectAdjusment' will allow you to adjust the unitsof a holding without affecting its cost base. You will, therefore, be able to reflect the impact of a stock split by loading a Transaction.")
36
+ movement_options: Optional[conlist(StrictStr)] = Field(None, alias="movementOptions", description="Allows extra specifications for the movement. The options currently available are 'DirectAdjustment' and 'IncludesTradedInterest'. A movement type of 'StockMovement' with an option of 'DirectAdjusment' will allow you to adjust the units of a holding without affecting its cost base. You will, therefore, be able to reflect the impact of a stock split by loading a Transaction.")
37
37
  __properties = ["movementTypes", "side", "direction", "properties", "mappings", "name", "movementOptions"]
38
38
 
39
39
  @validator('movement_types')
@@ -33,7 +33,7 @@ class TransactionConfigurationMovementDataRequest(BaseModel):
33
33
  properties: Optional[Dict[str, PerpetualProperty]] = Field(None, description="The properties associated with the underlying Movement.")
34
34
  mappings: Optional[conlist(TransactionPropertyMappingRequest)] = Field(None, description="This allows you to map a transaction property to a property on the underlying holding.")
35
35
  name: Optional[StrictStr] = Field(None, description="The movement name (optional)")
36
- movement_options: Optional[conlist(StrictStr)] = Field(None, alias="movementOptions", description="Allows extra specifications for the movement. The only option currently available is 'DirectAdjustment'. A movement type of 'StockMovement' with an option of 'DirectAdjusment' will allow you to adjust the unitsof a holding without affecting its cost base. You will, therefore, be able to reflect the impact of a stock split by loading a Transaction.")
36
+ movement_options: Optional[conlist(StrictStr)] = Field(None, alias="movementOptions", description="Allows extra specifications for the movement. The options currently available are 'DirectAdjustment' and 'IncludesTradedInterest'. A movement type of 'StockMovement' with an option of 'DirectAdjusment' will allow you to adjust the units of a holding without affecting its cost base. You will, therefore, be able to reflect the impact of a stock split by loading a Transaction.")
37
37
  __properties = ["movementTypes", "side", "direction", "properties", "mappings", "name", "movementOptions"]
38
38
 
39
39
  @validator('movement_types')
@@ -19,25 +19,16 @@ import json
19
19
 
20
20
 
21
21
  from typing import Any, Dict, Optional
22
- from pydantic.v1 import BaseModel, Field, constr, validator
22
+ from pydantic.v1 import BaseModel, Field, constr
23
23
 
24
24
  class TransactionTypeCalculation(BaseModel):
25
25
  """
26
26
  TransactionTypeCalculation
27
27
  """
28
28
  type: constr(strict=True, max_length=64, min_length=1) = Field(..., description="The type of calculation to perform")
29
- side: Optional[constr(strict=True, max_length=64, min_length=0)] = Field(None, description="The side to which the calculation is applied")
30
- __properties = ["type", "side"]
31
-
32
- @validator('side')
33
- def side_validate_regular_expression(cls, value):
34
- """Validates the regular expression"""
35
- if value is None:
36
- return value
37
-
38
- if not re.match(r"^[a-zA-Z0-9\-_]+$", value):
39
- raise ValueError(r"must validate the regular expression /^[a-zA-Z0-9\-_]+$/")
40
- return value
29
+ side: Optional[constr(strict=True, max_length=64, min_length=1)] = Field(None, description="The side to which the calculation is applied")
30
+ formula: Optional[constr(strict=True, max_length=1024, min_length=0)] = Field(None, description="The formula used to derive the total consideration amount when it is not provided on the transaction")
31
+ __properties = ["type", "side", "formula"]
41
32
 
42
33
  class Config:
43
34
  """Pydantic configuration"""
@@ -68,6 +59,11 @@ class TransactionTypeCalculation(BaseModel):
68
59
  if self.side is None and "side" in self.__fields_set__:
69
60
  _dict['side'] = None
70
61
 
62
+ # set to None if formula (nullable) is None
63
+ # and __fields_set__ contains the field
64
+ if self.formula is None and "formula" in self.__fields_set__:
65
+ _dict['formula'] = None
66
+
71
67
  return _dict
72
68
 
73
69
  @classmethod
@@ -81,6 +77,7 @@ class TransactionTypeCalculation(BaseModel):
81
77
 
82
78
  _obj = TransactionTypeCalculation.parse_obj({
83
79
  "type": obj.get("type"),
84
- "side": obj.get("side")
80
+ "side": obj.get("side"),
81
+ "formula": obj.get("formula")
85
82
  })
86
83
  return _obj
@@ -33,9 +33,10 @@ class TransactionTypeMovement(BaseModel):
33
33
  properties: Optional[Dict[str, PerpetualProperty]] = Field(None, description="The properties associated with the underlying Movement")
34
34
  mappings: Optional[conlist(TransactionTypePropertyMapping, max_items=5000)] = Field(None, description="This allows you to map a transaction property to a property on the underlying holding")
35
35
  name: Optional[constr(strict=True, max_length=512, min_length=1)] = Field(None, description="The movement name (optional)")
36
- movement_options: Optional[conlist(StrictStr)] = Field(None, alias="movementOptions", description="Allows extra specifications for the movement. The only option currently available is 'DirectAdjustment'. A movement type of 'StockMovement' with an option of 'DirectAdjusment' will allow you to adjust the unitsof a holding without affecting its cost base. You will, therefore, be able to reflect the impact of a stock split by loading a Transaction.")
36
+ movement_options: Optional[conlist(StrictStr)] = Field(None, alias="movementOptions", description="Allows extra specifications for the movement. The options currently available are 'DirectAdjustment' and 'IncludesTradedInterest'. A movement type of 'StockMovement' with an option of 'DirectAdjusment' will allow you to adjust the units of a holding without affecting its cost base. You will, therefore, be able to reflect the impact of a stock split by loading a Transaction.")
37
37
  settlement_date_override: Optional[StrictStr] = Field(None, alias="settlementDateOverride", description="Optional property key that must be in the Transaction domain when specified. When the movement is processed and the transaction has this property set to a valid date, then the property value will override the SettlementDate of the transaction.")
38
- __properties = ["movementTypes", "side", "direction", "properties", "mappings", "name", "movementOptions", "settlementDateOverride"]
38
+ condition: Optional[constr(strict=True, max_length=16384, min_length=0)] = Field(None, description="The condition that the transaction must satisfy to generate the movement, such as: Portfolio.BaseCurrency eq 'GBP'. The condition can contain fields and properties from transactions and portfolios. If no condition is provided, the movement will apply for all transactions of this type.")
39
+ __properties = ["movementTypes", "side", "direction", "properties", "mappings", "name", "movementOptions", "settlementDateOverride", "condition"]
39
40
 
40
41
  @validator('side')
41
42
  def side_validate_regular_expression(cls, value):
@@ -54,6 +55,16 @@ class TransactionTypeMovement(BaseModel):
54
55
  raise ValueError(r"must validate the regular expression /^[\s\S]*$/")
55
56
  return value
56
57
 
58
+ @validator('condition')
59
+ def condition_validate_regular_expression(cls, value):
60
+ """Validates the regular expression"""
61
+ if value is None:
62
+ return value
63
+
64
+ if not re.match(r"^[\s\S]*$", value):
65
+ raise ValueError(r"must validate the regular expression /^[\s\S]*$/")
66
+ return value
67
+
57
68
  class Config:
58
69
  """Pydantic configuration"""
59
70
  allow_population_by_field_name = True
@@ -117,6 +128,11 @@ class TransactionTypeMovement(BaseModel):
117
128
  if self.settlement_date_override is None and "settlement_date_override" in self.__fields_set__:
118
129
  _dict['settlementDateOverride'] = None
119
130
 
131
+ # set to None if condition (nullable) is None
132
+ # and __fields_set__ contains the field
133
+ if self.condition is None and "condition" in self.__fields_set__:
134
+ _dict['condition'] = None
135
+
120
136
  return _dict
121
137
 
122
138
  @classmethod
@@ -141,6 +157,7 @@ class TransactionTypeMovement(BaseModel):
141
157
  "mappings": [TransactionTypePropertyMapping.from_dict(_item) for _item in obj.get("mappings")] if obj.get("mappings") is not None else None,
142
158
  "name": obj.get("name"),
143
159
  "movement_options": obj.get("movementOptions"),
144
- "settlement_date_override": obj.get("settlementDateOverride")
160
+ "settlement_date_override": obj.get("settlementDateOverride"),
161
+ "condition": obj.get("condition")
145
162
  })
146
163
  return _obj
@@ -31,10 +31,11 @@ class UpsertInstrumentsResponse(BaseModel):
31
31
  """
32
32
  href: Optional[StrictStr] = Field(None, description="The specific Uniform Resource Identifier (URI) for this resource at the requested effective and asAt datetime.")
33
33
  values: Optional[Dict[str, Instrument]] = Field(None, description="The instruments which have been successfully updated or created.")
34
+ staged: Optional[Dict[str, Instrument]] = Field(None, description="The instruments that have been staged for updation or creation.")
34
35
  failed: Optional[Dict[str, ErrorDetail]] = Field(None, description="The instruments that could not be updated or created or were left unchanged without error along with a reason for their failure.")
35
36
  metadata: Optional[Dict[str, conlist(ResponseMetaData)]] = Field(None, description="Meta data associated with the upsert event.")
36
37
  links: Optional[conlist(Link)] = None
37
- __properties = ["href", "values", "failed", "metadata", "links"]
38
+ __properties = ["href", "values", "staged", "failed", "metadata", "links"]
38
39
 
39
40
  class Config:
40
41
  """Pydantic configuration"""
@@ -67,6 +68,13 @@ class UpsertInstrumentsResponse(BaseModel):
67
68
  if self.values[_key]:
68
69
  _field_dict[_key] = self.values[_key].to_dict()
69
70
  _dict['values'] = _field_dict
71
+ # override the default output from pydantic by calling `to_dict()` of each value in staged (dict)
72
+ _field_dict = {}
73
+ if self.staged:
74
+ for _key in self.staged:
75
+ if self.staged[_key]:
76
+ _field_dict[_key] = self.staged[_key].to_dict()
77
+ _dict['staged'] = _field_dict
70
78
  # override the default output from pydantic by calling `to_dict()` of each value in failed (dict)
71
79
  _field_dict = {}
72
80
  if self.failed:
@@ -100,6 +108,11 @@ class UpsertInstrumentsResponse(BaseModel):
100
108
  if self.values is None and "values" in self.__fields_set__:
101
109
  _dict['values'] = None
102
110
 
111
+ # set to None if staged (nullable) is None
112
+ # and __fields_set__ contains the field
113
+ if self.staged is None and "staged" in self.__fields_set__:
114
+ _dict['staged'] = None
115
+
103
116
  # set to None if failed (nullable) is None
104
117
  # and __fields_set__ contains the field
105
118
  if self.failed is None and "failed" in self.__fields_set__:
@@ -134,6 +147,12 @@ class UpsertInstrumentsResponse(BaseModel):
134
147
  )
135
148
  if obj.get("values") is not None
136
149
  else None,
150
+ "staged": dict(
151
+ (_k, Instrument.from_dict(_v))
152
+ for _k, _v in obj.get("staged").items()
153
+ )
154
+ if obj.get("staged") is not None
155
+ else None,
137
156
  "failed": dict(
138
157
  (_k, ErrorDetail.from_dict(_v))
139
158
  for _k, _v in obj.get("failed").items()
@@ -0,0 +1,114 @@
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 BaseModel, Field, conlist
23
+ from lusid.models.error_detail import ErrorDetail
24
+ from lusid.models.link import Link
25
+ from lusid.models.person import Person
26
+
27
+ class UpsertPersonsResponse(BaseModel):
28
+ """
29
+ UpsertPersonsResponse
30
+ """
31
+ values: Dict[str, Person] = Field(..., description="The Person(s) that have been successfully upserted")
32
+ failed: Dict[str, ErrorDetail] = Field(..., description="The Person(s) that could not be upserted along with a reason for their failure.")
33
+ as_at_date: datetime = Field(..., alias="asAtDate", description="The as-at datetime at which Person(s) were created or updated.")
34
+ links: Optional[conlist(Link)] = None
35
+ __properties = ["values", "failed", "asAtDate", "links"]
36
+
37
+ class Config:
38
+ """Pydantic configuration"""
39
+ allow_population_by_field_name = True
40
+ validate_assignment = True
41
+
42
+ def to_str(self) -> str:
43
+ """Returns the string representation of the model using alias"""
44
+ return pprint.pformat(self.dict(by_alias=True))
45
+
46
+ def to_json(self) -> str:
47
+ """Returns the JSON representation of the model using alias"""
48
+ return json.dumps(self.to_dict())
49
+
50
+ @classmethod
51
+ def from_json(cls, json_str: str) -> UpsertPersonsResponse:
52
+ """Create an instance of UpsertPersonsResponse from a JSON string"""
53
+ return cls.from_dict(json.loads(json_str))
54
+
55
+ def to_dict(self):
56
+ """Returns the dictionary representation of the model using alias"""
57
+ _dict = self.dict(by_alias=True,
58
+ exclude={
59
+ },
60
+ exclude_none=True)
61
+ # override the default output from pydantic by calling `to_dict()` of each value in values (dict)
62
+ _field_dict = {}
63
+ if self.values:
64
+ for _key in self.values:
65
+ if self.values[_key]:
66
+ _field_dict[_key] = self.values[_key].to_dict()
67
+ _dict['values'] = _field_dict
68
+ # override the default output from pydantic by calling `to_dict()` of each value in failed (dict)
69
+ _field_dict = {}
70
+ if self.failed:
71
+ for _key in self.failed:
72
+ if self.failed[_key]:
73
+ _field_dict[_key] = self.failed[_key].to_dict()
74
+ _dict['failed'] = _field_dict
75
+ # override the default output from pydantic by calling `to_dict()` of each item in links (list)
76
+ _items = []
77
+ if self.links:
78
+ for _item in self.links:
79
+ if _item:
80
+ _items.append(_item.to_dict())
81
+ _dict['links'] = _items
82
+ # set to None if links (nullable) is None
83
+ # and __fields_set__ contains the field
84
+ if self.links is None and "links" in self.__fields_set__:
85
+ _dict['links'] = None
86
+
87
+ return _dict
88
+
89
+ @classmethod
90
+ def from_dict(cls, obj: dict) -> UpsertPersonsResponse:
91
+ """Create an instance of UpsertPersonsResponse from a dict"""
92
+ if obj is None:
93
+ return None
94
+
95
+ if not isinstance(obj, dict):
96
+ return UpsertPersonsResponse.parse_obj(obj)
97
+
98
+ _obj = UpsertPersonsResponse.parse_obj({
99
+ "values": dict(
100
+ (_k, Person.from_dict(_v))
101
+ for _k, _v in obj.get("values").items()
102
+ )
103
+ if obj.get("values") is not None
104
+ else None,
105
+ "failed": dict(
106
+ (_k, ErrorDetail.from_dict(_v))
107
+ for _k, _v in obj.get("failed").items()
108
+ )
109
+ if obj.get("failed") is not None
110
+ else None,
111
+ "as_at_date": obj.get("asAtDate"),
112
+ "links": [Link.from_dict(_item) for _item in obj.get("links")] if obj.get("links") is not None else None
113
+ })
114
+ return _obj
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: lusid-sdk
3
- Version: 2.1.191
3
+ Version: 2.1.242
4
4
  Summary: LUSID API
5
5
  Home-page: https://github.com/finbourne/lusid-sdk-python
6
6
  License: MIT
@@ -29,8 +29,8 @@ FINBOURNE Technology
29
29
 
30
30
  This Python package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project:
31
31
 
32
- - API version: 0.11.6625
33
- - Package version: 2.1.191
32
+ - API version: 0.11.6675
33
+ - Package version: 2.1.242
34
34
  - Build package: org.openapitools.codegen.languages.PythonClientCodegen
35
35
  For more information, please visit [https://www.finbourne.com](https://www.finbourne.com)
36
36
 
@@ -406,7 +406,7 @@ Class | Method | HTTP request | Description
406
406
  *FeeTypesApi* | [**list_fee_types**](docs/FeeTypesApi.md#list_fee_types) | **GET** /api/feetypes | [EXPERIMENTAL] ListFeeTypes: List FeeTypes
407
407
  *FeeTypesApi* | [**update_fee_type**](docs/FeeTypesApi.md#update_fee_type) | **PUT** /api/feetypes/{scope}/{code} | [EXPERIMENTAL] UpdateFeeType: Update a FeeType.
408
408
  *FundsApi* | [**accept_estimate_valuation_point**](docs/FundsApi.md#accept_estimate_valuation_point) | **POST** /api/funds/{scope}/{code}/valuationpoints/$acceptestimate | [EXPERIMENTAL] AcceptEstimateValuationPoint: Accepts an Estimate Valuation Point.
409
- *FundsApi* | [**create_fee**](docs/FundsApi.md#create_fee) | **POST** /api/funds/{scope}/{code}/fees/{feeCode} | [EXPERIMENTAL] CreateFee: Create a Fee.
409
+ *FundsApi* | [**create_fee**](docs/FundsApi.md#create_fee) | **POST** /api/funds/{scope}/{code}/fees | [EXPERIMENTAL] CreateFee: Create a Fee.
410
410
  *FundsApi* | [**create_fund**](docs/FundsApi.md#create_fund) | **POST** /api/funds/{scope} | [EXPERIMENTAL] CreateFund: Create a Fund.
411
411
  *FundsApi* | [**delete_fee**](docs/FundsApi.md#delete_fee) | **DELETE** /api/funds/{scope}/{code}/fees/{feeCode} | [EXPERIMENTAL] DeleteFee: Delete a Fee.
412
412
  *FundsApi* | [**delete_fund**](docs/FundsApi.md#delete_fund) | **DELETE** /api/funds/{scope}/{code} | [EXPERIMENTAL] DeleteFund: Delete a Fund.
@@ -521,6 +521,7 @@ Class | Method | HTTP request | Description
521
521
  *PersonsApi* | [**set_person_properties**](docs/PersonsApi.md#set_person_properties) | **POST** /api/persons/{idTypeScope}/{idTypeCode}/{code}/properties | [EARLY ACCESS] SetPersonProperties: Set Person Properties
522
522
  *PersonsApi* | [**upsert_person**](docs/PersonsApi.md#upsert_person) | **POST** /api/persons | [EARLY ACCESS] UpsertPerson: Upsert Person
523
523
  *PersonsApi* | [**upsert_person_access_metadata**](docs/PersonsApi.md#upsert_person_access_metadata) | **PUT** /api/persons/{idTypeScope}/{idTypeCode}/{code}/metadata/{metadataKey} | [EARLY ACCESS] UpsertPersonAccessMetadata: Upsert a Person Access Metadata entry associated with a specific metadataKey. This creates or updates the data in LUSID.
524
+ *PersonsApi* | [**upsert_persons**](docs/PersonsApi.md#upsert_persons) | **POST** /api/persons/$batchUpsert | [EARLY ACCESS] UpsertPersons: Pluralised Upsert of Persons
524
525
  *PlacementsApi* | [**delete_placement**](docs/PlacementsApi.md#delete_placement) | **DELETE** /api/placements/{scope}/{code} | [EARLY ACCESS] DeletePlacement: Delete placement
525
526
  *PlacementsApi* | [**get_placement**](docs/PlacementsApi.md#get_placement) | **GET** /api/placements/{scope}/{code} | [EARLY ACCESS] GetPlacement: Get Placement
526
527
  *PlacementsApi* | [**list_placements**](docs/PlacementsApi.md#list_placements) | **GET** /api/placements | [EARLY ACCESS] ListPlacements: List Placements
@@ -1115,6 +1116,7 @@ Class | Method | HTTP request | Description
1115
1116
  - [GroupBySelectorComplianceParameter](docs/GroupBySelectorComplianceParameter.md)
1116
1117
  - [GroupByStep](docs/GroupByStep.md)
1117
1118
  - [GroupByStepRequest](docs/GroupByStepRequest.md)
1119
+ - [GroupCalculationComplianceParameter](docs/GroupCalculationComplianceParameter.md)
1118
1120
  - [GroupFilterPredicateComplianceParameter](docs/GroupFilterPredicateComplianceParameter.md)
1119
1121
  - [GroupFilterStep](docs/GroupFilterStep.md)
1120
1122
  - [GroupFilterStepRequest](docs/GroupFilterStepRequest.md)
@@ -1332,6 +1334,8 @@ Class | Method | HTTP request | Description
1332
1334
  - [Participation](docs/Participation.md)
1333
1335
  - [ParticipationRequest](docs/ParticipationRequest.md)
1334
1336
  - [ParticipationSetRequest](docs/ParticipationSetRequest.md)
1337
+ - [PercentCheckStep](docs/PercentCheckStep.md)
1338
+ - [PercentCheckStepRequest](docs/PercentCheckStepRequest.md)
1335
1339
  - [PerformanceReturn](docs/PerformanceReturn.md)
1336
1340
  - [PerformanceReturnsMetric](docs/PerformanceReturnsMetric.md)
1337
1341
  - [PeriodDiaryEntriesReopenedResponse](docs/PeriodDiaryEntriesReopenedResponse.md)
@@ -1690,6 +1694,7 @@ Class | Method | HTTP request | Description
1690
1694
  - [UpsertLegalEntityRequest](docs/UpsertLegalEntityRequest.md)
1691
1695
  - [UpsertPersonAccessMetadataRequest](docs/UpsertPersonAccessMetadataRequest.md)
1692
1696
  - [UpsertPersonRequest](docs/UpsertPersonRequest.md)
1697
+ - [UpsertPersonsResponse](docs/UpsertPersonsResponse.md)
1693
1698
  - [UpsertPortfolioAccessMetadataRequest](docs/UpsertPortfolioAccessMetadataRequest.md)
1694
1699
  - [UpsertPortfolioGroupAccessMetadataRequest](docs/UpsertPortfolioGroupAccessMetadataRequest.md)
1695
1700
  - [UpsertPortfolioTransactionsResponse](docs/UpsertPortfolioTransactionsResponse.md)