compass_api_sdk 0.6.0__py3-none-any.whl → 0.6.2__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 compass_api_sdk might be problematic. Click here for more details.

Files changed (69) hide show
  1. compass_api_sdk/_version.py +2 -2
  2. compass_api_sdk/aave_v3.py +38 -104
  3. compass_api_sdk/aerodrome_slipstream.py +8 -28
  4. compass_api_sdk/models/__init__.py +107 -230
  5. compass_api_sdk/models/aave_avg_rateop.py +44 -16
  6. compass_api_sdk/models/aave_historical_transactionsop.py +45 -20
  7. compass_api_sdk/models/aave_liquidity_changeop.py +44 -18
  8. compass_api_sdk/models/aave_rateop.py +44 -16
  9. compass_api_sdk/models/aave_reserve_overviewop.py +44 -18
  10. compass_api_sdk/models/aave_std_rateop.py +44 -16
  11. compass_api_sdk/models/aave_token_priceop.py +44 -18
  12. compass_api_sdk/models/aave_user_position_per_tokenop.py +44 -20
  13. compass_api_sdk/models/aave_user_position_summaryop.py +44 -20
  14. compass_api_sdk/models/aerodrome_slipstream_liquidity_provision_positionsop.py +45 -20
  15. compass_api_sdk/models/aerodrome_slipstream_pool_priceop.py +45 -20
  16. compass_api_sdk/models/{tokenbalance.py → compass_api_backend_models_generic_read_response_portfolio_tokenbalance.py} +4 -2
  17. compass_api_sdk/models/compass_api_backend_models_pendle_read_response_positions_tokenbalance.py +18 -0
  18. compass_api_sdk/models/details.py +39 -0
  19. compass_api_sdk/models/generic_allowanceop.py +45 -18
  20. compass_api_sdk/models/generic_ensop.py +45 -16
  21. compass_api_sdk/models/generic_portfolioop.py +45 -18
  22. compass_api_sdk/models/generic_supported_tokensop.py +44 -20
  23. compass_api_sdk/models/generic_visualize_portfolioop.py +45 -20
  24. compass_api_sdk/models/increaseallowanceparams.py +20 -16
  25. compass_api_sdk/models/increaseallowancerequest.py +20 -16
  26. compass_api_sdk/models/lpbalance.py +20 -0
  27. compass_api_sdk/models/morpho_market_positionop.py +44 -18
  28. compass_api_sdk/models/morpho_marketop.py +44 -18
  29. compass_api_sdk/models/morpho_marketsop.py +7 -18
  30. compass_api_sdk/models/morpho_user_positionop.py +44 -18
  31. compass_api_sdk/models/morpho_vault_positionop.py +44 -18
  32. compass_api_sdk/models/morpho_vaultop.py +44 -16
  33. compass_api_sdk/models/morpho_vaultsop.py +7 -18
  34. compass_api_sdk/models/movement10percent.py +23 -0
  35. compass_api_sdk/models/multicallactiontype.py +0 -1
  36. compass_api_sdk/models/multicallauthorizationrequest.py +1 -15
  37. compass_api_sdk/models/openposition.py +28 -0
  38. compass_api_sdk/models/pendle_marketop.py +45 -19
  39. compass_api_sdk/models/pendle_marketsop.py +73 -0
  40. compass_api_sdk/models/pendle_positionop.py +45 -19
  41. compass_api_sdk/models/pendle_positionsop.py +80 -0
  42. compass_api_sdk/models/pendlelistmarketsresponse.py +17 -0
  43. compass_api_sdk/models/pendlelistuserpositionsresponse.py +17 -0
  44. compass_api_sdk/models/pendlemarket.py +46 -0
  45. compass_api_sdk/models/portfolio.py +10 -3
  46. compass_api_sdk/models/position.py +41 -0
  47. compass_api_sdk/models/sky_positionop.py +45 -16
  48. compass_api_sdk/models/syposition.py +17 -0
  49. compass_api_sdk/models/token_addressop.py +44 -18
  50. compass_api_sdk/models/token_balanceop.py +44 -17
  51. compass_api_sdk/models/uniswap_liquidity_provision_in_rangeop.py +44 -20
  52. compass_api_sdk/models/uniswap_liquidity_provision_positionsop.py +45 -20
  53. compass_api_sdk/models/uniswap_pool_priceop.py +44 -18
  54. compass_api_sdk/models/uniswap_quote_buy_exactlyop.py +44 -19
  55. compass_api_sdk/models/uniswap_quote_sell_exactlyop.py +44 -19
  56. compass_api_sdk/models/useroperation.py +20 -26
  57. compass_api_sdk/models/yieldrange.py +16 -0
  58. compass_api_sdk/morpho.py +28 -72
  59. compass_api_sdk/pendle.py +423 -21
  60. compass_api_sdk/sky.py +4 -8
  61. compass_api_sdk/token_sdk.py +8 -16
  62. compass_api_sdk/transaction_batching.py +0 -6
  63. compass_api_sdk/uniswap_v3.py +20 -64
  64. compass_api_sdk/universal.py +34 -60
  65. {compass_api_sdk-0.6.0.dist-info → compass_api_sdk-0.6.2.dist-info}/METADATA +5 -3
  66. {compass_api_sdk-0.6.0.dist-info → compass_api_sdk-0.6.2.dist-info}/RECORD +67 -56
  67. compass_api_sdk/models/contractname.py +0 -41
  68. compass_api_sdk/models/increaseallowanceanyparams.py +0 -58
  69. {compass_api_sdk-0.6.0.dist-info → compass_api_sdk-0.6.2.dist-info}/WHEEL +0 -0
