lusid-sdk 2.1.86__py3-none-any.whl → 2.1.88__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

lusid/__init__.py CHANGED
@@ -863,6 +863,7 @@ from lusid.models.sides_definition_request import SidesDefinitionRequest
863
863
  from lusid.models.simple_cash_flow_loan import SimpleCashFlowLoan
864
864
  from lusid.models.simple_instrument import SimpleInstrument
865
865
  from lusid.models.sort_order import SortOrder
866
+ from lusid.models.staged_modifications_info import StagedModificationsInfo
866
867
  from lusid.models.staging_rule import StagingRule
867
868
  from lusid.models.staging_rule_approval_criteria import StagingRuleApprovalCriteria
868
869
  from lusid.models.staging_rule_match_criteria import StagingRuleMatchCriteria
@@ -1880,6 +1881,7 @@ __all__ = [
1880
1881
  "SimpleCashFlowLoan",
1881
1882
  "SimpleInstrument",
1882
1883
  "SortOrder",
1884
+ "StagedModificationsInfo",
1883
1885
  "StagingRule",
1884
1886
  "StagingRuleApprovalCriteria",
1885
1887
  "StagingRuleMatchCriteria",
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.6521\n"\
376
+ "Version of the API: 0.11.6523\n"\
377
377
  "SDK Package Version: {package_version}".\
378
378
  format(env=sys.platform, pyversion=sys.version, package_version=package_version)
379
379
 
lusid/models/__init__.py CHANGED
@@ -787,6 +787,7 @@ from lusid.models.sides_definition_request import SidesDefinitionRequest
787
787
  from lusid.models.simple_cash_flow_loan import SimpleCashFlowLoan
788
788
  from lusid.models.simple_instrument import SimpleInstrument
789
789
  from lusid.models.sort_order import SortOrder
790
+ from lusid.models.staged_modifications_info import StagedModificationsInfo
790
791
  from lusid.models.staging_rule import StagingRule
791
792
  from lusid.models.staging_rule_approval_criteria import StagingRuleApprovalCriteria
792
793
  from lusid.models.staging_rule_match_criteria import StagingRuleMatchCriteria
@@ -1730,6 +1731,7 @@ __all__ = [
1730
1731
  "SimpleCashFlowLoan",
1731
1732
  "SimpleInstrument",
1732
1733
  "SortOrder",
1734
+ "StagedModificationsInfo",
1733
1735
  "StagingRule",
1734
1736
  "StagingRuleApprovalCriteria",
1735
1737
  "StagingRuleMatchCriteria",
lusid/models/portfolio.py CHANGED
@@ -25,6 +25,7 @@ from lusid.models.link import Link
25
25
  from lusid.models.model_property import ModelProperty
26
26
  from lusid.models.relationship import Relationship
27
27
  from lusid.models.resource_id import ResourceId
28
+ from lusid.models.staged_modifications_info import StagedModificationsInfo
28
29
  from lusid.models.version import Version
29
30
 
30
31
  class Portfolio(BaseModel):
@@ -39,6 +40,7 @@ class Portfolio(BaseModel):
39
40
  created: datetime = Field(..., description="The effective datetime at which the portfolio was created. No transactions or constituents can be added to the portfolio before this date.")
40
41
  parent_portfolio_id: Optional[ResourceId] = Field(None, alias="parentPortfolioId")
41
42
  version: Optional[Version] = None
43
+ staged_modifications: Optional[StagedModificationsInfo] = Field(None, alias="stagedModifications")
42
44
  is_derived: Optional[StrictBool] = Field(None, alias="isDerived", description="Whether or not this is a derived portfolio.")
43
45
  base_currency: Optional[StrictStr] = Field(None, alias="baseCurrency", description="The base currency of the portfolio.")
44
46
  properties: Optional[Dict[str, ModelProperty]] = Field(None, description="The requested portfolio properties. These will be from the 'Portfolio' domain.")
@@ -51,7 +53,7 @@ class Portfolio(BaseModel):
51
53
  instrument_event_configuration: Optional[InstrumentEventConfiguration] = Field(None, alias="instrumentEventConfiguration")
52
54
  amortisation_rule_set_id: Optional[ResourceId] = Field(None, alias="amortisationRuleSetId")
53
55
  links: Optional[conlist(Link)] = None
54
- __properties = ["href", "id", "type", "displayName", "description", "created", "parentPortfolioId", "version", "isDerived", "baseCurrency", "properties", "relationships", "instrumentScopes", "accountingMethod", "amortisationMethod", "transactionTypeScope", "cashGainLossCalculationDate", "instrumentEventConfiguration", "amortisationRuleSetId", "links"]
56
+ __properties = ["href", "id", "type", "displayName", "description", "created", "parentPortfolioId", "version", "stagedModifications", "isDerived", "baseCurrency", "properties", "relationships", "instrumentScopes", "accountingMethod", "amortisationMethod", "transactionTypeScope", "cashGainLossCalculationDate", "instrumentEventConfiguration", "amortisationRuleSetId", "links"]
55
57
 
56
58
  @validator('type')
57
59
  def type_validate_enum(cls, value):
@@ -103,6 +105,9 @@ class Portfolio(BaseModel):
103
105
  # override the default output from pydantic by calling `to_dict()` of version
104
106
  if self.version:
105
107
  _dict['version'] = self.version.to_dict()
108
+ # override the default output from pydantic by calling `to_dict()` of staged_modifications
109
+ if self.staged_modifications:
110
+ _dict['stagedModifications'] = self.staged_modifications.to_dict()
106
111
  # override the default output from pydantic by calling `to_dict()` of each value in properties (dict)
107
112
  _field_dict = {}
108
113
  if self.properties:
@@ -200,6 +205,7 @@ class Portfolio(BaseModel):
200
205
  "created": obj.get("created"),
201
206
  "parent_portfolio_id": ResourceId.from_dict(obj.get("parentPortfolioId")) if obj.get("parentPortfolioId") is not None else None,
202
207
  "version": Version.from_dict(obj.get("version")) if obj.get("version") is not None else None,
208
+ "staged_modifications": StagedModificationsInfo.from_dict(obj.get("stagedModifications")) if obj.get("stagedModifications") is not None else None,
203
209
  "is_derived": obj.get("isDerived"),
204
210
  "base_currency": obj.get("baseCurrency"),
205
211
  "properties": dict(
@@ -25,6 +25,7 @@ from lusid.models.link import Link
25
25
  from lusid.models.model_property import ModelProperty
26
26
  from lusid.models.relationship import Relationship
27
27
  from lusid.models.resource_id import ResourceId
28
+ from lusid.models.staged_modifications_info import StagedModificationsInfo
28
29
  from lusid.models.version import Version
29
30
 
30
31
  class PortfolioWithoutHref(BaseModel):
@@ -38,6 +39,7 @@ class PortfolioWithoutHref(BaseModel):
38
39
  created: datetime = Field(..., description="The effective datetime at which the portfolio was created. No transactions or constituents can be added to the portfolio before this date.")
39
40
  parent_portfolio_id: Optional[ResourceId] = Field(None, alias="parentPortfolioId")
40
41
  version: Optional[Version] = None
42
+ staged_modifications: Optional[StagedModificationsInfo] = Field(None, alias="stagedModifications")
41
43
  is_derived: Optional[StrictBool] = Field(None, alias="isDerived", description="Whether or not this is a derived portfolio.")
42
44
  base_currency: Optional[StrictStr] = Field(None, alias="baseCurrency", description="The base currency of the portfolio.")
43
45
  properties: Optional[Dict[str, ModelProperty]] = Field(None, description="The requested portfolio properties. These will be from the 'Portfolio' domain.")
@@ -50,7 +52,7 @@ class PortfolioWithoutHref(BaseModel):
50
52
  instrument_event_configuration: Optional[InstrumentEventConfiguration] = Field(None, alias="instrumentEventConfiguration")
51
53
  amortisation_rule_set_id: Optional[ResourceId] = Field(None, alias="amortisationRuleSetId")
52
54
  links: Optional[conlist(Link)] = None
53
- __properties = ["id", "type", "displayName", "description", "created", "parentPortfolioId", "version", "isDerived", "baseCurrency", "properties", "relationships", "instrumentScopes", "accountingMethod", "amortisationMethod", "transactionTypeScope", "cashGainLossCalculationDate", "instrumentEventConfiguration", "amortisationRuleSetId", "links"]
55
+ __properties = ["id", "type", "displayName", "description", "created", "parentPortfolioId", "version", "stagedModifications", "isDerived", "baseCurrency", "properties", "relationships", "instrumentScopes", "accountingMethod", "amortisationMethod", "transactionTypeScope", "cashGainLossCalculationDate", "instrumentEventConfiguration", "amortisationRuleSetId", "links"]
54
56
 
55
57
  @validator('type')
56
58
  def type_validate_enum(cls, value):
@@ -102,6 +104,9 @@ class PortfolioWithoutHref(BaseModel):
102
104
  # override the default output from pydantic by calling `to_dict()` of version
103
105
  if self.version:
104
106
  _dict['version'] = self.version.to_dict()
107
+ # override the default output from pydantic by calling `to_dict()` of staged_modifications
108
+ if self.staged_modifications:
109
+ _dict['stagedModifications'] = self.staged_modifications.to_dict()
105
110
  # override the default output from pydantic by calling `to_dict()` of each value in properties (dict)
106
111
  _field_dict = {}
107
112
  if self.properties:
@@ -193,6 +198,7 @@ class PortfolioWithoutHref(BaseModel):
193
198
  "created": obj.get("created"),
194
199
  "parent_portfolio_id": ResourceId.from_dict(obj.get("parentPortfolioId")) if obj.get("parentPortfolioId") is not None else None,
195
200
  "version": Version.from_dict(obj.get("version")) if obj.get("version") is not None else None,
201
+ "staged_modifications": StagedModificationsInfo.from_dict(obj.get("stagedModifications")) if obj.get("stagedModifications") is not None else None,
196
202
  "is_derived": obj.get("isDerived"),
197
203
  "base_currency": obj.get("baseCurrency"),
198
204
  "properties": dict(
@@ -0,0 +1,78 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ LUSID API
5
+
6
+ FINBOURNE Technology # noqa: E501
7
+
8
+ Contact: info@finbourne.com
9
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
10
+
11
+ Do not edit the class manually.
12
+ """
13
+
14
+
15
+ from __future__ import annotations
16
+ import pprint
17
+ import re # noqa: F401
18
+ import json
19
+
20
+
21
+ from typing import Any, Dict, List, Optional
22
+ from pydantic.v1 import BaseModel, Field, StrictInt, StrictStr, conlist
23
+
24
+ class StagedModificationsInfo(BaseModel):
25
+ """
26
+ The staged modifications metadata. # noqa: E501
27
+ """
28
+ count_pending: StrictInt = Field(..., alias="countPending", description="The number of staged modifications for the entity with a status of Pending for the requested asAt.")
29
+ href_pending: StrictStr = Field(..., alias="hrefPending", description="Link to the list staged modifications endpoint, filtered by entityType, entityUniqueId and status (= Pending).")
30
+ ids_previewed: Optional[conlist(StrictStr)] = Field(None, alias="idsPreviewed", description="An array of the ids of any StagedModifications being previewed.")
31
+ __properties = ["countPending", "hrefPending", "idsPreviewed"]
32
+
33
+ class Config:
34
+ """Pydantic configuration"""
35
+ allow_population_by_field_name = True
36
+ validate_assignment = True
37
+
38
+ def to_str(self) -> str:
39
+ """Returns the string representation of the model using alias"""
40
+ return pprint.pformat(self.dict(by_alias=True))
41
+
42
+ def to_json(self) -> str:
43
+ """Returns the JSON representation of the model using alias"""
44
+ return json.dumps(self.to_dict())
45
+
46
+ @classmethod
47
+ def from_json(cls, json_str: str) -> StagedModificationsInfo:
48
+ """Create an instance of StagedModificationsInfo from a JSON string"""
49
+ return cls.from_dict(json.loads(json_str))
50
+
51
+ def to_dict(self):
52
+ """Returns the dictionary representation of the model using alias"""
53
+ _dict = self.dict(by_alias=True,
54
+ exclude={
55
+ },
56
+ exclude_none=True)
57
+ # set to None if ids_previewed (nullable) is None
58
+ # and __fields_set__ contains the field
59
+ if self.ids_previewed is None and "ids_previewed" in self.__fields_set__:
60
+ _dict['idsPreviewed'] = None
61
+
62
+ return _dict
63
+
64
+ @classmethod
65
+ def from_dict(cls, obj: dict) -> StagedModificationsInfo:
66
+ """Create an instance of StagedModificationsInfo from a dict"""
67
+ if obj is None:
68
+ return None
69
+
70
+ if not isinstance(obj, dict):
71
+ return StagedModificationsInfo.parse_obj(obj)
72
+
73
+ _obj = StagedModificationsInfo.parse_obj({
74
+ "count_pending": obj.get("countPending"),
75
+ "href_pending": obj.get("hrefPending"),
76
+ "ids_previewed": obj.get("idsPreviewed")
77
+ })
78
+ return _obj
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: lusid-sdk
3
- Version: 2.1.86
3
+ Version: 2.1.88
4
4
  Summary: LUSID API
5
5
  Home-page: https://github.com/finbourne/lusid-sdk-python
6
6
  License: MIT
@@ -29,8 +29,8 @@ FINBOURNE Technology
29
29
 
30
30
  This Python package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project:
31
31
 
32
- - API version: 0.11.6521
33
- - Package version: 2.1.86
32
+ - API version: 0.11.6523
33
+ - Package version: 2.1.88
34
34
  - Build package: org.openapitools.codegen.languages.PythonClientCodegen
35
35
  For more information, please visit [https://www.finbourne.com](https://www.finbourne.com)
36
36
 
@@ -1494,6 +1494,7 @@ Class | Method | HTTP request | Description
1494
1494
  - [SimpleCashFlowLoan](docs/SimpleCashFlowLoan.md)
1495
1495
  - [SimpleInstrument](docs/SimpleInstrument.md)
1496
1496
  - [SortOrder](docs/SortOrder.md)
1497
+ - [StagedModificationsInfo](docs/StagedModificationsInfo.md)
1497
1498
  - [StagingRule](docs/StagingRule.md)
1498
1499
  - [StagingRuleApprovalCriteria](docs/StagingRuleApprovalCriteria.md)
1499
1500
  - [StagingRuleMatchCriteria](docs/StagingRuleMatchCriteria.md)
@@ -1,4 +1,4 @@
1
- lusid/__init__.py,sha256=3msvYKjDM372wPD0un3osWkbs7dqchF_oHbV9vtKRPU,104391
1
+ lusid/__init__.py,sha256=rhv6I8aqtmltWSY39uDZRcd5Q1e6wSWlZp16On999OI,104497
2
2
  lusid/api/__init__.py,sha256=jdU3SmYCzfXVHFVThKX_tCGad2-l4-5Qql1cN864mCs,5388
3
3
  lusid/api/abor_api.py,sha256=AvgsHuWE7qRSYJhKveBE2htSjHpqqS0VNJrysAfwME0,159655
4
4
  lusid/api/abor_configuration_api.py,sha256=G2bKPtMYOZ2GhUrg-nPJtCa9XIZdZYK7oafcbJWDMP8,64033
@@ -65,7 +65,7 @@ lusid/api/transaction_portfolios_api.py,sha256=q6AoYasxV3LQDossmM2BdJSo3arh526yU
65
65
  lusid/api/translation_api.py,sha256=xTAaKEW96JTDIZBXCjxSguCa7Gz4oVd5jdObUE2egwo,20092
66
66
  lusid/api_client.py,sha256=dF6l9RAsdxdQjf6Qn4ny6LB-QXlJmsscWiozCvyyBFA,30709
67
67
  lusid/api_response.py,sha256=6-gnhty6lu8MMAERt3_kTVD7UxQgWFfcjgpcq6iN5IU,855
68
- lusid/configuration.py,sha256=SB3eUjzjiCoQ9p040VkxUWP78FZNbHVXO4MlRYJbbvg,14404
68
+ lusid/configuration.py,sha256=ca2wMRBIbLZ8SPvUCQ0Adstic_dsvw1HUlnlp-c54yc,14404
69
69
  lusid/exceptions.py,sha256=HIQwgmQrszLlcVCLaqex8dO0laVuejUyOMz7U2ZWJ6s,5326
70
70
  lusid/extensions/__init__.py,sha256=DeUuQP7yTcklJH7LT-bw9wQhKEggcs1KwQbPbFcOlhw,560
71
71
  lusid/extensions/api_client.py,sha256=Ob06urm4Em3MLzgP_geyeeGsPCkU225msW_1kpIeABM,30567
@@ -78,7 +78,7 @@ lusid/extensions/rest.py,sha256=tjVCu-cRrYcjp-ttB975vebPKtBNyBWaeoAdO3QXG2I,1269
78
78
  lusid/extensions/retry.py,sha256=orBJ1uF1iT1IncjWX1iGHVqsCgTh0SBe9rtiV_sPnwk,11564
79
79
  lusid/extensions/socket_keep_alive.py,sha256=NGlqsv-E25IjJOLGZhXZY6kUdx51nEF8qCQyVdzayRk,1653
80
80
  lusid/extensions/tcp_keep_alive_connector.py,sha256=zaGtUsygRsxB1_4B3x39K3ILwztdhMLDv5bFZV7zmGE,3877
81
- lusid/models/__init__.py,sha256=-aka6TFbJLjlDCaSerPsRDBWp1LayHcx2Hh55rh_QLU,98046
81
+ lusid/models/__init__.py,sha256=GILeYrs7C3WbPX-uzCXMgadnkJSdH1SwwOP-iJXELFI,98152
82
82
  lusid/models/a2_b_breakdown.py,sha256=Txi12EIQw3mH6NM-25QkOnHSQc3BVAWrP7yl9bZswSY,2947
83
83
  lusid/models/a2_b_category.py,sha256=k6NPAACi0CUjKyhdQac4obQSrPmp2PXD6lkAtCnyEFM,2725
84
84
  lusid/models/a2_b_data_record.py,sha256=zKGS2P4fzNpzdcGJiSIpkY4P3d_jAcawYfyuPCDeQgk,9737
@@ -641,7 +641,7 @@ lusid/models/place_blocks_request.py,sha256=RE2xCyRSQSV8wkzYvqF54fyMYi-FdoGqnqJn
641
641
  lusid/models/placement.py,sha256=5kJMz_9t07KT3NFF2Pdsq93cozl4yvNcxpyv9o5ZmRA,9106
642
642
  lusid/models/placement_request.py,sha256=qg7Yf6EQeqtC1l7lZ18_kFiGiNjBcrzMlScOWWaGkWM,7870
643
643
  lusid/models/placement_set_request.py,sha256=hkljmDDqllEbAjb7J0QAp_fyDKsizX8T9x4n1UBFCmU,2672
644
- lusid/models/portfolio.py,sha256=LqGIRKBYS8kQbmmhiz8gzwPLRuRfnQIZjFtuQ-CV-gY,12142
644
+ lusid/models/portfolio.py,sha256=vLgosL-OAM9RIFkS84augDeHUkDNuidFAsy4PrB0J4k,12718
645
645
  lusid/models/portfolio_cash_flow.py,sha256=Apnb2tfP3bJrBjhH69OLwiAOvn7lApH791owxr1wC8A,8997
646
646
  lusid/models/portfolio_cash_ladder.py,sha256=cZHdUI-PZuLYXlQDxcA9zCTRPX_cHZy0-qHng9bRggU,5462
647
647
  lusid/models/portfolio_details.py,sha256=NABbe06Xp0cl54_HwYeUsko51op7oFVlMqCENEaQVWs,9198
@@ -664,7 +664,7 @@ lusid/models/portfolio_return_breakdown.py,sha256=PGCCidYWkdSSzNJmZeZIEuYQBgozeF
664
664
  lusid/models/portfolio_search_result.py,sha256=xMxRykRsaUoDbwtk7oFYqJeGeTEpR1BaZ8sw-4zRQJY,6669
665
665
  lusid/models/portfolio_trade_ticket.py,sha256=29sx0JwS49GzDI65hh4YvLN1rgBGBPDOTxfJHIgtzPg,2780
666
666
  lusid/models/portfolio_type.py,sha256=FU88oStdLwCnAk2xAWMUtJiaLbwWJKBi-rE1ZkZTs8g,712
667
- lusid/models/portfolio_without_href.py,sha256=8rnY2y1oLQuTROF4ztdXg6eq3aUHnDpUSVOQtZp8cOM,11809
667
+ lusid/models/portfolio_without_href.py,sha256=CDQjm1QHYHi1yfG5J7xNq9JfyDd7SUWabEkLxmxuUx8,12385
668
668
  lusid/models/portfolios_reconciliation_request.py,sha256=NlI1pOGr08bwob0a4FZRRZiS6DylKDpZJA8cw7dgRsc,3001
669
669
  lusid/models/posting_module_details.py,sha256=YtjckonotvLC-UwLecW2G12FVxlww-VkyEU4q-urvsA,3310
670
670
  lusid/models/posting_module_request.py,sha256=x6aq23t1GtSpg60mAe3gXTRBjgIkOVqUp4qRb3tLFDs,4473
@@ -852,6 +852,7 @@ lusid/models/sides_definition_request.py,sha256=dIwC8QWSo13i2TUv4KrpyAbo_fq-GxT7
852
852
  lusid/models/simple_cash_flow_loan.py,sha256=NLVc19iiQEWnM-nUvT-hOz7vca8cG0mTXH9RIuK3iWo,6272
853
853
  lusid/models/simple_instrument.py,sha256=gquWeXQKknx7JwuqPQNVHidMggVVXkIDTL_QSaByDSw,6778
854
854
  lusid/models/sort_order.py,sha256=tx9hNHkrcdw2gQkSLTGQ-JED7cqZoFJ60abVdqkD-GM,644
855
+ lusid/models/staged_modifications_info.py,sha256=z2GkecAm0BLbrCmyBf5n_WzlWP-LPZW-s0io15Z5Spk,2827
855
856
  lusid/models/staging_rule.py,sha256=RxvQoGTR8tShrGw4MLFhaR5L4kxdjeXK8hCGp0kagsk,3560
856
857
  lusid/models/staging_rule_approval_criteria.py,sha256=qmAPg2CfdCQvgSiSLte1n9PAz0fYipc8oDVb2QaMIxk,2687
857
858
  lusid/models/staging_rule_match_criteria.py,sha256=_RxCyvulK3necsQz6LI7YacbSZAktEN5cITthxm9F-w,3561
@@ -1021,6 +1022,6 @@ lusid/models/weighted_instruments.py,sha256=1y_y_vw4-LPsbkQx4FOzWdZc5fJnzhVkf1D3
1021
1022
  lusid/models/yield_curve_data.py,sha256=SbxvdJ4-GWK9kpMdw4Fnxc7_kvIMwgsRsd_31UJn7nw,6330
1022
1023
  lusid/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1023
1024
  lusid/rest.py,sha256=TNUzQ3yLNT2L053EdR7R0vNzQh2J3TlYD1T56Dye0W0,10138
1024
- lusid_sdk-2.1.86.dist-info/METADATA,sha256=2QIVwRHeFi2I-cGAG1aWgIHgZoc8w4pER6IFFJcafr4,180503
1025
- lusid_sdk-2.1.86.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
1026
- lusid_sdk-2.1.86.dist-info/RECORD,,
1025
+ lusid_sdk-2.1.88.dist-info/METADATA,sha256=CKxqaGO9i2P19yO7KG63633MBuUTrv_txwJEzCIJLCA,180565
1026
+ lusid_sdk-2.1.88.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
1027
+ lusid_sdk-2.1.88.dist-info/RECORD,,