crypticorn 2.17.0rc4__py3-none-any.whl → 2.17.0rc6__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.
- crypticorn/auth/client/api/admin_api.py +6 -26
- crypticorn/auth/client/api/auth_api.py +36 -148
- crypticorn/auth/client/api/service_api.py +3 -16
- crypticorn/auth/client/api/user_api.py +33 -136
- crypticorn/auth/client/api/wallet_api.py +18 -76
- crypticorn/auth/client/api_client.py +0 -5
- crypticorn/auth/client/models/add_wallet_request.py +1 -1
- crypticorn/auth/client/models/authorize_user_request.py +1 -1
- crypticorn/auth/client/models/create_api_key_request.py +1 -1
- crypticorn/auth/client/models/create_user_request.py +1 -1
- crypticorn/auth/client/models/get_api_keys200_response_inner.py +1 -1
- crypticorn/auth/client/models/list_wallets200_response_balances_inner_sale_round.py +1 -1
- crypticorn/auth/client/models/list_wallets200_response_balances_inner_wallet.py +1 -1
- crypticorn/auth/client/models/list_wallets200_response_balances_inner_wallet_vesting_wallets_inner.py +1 -1
- crypticorn/auth/client/models/list_wallets200_response_data_inner.py +1 -1
- crypticorn/auth/client/models/logout_default_response.py +1 -1
- crypticorn/auth/client/models/oauth_callback200_response_user.py +1 -1
- crypticorn/auth/client/models/refresh_token_info200_response_user_session.py +1 -1
- crypticorn/auth/client/models/rotate_tokens200_response.py +1 -1
- crypticorn/auth/client/models/token_info200_response.py +1 -1
- crypticorn/auth/client/models/update_user_request.py +1 -1
- crypticorn/auth/client/models/user_by_username200_response.py +1 -1
- crypticorn/auth/client/models/verify200_response.py +1 -1
- crypticorn/auth/client/models/verify_email200_response_auth.py +1 -1
- crypticorn/auth/client/models/verify_email200_response_auth_auth.py +1 -1
- crypticorn/auth/client/models/whoami200_response.py +1 -1
- crypticorn/cli/init.py +1 -1
- crypticorn/cli/templates/.env.docker.temp +3 -0
- crypticorn/cli/templates/.env.example.temp +4 -0
- crypticorn/cli/templates/Dockerfile +5 -2
- crypticorn/client.py +0 -1
- crypticorn/common/auth.py +31 -4
- crypticorn/common/decorators.py +1 -2
- crypticorn/common/enums.py +0 -2
- crypticorn/common/errors.py +10 -0
- crypticorn/common/metrics.py +1 -1
- crypticorn/common/middleware.py +0 -1
- crypticorn/common/pagination.py +116 -24
- crypticorn/common/router/admin_router.py +1 -11
- crypticorn/common/router/status_router.py +33 -2
- crypticorn/common/scopes.py +2 -2
- crypticorn/common/utils.py +1 -2
- crypticorn/dex/__init__.py +6 -0
- crypticorn/dex/client/__init__.py +49 -0
- crypticorn/dex/client/api/__init__.py +6 -0
- crypticorn/dex/client/api/admin_api.py +2983 -0
- crypticorn/dex/client/api/signals_api.py +1794 -0
- crypticorn/dex/client/api/status_api.py +889 -0
- crypticorn/dex/client/api_client.py +753 -0
- crypticorn/dex/client/api_response.py +20 -0
- crypticorn/dex/client/configuration.py +620 -0
- crypticorn/dex/client/exceptions.py +220 -0
- crypticorn/dex/client/models/__init__.py +30 -0
- crypticorn/dex/client/models/api_error_identifier.py +121 -0
- crypticorn/dex/client/models/api_error_level.py +37 -0
- crypticorn/dex/client/models/api_error_type.py +37 -0
- crypticorn/dex/client/models/exception_detail.py +117 -0
- crypticorn/dex/client/models/log_level.py +38 -0
- crypticorn/dex/client/models/paginated_response_signal_with_token.py +134 -0
- crypticorn/dex/client/models/risk.py +86 -0
- crypticorn/dex/client/models/signal_overview_stats.py +156 -0
- crypticorn/dex/client/models/signal_volume.py +84 -0
- crypticorn/dex/client/models/signal_with_token.py +163 -0
- crypticorn/dex/client/models/token_data.py +127 -0
- crypticorn/dex/client/models/token_detail.py +116 -0
- crypticorn/dex/client/py.typed +0 -0
- crypticorn/dex/client/rest.py +217 -0
- crypticorn/dex/main.py +1 -0
- crypticorn/hive/client/api/admin_api.py +18 -75
- crypticorn/hive/client/api/data_api.py +6 -28
- crypticorn/hive/client/api/models_api.py +22 -88
- crypticorn/hive/client/api/status_api.py +6 -27
- crypticorn/hive/client/api_client.py +0 -5
- crypticorn/hive/client/models/coin_info.py +1 -1
- crypticorn/hive/client/models/exception_detail.py +1 -1
- crypticorn/hive/client/models/target_info.py +1 -1
- crypticorn/hive/utils.py +2 -2
- crypticorn/klines/client/api/admin_api.py +18 -75
- crypticorn/klines/client/api/change_in_timeframe_api.py +3 -16
- crypticorn/klines/client/api/funding_rates_api.py +3 -16
- crypticorn/klines/client/api/ohlcv_data_api.py +3 -16
- crypticorn/klines/client/api/status_api.py +6 -27
- crypticorn/klines/client/api/symbols_api.py +3 -16
- crypticorn/klines/client/api/udf_api.py +18 -74
- crypticorn/klines/client/api_client.py +0 -5
- crypticorn/klines/client/models/exception_detail.py +1 -1
- crypticorn/klines/client/models/ohlcv.py +1 -1
- crypticorn/klines/client/models/symbol_group.py +1 -1
- crypticorn/klines/client/models/udf_config.py +1 -1
- crypticorn/metrics/client/api/admin_api.py +18 -75
- crypticorn/metrics/client/api/exchanges_api.py +12 -52
- crypticorn/metrics/client/api/indicators_api.py +6 -28
- crypticorn/metrics/client/api/logs_api.py +3 -16
- crypticorn/metrics/client/api/marketcap_api.py +12 -52
- crypticorn/metrics/client/api/markets_api.py +3 -16
- crypticorn/metrics/client/api/quote_currencies_api.py +3 -16
- crypticorn/metrics/client/api/status_api.py +6 -27
- crypticorn/metrics/client/api/tokens_api.py +6 -26
- crypticorn/metrics/client/api_client.py +0 -5
- crypticorn/metrics/client/models/exception_detail.py +1 -1
- crypticorn/metrics/client/models/exchange_mapping.py +1 -1
- crypticorn/metrics/client/models/marketcap_ranking.py +1 -1
- crypticorn/metrics/client/models/marketcap_symbol_ranking.py +1 -1
- crypticorn/metrics/client/models/ohlcv.py +1 -1
- crypticorn/pay/client/api/admin_api.py +21 -87
- crypticorn/pay/client/api/now_payments_api.py +15 -64
- crypticorn/pay/client/api/payments_api.py +6 -28
- crypticorn/pay/client/api/products_api.py +12 -52
- crypticorn/pay/client/api/status_api.py +6 -27
- crypticorn/pay/client/api_client.py +0 -5
- crypticorn/pay/client/models/exception_detail.py +1 -1
- crypticorn/pay/client/models/now_create_invoice_req.py +1 -1
- crypticorn/pay/client/models/now_create_invoice_res.py +1 -1
- crypticorn/pay/client/models/product.py +1 -1
- crypticorn/pay/client/models/product_create.py +1 -1
- crypticorn/pay/client/models/product_update.py +1 -1
- crypticorn/trade/client/__init__.py +15 -0
- crypticorn/trade/client/api/admin_api.py +43 -107
- crypticorn/trade/client/api/api_keys_api.py +207 -184
- crypticorn/trade/client/api/bots_api.py +6557 -240
- crypticorn/trade/client/api/exchanges_api.py +9 -36
- crypticorn/trade/client/api/notifications_api.py +18 -72
- crypticorn/trade/client/api/orders_api.py +220 -115
- crypticorn/trade/client/api/status_api.py +6 -24
- crypticorn/trade/client/api/strategies_api.py +15 -60
- crypticorn/trade/client/api/trading_actions_api.py +431 -112
- crypticorn/trade/client/models/__init__.py +15 -0
- crypticorn/trade/client/models/bot.py +7 -18
- crypticorn/trade/client/models/bot_create.py +17 -1
- crypticorn/trade/client/models/bot_update.py +17 -1
- crypticorn/trade/client/models/exchange_key_create.py +17 -1
- crypticorn/trade/client/models/exchange_key_update.py +17 -1
- crypticorn/trade/client/models/notification.py +17 -1
- crypticorn/trade/client/models/notification_create.py +17 -1
- crypticorn/trade/client/models/notification_update.py +17 -1
- crypticorn/trade/client/models/orders_count.py +88 -0
- crypticorn/trade/client/models/paginated_response_futures_trading_action.py +134 -0
- crypticorn/trade/client/models/paginated_response_order.py +134 -0
- crypticorn/trade/client/models/paginated_response_union_futures_trading_action_spot_trading_action.py +141 -0
- crypticorn/trade/client/models/paginated_response_union_futures_trading_action_spot_trading_action_data_inner.py +165 -0
- crypticorn/trade/client/models/pn_l.py +95 -0
- crypticorn/trade/client/models/spot_trading_action.py +207 -0
- crypticorn/trade/client/models/strategy.py +17 -1
- crypticorn/trade/client/models/strategy_create.py +17 -1
- crypticorn/trade/client/models/strategy_update.py +17 -1
- {crypticorn-2.17.0rc4.dist-info → crypticorn-2.17.0rc6.dist-info}/METADATA +3 -3
- {crypticorn-2.17.0rc4.dist-info → crypticorn-2.17.0rc6.dist-info}/RECORD +151 -116
- {crypticorn-2.17.0rc4.dist-info → crypticorn-2.17.0rc6.dist-info}/WHEEL +0 -0
- {crypticorn-2.17.0rc4.dist-info → crypticorn-2.17.0rc6.dist-info}/entry_points.txt +0 -0
- {crypticorn-2.17.0rc4.dist-info → crypticorn-2.17.0rc6.dist-info}/licenses/LICENSE +0 -0
- {crypticorn-2.17.0rc4.dist-info → crypticorn-2.17.0rc6.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,134 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
"""
|
4
|
+
DEX AI API
|
5
|
+
|
6
|
+
API for DEX AI
|
7
|
+
|
8
|
+
The version of the OpenAPI document: 1.0.0
|
9
|
+
Generated by OpenAPI Generator (https://openapi-generator.tech)
|
10
|
+
|
11
|
+
Do not edit the class manually.
|
12
|
+
""" # noqa: E501
|
13
|
+
|
14
|
+
|
15
|
+
from __future__ import annotations
|
16
|
+
import pprint
|
17
|
+
import re # noqa: F401
|
18
|
+
import json
|
19
|
+
|
20
|
+
from pydantic import BaseModel, ConfigDict, Field, StrictInt
|
21
|
+
from typing import Any, ClassVar, Dict, List, Optional
|
22
|
+
from crypticorn.dex.client.models.signal_with_token import SignalWithToken
|
23
|
+
from typing import Set
|
24
|
+
from typing_extensions import Self
|
25
|
+
|
26
|
+
|
27
|
+
class PaginatedResponseSignalWithToken(BaseModel):
|
28
|
+
"""
|
29
|
+
PaginatedResponseSignalWithToken
|
30
|
+
""" # noqa: E501
|
31
|
+
|
32
|
+
data: List[SignalWithToken]
|
33
|
+
total: StrictInt = Field(description="The total number of items")
|
34
|
+
page: StrictInt = Field(description="The current page number")
|
35
|
+
page_size: StrictInt = Field(description="The number of items per page")
|
36
|
+
prev: Optional[StrictInt] = None
|
37
|
+
next: Optional[StrictInt] = None
|
38
|
+
last: Optional[StrictInt] = None
|
39
|
+
__properties: ClassVar[List[str]] = [
|
40
|
+
"data",
|
41
|
+
"total",
|
42
|
+
"page",
|
43
|
+
"page_size",
|
44
|
+
"prev",
|
45
|
+
"next",
|
46
|
+
"last",
|
47
|
+
]
|
48
|
+
|
49
|
+
model_config = ConfigDict(
|
50
|
+
populate_by_name=True,
|
51
|
+
validate_assignment=True,
|
52
|
+
protected_namespaces=(),
|
53
|
+
)
|
54
|
+
|
55
|
+
def to_str(self) -> str:
|
56
|
+
"""Returns the string representation of the model using alias"""
|
57
|
+
return pprint.pformat(self.model_dump(by_alias=True))
|
58
|
+
|
59
|
+
def to_json(self) -> str:
|
60
|
+
"""Returns the JSON representation of the model using alias"""
|
61
|
+
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
|
62
|
+
return json.dumps(self.to_dict())
|
63
|
+
|
64
|
+
@classmethod
|
65
|
+
def from_json(cls, json_str: str) -> Optional[Self]:
|
66
|
+
"""Create an instance of PaginatedResponseSignalWithToken from a JSON string"""
|
67
|
+
return cls.from_dict(json.loads(json_str))
|
68
|
+
|
69
|
+
def to_dict(self) -> Dict[str, Any]:
|
70
|
+
"""Return the dictionary representation of the model using alias.
|
71
|
+
|
72
|
+
This has the following differences from calling pydantic's
|
73
|
+
`self.model_dump(by_alias=True)`:
|
74
|
+
|
75
|
+
* `None` is only added to the output dict for nullable fields that
|
76
|
+
were set at model initialization. Other fields with value `None`
|
77
|
+
are ignored.
|
78
|
+
"""
|
79
|
+
excluded_fields: Set[str] = set([])
|
80
|
+
|
81
|
+
_dict = self.model_dump(
|
82
|
+
by_alias=True,
|
83
|
+
exclude=excluded_fields,
|
84
|
+
exclude_none=True,
|
85
|
+
)
|
86
|
+
# override the default output from pydantic by calling `to_dict()` of each item in data (list)
|
87
|
+
_items = []
|
88
|
+
if self.data:
|
89
|
+
for _item_data in self.data:
|
90
|
+
if _item_data:
|
91
|
+
_items.append(_item_data.to_dict())
|
92
|
+
_dict["data"] = _items
|
93
|
+
# set to None if prev (nullable) is None
|
94
|
+
# and model_fields_set contains the field
|
95
|
+
if self.prev is None and "prev" in self.model_fields_set:
|
96
|
+
_dict["prev"] = None
|
97
|
+
|
98
|
+
# set to None if next (nullable) is None
|
99
|
+
# and model_fields_set contains the field
|
100
|
+
if self.next is None and "next" in self.model_fields_set:
|
101
|
+
_dict["next"] = None
|
102
|
+
|
103
|
+
# set to None if last (nullable) is None
|
104
|
+
# and model_fields_set contains the field
|
105
|
+
if self.last is None and "last" in self.model_fields_set:
|
106
|
+
_dict["last"] = None
|
107
|
+
|
108
|
+
return _dict
|
109
|
+
|
110
|
+
@classmethod
|
111
|
+
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
112
|
+
"""Create an instance of PaginatedResponseSignalWithToken from a dict"""
|
113
|
+
if obj is None:
|
114
|
+
return None
|
115
|
+
|
116
|
+
if not isinstance(obj, dict):
|
117
|
+
return cls.model_validate(obj)
|
118
|
+
|
119
|
+
_obj = cls.model_validate(
|
120
|
+
{
|
121
|
+
"data": (
|
122
|
+
[SignalWithToken.from_dict(_item) for _item in obj["data"]]
|
123
|
+
if obj.get("data") is not None
|
124
|
+
else None
|
125
|
+
),
|
126
|
+
"total": obj.get("total"),
|
127
|
+
"page": obj.get("page"),
|
128
|
+
"page_size": obj.get("page_size"),
|
129
|
+
"prev": obj.get("prev"),
|
130
|
+
"next": obj.get("next"),
|
131
|
+
"last": obj.get("last"),
|
132
|
+
}
|
133
|
+
)
|
134
|
+
return _obj
|
@@ -0,0 +1,86 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
"""
|
4
|
+
DEX AI API
|
5
|
+
|
6
|
+
API for DEX AI
|
7
|
+
|
8
|
+
The version of the OpenAPI document: 1.0.0
|
9
|
+
Generated by OpenAPI Generator (https://openapi-generator.tech)
|
10
|
+
|
11
|
+
Do not edit the class manually.
|
12
|
+
""" # noqa: E501
|
13
|
+
|
14
|
+
|
15
|
+
from __future__ import annotations
|
16
|
+
import pprint
|
17
|
+
import re # noqa: F401
|
18
|
+
import json
|
19
|
+
|
20
|
+
from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictInt
|
21
|
+
from typing import Any, ClassVar, Dict, List
|
22
|
+
from typing import Optional, Set
|
23
|
+
from typing_extensions import Self
|
24
|
+
|
25
|
+
|
26
|
+
class Risk(BaseModel):
|
27
|
+
"""
|
28
|
+
Model for risk assessment
|
29
|
+
""" # noqa: E501
|
30
|
+
|
31
|
+
rugged: StrictBool = Field(description="Is token rugged")
|
32
|
+
score: StrictInt = Field(description="Overall risk score")
|
33
|
+
__properties: ClassVar[List[str]] = ["rugged", "score"]
|
34
|
+
|
35
|
+
model_config = ConfigDict(
|
36
|
+
populate_by_name=True,
|
37
|
+
validate_assignment=True,
|
38
|
+
protected_namespaces=(),
|
39
|
+
)
|
40
|
+
|
41
|
+
def to_str(self) -> str:
|
42
|
+
"""Returns the string representation of the model using alias"""
|
43
|
+
return pprint.pformat(self.model_dump(by_alias=True))
|
44
|
+
|
45
|
+
def to_json(self) -> str:
|
46
|
+
"""Returns the JSON representation of the model using alias"""
|
47
|
+
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
|
48
|
+
return json.dumps(self.to_dict())
|
49
|
+
|
50
|
+
@classmethod
|
51
|
+
def from_json(cls, json_str: str) -> Optional[Self]:
|
52
|
+
"""Create an instance of Risk from a JSON string"""
|
53
|
+
return cls.from_dict(json.loads(json_str))
|
54
|
+
|
55
|
+
def to_dict(self) -> Dict[str, Any]:
|
56
|
+
"""Return the dictionary representation of the model using alias.
|
57
|
+
|
58
|
+
This has the following differences from calling pydantic's
|
59
|
+
`self.model_dump(by_alias=True)`:
|
60
|
+
|
61
|
+
* `None` is only added to the output dict for nullable fields that
|
62
|
+
were set at model initialization. Other fields with value `None`
|
63
|
+
are ignored.
|
64
|
+
"""
|
65
|
+
excluded_fields: Set[str] = set([])
|
66
|
+
|
67
|
+
_dict = self.model_dump(
|
68
|
+
by_alias=True,
|
69
|
+
exclude=excluded_fields,
|
70
|
+
exclude_none=True,
|
71
|
+
)
|
72
|
+
return _dict
|
73
|
+
|
74
|
+
@classmethod
|
75
|
+
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
76
|
+
"""Create an instance of Risk from a dict"""
|
77
|
+
if obj is None:
|
78
|
+
return None
|
79
|
+
|
80
|
+
if not isinstance(obj, dict):
|
81
|
+
return cls.model_validate(obj)
|
82
|
+
|
83
|
+
_obj = cls.model_validate(
|
84
|
+
{"rugged": obj.get("rugged"), "score": obj.get("score")}
|
85
|
+
)
|
86
|
+
return _obj
|
@@ -0,0 +1,156 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
"""
|
4
|
+
DEX AI API
|
5
|
+
|
6
|
+
API for DEX AI
|
7
|
+
|
8
|
+
The version of the OpenAPI document: 1.0.0
|
9
|
+
Generated by OpenAPI Generator (https://openapi-generator.tech)
|
10
|
+
|
11
|
+
Do not edit the class manually.
|
12
|
+
""" # noqa: E501
|
13
|
+
|
14
|
+
|
15
|
+
from __future__ import annotations
|
16
|
+
import pprint
|
17
|
+
import re # noqa: F401
|
18
|
+
import json
|
19
|
+
|
20
|
+
from pydantic import BaseModel, ConfigDict, Field, StrictFloat, StrictInt, StrictStr
|
21
|
+
from typing import Any, ClassVar, Dict, List, Optional, Union
|
22
|
+
from typing import Set
|
23
|
+
from typing_extensions import Self
|
24
|
+
|
25
|
+
|
26
|
+
class SignalOverviewStats(BaseModel):
|
27
|
+
"""
|
28
|
+
Model for signal statistics response
|
29
|
+
""" # noqa: E501
|
30
|
+
|
31
|
+
timestamp: StrictInt = Field(description="The timestamp of the stats")
|
32
|
+
total: StrictInt = Field(description="Total number of tokens analyzed")
|
33
|
+
win_rate: Union[StrictFloat, StrictInt] = Field(
|
34
|
+
description="Overall win rate as a percentage"
|
35
|
+
)
|
36
|
+
avg_performance: Union[StrictFloat, StrictInt] = Field(
|
37
|
+
description="Average performance as a percentage"
|
38
|
+
)
|
39
|
+
median_performance: Union[StrictFloat, StrictInt] = Field(
|
40
|
+
description="Median performance as a percentage"
|
41
|
+
)
|
42
|
+
best_risk_category: Optional[StrictStr] = None
|
43
|
+
best_month: Optional[StrictStr] = None
|
44
|
+
best_holding_period: Optional[StrictStr] = None
|
45
|
+
best_launch_hour: Optional[StrictInt] = None
|
46
|
+
best_launch_day: Optional[StrictStr] = None
|
47
|
+
__properties: ClassVar[List[str]] = [
|
48
|
+
"timestamp",
|
49
|
+
"total",
|
50
|
+
"win_rate",
|
51
|
+
"avg_performance",
|
52
|
+
"median_performance",
|
53
|
+
"best_risk_category",
|
54
|
+
"best_month",
|
55
|
+
"best_holding_period",
|
56
|
+
"best_launch_hour",
|
57
|
+
"best_launch_day",
|
58
|
+
]
|
59
|
+
|
60
|
+
model_config = ConfigDict(
|
61
|
+
populate_by_name=True,
|
62
|
+
validate_assignment=True,
|
63
|
+
protected_namespaces=(),
|
64
|
+
)
|
65
|
+
|
66
|
+
def to_str(self) -> str:
|
67
|
+
"""Returns the string representation of the model using alias"""
|
68
|
+
return pprint.pformat(self.model_dump(by_alias=True))
|
69
|
+
|
70
|
+
def to_json(self) -> str:
|
71
|
+
"""Returns the JSON representation of the model using alias"""
|
72
|
+
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
|
73
|
+
return json.dumps(self.to_dict())
|
74
|
+
|
75
|
+
@classmethod
|
76
|
+
def from_json(cls, json_str: str) -> Optional[Self]:
|
77
|
+
"""Create an instance of SignalOverviewStats from a JSON string"""
|
78
|
+
return cls.from_dict(json.loads(json_str))
|
79
|
+
|
80
|
+
def to_dict(self) -> Dict[str, Any]:
|
81
|
+
"""Return the dictionary representation of the model using alias.
|
82
|
+
|
83
|
+
This has the following differences from calling pydantic's
|
84
|
+
`self.model_dump(by_alias=True)`:
|
85
|
+
|
86
|
+
* `None` is only added to the output dict for nullable fields that
|
87
|
+
were set at model initialization. Other fields with value `None`
|
88
|
+
are ignored.
|
89
|
+
"""
|
90
|
+
excluded_fields: Set[str] = set([])
|
91
|
+
|
92
|
+
_dict = self.model_dump(
|
93
|
+
by_alias=True,
|
94
|
+
exclude=excluded_fields,
|
95
|
+
exclude_none=True,
|
96
|
+
)
|
97
|
+
# set to None if best_risk_category (nullable) is None
|
98
|
+
# and model_fields_set contains the field
|
99
|
+
if (
|
100
|
+
self.best_risk_category is None
|
101
|
+
and "best_risk_category" in self.model_fields_set
|
102
|
+
):
|
103
|
+
_dict["best_risk_category"] = None
|
104
|
+
|
105
|
+
# set to None if best_month (nullable) is None
|
106
|
+
# and model_fields_set contains the field
|
107
|
+
if self.best_month is None and "best_month" in self.model_fields_set:
|
108
|
+
_dict["best_month"] = None
|
109
|
+
|
110
|
+
# set to None if best_holding_period (nullable) is None
|
111
|
+
# and model_fields_set contains the field
|
112
|
+
if (
|
113
|
+
self.best_holding_period is None
|
114
|
+
and "best_holding_period" in self.model_fields_set
|
115
|
+
):
|
116
|
+
_dict["best_holding_period"] = None
|
117
|
+
|
118
|
+
# set to None if best_launch_hour (nullable) is None
|
119
|
+
# and model_fields_set contains the field
|
120
|
+
if (
|
121
|
+
self.best_launch_hour is None
|
122
|
+
and "best_launch_hour" in self.model_fields_set
|
123
|
+
):
|
124
|
+
_dict["best_launch_hour"] = None
|
125
|
+
|
126
|
+
# set to None if best_launch_day (nullable) is None
|
127
|
+
# and model_fields_set contains the field
|
128
|
+
if self.best_launch_day is None and "best_launch_day" in self.model_fields_set:
|
129
|
+
_dict["best_launch_day"] = None
|
130
|
+
|
131
|
+
return _dict
|
132
|
+
|
133
|
+
@classmethod
|
134
|
+
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
135
|
+
"""Create an instance of SignalOverviewStats from a dict"""
|
136
|
+
if obj is None:
|
137
|
+
return None
|
138
|
+
|
139
|
+
if not isinstance(obj, dict):
|
140
|
+
return cls.model_validate(obj)
|
141
|
+
|
142
|
+
_obj = cls.model_validate(
|
143
|
+
{
|
144
|
+
"timestamp": obj.get("timestamp"),
|
145
|
+
"total": obj.get("total"),
|
146
|
+
"win_rate": obj.get("win_rate"),
|
147
|
+
"avg_performance": obj.get("avg_performance"),
|
148
|
+
"median_performance": obj.get("median_performance"),
|
149
|
+
"best_risk_category": obj.get("best_risk_category"),
|
150
|
+
"best_month": obj.get("best_month"),
|
151
|
+
"best_holding_period": obj.get("best_holding_period"),
|
152
|
+
"best_launch_hour": obj.get("best_launch_hour"),
|
153
|
+
"best_launch_day": obj.get("best_launch_day"),
|
154
|
+
}
|
155
|
+
)
|
156
|
+
return _obj
|
@@ -0,0 +1,84 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
"""
|
4
|
+
DEX AI API
|
5
|
+
|
6
|
+
API for DEX AI
|
7
|
+
|
8
|
+
The version of the OpenAPI document: 1.0.0
|
9
|
+
Generated by OpenAPI Generator (https://openapi-generator.tech)
|
10
|
+
|
11
|
+
Do not edit the class manually.
|
12
|
+
""" # noqa: E501
|
13
|
+
|
14
|
+
|
15
|
+
from __future__ import annotations
|
16
|
+
import pprint
|
17
|
+
import re # noqa: F401
|
18
|
+
import json
|
19
|
+
|
20
|
+
from pydantic import BaseModel, ConfigDict, StrictStr
|
21
|
+
from typing import Any, ClassVar, Dict, List
|
22
|
+
from typing import Optional, Set
|
23
|
+
from typing_extensions import Self
|
24
|
+
|
25
|
+
|
26
|
+
class SignalVolume(BaseModel):
|
27
|
+
"""
|
28
|
+
Model for the volume of the signal
|
29
|
+
""" # noqa: E501
|
30
|
+
|
31
|
+
day: StrictStr
|
32
|
+
hour: StrictStr
|
33
|
+
__properties: ClassVar[List[str]] = ["day", "hour"]
|
34
|
+
|
35
|
+
model_config = ConfigDict(
|
36
|
+
populate_by_name=True,
|
37
|
+
validate_assignment=True,
|
38
|
+
protected_namespaces=(),
|
39
|
+
)
|
40
|
+
|
41
|
+
def to_str(self) -> str:
|
42
|
+
"""Returns the string representation of the model using alias"""
|
43
|
+
return pprint.pformat(self.model_dump(by_alias=True))
|
44
|
+
|
45
|
+
def to_json(self) -> str:
|
46
|
+
"""Returns the JSON representation of the model using alias"""
|
47
|
+
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
|
48
|
+
return json.dumps(self.to_dict())
|
49
|
+
|
50
|
+
@classmethod
|
51
|
+
def from_json(cls, json_str: str) -> Optional[Self]:
|
52
|
+
"""Create an instance of SignalVolume from a JSON string"""
|
53
|
+
return cls.from_dict(json.loads(json_str))
|
54
|
+
|
55
|
+
def to_dict(self) -> Dict[str, Any]:
|
56
|
+
"""Return the dictionary representation of the model using alias.
|
57
|
+
|
58
|
+
This has the following differences from calling pydantic's
|
59
|
+
`self.model_dump(by_alias=True)`:
|
60
|
+
|
61
|
+
* `None` is only added to the output dict for nullable fields that
|
62
|
+
were set at model initialization. Other fields with value `None`
|
63
|
+
are ignored.
|
64
|
+
"""
|
65
|
+
excluded_fields: Set[str] = set([])
|
66
|
+
|
67
|
+
_dict = self.model_dump(
|
68
|
+
by_alias=True,
|
69
|
+
exclude=excluded_fields,
|
70
|
+
exclude_none=True,
|
71
|
+
)
|
72
|
+
return _dict
|
73
|
+
|
74
|
+
@classmethod
|
75
|
+
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
76
|
+
"""Create an instance of SignalVolume from a dict"""
|
77
|
+
if obj is None:
|
78
|
+
return None
|
79
|
+
|
80
|
+
if not isinstance(obj, dict):
|
81
|
+
return cls.model_validate(obj)
|
82
|
+
|
83
|
+
_obj = cls.model_validate({"day": obj.get("day"), "hour": obj.get("hour")})
|
84
|
+
return _obj
|
@@ -0,0 +1,163 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
"""
|
4
|
+
DEX AI API
|
5
|
+
|
6
|
+
API for DEX AI
|
7
|
+
|
8
|
+
The version of the OpenAPI document: 1.0.0
|
9
|
+
Generated by OpenAPI Generator (https://openapi-generator.tech)
|
10
|
+
|
11
|
+
Do not edit the class manually.
|
12
|
+
""" # noqa: E501
|
13
|
+
|
14
|
+
|
15
|
+
from __future__ import annotations
|
16
|
+
import pprint
|
17
|
+
import re # noqa: F401
|
18
|
+
import json
|
19
|
+
|
20
|
+
from pydantic import BaseModel, ConfigDict, Field, StrictFloat, StrictInt, StrictStr
|
21
|
+
from typing import Any, ClassVar, Dict, List, Optional, Union
|
22
|
+
from crypticorn.dex.client.models.signal_volume import SignalVolume
|
23
|
+
from crypticorn.dex.client.models.token_data import TokenData
|
24
|
+
from typing import Set
|
25
|
+
from typing_extensions import Self
|
26
|
+
|
27
|
+
|
28
|
+
class SignalWithToken(BaseModel):
|
29
|
+
"""
|
30
|
+
Model for the signal with the token info
|
31
|
+
""" # noqa: E501
|
32
|
+
|
33
|
+
ca: StrictStr = Field(description="The contract address of the token")
|
34
|
+
name: StrictStr = Field(description="The name of the token")
|
35
|
+
type: StrictStr = Field(description="The type of the signal")
|
36
|
+
risk: Optional[StrictStr] = None
|
37
|
+
performance: StrictStr = Field(
|
38
|
+
description="The performance in percent as a string. e.g. +100%"
|
39
|
+
)
|
40
|
+
price: StrictStr = Field(description="The price of the signal")
|
41
|
+
volume: SignalVolume = Field(description="The volume of the signal")
|
42
|
+
liquidity: StrictStr = Field(description="The liquidity of the signal")
|
43
|
+
mcap: StrictStr = Field(description="The market cap of the signal")
|
44
|
+
called_at: StrictInt = Field(description="The timestamp of the call")
|
45
|
+
updated_at: StrictInt = Field(description="The timestamp of the last update")
|
46
|
+
tg_id: Optional[StrictStr]
|
47
|
+
data: TokenData = Field(description="The token info")
|
48
|
+
performance_float: Union[StrictFloat, StrictInt] = Field(
|
49
|
+
description="The performance in float. e.g. +100% -> 2.0"
|
50
|
+
)
|
51
|
+
__properties: ClassVar[List[str]] = [
|
52
|
+
"ca",
|
53
|
+
"name",
|
54
|
+
"type",
|
55
|
+
"risk",
|
56
|
+
"performance",
|
57
|
+
"price",
|
58
|
+
"volume",
|
59
|
+
"liquidity",
|
60
|
+
"mcap",
|
61
|
+
"called_at",
|
62
|
+
"updated_at",
|
63
|
+
"tg_id",
|
64
|
+
"data",
|
65
|
+
"performance_float",
|
66
|
+
]
|
67
|
+
|
68
|
+
model_config = ConfigDict(
|
69
|
+
populate_by_name=True,
|
70
|
+
validate_assignment=True,
|
71
|
+
protected_namespaces=(),
|
72
|
+
)
|
73
|
+
|
74
|
+
def to_str(self) -> str:
|
75
|
+
"""Returns the string representation of the model using alias"""
|
76
|
+
return pprint.pformat(self.model_dump(by_alias=True))
|
77
|
+
|
78
|
+
def to_json(self) -> str:
|
79
|
+
"""Returns the JSON representation of the model using alias"""
|
80
|
+
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
|
81
|
+
return json.dumps(self.to_dict())
|
82
|
+
|
83
|
+
@classmethod
|
84
|
+
def from_json(cls, json_str: str) -> Optional[Self]:
|
85
|
+
"""Create an instance of SignalWithToken from a JSON string"""
|
86
|
+
return cls.from_dict(json.loads(json_str))
|
87
|
+
|
88
|
+
def to_dict(self) -> Dict[str, Any]:
|
89
|
+
"""Return the dictionary representation of the model using alias.
|
90
|
+
|
91
|
+
This has the following differences from calling pydantic's
|
92
|
+
`self.model_dump(by_alias=True)`:
|
93
|
+
|
94
|
+
* `None` is only added to the output dict for nullable fields that
|
95
|
+
were set at model initialization. Other fields with value `None`
|
96
|
+
are ignored.
|
97
|
+
* OpenAPI `readOnly` fields are excluded.
|
98
|
+
"""
|
99
|
+
excluded_fields: Set[str] = set(
|
100
|
+
[
|
101
|
+
"performance_float",
|
102
|
+
]
|
103
|
+
)
|
104
|
+
|
105
|
+
_dict = self.model_dump(
|
106
|
+
by_alias=True,
|
107
|
+
exclude=excluded_fields,
|
108
|
+
exclude_none=True,
|
109
|
+
)
|
110
|
+
# override the default output from pydantic by calling `to_dict()` of volume
|
111
|
+
if self.volume:
|
112
|
+
_dict["volume"] = self.volume.to_dict()
|
113
|
+
# override the default output from pydantic by calling `to_dict()` of data
|
114
|
+
if self.data:
|
115
|
+
_dict["data"] = self.data.to_dict()
|
116
|
+
# set to None if risk (nullable) is None
|
117
|
+
# and model_fields_set contains the field
|
118
|
+
if self.risk is None and "risk" in self.model_fields_set:
|
119
|
+
_dict["risk"] = None
|
120
|
+
|
121
|
+
# set to None if tg_id (nullable) is None
|
122
|
+
# and model_fields_set contains the field
|
123
|
+
if self.tg_id is None and "tg_id" in self.model_fields_set:
|
124
|
+
_dict["tg_id"] = None
|
125
|
+
|
126
|
+
return _dict
|
127
|
+
|
128
|
+
@classmethod
|
129
|
+
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
130
|
+
"""Create an instance of SignalWithToken from a dict"""
|
131
|
+
if obj is None:
|
132
|
+
return None
|
133
|
+
|
134
|
+
if not isinstance(obj, dict):
|
135
|
+
return cls.model_validate(obj)
|
136
|
+
|
137
|
+
_obj = cls.model_validate(
|
138
|
+
{
|
139
|
+
"ca": obj.get("ca"),
|
140
|
+
"name": obj.get("name"),
|
141
|
+
"type": obj.get("type"),
|
142
|
+
"risk": obj.get("risk"),
|
143
|
+
"performance": obj.get("performance"),
|
144
|
+
"price": obj.get("price"),
|
145
|
+
"volume": (
|
146
|
+
SignalVolume.from_dict(obj["volume"])
|
147
|
+
if obj.get("volume") is not None
|
148
|
+
else None
|
149
|
+
),
|
150
|
+
"liquidity": obj.get("liquidity"),
|
151
|
+
"mcap": obj.get("mcap"),
|
152
|
+
"called_at": obj.get("called_at"),
|
153
|
+
"updated_at": obj.get("updated_at"),
|
154
|
+
"tg_id": obj.get("tg_id"),
|
155
|
+
"data": (
|
156
|
+
TokenData.from_dict(obj["data"])
|
157
|
+
if obj.get("data") is not None
|
158
|
+
else None
|
159
|
+
),
|
160
|
+
"performance_float": obj.get("performance_float"),
|
161
|
+
}
|
162
|
+
)
|
163
|
+
return _obj
|