@@ -1,11 +1,17 @@
1
1
  """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
2
 
3
3
  from __future__ import annotations
4
- from compass_api_sdk.types import BaseModel
4
+ from compass_api_sdk.types import (
5
+ BaseModel,
6
+ Nullable,
7
+ OptionalNullable,
8
+ UNSET,
9
+ UNSET_SENTINEL,
10
+ )
5
11
  from compass_api_sdk.utils import FieldMetadata, QueryParamMetadata
6
12
  from enum import Enum
7
- from typing import Optional, Union
8
- from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
13
+ from pydantic import model_serializer
14
+ from typing_extensions import Annotated, NotRequired, TypedDict
9
15
 
10
16
 
11
17
  class MorphoUserPositionChain(str, Enum):
@@ -13,20 +19,10 @@ class MorphoUserPositionChain(str, Enum):
13
19
  BASE_MAINNET = "base:mainnet"
14
20
 
15
21
 
16
- MorphoUserPositionBlockTypedDict = TypeAliasType(
17
- "MorphoUserPositionBlockTypedDict", Union[int, str]
18
- )
19
- r"""The block number you want to get this data at."""
20
-
21
-
22
- MorphoUserPositionBlock = TypeAliasType("MorphoUserPositionBlock", Union[int, str])
23
- r"""The block number you want to get this data at."""
24
-
25
-
26
22
  class MorphoUserPositionRequestTypedDict(TypedDict):
27
23
  chain: MorphoUserPositionChain
28
- block: NotRequired[MorphoUserPositionBlockTypedDict]
29
- r"""The block number you want to get this data at."""
24
+ block: NotRequired[Nullable[int]]
25
+ r"""Optional block number (defaults to latest)."""
30
26
  user_address: str
31
27
  r"""The user wallet address of the desired user position."""
32
28
 
@@ -38,12 +34,42 @@ class MorphoUserPositionRequest(BaseModel):
38
34
  ] = MorphoUserPositionChain.ETHEREUM_MAINNET
39
35
 
40
36
  block: Annotated[
41
- Optional[MorphoUserPositionBlock],
37
+ OptionalNullable[int],
42
38
  FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
43
- ] = None
44
- r"""The block number you want to get this data at."""
39
+ ] = UNSET
40
+ r"""Optional block number (defaults to latest)."""
45
41
 
46
42
  user_address: Annotated[
47
43
  str, FieldMetadata(query=QueryParamMetadata(style="form", explode=True))
48
44
  ] = "0xa829B388A3DF7f581cE957a95edbe419dd146d1B"
49
45
  r"""The user wallet address of the desired user position."""
46
+
47
+ @model_serializer(mode="wrap")
48
+ def serialize_model(self, handler):
49
+ optional_fields = ["block"]
50
+ nullable_fields = ["block"]
51
+ null_default_fields = []
52
+
53
+ serialized = handler(self)
54
+
55
+ m = {}
56
+
57
+ for n, f in type(self).model_fields.items():
58
+ k = f.alias or n
59
+ val = serialized.get(k)
60
+ serialized.pop(k, None)
61
+
62
+ optional_nullable = k in optional_fields and k in nullable_fields
63
+ is_set = (
64
+ self.__pydantic_fields_set__.intersection({n})
65
+ or k in null_default_fields
66
+ ) # pylint: disable=no-member
67
+
68
+ if val is not None and val != UNSET_SENTINEL:
69
+ m[k] = val
70
+ elif val != UNSET_SENTINEL and (
71
+ not k in optional_fields or (optional_nullable and is_set)
72
+ ):
73
+ m[k] = val
74
+
75
+ return m
@@ -1,11 +1,17 @@
1
1
  """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
