lusid-sdk 2.1.308__py3-none-any.whl → 2.1.318__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
@@ -427,6 +427,7 @@ from lusid.models.fund_amount import FundAmount
427
427
  from lusid.models.fund_configuration import FundConfiguration
428
428
  from lusid.models.fund_configuration_properties import FundConfigurationProperties
429
429
  from lusid.models.fund_configuration_request import FundConfigurationRequest
430
+ from lusid.models.fund_pnl_breakdown import FundPnlBreakdown
430
431
  from lusid.models.fund_previous_nav import FundPreviousNAV
431
432
  from lusid.models.fund_properties import FundProperties
432
433
  from lusid.models.fund_request import FundRequest
@@ -928,6 +929,7 @@ from lusid.models.share_class_amount import ShareClassAmount
928
929
  from lusid.models.share_class_breakdown import ShareClassBreakdown
929
930
  from lusid.models.share_class_data import ShareClassData
930
931
  from lusid.models.share_class_details import ShareClassDetails
932
+ from lusid.models.share_class_pnl_breakdown import ShareClassPnlBreakdown
931
933
  from lusid.models.side_configuration_data import SideConfigurationData
932
934
  from lusid.models.side_configuration_data_request import SideConfigurationDataRequest
933
935
  from lusid.models.side_definition import SideDefinition
