lusid-sdk 2.1.310__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 +4 -0
- lusid/configuration.py +1 -1
- lusid/extensions/configuration_loaders.py +9 -1
- lusid/models/__init__.py +4 -0
- lusid/models/fund_pnl_breakdown.py +110 -0
- lusid/models/fund_valuation_point_data.py +5 -13
- lusid/models/share_class_breakdown.py +5 -13
- lusid/models/share_class_pnl_breakdown.py +110 -0
- lusid/models/template_field.py +3 -1
- {lusid_sdk-2.1.310.dist-info → lusid_sdk-2.1.318.dist-info}/METADATA +10 -214
- {lusid_sdk-2.1.310.dist-info → lusid_sdk-2.1.318.dist-info}/RECORD +12 -10
- {lusid_sdk-2.1.310.dist-info → lusid_sdk-2.1.318.dist-info}/WHEEL +0 -0
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.
|
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": "
|
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:
|
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
|
82
|
-
_field_dict = {}
|
82
|
+
# override the default output from pydantic by calling `to_dict()` of pn_l
|
83
83
|
if self.pn_l:
|
84
|
-
|
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":
|
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:
|
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
|
85
|
-
_field_dict = {}
|
85
|
+
# override the default output from pydantic by calling `to_dict()` of pn_l
|
86
86
|
if self.pn_l:
|
87
|
-
|
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":
|
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
|
lusid/models/template_field.py
CHANGED
@@ -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.
|
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
|
-
|
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.6741
|
33
|
-
- Package version: 2.1.310
|
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
|
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
|
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
|
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
|
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
|
-
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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.
|
1113
|
-
lusid_sdk-2.1.
|
1114
|
-
lusid_sdk-2.1.
|
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,,
|
File without changes
|