2
 
3
3
  from __future__ import annotations
4
- from compass_api_sdk.types import BaseModel
4
+ from compass_api_sdk.types import (
5
+ BaseModel,
6
+ Nullable,
7
+ OptionalNullable,
8
+ UNSET,
9
+ UNSET_SENTINEL,
10
+ )
5
11
  from compass_api_sdk.utils import FieldMetadata, QueryParamMetadata
6
12
  from enum import Enum
7
- from typing import Optional, Union
8
- from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
13
+ from pydantic import model_serializer
14
+ from typing_extensions import Annotated, NotRequired, TypedDict
9
15
 
10
16
 
11
17
  class MorphoVaultPositionChain(str, Enum):
@@ -13,20 +19,10 @@ class MorphoVaultPositionChain(str, Enum):
13
19
  BASE_MAINNET = "base:mainnet"
14
20
 
15
21
 
16
- MorphoVaultPositionBlockTypedDict = TypeAliasType(
17
- "MorphoVaultPositionBlockTypedDict", Union[int, str]
18
- )
19
- r"""The block number you want to get this data at."""
20
-
21
-
22
- MorphoVaultPositionBlock = TypeAliasType("MorphoVaultPositionBlock", Union[int, str])
23
- r"""The block number you want to get this data at."""
24
-
25
-
26
22
  class MorphoVaultPositionRequestTypedDict(TypedDict):
27
23
  chain: MorphoVaultPositionChain
28
- block: NotRequired[MorphoVaultPositionBlockTypedDict]
29
- r"""The block number you want to get this data at."""
24
+ block: NotRequired[Nullable[int]]
25
+ r"""Optional block number (defaults to latest)."""
30
26
  user_address: str
31
27
  r"""The user address of the desired vault position."""
32
28
  vault_address: str
@@ -40,10 +36,10 @@ class MorphoVaultPositionRequest(BaseModel):
40
36
  ] = MorphoVaultPositionChain.ETHEREUM_MAINNET
41
37
 
42
38
  block: Annotated[
43
- Optional[MorphoVaultPositionBlock],
39
+ OptionalNullable[int],
44
40
  FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
45
- ] = None
46
- r"""The block number you want to get this data at."""
41
+ ] = UNSET
42
+ r"""Optional block number (defaults to latest)."""
47
43
 
48
44
  user_address: Annotated[
49
45
  str, FieldMetadata(query=QueryParamMetadata(style="form", explode=True))
@@ -54,3 +50,33 @@ class MorphoVaultPositionRequest(BaseModel):
54
50
  str, FieldMetadata(query=QueryParamMetadata(style="form", explode=True))
55
51
  ] = "0xbEef047a543E45807105E51A8BBEFCc5950fcfBa"
56
52
  r"""The vault address of the desired vault position."""