@@ -1532,6 +1534,7 @@ __all__ = [
1532
1534
  "FundConfiguration",
1533
1535
  "FundConfigurationProperties",
1534
1536
  "FundConfigurationRequest",
1537
+ "FundPnlBreakdown",
1535
1538
  "FundPreviousNAV",
1536
1539
  "FundProperties",
1537
1540
  "FundRequest",
@@ -2033,6 +2036,7 @@ __all__ = [
2033
2036
  "ShareClassBreakdown",
2034
2037
  "ShareClassData",
2035
2038
  "ShareClassDetails",
2039
+ "ShareClassPnlBreakdown",
2036
2040
  "SideConfigurationData",
2037
2041
  "SideConfigurationDataRequest",
2038
2042
  "SideDefinition",
lusid/configuration.py CHANGED
@@ -373,7 +373,7 @@ class Configuration:
373
373
  return "Python SDK Debug Report:\n"\
374
374
  "OS: {env}\n"\
375
375
  "Python Version: {pyversion}\n"\
376
- "Version of the API: 0.11.6739\n"\
376
+ "Version of the API: 0.11.6749\n"\
377
377
  "SDK Package Version: {package_version}".\
378
378
  format(env=sys.platform, pyversion=sys.version, package_version=package_version)
379
379
 
@@ -10,7 +10,8 @@ logger = logging.getLogger(__name__)
10
10
 
11
11
  ENVIRONMENT_CONFIG_KEYS = {
12
12
  "token_url": "FBN_TOKEN_URL",
13
- "api_url": "FBN_LUSID_API_URL",
13
+ "api_url": "FBN_LUSID_URL",
14
+ "previous_api_url": "FBN_LUSID_API_URL",
14
15
  "username": "FBN_USERNAME",
15
16
  "password": "FBN_PASSWORD",
16
17
  "client_id": "FBN_CLIENT_ID",
@@ -26,6 +27,7 @@ ENVIRONMENT_CONFIG_KEYS = {
26
27
  SECRETS_FILE_CONFIG_KEYS = {
27
28
  "token_url": "tokenUrl",
28
29
  "api_url": "lusidUrl",
30
+ "previous_api_url": "lusidUrl",
29
31
  "username": "username",
30
32
  "password": "password",
31
33
  "client_id": "clientId",
@@ -96,6 +98,9 @@ class SecretsFileConfigurationLoader:
96
98
  for key, value in SECRETS_FILE_CONFIG_KEYS.items()
97
99
  if "proxy" not in key
98
100
  }
101
+ if not populated_api_config_values["api_url"]:
102
+ populated_api_config_values["api_url"] = populated_api_config_values["previous_api_url"]
103
+ del(populated_api_config_values["previous_api_url"])
99
104
  proxy_config_section = config.get(proxy_config_key, {})
100
105
  populated_proxy_values = {
101
106
  key: proxy_config_section.get(value)
@@ -127,6 +132,9 @@ class EnvironmentVariablesConfigurationLoader:
127
132
  for key, value in ENVIRONMENT_CONFIG_KEYS.items()
128
133
  if "proxy" not in key
129
134
  }
135
+ if not populated_api_config_values["api_url"]:
136
+ populated_api_config_values["api_url"] = populated_api_config_values["previous_api_url"]
137
+ del(populated_api_config_values["previous_api_url"])
130
138
  populated_proxy_values = {
131
139
  key: os.environ.get(value)
132
140
  for key, value in ENVIRONMENT_CONFIG_KEYS.items()
lusid/models/__init__.py CHANGED
@@ -348,6 +348,7 @@ from lusid.models.fund_amount import FundAmount
348
348
  from lusid.models.fund_configuration import FundConfiguration
349
349
  from lusid.models.fund_configuration_properties import FundConfigurationProperties
350
350
  from lusid.models.fund_configuration_request import FundConfigurationRequest
351
+ from lusid.models.fund_pnl_breakdown import FundPnlBreakdown
351
352
  from lusid.models.fund_previous_nav import FundPreviousNAV
352
353
  from lusid.models.fund_properties import FundProperties
353
354
  from lusid.models.fund_request import FundRequest
@@ -849,6 +850,7 @@ from lusid.models.share_class_amount import ShareClassAmount
849
850
  from lusid.models.share_class_breakdown import ShareClassBreakdown
850
851
  from lusid.models.share_class_data import ShareClassData
851
852
  from lusid.models.share_class_details import ShareClassDetails
853
+ from lusid.models.share_class_pnl_breakdown import ShareClassPnlBreakdown
852
854
  from lusid.models.side_configuration_data import SideConfigurationData
853
855
  from lusid.models.side_configuration_data_request import SideConfigurationDataRequest
854
856
  from lusid.models.side_definition import SideDefinition
@@ -1375,6 +1377,7 @@ __all__ = [
1375
1377
  "FundConfiguration",
1376
1378
  "FundConfigurationProperties",
1377
1379
  "FundConfigurationRequest",
1380
+ "FundPnlBreakdown",
1378
1381
  "FundPreviousNAV",
1379
1382
  "FundProperties",
1380
1383
  "FundRequest",
@@ -1876,6 +1879,7 @@ __all__ = [
1876
1879
  "ShareClassBreakdown",
1877
1880
  "ShareClassData",
1878
1881
  "ShareClassDetails",
1882
+ "ShareClassPnlBreakdown",
1879
1883
  "SideConfigurationData",
1880
1884
  "SideConfigurationDataRequest",
1881
1885
  "SideDefinition",
@@ -0,0 +1,110 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ LUSID API
5
+
6
+ FINBOURNE Technology # noqa: E501
7
+
8
+ Contact: info@finbourne.com
9
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
10
+
11
+ Do not edit the class manually.
12
+ """
13
+
14
+
15
+ from __future__ import annotations
16
+ import pprint
17
+ import re # noqa: F401
18
+ import json
19
+
20
+
21
+ from typing import Any, Dict
22
+ from pydantic.v1 import BaseModel, Field
23
+ from lusid.models.fund_amount import FundAmount
24
+
25
+ class FundPnlBreakdown(BaseModel):
26
+ """
27
+ The breakdown of PnL for a Fund on a specified date. # noqa: E501
28
+ """
29
+ non_class_specific_pnl: Dict[str, FundAmount] = Field(..., alias="nonClassSpecificPnl", description="Bucket of detail for PnL within the queried period that is not specific to any share class.")
30
+ aggregated_class_pnl: Dict[str, FundAmount] = Field(..., alias="aggregatedClassPnl", description="Bucket of detail for the sum of class PnL across all share classes in a fund and within the queried period.")
31
+ total_pnl: Dict[str, FundAmount] = Field(..., alias="totalPnl", description="Bucket of detail for the sum of class PnL and PnL not specific to a class within the queried period.")
32
+ __properties = ["nonClassSpecificPnl", "aggregatedClassPnl", "totalPnl"]
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) -> FundPnlBreakdown:
49
+ """Create an instance of FundPnlBreakdown 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 each value in non_class_specific_pnl (dict)
59
+ _field_dict = {}
60
+ if self.non_class_specific_pnl:
61
+ for _key in self.non_class_specific_pnl:
62
+ if self.non_class_specific_pnl[_key]:
63
+ _field_dict[_key] = self.non_class_specific_pnl[_key].to_dict()
64
+ _dict['nonClassSpecificPnl'] = _field_dict
65
+ # override the default output from pydantic by calling `to_dict()` of each value in aggregated_class_pnl (dict)
66
+ _field_dict = {}
67
+ if self.aggregated_class_pnl:
68
+ for _key in self.aggregated_class_pnl:
69
+ if self.aggregated_class_pnl[_key]:
70
+ _field_dict[_key] = self.aggregated_class_pnl[_key].to_dict()
71
+ _dict['aggregatedClassPnl'] = _field_dict
72
+ # override the default output from pydantic by calling `to_dict()` of each value in total_pnl (dict)
73
+ _field_dict = {}
74
+ if self.total_pnl:
75
+ for _key in self.total_pnl:
76
+ if self.total_pnl[_key]:
77
+ _field_dict[_key] = self.total_pnl[_key].to_dict()
78
+ _dict['totalPnl'] = _field_dict
79
+ return _dict
80
+
81
+ @classmethod
82
+ def from_dict(cls, obj: dict) -> FundPnlBreakdown:
83
+ """Create an instance of FundPnlBreakdown from a dict"""
84
+ if obj is None:
85
+ return None
86
+
87
+ if not isinstance(obj, dict):
88
+ return FundPnlBreakdown.parse_obj(obj)
89
+
90
+ _obj = FundPnlBreakdown.parse_obj({
91
+ "non_class_specific_pnl": dict(
92
+ (_k, FundAmount.from_dict(_v))
93
+ for _k, _v in obj.get("nonClassSpecificPnl").items()
94
+ )
95
+ if obj.get("nonClassSpecificPnl") is not None
96
+ else None,
97
+ "aggregated_class_pnl": dict(
98
+ (_k, FundAmount.from_dict(_v))
99
+ for _k, _v in obj.get("aggregatedClassPnl").items()
100
+ )
101
+ if obj.get("aggregatedClassPnl") is not None
102
+ else None,
103
+ "total_pnl": dict(
104
+ (_k, FundAmount.from_dict(_v))
105
+ for _k, _v in obj.get("totalPnl").items()
106
+ )
107
+ if obj.get("totalPnl") is not None
108
+ else None
109
+ })
110
+ return _obj
@@ -22,6 +22,7 @@ from typing import Any, Dict, Optional, Union
22
22
  from pydantic.v1 import BaseModel, Field, StrictFloat, StrictInt
23
23
  from lusid.models.fee_accrual import FeeAccrual
24
24
  from lusid.models.fund_amount import FundAmount
25
+ from lusid.models.fund_pnl_breakdown import FundPnlBreakdown
25
26
  from lusid.models.previous_fund_valuation_point_data import PreviousFundValuationPointData
26
27
  from lusid.models.unitisation_data import UnitisationData
27
28
 
@@ -31,7 +32,7 @@ class FundValuationPointData(BaseModel):
31
32
  """
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'.")
33
34
  dealing: Dict[str, FundAmount] = Field(..., description="Bucket of detail for any 'Dealing' that has occured inside the queried period.")
34
- pn_l: Dict[str, FundAmount] = Field(..., alias="pnL", description="Bucket of detail for 'PnL' that has occured inside the queried period.")
35
+ pn_l: FundPnlBreakdown = Field(..., alias="pnL")
35
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'.")
36
37
  fees: Dict[str, FeeAccrual] = Field(..., description="Bucket of detail for any 'Fees' that have been charged in the selected period.")
37
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.")
@@ -78,13 +79,9 @@ class FundValuationPointData(BaseModel):
78
79
  if self.dealing[_key]:
79
80
  _field_dict[_key] = self.dealing[_key].to_dict()
80
81
  _dict['dealing'] = _field_dict
81
- # override the default output from pydantic by calling `to_dict()` of each value in pn_l (dict)
82
- _field_dict = {}
82
+ # override the default output from pydantic by calling `to_dict()` of pn_l
83
83
  if self.pn_l:
84
- for _key in self.pn_l:
85
- if self.pn_l[_key]:
86
- _field_dict[_key] = self.pn_l[_key].to_dict()
87
- _dict['pnL'] = _field_dict
84
+ _dict['pnL'] = self.pn_l.to_dict()
88
85
  # override the default output from pydantic by calling `to_dict()` of each value in fees (dict)
89
86
  _field_dict = {}
90
87
  if self.fees:
@@ -134,12 +131,7 @@ class FundValuationPointData(BaseModel):
134
131
  )
135
132
  if obj.get("dealing") is not None
136
133
  else None,
137
- "pn_l": dict(
138
- (_k, FundAmount.from_dict(_v))
139
- for _k, _v in obj.get("pnL").items()
140
- )
141
- if obj.get("pnL") is not None
142
- else None,
134
+ "pn_l": FundPnlBreakdown.from_dict(obj.get("pnL")) if obj.get("pnL") is not None else None,
143
135
  "gav": obj.get("gav"),
144
136
  "fees": dict(
145
137
  (_k, FeeAccrual.from_dict(_v))
@@ -24,6 +24,7 @@ from lusid.models.fee_accrual import FeeAccrual
24
24
  from lusid.models.multi_currency_amounts import MultiCurrencyAmounts
25
25
  from lusid.models.previous_share_class_breakdown import PreviousShareClassBreakdown
26
26
  from lusid.models.share_class_amount import ShareClassAmount
27
+ from lusid.models.share_class_pnl_breakdown import ShareClassPnlBreakdown
27
28
  from lusid.models.unitisation_data import UnitisationData
28
29
 
29
30
  class ShareClassBreakdown(BaseModel):
@@ -32,7 +33,7 @@ class ShareClassBreakdown(BaseModel):
32
33
  """
33
34
  back_out: Dict[str, ShareClassAmount] = Field(..., alias="backOut", description="Bucket of detail for the Valuation Point where data points have been 'backed out'.")
34
35
  dealing: Dict[str, ShareClassAmount] = Field(..., description="Bucket of detail for any 'Dealing' that has occured inside the queried period.")
35
- pn_l: Dict[str, ShareClassAmount] = Field(..., alias="pnL", description="Bucket of detail for 'PnL' that has occured inside the queried period.")
36
+ pn_l: ShareClassPnlBreakdown = Field(..., alias="pnL")
36
37
  gav: MultiCurrencyAmounts = Field(...)
37
38
  fees: Dict[str, FeeAccrual] = Field(..., description="Bucket of detail for any 'Fees' that have been charged in the selected period.")
38
39
  nav: MultiCurrencyAmounts = Field(...)
@@ -81,13 +82,9 @@ class ShareClassBreakdown(BaseModel):
81
82
  if self.dealing[_key]:
82
83
  _field_dict[_key] = self.dealing[_key].to_dict()
83
84
  _dict['dealing'] = _field_dict
84
- # override the default output from pydantic by calling `to_dict()` of each value in pn_l (dict)
85
- _field_dict = {}
85
+ # override the default output from pydantic by calling `to_dict()` of pn_l
86
86
  if self.pn_l:
87
- for _key in self.pn_l:
88
- if self.pn_l[_key]:
89
- _field_dict[_key] = self.pn_l[_key].to_dict()
90
- _dict['pnL'] = _field_dict
87
+ _dict['pnL'] = self.pn_l.to_dict()
91
88
  # override the default output from pydantic by calling `to_dict()` of gav
92
89
  if self.gav:
93
90
  _dict['gav'] = self.gav.to_dict()
@@ -143,12 +140,7 @@ class ShareClassBreakdown(BaseModel):
143
140
  )
144
141
  if obj.get("dealing") is not None
145
142
  else None,
146
- "pn_l": dict(
147
- (_k, ShareClassAmount.from_dict(_v))
148
- for _k, _v in obj.get("pnL").items()
149
- )
150
- if obj.get("pnL") is not None
151
- else None,
143
+ "pn_l": ShareClassPnlBreakdown.from_dict(obj.get("pnL")) if obj.get("pnL") is not None else None,
152
144
  "gav": MultiCurrencyAmounts.from_dict(obj.get("gav")) if obj.get("gav") is not None else None,
153
145
  "fees": dict(
154
146
  (_k, FeeAccrual.from_dict(_v))
@@ -0,0 +1,110 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ LUSID API
5
+
6
+ FINBOURNE Technology # noqa: E501
7
+
8
+ Contact: info@finbourne.com
9
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
10
+
11
+ Do not edit the class manually.
12
+ """
13
+
14
+
15
+ from __future__ import annotations
16
+ import pprint
17
+ import re # noqa: F401
18
+ import json
19
+
20
+
21
+ from typing import Any, Dict
22
+ from pydantic.v1 import BaseModel, Field
23
+ from lusid.models.share_class_amount import ShareClassAmount
24
+
25
+ class ShareClassPnlBreakdown(BaseModel):
26
+ """
27
+ The breakdown of PnL for a Share Class on a specified date. # noqa: E501
28
+ """
29
+ apportioned_non_class_specific_pnl: Dict[str, ShareClassAmount] = Field(..., alias="apportionedNonClassSpecificPnl", description="Bucket of detail for PnL within the queried period not explicitly allocated to any share class but has been apportioned to the share class.")
30
+ class_pnl: Dict[str, ShareClassAmount] = Field(..., alias="classPnl", description="Bucket of detail for PnL specific to the share class within the queried period.")
31
+ total_pnl: Dict[str, ShareClassAmount] = Field(..., alias="totalPnl", description="Bucket of detail for the sum of class PnL and PnL not specific to a class within the queried period.")
32
+ __properties = ["apportionedNonClassSpecificPnl", "classPnl", "totalPnl"]
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) -> ShareClassPnlBreakdown:
49
+ """Create an instance of ShareClassPnlBreakdown 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 each value in apportioned_non_class_specific_pnl (dict)
59
+ _field_dict = {}
60
+ if self.apportioned_non_class_specific_pnl:
61
+ for _key in self.apportioned_non_class_specific_pnl:
62
+ if self.apportioned_non_class_specific_pnl[_key]:
63
+ _field_dict[_key] = self.apportioned_non_class_specific_pnl[_key].to_dict()
64
+ _dict['apportionedNonClassSpecificPnl'] = _field_dict
65
+ # override the default output from pydantic by calling `to_dict()` of each value in class_pnl (dict)
66
+ _field_dict = {}
67
+ if self.class_pnl:
68
+ for _key in self.class_pnl:
69
+ if self.class_pnl[_key]:
70
+ _field_dict[_key] = self.class_pnl[_key].to_dict()
71
+ _dict['classPnl'] = _field_dict
72
+ # override the default output from pydantic by calling `to_dict()` of each value in total_pnl (dict)
73
+ _field_dict = {}
74
+ if self.total_pnl:
75
+ for _key in self.total_pnl:
76
+ if self.total_pnl[_key]:
77
+ _field_dict[_key] = self.total_pnl[_key].to_dict()
78
+ _dict['totalPnl'] = _field_dict
79
+ return _dict
80
+
81
+ @classmethod
82
+ def from_dict(cls, obj: dict) -> ShareClassPnlBreakdown:
83
+ """Create an instance of ShareClassPnlBreakdown from a dict"""
84
+ if obj is None:
85
+ return None
86
+
87
+ if not isinstance(obj, dict):
88
+ return ShareClassPnlBreakdown.parse_obj(obj)
89
+
90
+ _obj = ShareClassPnlBreakdown.parse_obj({
91
+ "apportioned_non_class_specific_pnl": dict(
92
+ (_k, ShareClassAmount.from_dict(_v))
93
+ for _k, _v in obj.get("apportionedNonClassSpecificPnl").items()
94
+ )
95
+ if obj.get("apportionedNonClassSpecificPnl") is not None
96
+ else None,
97
+ "class_pnl": dict(
98
+ (_k, ShareClassAmount.from_dict(_v))
99
+ for _k, _v in obj.get("classPnl").items()
100
+ )
101
+ if obj.get("classPnl") is not None
102
+ else None,
103
+ "total_pnl": dict(
104
+ (_k, ShareClassAmount.from_dict(_v))
105
+ for _k, _v in obj.get("totalPnl").items()
106
+ )
107
+ if obj.get("totalPnl") is not None
108
+ else None
109
+ })
110
+ return _obj
@@ -29,8 +29,9 @@ class TemplateField(BaseModel):
29
29
  specificity: constr(strict=True, min_length=1) = Field(...)
30
30
  description: constr(strict=True, min_length=1) = Field(...)
31
31
  type: constr(strict=True, min_length=1) = Field(...)
32
+ availability: constr(strict=True, min_length=1) = Field(...)
32
33
  usage: conlist(StrictStr) = Field(...)
33
- __properties = ["fieldName", "specificity", "description", "type", "usage"]
34
+ __properties = ["fieldName", "specificity", "description", "type", "availability", "usage"]
34
35
 
35
36
  class Config:
36
37
  """Pydantic configuration"""
@@ -72,6 +73,7 @@ class TemplateField(BaseModel):
72
73
  "specificity": obj.get("specificity"),
73
74
  "description": obj.get("description"),
74
75
  "type": obj.get("type"),
76
+ "availability": obj.get("availability"),
75
77
  "usage": obj.get("usage")
76
78
  })
77
79
  return _obj
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: lusid-sdk
3
- Version: 2.1.308
3
+ Version: 2.1.318
4
4
  Summary: LUSID API
5
5
  Home-page: https://github.com/finbourne/lusid-sdk-python
6
6
  License: MIT
@@ -24,194 +24,7 @@ Requires-Dist: urllib3 (>=1.25.3,<2.0.0)
24
24
  Project-URL: Repository, https://github.com/finbourne/lusid-sdk-python
25
25
  Description-Content-Type: text/markdown
26
26
 
27
- # lusid-sdk
28
- FINBOURNE Technology
29
-
30
- This Python package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project:
31
-
32
- - API version: 0.11.6739
33
- - Package version: 2.1.308
34
- - Build package: org.openapitools.codegen.languages.PythonClientCodegen
35
- For more information, please visit [https://www.finbourne.com](https://www.finbourne.com)
36
-
37
- ## Requirements.
38
-
39
- Python 3.7+
40
-
41
- ## Installation & Usage
42
- ### pip install
43
-
44
- If the python package is hosted on a repository, you can install directly using:
45
-
46
- ```sh
47
- pip install git+https://github.com/finbourne/lusid-sdk-python.git
48
- ```
49
- (you may need to run `pip` with root permission: `sudo pip install git+https://github.com/finbourne/lusid-sdk-python.git`)
50
-
51
- Then import the package:
52
- ```python
53
- import lusid
54
- ```
55
-
56
- ### Setuptools
57
-
58
- Install via [Setuptools](http://pypi.python.org/pypi/setuptools).
59
-
60
- ```sh
61
- python setup.py install --user
62
- ```
63
- (or `sudo python setup.py install` to install the package for all users)
64
-
65
- Then import the package:
66
- ```python
67
- import lusid
68
- ```
69
-
70
- ### Tests
71
-
72
- Execute `pytest` to run the tests.
73
-
74
- ## Getting Started
75
-
76
- You'll need to provide some configuration to connect to the lusid application.
77
- These can be provided using a secrets file or environment variables.
78
-
79
- ### Environment variables
80
-
81
- In order to use [short lived access tokens](https://support.lusid.com/knowledgebase/article/KA-01654/en-us) you will need to have appropriate values set for the following environment variables:
82
-
83
- ```
84
- FBN_TOKEN_URL,
85
- FBN_LUSID_API_URL,
86
- FBN_USERNAME,
87
- FBN_PASSWORD,
88
- FBN_CLIENT_ID,
89
- FBN_CLIENT_SECRET
90
- ```
91
-
92
- To use a long lived Personal Access Token, you must provide the following environment variables:
93
- ```
94
- FBN_LUSID_API_URL,
95
- FBN_ACCESS_TOKEN
96
- ```
97
-
98
- You can send your requests to lusid via a proxy, by setting `FBN_PROXY_ADDRESS`.
99
- If your proxy has basic auth enabled, you must akso supply `FBN_PROXY_USERNAME` and `FBN_PROXY_PASSWORD`
100
-
101
- ### Secrets file
102
-
103
- In order to use [short lived access tokens](https://support.lusid.com/knowledgebase/article/KA-01654/en-us) you will need to have appropriate values set in a `secrets.json` file in the same folder as your script.
104
-
105
- ```
106
- {
107
- "api":
108
- {
109
- "tokenUrl":"<your-token-url>",
110
- "lusidUrl":"<FINBOURNE-application-url>",
111
- "username":"<your-username>",
112
- "password":"<your-password>",
113
- "clientId":"<your-client-id>",
114
- "clientSecret":"<your-client-secret>",
115
- }
116
- }
117
- ```
118
-
119
- To use a long lived Personal Access Token, you must provide a `secrets.json` with the following variables:
120
- ```
121
- {
122
- "api":
123
- {
124
- "lusidUrl":"<FINBOURNE-application-url>",
125
- "accessToken":"<your-access-token>"
126
- }
127
- }
128
- ```
129
-
130
- You can send your requests to lusid via a proxy, by adding a proxy section to your `secrets.json`.
131
- If your proxy has basic auth enabled, you must also supply a `username` and `password` in this section.
132
-
133
- ```
134
- {
135
- "api":
136
- {
137
- "lusidUrl":"<FINBOURNE-application-url>",
138
- "accessToken":"<your-access-token>"
139
- },
140
- "proxy":
141
- {
142
- "address":"<your-proxy-address>",
143
- "username":"<your-proxy-username>",
144
- "password":"<your-proxy-password>"
145
- }
146
- }
147
- ```
148
-
149
- ### Using the SDK
150
-
151
- Please follow the [installation procedure](#installation--usage) and then run the following:
152
-
153
- ```python
154
-
155
- import time
156
- import lusid
157
- from lusid.exceptions import ApiException
158
- from pprint import pprint
159
-
160
- import os
161
- from lusid import (
162
- ApiClientFactory,
163
- AborApi,
164
- EnvironmentVariablesConfigurationLoader,
165
- SecretsFileConfigurationLoader,
166
- ArgsConfigurationLoader
167
- )
168
-
169
- # Use the lusid ApiClientFactory to build Api instances with a configured api client
170
- # By default this will read config from environment variables
171
- # Then from a secrets.json file found in the current working directory
172
- api_client_factory = ApiClientFactory()
173
-
174
- # The ApiClientFactory can be passed an iterable of configuration loaders to read configuration from
175
-
176
- api_url = "https://www.lusid.com/api"
177
- # Path to a secrets.json file containing authentication credentials
178
- # See https://support.lusid.com/knowledgebase/article/KA-01667/en-us
179
- # for a detailed guide to setting up the SDK make authenticated calls to LUSID APIs
180
- secrets_path = os.getenv("FBN_SECRETS_PATH")
181
- app_name="LusidJupyterNotebook"
182
-
183
- config_loaders = [
184
- EnvironmentVariablesConfigurationLoader(),
185
- SecretsFileConfigurationLoader(api_secrets_file=secrets_path),
186
- ArgsConfigurationLoader(api_url=api_url, app_name=app_name)
187
- ]
188
- api_client_factory = ApiClientFactory(config_loaders=config_loaders)
189
-
190
-
191
- # The client must configure the authentication and authorization parameters
192
- # in accordance with the API server security policy.
193
-
194
-
195
-
196
- # Enter a context with an instance of the ApiClientFactory to ensure the connection pool is closed after use
197
- async with api_client_factory:
198
- # Create an instance of the API class
199
- api_instance = api_client_factory.build(AborApi)
200
- scope = 'scope_example' # str | The scope of the Abor.
201
- code = 'code_example' # str | The code of the Abor.
202
- diary_entry_code = 'diary_entry_code_example' # str | Diary entry code
203
- diary_entry_request = {"name":"2023_Q1","status":"Estimate","effectiveAt":"2023-04-02T15:10:10.0000000+00:00","queryAsAt":"2023-04-15T15:10:10.0000000+00:00","properties":{"DiaryEntry/AccountingDiary/Reports":{"key":"DiaryEntry/AccountingDiary/Reports","value":{"labelValue":"Some comments"}}}} # DiaryEntryRequest | The diary entry to add.
204
-
205
- try:
206
- # [EXPERIMENTAL] AddDiaryEntry: Add a diary entry to the specified Abor.
207
- api_response = await api_instance.add_diary_entry(scope, code, diary_entry_code, diary_entry_request)
208
- print("The response of AborApi->add_diary_entry:\n")
209
- pprint(api_response)
210
- except ApiException as e:
211
- print("Exception when calling AborApi->add_diary_entry: %s\n" % e)
212
-
213
- ```
214
-
27
+ <a id="documentation-for-api-endpoints"></a>
215
28
  ## Documentation for API Endpoints
216
29
 
217
30
  All URIs are relative to *https://www.lusid.com/api*
@@ -240,7 +53,7 @@ Class | Method | HTTP request | Description
240
53
  *AddressKeyDefinitionApi* | [**get_address_key_definition**](docs/AddressKeyDefinitionApi.md#get_address_key_definition) | **GET** /api/addresskeydefinitions/{key} | [EARLY ACCESS] GetAddressKeyDefinition: Get an AddressKeyDefinition.
241
54
  *AddressKeyDefinitionApi* | [**list_address_key_definitions**](docs/AddressKeyDefinitionApi.md#list_address_key_definitions) | **GET** /api/addresskeydefinitions | [EARLY ACCESS] ListAddressKeyDefinitions: List AddressKeyDefinitions.
242
55
  *AggregationApi* | [**generate_configuration_recipe**](docs/AggregationApi.md#generate_configuration_recipe) | **POST** /api/aggregation/{scope}/{code}/$generateconfigurationrecipe | [EXPERIMENTAL] GenerateConfigurationRecipe: Generates a recipe sufficient to perform valuations for the given portfolio.
243
- *AggregationApi* | [**get_queryable_keys**](docs/AggregationApi.md#get_queryable_keys) | **GET** /api/results/queryable/keys | GetQueryableKeys: Query the set of supported \&quot;addresses\&quot; that can be queried from the aggregation endpoint.
56
+ *AggregationApi* | [**get_queryable_keys**](docs/AggregationApi.md#get_queryable_keys) | **GET** /api/results/queryable/keys | GetQueryableKeys: Query the set of supported \"addresses\" that can be queried from the aggregation endpoint.
244
57
  *AggregationApi* | [**get_valuation**](docs/AggregationApi.md#get_valuation) | **POST** /api/aggregation/$valuation | GetValuation: Perform valuation for a list of portfolios and/or portfolio groups
245
58
  *AggregationApi* | [**get_valuation_of_weighted_instruments**](docs/AggregationApi.md#get_valuation_of_weighted_instruments) | **POST** /api/aggregation/$valuationinlined | GetValuationOfWeightedInstruments: Perform valuation for an inlined portfolio
246
59
  *AllocationsApi* | [**delete_allocation**](docs/AllocationsApi.md#delete_allocation) | **DELETE** /api/allocations/{scope}/{code} | [EARLY ACCESS] DeleteAllocation: Delete allocation
@@ -268,7 +81,7 @@ Class | Method | HTTP request | Description
268
81
  *CalendarsApi* | [**generate_schedule**](docs/CalendarsApi.md#generate_schedule) | **POST** /api/calendars/schedule/{scope} | [EARLY ACCESS] GenerateSchedule: Generate an ordered schedule of dates.
269
82
  *CalendarsApi* | [**get_calendar**](docs/CalendarsApi.md#get_calendar) | **GET** /api/calendars/generic/{scope}/{code} | GetCalendar: Get a calendar in its generic form
270
83
  *CalendarsApi* | [**get_dates**](docs/CalendarsApi.md#get_dates) | **GET** /api/calendars/generic/{scope}/{code}/dates | [EARLY ACCESS] GetDates: Get dates for a specific calendar
271
- *CalendarsApi* | [**is_business_date_time**](docs/CalendarsApi.md#is_business_date_time) | **GET** /api/calendars/businessday/{scope}/{code} | [EARLY ACCESS] IsBusinessDateTime: Check whether a DateTime is a \&quot;Business DateTime\&quot;
84
+ *CalendarsApi* | [**is_business_date_time**](docs/CalendarsApi.md#is_business_date_time) | **GET** /api/calendars/businessday/{scope}/{code} | [EARLY ACCESS] IsBusinessDateTime: Check whether a DateTime is a \"Business DateTime\"
272
85
  *CalendarsApi* | [**list_calendars**](docs/CalendarsApi.md#list_calendars) | **GET** /api/calendars/generic | [EARLY ACCESS] ListCalendars: List Calendars
273
86
  *CalendarsApi* | [**list_calendars_in_scope**](docs/CalendarsApi.md#list_calendars_in_scope) | **GET** /api/calendars/generic/{scope} | ListCalendarsInScope: List all calenders in a specified scope
274
87
  *CalendarsApi* | [**update_calendar**](docs/CalendarsApi.md#update_calendar) | **POST** /api/calendars/generic/{scope}/{code} | [EARLY ACCESS] UpdateCalendar: Update a calendar
@@ -604,7 +417,7 @@ Class | Method | HTTP request | Description
604
417
  *PropertyDefinitionsApi* | [**update_derived_property_definition**](docs/PropertyDefinitionsApi.md#update_derived_property_definition) | **PUT** /api/propertydefinitions/derived/{domain}/{scope}/{code} | [EARLY ACCESS] UpdateDerivedPropertyDefinition: Update a pre-existing derived property definition
605
418
  *PropertyDefinitionsApi* | [**update_property_definition**](docs/PropertyDefinitionsApi.md#update_property_definition) | **PUT** /api/propertydefinitions/{domain}/{scope}/{code} | UpdatePropertyDefinition: Update property definition
606
419
  *PropertyDefinitionsApi* | [**upsert_property_definition_properties**](docs/PropertyDefinitionsApi.md#upsert_property_definition_properties) | **POST** /api/propertydefinitions/{domain}/{scope}/{code}/properties | UpsertPropertyDefinitionProperties: Upsert properties to a property definition
607
- *QueryableKeysApi* | [**get_all_queryable_keys**](docs/QueryableKeysApi.md#get_all_queryable_keys) | **GET** /api/queryablekeys | [EARLY ACCESS] GetAllQueryableKeys: Query the set of supported \&quot;addresses\&quot; that can be queried from all endpoints.
420
+ *QueryableKeysApi* | [**get_all_queryable_keys**](docs/QueryableKeysApi.md#get_all_queryable_keys) | **GET** /api/queryablekeys | [EARLY ACCESS] GetAllQueryableKeys: Query the set of supported \"addresses\" that can be queried from all endpoints.
608
421
  *QuotesApi* | [**delete_quote_access_metadata_rule**](docs/QuotesApi.md#delete_quote_access_metadata_rule) | **DELETE** /api/metadata/quotes/rules/{scope} | [EXPERIMENTAL] DeleteQuoteAccessMetadataRule: Delete a Quote Access Metadata Rule
609
422
  *QuotesApi* | [**delete_quotes**](docs/QuotesApi.md#delete_quotes) | **POST** /api/quotes/{scope}/$delete | DeleteQuotes: Delete quotes
610
423
  *QuotesApi* | [**get_quotes**](docs/QuotesApi.md#get_quotes) | **POST** /api/quotes/{scope}/$get | GetQuotes: Get quotes
@@ -621,7 +434,7 @@ Class | Method | HTTP request | Description
621
434
  *ReconciliationsApi* | [**get_reconciliation_mapping**](docs/ReconciliationsApi.md#get_reconciliation_mapping) | **GET** /api/portfolios/mapping/{scope}/{code} | [EARLY ACCESS] GetReconciliationMapping: Get a mapping
622
435
  *ReconciliationsApi* | [**list_reconciliation_mappings**](docs/ReconciliationsApi.md#list_reconciliation_mappings) | **GET** /api/portfolios/mapping | [EARLY ACCESS] ListReconciliationMappings: List the reconciliation mappings
623
436
  *ReconciliationsApi* | [**list_reconciliations**](docs/ReconciliationsApi.md#list_reconciliations) | **GET** /api/portfolios/$scheduledReconciliations | [EXPERIMENTAL] ListReconciliations: List scheduled reconciliations
624
- *ReconciliationsApi* | [**reconcile_generic**](docs/ReconciliationsApi.md#reconcile_generic) | **POST** /api/portfolios/$reconcileGeneric | ReconcileGeneric: Reconcile either holdings or valuations performed on one or two sets of holdings using one or two configuration recipes. The output is configurable for various types of comparisons, to allow tolerances on numerical and date-time data or case-insensitivity on strings, and elision of resulting differences where they are &#39;empty&#39; or null or zero.
437
+ *ReconciliationsApi* | [**reconcile_generic**](docs/ReconciliationsApi.md#reconcile_generic) | **POST** /api/portfolios/$reconcileGeneric | ReconcileGeneric: Reconcile either holdings or valuations performed on one or two sets of holdings using one or two configuration recipes. The output is configurable for various types of comparisons, to allow tolerances on numerical and date-time data or case-insensitivity on strings, and elision of resulting differences where they are 'empty' or null or zero.
625
438
  *ReconciliationsApi* | [**reconcile_holdings**](docs/ReconciliationsApi.md#reconcile_holdings) | **POST** /api/portfolios/$reconcileholdings | [EARLY ACCESS] ReconcileHoldings: Reconcile portfolio holdings
626
439
  *ReconciliationsApi* | [**reconcile_inline**](docs/ReconciliationsApi.md#reconcile_inline) | **POST** /api/portfolios/$reconcileInline | ReconcileInline: Reconcile valuations performed on one or two sets of inline instruments using one or two configuration recipes.
627
440
  *ReconciliationsApi* | [**reconcile_transactions**](docs/ReconciliationsApi.md#reconcile_transactions) | **POST** /api/portfolios/$reconcileTransactions | [EARLY ACCESS] ReconcileTransactions: Perform a Transactions Reconciliation.
@@ -757,7 +570,8 @@ Class | Method | HTTP request | Description
757
570
  *TranslationApi* | [**translate_trade_tickets**](docs/TranslationApi.md#translate_trade_tickets) | **POST** /api/translation/tradetickets | [EXPERIMENTAL] TranslateTradeTickets: Translate trade ticket
758
571
 
759
572
 
760
- ## Documentation For Models
573
+ <a id="documentation-for-models"></a>
574
+ ## Documentation for Models
761
575
 
762
576
  - [A2BBreakdown](docs/A2BBreakdown.md)
763
577
  - [A2BCategory](docs/A2BCategory.md)
@@ -1093,6 +907,7 @@ Class | Method | HTTP request | Description
1093
907
  - [FundConfiguration](docs/FundConfiguration.md)
1094
908
  - [FundConfigurationProperties](docs/FundConfigurationProperties.md)
1095
909
  - [FundConfigurationRequest](docs/FundConfigurationRequest.md)
910
+ - [FundPnlBreakdown](docs/FundPnlBreakdown.md)
1096
911
  - [FundPreviousNAV](docs/FundPreviousNAV.md)
1097
912
  - [FundProperties](docs/FundProperties.md)
1098
913
  - [FundRequest](docs/FundRequest.md)
@@ -1594,6 +1409,7 @@ Class | Method | HTTP request | Description
1594
1409
  - [ShareClassBreakdown](docs/ShareClassBreakdown.md)
1595
1410
  - [ShareClassData](docs/ShareClassData.md)
1596
1411
  - [ShareClassDetails](docs/ShareClassDetails.md)
1412
+ - [ShareClassPnlBreakdown](docs/ShareClassPnlBreakdown.md)
1597
1413
  - [SideConfigurationData](docs/SideConfigurationData.md)
1598
1414
  - [SideConfigurationDataRequest](docs/SideConfigurationDataRequest.md)
1599
1415
  - [SideDefinition](docs/SideDefinition.md)
@@ -1785,23 +1601,3 @@ Class | Method | HTTP request | Description
1785
1601
  - [YieldCurveData](docs/YieldCurveData.md)
1786
1602
 
1787
1603
 
1788
- <a id="documentation-for-authorization"></a>
1789
- ## Documentation For Authorization
1790
-
1791
-
1792
- Authentication schemes defined for the API:
1793
- <a id="oauth2"></a>
1794
- ### oauth2
1795
-
1796
- - **Type**: OAuth
1797
- - **Flow**: implicit
1798
- - **Authorization URL**: https://lusid.okta.com/oauth2/default/v1/authorize
1799
- - **Scopes**: N/A
1800
-
1801
-
1802
- ## Author
1803
-
1804
- info@finbourne.com
1805
-
1806
-
1807
-
@@ -1,4 +1,4 @@
1
- lusid/__init__.py,sha256=DK7MQXQVc3LyFRUWNVJcJ6zM6-F-G3yoZK9wRipZWdY,113615
1
+ lusid/__init__.py,sha256=L947kNeGDB_V_1eKxcKEiJzc48aboE1f4NrAucdbGv0,113804
2
2
  lusid/api/__init__.py,sha256=EuHJI-4kmmibn1IVmY9akKMT-R1Bnth9msFll5hlBGY,5652
3
3
  lusid/api/abor_api.py,sha256=AvgsHuWE7qRSYJhKveBE2htSjHpqqS0VNJrysAfwME0,159655
4
4
  lusid/api/abor_configuration_api.py,sha256=G2bKPtMYOZ2GhUrg-nPJtCa9XIZdZYK7oafcbJWDMP8,64033
@@ -68,13 +68,13 @@ lusid/api/transaction_portfolios_api.py,sha256=7G5m6iTQXTKCc6ASdxnlVJjvFascHxEgD
68
68
  lusid/api/translation_api.py,sha256=xTAaKEW96JTDIZBXCjxSguCa7Gz4oVd5jdObUE2egwo,20092
69
69
  lusid/api_client.py,sha256=dF6l9RAsdxdQjf6Qn4ny6LB-QXlJmsscWiozCvyyBFA,30709
70
70
  lusid/api_response.py,sha256=6-gnhty6lu8MMAERt3_kTVD7UxQgWFfcjgpcq6iN5IU,855
71
- lusid/configuration.py,sha256=QzrEjTcALmtWMm6T8UFgG9n-BEJAEluQ5jISLxkQA1Q,14404
71
+ lusid/configuration.py,sha256=I6Gdk1K5YdrcdhX1PRz9uobkXGswIhTdXCa8gBOQA8E,14404
72
72
  lusid/exceptions.py,sha256=HIQwgmQrszLlcVCLaqex8dO0laVuejUyOMz7U2ZWJ6s,5326
73
73
  lusid/extensions/__init__.py,sha256=dzDHEzpn-9smd2-_UMWQzeyX6Ha4jGf6fnqx7qxKxNI,630
74
74
  lusid/extensions/api_client.py,sha256=Ob06urm4Em3MLzgP_geyeeGsPCkU225msW_1kpIeABM,30567
75
75
  lusid/extensions/api_client_factory.py,sha256=qPlqYe8AMzXUZrQPMbO5YJrKWLYy01rWNdNcKZVi1Xg,9772
76
76
  lusid/extensions/api_configuration.py,sha256=LbuhaM-PcrY0a4cZ-ff7GBP8UybSqI5Ys2WQOBcr_8I,8052
77
- lusid/extensions/configuration_loaders.py,sha256=yIDvKX6XpHRHovgA0vZvw8OeT-PGynHdRJX8rSf6j28,9248
77
+ lusid/extensions/configuration_loaders.py,sha256=avW3Xrl4BMLp4BbsM8w1zb20PGwlMWLFG_PB3Hv2rds,9759
78
78
  lusid/extensions/file_access_token.py,sha256=Qfk_tl2bBh9kpxYhNZ-9XlVuV36udeWT97mazZYI1ns,1469
79
79
  lusid/extensions/proxy_config.py,sha256=UUHQhd8ub-mKVIVbzDbmNQYLLemPX1b209ZcDrCFOWw,2187
80
80
  lusid/extensions/refreshing_token.py,sha256=i5z2-LS8WG_VKWuFX1IM_f4waAr-fAQOzusFv2Vc7NA,11032
@@ -82,7 +82,7 @@ lusid/extensions/rest.py,sha256=tjVCu-cRrYcjp-ttB975vebPKtBNyBWaeoAdO3QXG2I,1269
82
82
  lusid/extensions/retry.py,sha256=orBJ1uF1iT1IncjWX1iGHVqsCgTh0SBe9rtiV_sPnwk,11564
83
83
  lusid/extensions/socket_keep_alive.py,sha256=NGlqsv-E25IjJOLGZhXZY6kUdx51nEF8qCQyVdzayRk,1653
84
84
  lusid/extensions/tcp_keep_alive_connector.py,sha256=zaGtUsygRsxB1_4B3x39K3ILwztdhMLDv5bFZV7zmGE,3877
85
- lusid/models/__init__.py,sha256=g0_5oFHveza3kSXyQDwbIEbZeofj6FbyGgPctzg3Sow,106931
85
+ lusid/models/__init__.py,sha256=IcJgLn_rIpmoV9q5PtfM8QN_in3-ApKInGSB5LuI0Yc,107120
86
86
  lusid/models/a2_b_breakdown.py,sha256=Txi12EIQw3mH6NM-25QkOnHSQc3BVAWrP7yl9bZswSY,2947
87
87
  lusid/models/a2_b_category.py,sha256=k6NPAACi0CUjKyhdQac4obQSrPmp2PXD6lkAtCnyEFM,2725
88
88
  lusid/models/a2_b_data_record.py,sha256=zKGS2P4fzNpzdcGJiSIpkY4P3d_jAcawYfyuPCDeQgk,9737
@@ -417,11 +417,12 @@ lusid/models/fund_amount.py,sha256=F298PikXvooYgorqtdWwwOmSclzxqNfu6Q1BUK5Yt_E,1
417
417
  lusid/models/fund_configuration.py,sha256=LjXCL02_v9d2MlAFq_a2lHZPMwCTLQKHszt0yHSk5y0,6659
418
418
  lusid/models/fund_configuration_properties.py,sha256=hqKaBSMkSYC5UcWxkgDos41GYnm__6-Q23Z6SDsBgM4,4373
419
419
  lusid/models/fund_configuration_request.py,sha256=pE74oPYKgMuNVGANRIqUV5I4j47VMQc7swDHIHFScNo,5681
420
+ lusid/models/fund_pnl_breakdown.py,sha256=FVWePhLbtAjdikBOG3yipSUD4fIbNnmsM7PsOe1cL4w,4421
420
421
  lusid/models/fund_previous_nav.py,sha256=Vd6qd-nvikHAMjutM1QSYA4xYGWz45NGyLyg2v8pAsE,1930
421
422
  lusid/models/fund_properties.py,sha256=f2PxknZIPrfAXR1MHSJxO1sdj_wNJfmulzYYEqdCByA,4242
422
423
  lusid/models/fund_request.py,sha256=fBU3prGytCvKWfAzP0gHj4VUANarueKwB7r9evPoIEI,8345
423
424
  lusid/models/fund_share_class.py,sha256=06VL9vb5vKCEmNFQbKPmj_uvJjn9QAyk9WjdD5ICBAA,6623
424
- lusid/models/fund_valuation_point_data.py,sha256=JbV3QXY-RW_ZleatER0FgXmG4nwdTEucBbjsUMD7unc,7546
425
+ lusid/models/fund_valuation_point_data.py,sha256=iAuj4b7Kz8Ty67myYntjROcZBkhckc552Qj8YcpXDog,7240
425
426
  lusid/models/funding_leg.py,sha256=b_0D_GqQCPqOllNvb6VSqyjBO4H2v7YYefAj7joTsBI,7455
426
427
  lusid/models/funding_leg_options.py,sha256=_GxHVcvcsd96OaNcb7iHs43UUfrwVno_x2cNowUSwjw,3515
427
428
  lusid/models/future.py,sha256=9jcXTZJxaijpVAz-8-65Jv9yig4qYQEeU2z9oRdEPaU,9084
@@ -915,9 +916,10 @@ lusid/models/set_transaction_configuration_alias.py,sha256=FTa9WQPxzZYO6DguFirEw
915
916
  lusid/models/set_transaction_configuration_source_request.py,sha256=Sz1Kp__LcFo1ubK2S7lf5_NTjFL9Ab23kHikaj8DWxQ,4226
916
917
  lusid/models/settlement_schedule.py,sha256=59PJAHeLK6_fxSRjQ7wGk4zUbyIMjZhiZ-RJ1aH22FY,2420
917
918
  lusid/models/share_class_amount.py,sha256=l-3zCMzmy84d1c0co0t_DgXOCk8t2RKBZ1XljO1jOks,2133
918
- lusid/models/share_class_breakdown.py,sha256=dJC6vIXKbmVHZec9P159OMZT_db6YNxHYdSmTLMKRMA,8351
919
+ lusid/models/share_class_breakdown.py,sha256=IrD_nQ6cMUod_fA8V_vWAVGgbPh8ccQgP6xQ_hodTJk,8058
919
920
  lusid/models/share_class_data.py,sha256=dQp2IM-pzSazRdXT4aIHN3BsWiso360CemAwWmu_UH0,2903
920
921
  lusid/models/share_class_details.py,sha256=dBbEwt4rC4zox8dzf0XiZQwJv_s8kSqgNWmXIqJTym4,4040
922
+ lusid/models/share_class_pnl_breakdown.py,sha256=fKJrgNp-Fn9c52DXeNdwAWz-WZ2suJ8-LdyAl5iZRrY,4551
921
923
  lusid/models/side_configuration_data.py,sha256=iv4nyDEEAYA2TUfY-dlqOGwn-mft8qMGVQk6itgxqe4,3518
922
924
  lusid/models/side_configuration_data_request.py,sha256=qWt-UDjQbcoPpHCUpRwcSN8NFfcZ4TpHMn2dRuR3WVw,2842
923
925
  lusid/models/side_definition.py,sha256=GpAnmArPMxwMe_BHZVihoYi9-Dl8HbQJ3nW4QAxXXow,4149
@@ -954,7 +956,7 @@ lusid/models/target_tax_lot.py,sha256=0rexGWPhEdOaj5_Z6OLxb-7AVTMYL4PfaI_Xcw5ZLm
954
956
  lusid/models/target_tax_lot_request.py,sha256=UwhPoC9hMlbjBZ3dL28Yq2orn1v3vJ7eLctnEGkjKy4,4290
955
957
  lusid/models/tax_rule.py,sha256=Mwc712YrMyeqXxJB6aUgNjCxy872or0_dtoNUZFNOBw,3530
956
958
  lusid/models/tax_rule_set.py,sha256=aBWdkCHrurQHB4ZdyVUxOj0CJaZ6muaCcCenCtpJlqc,5007
957
- lusid/models/template_field.py,sha256=z8NN65iGlPTrP-jo99MIn8_Z4pNLP8Xs0i3LO0iyv00,2339
959
+ lusid/models/template_field.py,sha256=uwh7AKQ-BnT54KvMZrVmyi3o0NUUzmtLvxwoXHwNs9A,2473
958
960
  lusid/models/term_deposit.py,sha256=HiLQimepReB53MDPkupZ3TFpRuvks2LNYJjvSJtr3ik,6727
959
961
  lusid/models/total_return_swap.py,sha256=PnMrI8rROBNQTcOy7pz72aPiPIMz1LlBnD0_t6biLz4,7122
960
962
  lusid/models/touch.py,sha256=OECUpEFcCT1kPT5SJIsoNHtR8k2AhEAbDd6P86NcF4s,2726
@@ -1109,6 +1111,6 @@ lusid/models/weighted_instruments.py,sha256=1y_y_vw4-LPsbkQx4FOzWdZc5fJnzhVkf1D3
1109
1111
  lusid/models/yield_curve_data.py,sha256=SbxvdJ4-GWK9kpMdw4Fnxc7_kvIMwgsRsd_31UJn7nw,6330
1110
1112
  lusid/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1111
1113
  lusid/rest.py,sha256=TNUzQ3yLNT2L053EdR7R0vNzQh2J3TlYD1T56Dye0W0,10138
1112
- lusid_sdk-2.1.308.dist-info/METADATA,sha256=EXKwonmIUM9d0IrFY74n29REAcKLJc-7b1Hgup3gRoA,193452
1113
- lusid_sdk-2.1.308.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
1114
- lusid_sdk-2.1.308.dist-info/RECORD,,
1114
+ lusid_sdk-2.1.318.dist-info/METADATA,sha256=eCq1zeH2MwoUo4SafWoLlXuq0U9IbBGatiZCWvnPgs4,187475
1115
+ lusid_sdk-2.1.318.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
1116
+ lusid_sdk-2.1.318.dist-info/RECORD,,