53
+
54
+ @model_serializer(mode="wrap")
55
+ def serialize_model(self, handler):
56
+ optional_fields = ["block"]
57
+ nullable_fields = ["block"]
58
+ null_default_fields = []
59
+
60
+ serialized = handler(self)
61
+
62
+ m = {}
63
+
64
+ for n, f in type(self).model_fields.items():
65
+ k = f.alias or n
66
+ val = serialized.get(k)
67
+ serialized.pop(k, None)
68
+
69
+ optional_nullable = k in optional_fields and k in nullable_fields
70
+ is_set = (
71
+ self.__pydantic_fields_set__.intersection({n})
72
+ or k in null_default_fields
73
+ ) # pylint: disable=no-member
74
+
75
+ if val is not None and val != UNSET_SENTINEL:
76
+ m[k] = val
77
+ elif val != UNSET_SENTINEL and (
78
+ not k in optional_fields or (optional_nullable and is_set)
79
+ ):
80
+ m[k] = val
81
+
82
+ return m
@@ -1,11 +1,17 @@
1
1
  """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
2
 
3
3
  from __future__ import annotations
4
- from compass_api_sdk.types import BaseModel
4
+ from compass_api_sdk.types import (
5
+ BaseModel,
6
+ Nullable,
7
+ OptionalNullable,
8
+ UNSET,
9
+ UNSET_SENTINEL,
10
+ )
5
11
  from compass_api_sdk.utils import FieldMetadata, QueryParamMetadata
6
12
  from enum import Enum
7
- from typing import Optional, Union
8
- from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
13
+ from pydantic import model_serializer
14
+ from typing_extensions import Annotated, NotRequired, TypedDict
9
15
 
10
16
 
11
17
  class MorphoVaultChain(str, Enum):
@@ -13,18 +19,10 @@ class MorphoVaultChain(str, Enum):
13
19
  BASE_MAINNET = "base:mainnet"
14
20
 
15
21
 
16
- MorphoVaultBlockTypedDict = TypeAliasType("MorphoVaultBlockTypedDict", Union[int, str])
17
- r"""The block number you want to get this data at."""
18
-
19
-
20
- MorphoVaultBlock = TypeAliasType("MorphoVaultBlock", Union[int, str])
21
- r"""The block number you want to get this data at."""
22
-
23
-
24
22
  class MorphoVaultRequestTypedDict(TypedDict):
25
23
  chain: MorphoVaultChain
26
- block: NotRequired[MorphoVaultBlockTypedDict]
27
- r"""The block number you want to get this data at."""
24
+ block: NotRequired[Nullable[int]]
25
+ r"""Optional block number (defaults to latest)."""
28
26
  vault_address: str
29
27
  r"""The vault address of the desired vault data & metrics."""
30
28
 
@@ -36,12 +34,42 @@ class MorphoVaultRequest(BaseModel):
36
34
  ] = MorphoVaultChain.ETHEREUM_MAINNET
37
35
 
38
36
  block: Annotated[
39
- Optional[MorphoVaultBlock],
37
+ OptionalNullable[int],
40
38
  FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
41
- ] = None
42
- r"""The block number you want to get this data at."""
39
+ ] = UNSET
40
+ r"""Optional block number (defaults to latest)."""
43
41
 
44
42
  vault_address: Annotated[
45
43
  str, FieldMetadata(query=QueryParamMetadata(style="form", explode=True))
46
44
  ] = "0xbEef047a543E45807105E51A8BBEFCc5950fcfBa"
47
45
  r"""The vault address of the desired vault data & metrics."""
46
+
47
+ @model_serializer(mode="wrap")
48
+ def serialize_model(self, handler):
49
+ optional_fields = ["block"]
50
+ nullable_fields = ["block"]
51
+ null_default_fields = []
52
+
53
+ serialized = handler(self)
54
+
55
+ m = {}
56
+
57
+ for n, f in type(self).model_fields.items():
58
+ k = f.alias or n
59
+ val = serialized.get(k)
60
+ serialized.pop(k, None)
61
+
62
+ optional_nullable = k in optional_fields and k in nullable_fields
63
+ is_set = (
64
+ self.__pydantic_fields_set__.intersection({n})
65
+ or k in null_default_fields
66
+ ) # pylint: disable=no-member
67
+
68
+ if val is not None and val != UNSET_SENTINEL:
69
+ m[k] = val
70
+ elif val != UNSET_SENTINEL and (
71
+ not k in optional_fields or (optional_nullable and is_set)
72
+ ):
73
+ m[k] = val
74
+
75
+ return m
@@ -11,8 +11,7 @@ from compass_api_sdk.types import (
11
11
  from compass_api_sdk.utils import FieldMetadata, QueryParamMetadata
12
12
  from enum import Enum
13
13
  from pydantic import model_serializer
14
- from typing import Optional, Union
15
- from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
14
+ from typing_extensions import Annotated, NotRequired, TypedDict
16
15
 
17
16
 
18
17
  class MorphoVaultsChain(str, Enum):
@@ -20,20 +19,10 @@ class MorphoVaultsChain(str, Enum):
20
19
  BASE_MAINNET = "base:mainnet"
21
20
 
22
21
 
23
- MorphoVaultsBlockTypedDict = TypeAliasType(
24
- "MorphoVaultsBlockTypedDict", Union[int, str]
25
- )
26
- r"""The block number you want to get this data at."""
27
-
28
-
29
- MorphoVaultsBlock = TypeAliasType("MorphoVaultsBlock", Union[int, str])
30
- r"""The block number you want to get this data at."""
31
-
32
-
33
22
  class MorphoVaultsRequestTypedDict(TypedDict):
34
23
  chain: MorphoVaultsChain
35
- block: NotRequired[MorphoVaultsBlockTypedDict]
36
- r"""The block number you want to get this data at."""
24
+ block: NotRequired[Nullable[int]]
25
+ r"""Optional block number (defaults to latest)."""
37
26
  deposit_token: NotRequired[Nullable[str]]
38
27
  r"""Token address that will filter vaults by this deposit token."""
39
28
 
@@ -45,10 +34,10 @@ class MorphoVaultsRequest(BaseModel):
45
34
  ] = MorphoVaultsChain.ETHEREUM_MAINNET
46
35
 
47
36
  block: Annotated[
48
- Optional[MorphoVaultsBlock],
37
+ OptionalNullable[int],
49
38
  FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
50
- ] = None
51
- r"""The block number you want to get this data at."""
39
+ ] = UNSET
40
+ r"""Optional block number (defaults to latest)."""
52
41
 
53
42
  deposit_token: Annotated[
54
43
  OptionalNullable[str],
@@ -59,7 +48,7 @@ class MorphoVaultsRequest(BaseModel):
59
48
  @model_serializer(mode="wrap")
60
49
  def serialize_model(self, handler):
61
50
  optional_fields = ["block", "deposit_token"]
62
- nullable_fields = ["deposit_token"]
51
+ nullable_fields = ["block", "deposit_token"]
63
52
  null_default_fields = []
64
53
 
65
54
  serialized = handler(self)
@@ -0,0 +1,23 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+
3
+ from __future__ import annotations
4
+ from compass_api_sdk.types import BaseModel
5
+ import pydantic
6
+ from typing_extensions import Annotated, TypedDict
7
+
8
+
9
+ class Movement10PercentTypedDict(TypedDict):
10
+ pt_movement_up_usd: float
11
+ pt_movement_down_usd: float
12
+ yt_movement_up_usd: float
13
+ yt_movement_down_usd: float
14
+
15
+
16
+ class Movement10Percent(BaseModel):
17
+ pt_movement_up_usd: Annotated[float, pydantic.Field(alias="ptMovementUpUsd")]
18
+
19
+ pt_movement_down_usd: Annotated[float, pydantic.Field(alias="ptMovementDownUsd")]
20
+
21
+ yt_movement_up_usd: Annotated[float, pydantic.Field(alias="ytMovementUpUsd")]
22
+
23
+ yt_movement_down_usd: Annotated[float, pydantic.Field(alias="ytMovementDownUsd")]
@@ -15,7 +15,6 @@ class MulticallActionType(str, Enum):
15
15
  AERODROME_SLIPSTREAM_SELL_EXACTLY = "AERODROME_SLIPSTREAM_SELL_EXACTLY"
16
16
  AERODROME_SLIPSTREAM_WITHDRAW_LIQUIDITY = "AERODROME_SLIPSTREAM_WITHDRAW_LIQUIDITY"
17
17
  ALLOWANCE_INCREASE = "ALLOWANCE_INCREASE"
18
- ALLOWANCE_INCREASE_ANY = "ALLOWANCE_INCREASE_ANY"
19
18
  MORPHO_BORROW = "MORPHO_BORROW"
20
19
  MORPHO_DEPOSIT = "MORPHO_DEPOSIT"
21
20
  MORPHO_REPAY = "MORPHO_REPAY"
@@ -3,16 +3,7 @@
3
3
  from __future__ import annotations
4
4
  from .chain import Chain
5
5
  from compass_api_sdk.types import BaseModel
6
- from typing import Optional, Union
7
- from typing_extensions import NotRequired, TypeAliasType, TypedDict
8
-
9
-
10
- BlockTypedDict = TypeAliasType("BlockTypedDict", Union[int, str])
11
- r"""The block number you want to get this data at."""
12
-
13
-
14
- Block = TypeAliasType("Block", Union[int, str])
15
- r"""The block number you want to get this data at."""
6
+ from typing_extensions import TypedDict
16
7
 
17
8
 
18
9
  class MulticallAuthorizationRequestTypedDict(TypedDict):
@@ -29,8 +20,6 @@ class MulticallAuthorizationRequestTypedDict(TypedDict):
29
20
  r"""The chain to use."""
30
21
  sender: str
31
22
  r"""The Ethereum address to use for authorization"""
32
- block: NotRequired[BlockTypedDict]
33
- r"""The block number you want to get this data at."""
34
23
 
35
24
 
36
25
  class MulticallAuthorizationRequest(BaseModel):
@@ -48,6 +37,3 @@ class MulticallAuthorizationRequest(BaseModel):
48
37
 
49
38
  sender: str
50
39
  r"""The Ethereum address to use for authorization"""
51
-
52
- block: Optional[Block] = None
53
- r"""The block number you want to get this data at."""
@@ -0,0 +1,28 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+
3
+ from __future__ import annotations
4
+ from .compass_api_backend_models_pendle_read_response_positions_tokenbalance import (
5
+ CompassAPIBackendModelsPendleReadResponsePositionsTokenBalance,
6
+ CompassAPIBackendModelsPendleReadResponsePositionsTokenBalanceTypedDict,
7
+ )
8
+ from .lpbalance import LpBalance, LpBalanceTypedDict
9
+ from compass_api_sdk.types import BaseModel
10
+ import pydantic
11
+ from typing_extensions import Annotated, TypedDict
12
+
13
+
14
+ class OpenPositionTypedDict(TypedDict):
15
+ market_id: str
16
+ pt: CompassAPIBackendModelsPendleReadResponsePositionsTokenBalanceTypedDict
17
+ yt: CompassAPIBackendModelsPendleReadResponsePositionsTokenBalanceTypedDict
18
+ lp: LpBalanceTypedDict
19
+
20
+
21
+ class OpenPosition(BaseModel):
22
+ market_id: Annotated[str, pydantic.Field(alias="marketId")]
23
+
24
+ pt: CompassAPIBackendModelsPendleReadResponsePositionsTokenBalance
25
+
26
+ yt: CompassAPIBackendModelsPendleReadResponsePositionsTokenBalance
27
+
28
+ lp: LpBalance
@@ -1,11 +1,17 @@
1
1
  """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
2
 
3
3
  from __future__ import annotations
4
- from compass_api_sdk.types import BaseModel
4
+ from compass_api_sdk.types import (
5
+ BaseModel,
6
+ Nullable,
7
+ OptionalNullable,
8
+ UNSET,
9
+ UNSET_SENTINEL,
10
+ )
5
11
  from compass_api_sdk.utils import FieldMetadata, QueryParamMetadata
6
12
  from enum import Enum
7
- from typing import Optional, Union
8
- from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
13
+ from pydantic import model_serializer
14
+ from typing_extensions import Annotated, NotRequired, TypedDict
9
15
 
10
16
 
11
17
  class PendleMarketChain(str, Enum):
@@ -16,21 +22,11 @@ class PendleMarketChain(str, Enum):
16
22
  ARBITRUM_MAINNET = "arbitrum:mainnet"
17
23
 
18
24
 
19
- PendleMarketBlockTypedDict = TypeAliasType(
20
- "PendleMarketBlockTypedDict", Union[int, str]
21
- )
22
- r"""The block number you want to get this data at."""
23
-
24
-
25
- PendleMarketBlock = TypeAliasType("PendleMarketBlock", Union[int, str])
26
- r"""The block number you want to get this data at."""
27
-
28
-
29
25
  class PendleMarketRequestTypedDict(TypedDict):
30
26
  chain: PendleMarketChain
31
27
  r"""The chain to use."""
32
- block: NotRequired[PendleMarketBlockTypedDict]
33
- r"""The block number you want to get this data at."""
28
+ block: NotRequired[Nullable[int]]
29
+ r"""Optional block number (defaults to latest)."""
34
30
  user_address: str
35
31
  r"""The user address of the desired position."""
36
32
  market_address: str
@@ -45,10 +41,10 @@ class PendleMarketRequest(BaseModel):
45
41
  r"""The chain to use."""
46
42
 
47
43
  block: Annotated[
48
- Optional[PendleMarketBlock],
44
+ OptionalNullable[int],
49
45
  FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
50
- ] = None
51
- r"""The block number you want to get this data at."""
46
+ ] = UNSET
47
+ r"""Optional block number (defaults to latest)."""
52
48
 
53
49
  user_address: Annotated[
54
50
  str, FieldMetadata(query=QueryParamMetadata(style="form", explode=True))
@@ -57,5 +53,35 @@ class PendleMarketRequest(BaseModel):
57
53
 
58
54
  market_address: Annotated[
59
55
  str, FieldMetadata(query=QueryParamMetadata(style="form", explode=True))
60
- ] = "0xdace1121e10500e9e29d071f01593fd76b000f08"
56
+ ] = "0xc374f7ec85f8c7de3207a10bb1978ba104bda3b2"
61
57
  r"""The market address of the desired position."""
58
+
59
+ @model_serializer(mode="wrap")
60
+ def serialize_model(self, handler):
61
+ optional_fields = ["block"]
62
+ nullable_fields = ["block"]
63
+ null_default_fields = []
64
+
65
+ serialized = handler(self)
66
+
67
+ m = {}
68
+
69
+ for n, f in type(self).model_fields.items():
70
+ k = f.alias or n
71
+ val = serialized.get(k)
72
+ serialized.pop(k, None)
73
+
74
+ optional_nullable = k in optional_fields and k in nullable_fields
75
+ is_set = (
76
+ self.__pydantic_fields_set__.intersection({n})
77
+ or k in null_default_fields
78
+ ) # pylint: disable=no-member
79
+
80
+ if val is not None and val != UNSET_SENTINEL:
81
+ m[k] = val
82
+ elif val != UNSET_SENTINEL and (
83
+ not k in optional_fields or (optional_nullable and is_set)
84
+ ):
85
+ m[k] = val
86
+
87
+ return m
@@ -0,0 +1,73 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+
3
+ from __future__ import annotations
4
+ from compass_api_sdk.types import (
5
+ BaseModel,
6
+ Nullable,
7
+ OptionalNullable,
8
+ UNSET,
9
+ UNSET_SENTINEL,
10
+ )
11
+ from compass_api_sdk.utils import FieldMetadata, QueryParamMetadata
12
+ from enum import Enum
13
+ from pydantic import model_serializer
14
+ from typing_extensions import Annotated, NotRequired, TypedDict
15
+
16
+
17
+ class PendleMarketsChain(str, Enum):
18
+ r"""The chain to use."""
19
+
20
+ BASE_MAINNET = "base:mainnet"
21
+ ETHEREUM_MAINNET = "ethereum:mainnet"
22
+ ARBITRUM_MAINNET = "arbitrum:mainnet"
23
+
24
+
25
+ class PendleMarketsRequestTypedDict(TypedDict):
26
+ chain: PendleMarketsChain
27
+ r"""The chain to use."""
28
+ block: NotRequired[Nullable[int]]
29
+ r"""Optional block number (defaults to latest)."""
30
+
31
+
32
+ class PendleMarketsRequest(BaseModel):
33
+ chain: Annotated[
34
+ PendleMarketsChain,
35
+ FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
36
+ ] = PendleMarketsChain.ETHEREUM_MAINNET
37
+ r"""The chain to use."""
38
+
39
+ block: Annotated[
40
+ OptionalNullable[int],
41
+ FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
42
+ ] = UNSET
43
+ r"""Optional block number (defaults to latest)."""
44
+
45
+ @model_serializer(mode="wrap")
46
+ def serialize_model(self, handler):
47
+ optional_fields = ["block"]
48
+ nullable_fields = ["block"]
49
+ null_default_fields = []
50
+
51
+ serialized = handler(self)
52
+
53
+ m = {}
54
+
55
+ for n, f in type(self).model_fields.items():
56
+ k = f.alias or n
57
+ val = serialized.get(k)
58
+ serialized.pop(k, None)
59
+
60
+ optional_nullable = k in optional_fields and k in nullable_fields
61
+ is_set = (
62
+ self.__pydantic_fields_set__.intersection({n})
63
+ or k in null_default_fields
64
+ ) # pylint: disable=no-member
65
+
66
+ if val is not None and val != UNSET_SENTINEL:
67
+ m[k] = val
68
+ elif val != UNSET_SENTINEL and (
69
+ not k in optional_fields or (optional_nullable and is_set)
70
+ ):
71
+ m[k] = val
72
+
73
+ return m
@@ -1,11 +1,17 @@
1
1
  """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
2
 
3
3
  from __future__ import annotations
4
- from compass_api_sdk.types import BaseModel
4
+ from compass_api_sdk.types import (
5
+ BaseModel,
6
+ Nullable,
7
+ OptionalNullable,
8
+ UNSET,
9
+ UNSET_SENTINEL,
10
+ )
5
11
  from compass_api_sdk.utils import FieldMetadata, QueryParamMetadata
6
12
  from enum import Enum
7
- from typing import Optional, Union
8
- from typing_extensions import Annotated, NotRequired, TypeAliasType, TypedDict
13
+ from pydantic import model_serializer
14
+ from typing_extensions import Annotated, NotRequired, TypedDict
9
15
 
10
16
 
11
17
  class PendlePositionChain(str, Enum):
@@ -16,21 +22,11 @@ class PendlePositionChain(str, Enum):
16
22
  ARBITRUM_MAINNET = "arbitrum:mainnet"
17
23
 
18
24
 
19
- PendlePositionBlockTypedDict = TypeAliasType(
20
- "PendlePositionBlockTypedDict", Union[int, str]
21
- )
22
- r"""The block number you want to get this data at."""
23
-
24
-
25
- PendlePositionBlock = TypeAliasType("PendlePositionBlock", Union[int, str])
26
- r"""The block number you want to get this data at."""
27
-
28
-
29
25
  class PendlePositionRequestTypedDict(TypedDict):
30
26
  chain: PendlePositionChain
31
27
  r"""The chain to use."""
32
- block: NotRequired[PendlePositionBlockTypedDict]
33
- r"""The block number you want to get this data at."""
28
+ block: NotRequired[Nullable[int]]
29
+ r"""Optional block number (defaults to latest)."""
34
30
  user_address: str
35
31
  r"""The user address of the desired position."""
36
32
  market_address: str
@@ -45,10 +41,10 @@ class PendlePositionRequest(BaseModel):
45
41
  r"""The chain to use."""
46
42
 
47
43
  block: Annotated[
48
- Optional[PendlePositionBlock],
44
+ OptionalNullable[int],
49
45
  FieldMetadata(query=QueryParamMetadata(style="form", explode=True)),
50
- ] = None
51
- r"""The block number you want to get this data at."""
46
+ ] = UNSET
47
+ r"""Optional block number (defaults to latest)."""
52
48
 
53
49
  user_address: Annotated[
54
50
  str, FieldMetadata(query=QueryParamMetadata(style="form", explode=True))
@@ -57,5 +53,35 @@ class PendlePositionRequest(BaseModel):
57
53
 
58
54
  market_address: Annotated[
59
55
  str, FieldMetadata(query=QueryParamMetadata(style="form", explode=True))
60
- ] = "0xdace1121e10500e9e29d071f01593fd76b000f08"
56
+ ] = "0xc374f7ec85f8c7de3207a10bb1978ba104bda3b2"
61
57
  r"""The market address of the desired position."""
58
+
59
+ @model_serializer(mode="wrap")
60
+ def serialize_model(self, handler):
61
+ optional_fields = ["block"]
62
+ nullable_fields = ["block"]
63
+ null_default_fields = []
64
+
65
+ serialized = handler(self)
66
+
67
+ m = {}
68
+
69
+ for n, f in type(self).model_fields.items():
70
+ k = f.alias or n
71
+ val = serialized.get(k)
72
+ serialized.pop(k, None)
73
+
74
+ optional_nullable = k in optional_fields and k in nullable_fields
75
+ is_set = (
76
+ self.__pydantic_fields_set__.intersection({n})
77
+ or k in null_default_fields
78
+ ) # pylint: disable=no-member
79
+
80
+ if val is not None and val != UNSET_SENTINEL:
81
+ m[k] = val
82
+ elif val != UNSET_SENTINEL and (
83
+ not k in optional_fields or (optional_nullable and is_set)
84
+ ):
85
+ m[k] = val
86
+
87
+ return m