crypticorn 2.8.0rc7__py3-none-any.whl → 2.8.0rc9__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.
Files changed (47) hide show
  1. crypticorn/__init__.py +5 -1
  2. crypticorn/common/__init__.py +2 -0
  3. crypticorn/common/ansi_colors.py +2 -1
  4. crypticorn/common/auth.py +2 -2
  5. crypticorn/common/enums.py +2 -0
  6. crypticorn/common/errors.py +8 -5
  7. crypticorn/common/exceptions.py +24 -20
  8. crypticorn/common/logging.py +19 -12
  9. crypticorn/common/middleware.py +4 -4
  10. crypticorn/common/mixins.py +10 -3
  11. crypticorn/common/openapi.py +11 -0
  12. crypticorn/common/pagination.py +2 -0
  13. crypticorn/common/router/admin_router.py +3 -3
  14. crypticorn/common/router/status_router.py +9 -2
  15. crypticorn/common/scopes.py +3 -3
  16. crypticorn/common/urls.py +9 -0
  17. crypticorn/common/utils.py +16 -8
  18. crypticorn/common/warnings.py +63 -0
  19. crypticorn/hive/utils.py +1 -2
  20. crypticorn/metrics/client/__init__.py +11 -0
  21. crypticorn/metrics/client/api/__init__.py +2 -0
  22. crypticorn/metrics/client/api/admin_api.py +1452 -0
  23. crypticorn/metrics/client/api/exchanges_api.py +51 -40
  24. crypticorn/metrics/client/api/indicators_api.py +49 -32
  25. crypticorn/metrics/client/api/logs_api.py +7 -7
  26. crypticorn/metrics/client/api/marketcap_api.py +28 -25
  27. crypticorn/metrics/client/api/markets_api.py +50 -278
  28. crypticorn/metrics/client/api/quote_currencies_api.py +289 -0
  29. crypticorn/metrics/client/api/status_api.py +4 -231
  30. crypticorn/metrics/client/api/tokens_api.py +241 -37
  31. crypticorn/metrics/client/models/__init__.py +9 -0
  32. crypticorn/metrics/client/models/api_error_identifier.py +115 -0
  33. crypticorn/metrics/client/models/api_error_level.py +37 -0
  34. crypticorn/metrics/client/models/api_error_type.py +37 -0
  35. crypticorn/metrics/client/models/exception_detail.py +6 -3
  36. crypticorn/metrics/client/models/exchange_mapping.py +121 -0
  37. crypticorn/metrics/client/models/internal_exchange.py +39 -0
  38. crypticorn/metrics/client/models/log_level.py +38 -0
  39. crypticorn/metrics/client/models/market_type.py +35 -0
  40. crypticorn/metrics/client/models/marketcap_ranking.py +87 -0
  41. crypticorn/metrics/client/models/ohlcv.py +113 -0
  42. crypticorn/metrics/main.py +14 -2
  43. {crypticorn-2.8.0rc7.dist-info → crypticorn-2.8.0rc9.dist-info}/METADATA +3 -2
  44. {crypticorn-2.8.0rc7.dist-info → crypticorn-2.8.0rc9.dist-info}/RECORD +47 -34
  45. {crypticorn-2.8.0rc7.dist-info → crypticorn-2.8.0rc9.dist-info}/WHEEL +0 -0
  46. {crypticorn-2.8.0rc7.dist-info → crypticorn-2.8.0rc9.dist-info}/entry_points.txt +0 -0
  47. {crypticorn-2.8.0rc7.dist-info → crypticorn-2.8.0rc9.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,121 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ Marketcap Service API
5
+
6
+ API for retrieving historical marketcap data, available exchanges, and indicators.
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, StrictStr
21
+ from typing import Any, ClassVar, Dict, List, Optional
22
+ from crypticorn.metrics.client.models.market_type import MarketType
23
+ from crypticorn.metrics.client.models.trading_status import TradingStatus
24
+ from typing import Optional, Set
25
+ from typing_extensions import Self
26
+
27
+
28
+ class ExchangeMapping(BaseModel):
29
+ """
30
+ ExchangeMapping
31
+ """ # noqa: E501
32
+
33
+ exchange_name: StrictStr = Field(description="The name of the exchange")
34
+ symbol: StrictStr = Field(description="The symbol of the exchange")
35
+ quote_currency: StrictStr = Field(description="The quote currency of the exchange")
36
+ pair: StrictStr = Field(description="The pair of the exchange")
37
+ first_trade_timestamp: StrictInt = Field(
38
+ description="The first trade timestamp of the exchange"
39
+ )
40
+ last_trade_timestamp: StrictInt = Field(
41
+ description="The last trade timestamp of the exchange"
42
+ )
43
+ status: TradingStatus = Field(description="The status of the exchange")
44
+ market_type: Optional[MarketType] = None
45
+ __properties: ClassVar[List[str]] = [
46
+ "exchange_name",
47
+ "symbol",
48
+ "quote_currency",
49
+ "pair",
50
+ "first_trade_timestamp",
51
+ "last_trade_timestamp",
52
+ "status",
53
+ "market_type",
54
+ ]
55
+
56
+ model_config = ConfigDict(
57
+ populate_by_name=True,
58
+ validate_assignment=True,
59
+ protected_namespaces=(),
60
+ )
61
+
62
+ def to_str(self) -> str:
63
+ """Returns the string representation of the model using alias"""
64
+ return pprint.pformat(self.model_dump(by_alias=True))
65
+
66
+ def to_json(self) -> str:
67
+ """Returns the JSON representation of the model using alias"""
68
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
69
+ return json.dumps(self.to_dict())
70
+
71
+ @classmethod
72
+ def from_json(cls, json_str: str) -> Optional[Self]:
73
+ """Create an instance of ExchangeMapping from a JSON string"""
74
+ return cls.from_dict(json.loads(json_str))
75
+
76
+ def to_dict(self) -> Dict[str, Any]:
77
+ """Return the dictionary representation of the model using alias.
78
+
79
+ This has the following differences from calling pydantic's
80
+ `self.model_dump(by_alias=True)`:
81
+
82
+ * `None` is only added to the output dict for nullable fields that
83
+ were set at model initialization. Other fields with value `None`
84
+ are ignored.
85
+ """
86
+ excluded_fields: Set[str] = set([])
87
+
88
+ _dict = self.model_dump(
89
+ by_alias=True,
90
+ exclude=excluded_fields,
91
+ exclude_none=True,
92
+ )
93
+ # set to None if market_type (nullable) is None
94
+ # and model_fields_set contains the field
95
+ if self.market_type is None and "market_type" in self.model_fields_set:
96
+ _dict["market_type"] = None
97
+
98
+ return _dict
99
+
100
+ @classmethod
101
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
102
+ """Create an instance of ExchangeMapping from a dict"""
103
+ if obj is None:
104
+ return None
105
+
106
+ if not isinstance(obj, dict):
107
+ return cls.model_validate(obj)
108
+
109
+ _obj = cls.model_validate(
110
+ {
111
+ "exchange_name": obj.get("exchange_name"),
112
+ "symbol": obj.get("symbol"),
113
+ "quote_currency": obj.get("quote_currency"),
114
+ "pair": obj.get("pair"),
115
+ "first_trade_timestamp": obj.get("first_trade_timestamp"),
116
+ "last_trade_timestamp": obj.get("last_trade_timestamp"),
117
+ "status": obj.get("status"),
118
+ "market_type": obj.get("market_type"),
119
+ }
120
+ )
121
+ return _obj
@@ -0,0 +1,39 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ Marketcap Service API
5
+
6
+ API for retrieving historical marketcap data, available exchanges, and indicators.
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 json
17
+ from enum import Enum
18
+ from typing_extensions import Self
19
+
20
+
21
+ class InternalExchange(str, Enum):
22
+ """
23
+ All exchanges we are using, including public (Exchange)
24
+ """
25
+
26
+ """
27
+ allowed enum values
28
+ """
29
+ KUCOIN = "kucoin"
30
+ BINGX = "bingx"
31
+ BINANCE = "binance"
32
+ BYBIT = "bybit"
33
+ HYPERLIQUID = "hyperliquid"
34
+ BITGET = "bitget"
35
+
36
+ @classmethod
37
+ def from_json(cls, json_str: str) -> Self:
38
+ """Create an instance of InternalExchange from a JSON string"""
39
+ return cls(json.loads(json_str))
@@ -0,0 +1,38 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ Marketcap Service API
5
+
6
+ API for retrieving historical marketcap data, available exchanges, and indicators.
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 json
17
+ from enum import Enum
18
+ from typing_extensions import Self
19
+
20
+
21
+ class LogLevel(str, Enum):
22
+ """
23
+ LogLevel
24
+ """
25
+
26
+ """
27
+ allowed enum values
28
+ """
29
+ DEBUG = "DEBUG"
30
+ INFO = "INFO"
31
+ WARNING = "WARNING"
32
+ ERROR = "ERROR"
33
+ CRITICAL = "CRITICAL"
34
+
35
+ @classmethod
36
+ def from_json(cls, json_str: str) -> Self:
37
+ """Create an instance of LogLevel from a JSON string"""
38
+ return cls(json.loads(json_str))
@@ -0,0 +1,35 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ Marketcap Service API
5
+
6
+ API for retrieving historical marketcap data, available exchanges, and indicators.
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 json
17
+ from enum import Enum
18
+ from typing_extensions import Self
19
+
20
+
21
+ class MarketType(str, Enum):
22
+ """
23
+ Market types
24
+ """
25
+
26
+ """
27
+ allowed enum values
28
+ """
29
+ SPOT = "spot"
30
+ FUTURES = "futures"
31
+
32
+ @classmethod
33
+ def from_json(cls, json_str: str) -> Self:
34
+ """Create an instance of MarketType from a JSON string"""
35
+ return cls(json.loads(json_str))
@@ -0,0 +1,87 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ Marketcap Service API
5
+
6
+ API for retrieving historical marketcap data, available exchanges, and indicators.
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 datetime import datetime
21
+ from pydantic import BaseModel, ConfigDict, StrictStr
22
+ from typing import Any, ClassVar, Dict, List
23
+ from typing import Optional, Set
24
+ from typing_extensions import Self
25
+
26
+
27
+ class MarketcapRanking(BaseModel):
28
+ """
29
+ MarketcapRanking
30
+ """ # noqa: E501
31
+
32
+ timestamp: datetime
33
+ symbols: List[StrictStr]
34
+ __properties: ClassVar[List[str]] = ["timestamp", "symbols"]
35
+
36
+ model_config = ConfigDict(
37
+ populate_by_name=True,
38
+ validate_assignment=True,
39
+ protected_namespaces=(),
40
+ )
41
+
42
+ def to_str(self) -> str:
43
+ """Returns the string representation of the model using alias"""
44
+ return pprint.pformat(self.model_dump(by_alias=True))
45
+
46
+ def to_json(self) -> str:
47
+ """Returns the JSON representation of the model using alias"""
48
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
49
+ return json.dumps(self.to_dict())
50
+
51
+ @classmethod
52
+ def from_json(cls, json_str: str) -> Optional[Self]:
53
+ """Create an instance of MarketcapRanking from a JSON string"""
54
+ return cls.from_dict(json.loads(json_str))
55
+
56
+ def to_dict(self) -> Dict[str, Any]:
57
+ """Return the dictionary representation of the model using alias.
58
+
59
+ This has the following differences from calling pydantic's
60
+ `self.model_dump(by_alias=True)`:
61
+
62
+ * `None` is only added to the output dict for nullable fields that
63
+ were set at model initialization. Other fields with value `None`
64
+ are ignored.
65
+ """
66
+ excluded_fields: Set[str] = set([])
67
+
68
+ _dict = self.model_dump(
69
+ by_alias=True,
70
+ exclude=excluded_fields,
71
+ exclude_none=True,
72
+ )
73
+ return _dict
74
+
75
+ @classmethod
76
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
77
+ """Create an instance of MarketcapRanking from a dict"""
78
+ if obj is None:
79
+ return None
80
+
81
+ if not isinstance(obj, dict):
82
+ return cls.model_validate(obj)
83
+
84
+ _obj = cls.model_validate(
85
+ {"timestamp": obj.get("timestamp"), "symbols": obj.get("symbols")}
86
+ )
87
+ return _obj
@@ -0,0 +1,113 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ Marketcap Service API
5
+
6
+ API for retrieving historical marketcap data, available exchanges, and indicators.
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 datetime import datetime
21
+ from pydantic import BaseModel, ConfigDict, StrictFloat, StrictInt
22
+ from typing import Any, ClassVar, Dict, List, Optional, Union
23
+ from typing import Optional, Set
24
+ from typing_extensions import Self
25
+
26
+
27
+ class OHLCV(BaseModel):
28
+ """
29
+ OHLCV
30
+ """ # noqa: E501
31
+
32
+ timestamp: datetime
33
+ open: Union[StrictFloat, StrictInt]
34
+ high: Union[StrictFloat, StrictInt]
35
+ low: Union[StrictFloat, StrictInt]
36
+ close: Union[StrictFloat, StrictInt]
37
+ volume: Union[StrictFloat, StrictInt]
38
+ marketcap: Optional[Union[StrictFloat, StrictInt]] = None
39
+ __properties: ClassVar[List[str]] = [
40
+ "timestamp",
41
+ "open",
42
+ "high",
43
+ "low",
44
+ "close",
45
+ "volume",
46
+ "marketcap",
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 OHLCV 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
+ # set to None if marketcap (nullable) is None
87
+ # and model_fields_set contains the field
88
+ if self.marketcap is None and "marketcap" in self.model_fields_set:
89
+ _dict["marketcap"] = None
90
+
91
+ return _dict
92
+
93
+ @classmethod
94
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
95
+ """Create an instance of OHLCV from a dict"""
96
+ if obj is None:
97
+ return None
98
+
99
+ if not isinstance(obj, dict):
100
+ return cls.model_validate(obj)
101
+
102
+ _obj = cls.model_validate(
103
+ {
104
+ "timestamp": obj.get("timestamp"),
105
+ "open": obj.get("open"),
106
+ "high": obj.get("high"),
107
+ "low": obj.get("low"),
108
+ "close": obj.get("close"),
109
+ "volume": obj.get("volume"),
110
+ "marketcap": obj.get("marketcap"),
111
+ }
112
+ )
113
+ return _obj
@@ -9,6 +9,8 @@ from crypticorn.metrics import (
9
9
  MarketcapApi,
10
10
  MarketsApi,
11
11
  TokensApi,
12
+ AdminApi,
13
+ QuoteCurrenciesApi,
12
14
  )
13
15
  from crypticorn.common import optional_import
14
16
 
@@ -34,6 +36,8 @@ class MetricsClient:
34
36
  self.markets = MarketsApi(self.base_client)
35
37
  self.tokens = TokensApiWrapper(self.base_client)
36
38
  self.exchanges = ExchangesApiWrapper(self.base_client)
39
+ self.quote_currencies = QuoteCurrenciesApi(self.base_client)
40
+ self.admin = AdminApi(self.base_client)
37
41
 
38
42
 
39
43
  class MarketcapApiWrapper(MarketcapApi):
@@ -57,12 +61,20 @@ class TokensApiWrapper(TokensApi):
57
61
  A wrapper for the TokensApi class.
58
62
  """
59
63
 
60
- async def get_stable_and_wrapped_tokens_fmt(self, *args, **kwargs) -> pd.DataFrame: # type: ignore
64
+ async def get_stable_tokens_fmt(self, *args, **kwargs) -> pd.DataFrame: # type: ignore
61
65
  """
62
66
  Get the tokens in a pandas dataframe
63
67
  """
64
68
  pd = optional_import("pandas", "extra")
65
- response = await self.get_stable_and_wrapped_tokens(*args, **kwargs)
69
+ response = await self.get_stable_tokens(*args, **kwargs)
70
+ return pd.DataFrame(response)
71
+
72
+ async def get_wrapped_tokens_fmt(self, *args, **kwargs) -> pd.DataFrame: # type: ignore
73
+ """
74
+ Get the wrapped tokens in a pandas dataframe
75
+ """
76
+ pd = optional_import("pandas", "extra")
77
+ response = await self.get_wrapped_tokens(*args, **kwargs)
66
78
  return pd.DataFrame(response)
67
79
 
68
80
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: crypticorn
3
- Version: 2.8.0rc7
3
+ Version: 2.8.0rc9
4
4
  Summary: Maximise Your Crypto Trading Profits with Machine Learning
5
5
  Author-email: Crypticorn <timon@crypticorn.com>
6
6
  License: MIT
@@ -10,8 +10,9 @@ Project-URL: Dashboard, https://app.crypticorn.com
10
10
  Keywords: machine learning,data science,crypto,modelling
11
11
  Classifier: Topic :: Scientific/Engineering
12
12
  Classifier: Development Status :: 4 - Beta
13
- Classifier: Intended Audience :: Science/Research
13
+ Classifier: Intended Audience :: Developers
14
14
  Classifier: Operating System :: OS Independent
15
+ Classifier: License :: OSI Approved :: MIT License
15
16
  Classifier: Programming Language :: Python :: 3.10
16
17
  Classifier: Programming Language :: Python :: 3.11
17
18
  Classifier: Programming Language :: Python :: 3.12
@@ -1,4 +1,4 @@
1
- crypticorn/__init__.py,sha256=qQ2C8ZhrVX5b157tfdqyWeZMZBvZDl6pSOLxSvTqNAo,315
1
+ crypticorn/__init__.py,sha256=ctrwe5CQtYhnetHYPgSmC0CIHa4xbDsLZvpY38tfEow,423
2
2
  crypticorn/client.py,sha256=XcJhgMoNSFQZJU3AoYuvxRMh-HPBPBlugKMpGSHxbIE,4700
3
3
  crypticorn/auth/__init__.py,sha256=JAl1tBLK9pYLr_-YKaj581c-c94PWLoqnatTIVAVvMM,81
4
4
  crypticorn/auth/main.py,sha256=j8eRGN2gUWyeOCnWnUPe3mCAfaidGnOMnZRiSQy-yzM,720
@@ -63,25 +63,27 @@ crypticorn/cli/templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZ
63
63
  crypticorn/cli/templates/auth.py,sha256=Q1TxlA7qzhjvrqp1xz1aV2vGnj3DKFNN-VSl3o0B-dI,983
64
64
  crypticorn/cli/templates/dependabot.yml,sha256=ct5ieB8KAV1KLzoYKUNm6dZ9wKG_P_JQHgRjZUfT54w,861
65
65
  crypticorn/cli/templates/ruff.yml,sha256=gWicFFTzC4nToSmRkIIGipos8CZ447YG0kebBCJhtJE,319
66
- crypticorn/common/__init__.py,sha256=29n5tUr9-yjjJ8sjkbMrwq7pDKZ2Z1qz1bR1msGJDkA,671
67
- crypticorn/common/ansi_colors.py,sha256=_ja-pxo0dUAT4WFZuYkOLliWA7LqTjvcew9dJUcgugU,1174
68
- crypticorn/common/auth.py,sha256=GIb9MikQsSxqz-K5rDIOroP5mFoTgQqwByTGO5JqcdM,8713
66
+ crypticorn/common/__init__.py,sha256=DXEuUU_kaLBSBcvpiFie_ROuK5XEZuTMIfsg-BZE0iE,752
67
+ crypticorn/common/ansi_colors.py,sha256=ts49UtfTy-c0uvlGwb3wE-jE_GbXvSBSfzwrDlNi0HE,1331
68
+ crypticorn/common/auth.py,sha256=5wgApDw5x7dI-IWU9tX_gih-gMozi7Y5Tgpen-A9fbo,8713
69
69
  crypticorn/common/decorators.py,sha256=pmnGYCIrLv59wZkDbvPyK9NJmgPJWW74LXTdIWSjOkY,1063
70
- crypticorn/common/enums.py,sha256=RitDVqlG_HTe6tHT6bWusZNFCeYk1eQvJVH-7x3_Zlg,668
71
- crypticorn/common/errors.py,sha256=8jxZ2lLn_NoFKKq6n2JwKPsR0dA2vkGnbXDfEK6ndH0,27851
72
- crypticorn/common/exceptions.py,sha256=BuRLQIg2_pwsaQAhPKP3lY9q2GNp0SlRdXlvp1O2USo,6088
73
- crypticorn/common/logging.py,sha256=DYP9mNElewhXQxkBtjvAM05tKIbqeDiE9YRH92whMLc,3666
74
- crypticorn/common/middleware.py,sha256=PnzYHvB653JfQmwbpoDiHTAjMhH599cQebU0UOyGI2k,1041
75
- crypticorn/common/mixins.py,sha256=o-VONtAS_nHH-OPCFXox6kdX_Xdn1g37uTtkLqij-6U,1722
76
- crypticorn/common/pagination.py,sha256=c07jrMNrBaNTmgx4sppdP7ND4RNT7NBqBXWvofazIlE,2251
77
- crypticorn/common/scopes.py,sha256=ofJ5FDf30wab572XvDzAXVKBIUWa3shScAmzNrJsWqQ,2453
78
- crypticorn/common/urls.py,sha256=3Gf1NU1XQYcOTjcdztG3bDAE98FVbgTK2QXzUe7tFVQ,878
79
- crypticorn/common/utils.py,sha256=Kz2-I96MKIGKM18PHQ77VbKHLMGUvZG_jjj7xpQed8k,2138
80
- crypticorn/common/router/admin_router.py,sha256=qtIGJytOq_0YlyZGWvvZ15ymRaDccGsEVwEZ81aNgUk,3388
81
- crypticorn/common/router/status_router.py,sha256=922dHfpVM5auOTuNswIhDRmk_1bmU5hH83bxoT70uss,616
70
+ crypticorn/common/enums.py,sha256=8iPG1UFtU50HKytOrubYJsFJ_isMY5z69U2mezXA-NE,765
71
+ crypticorn/common/errors.py,sha256=E7H8DVUP4E4uu-ze9v7aJBrfV7ODgbFBXJeyVSXbdVo,28041
72
+ crypticorn/common/exceptions.py,sha256=iq_VFkZ4jr_7BeEjDwlmHyRYPLIYN98-MJGJrxe2OqM,6036
73
+ crypticorn/common/logging.py,sha256=bpWT3ip8CM5tf_jKECJjwrVVf5GYcRjfo-CPb47gISU,4346
74
+ crypticorn/common/middleware.py,sha256=O7XiXPimNYUhF9QTv6yFUTVlb91-SK-3CfTrWMNP6Ck,1011
75
+ crypticorn/common/mixins.py,sha256=NoZL1kXgSb4oVOGNWPqPwCcVZYjHzlsyL80bz6Xxlzg,2002
76
+ crypticorn/common/openapi.py,sha256=Hppim3bLIy_uDixuC3ZPGCsxwk9WU5R45ua8XqZFatg,321
77
+ crypticorn/common/pagination.py,sha256=BYMNB4JUW9eeiTw1q3CyHXaT_-hk_BrSXAOqvif08Ek,2334
78
+ crypticorn/common/scopes.py,sha256=TsSzMFHQAJ45CwhSrU3uRPHyHHjrCgPdJhAyjxY6b2Q,2456
79
+ crypticorn/common/urls.py,sha256=qJHxdkpwQR1iPLSPMYVoobnLNSsQoKVV5SsRng4dZYs,1161
80
+ crypticorn/common/utils.py,sha256=N4h-FtojufTuc4IBU7TeuSOygFvErpgZDrwl4epGmvw,2503
81
+ crypticorn/common/warnings.py,sha256=bIfMLbKaCntMV88rTnoWgV6SZ9FJvo_adXv3yFW1rqg,2395
82
+ crypticorn/common/router/admin_router.py,sha256=h9-7DuNaYgYi8CDT2UTirob80w31dbRVZc7o2HSv_O4,3444
83
+ crypticorn/common/router/status_router.py,sha256=snscsxpqK8WVucKnivP8Z_J8VhLCBbpmKAjPwYMC3vA,869
82
84
  crypticorn/hive/__init__.py,sha256=hRfTlEzEql4msytdUC_04vfaHzVKG5CGZle1M-9QFgY,81
83
85
  crypticorn/hive/main.py,sha256=eoo5bTmbfS94zuYHDkD20orNANESYuTURHQNw3pIEvQ,2875
84
- crypticorn/hive/utils.py,sha256=dxQ_OszrnTsslO5hDefMmgfj6yRwRPr8sr17fGizWIw,2066
86
+ crypticorn/hive/utils.py,sha256=5T2GYnIFazXgAdUlO03xWqcMWhWkM82cfWvwsO8geHE,2040
85
87
  crypticorn/hive/client/__init__.py,sha256=DIC-Gy384GgwFXehCLPrsud67WQn2zADFVo4FbgHWiY,2636
86
88
  crypticorn/hive/client/api_client.py,sha256=fDFsACK7hxXw_sgt3ZJVH2RplEdUhR0YZd4tsZA9P5Q,26869
87
89
  crypticorn/hive/client/api_response.py,sha256=WhxwYDSMm6wPixp9CegO8dJzjFxDz3JF1yCq9s0ZqKE,639
@@ -147,24 +149,35 @@ crypticorn/klines/client/models/symbol_type.py,sha256=uOEqlQJ714fa0SEYOxzCOx9cG-
147
149
  crypticorn/klines/client/models/timeframe.py,sha256=bSZJz3Q78V1RAnm3ZDtGBzFOnDKE3Pc5A0eP3ky3KaI,760
148
150
  crypticorn/klines/client/models/udf_config.py,sha256=3VxMqMJb7AqwxWyeM1SxEd4jp2r-iRZppVRW7RHR7iY,5066
149
151
  crypticorn/metrics/__init__.py,sha256=t7FrHV5PaVTka90eIxDgOaWvOiyznSStcUanSbLov2o,126
150
- crypticorn/metrics/main.py,sha256=hT7dS8Nc3IEIHOGAzVDehEOwHy3GlmEjaL2IxREHjhw,3127
151
- crypticorn/metrics/client/__init__.py,sha256=IcYZIuKVRCnesSbJgvn_-Wg1it5vY0goYwL-pNdVfh0,1727
152
+ crypticorn/metrics/main.py,sha256=I4KZ-46ro6I6-EWf3p1BZV-8Iryorr8pRUZhv3yXzXI,3581
153
+ crypticorn/metrics/client/__init__.py,sha256=zp5tyfddEBfFrCqp9YEAwObC60lZ0GnqO3dvsAOt1zE,2530
152
154
  crypticorn/metrics/client/api_client.py,sha256=pGWJuO-mgxlUdhJGwkScf7CviGzjDrmUAiU0LXasQY4,26934
153
155
  crypticorn/metrics/client/api_response.py,sha256=WhxwYDSMm6wPixp9CegO8dJzjFxDz3JF1yCq9s0ZqKE,639
154
156
  crypticorn/metrics/client/configuration.py,sha256=wA1hBWEINMM_AlZg-DAv1AelmkjBERB5d2gA66aEwSM,19158
155
157
  crypticorn/metrics/client/exceptions.py,sha256=UegnYftFlQDXAQv8BmD20yRzTtWpjTHcuOymTBWmgeE,6421
156
158
  crypticorn/metrics/client/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
157
159
  crypticorn/metrics/client/rest.py,sha256=pWeYnpTfTV7L5U6Kli3b7i8VrmqdG8sskqSnTHPIoQo,7025
158
- crypticorn/metrics/client/api/__init__.py,sha256=e8EG4VJkULLIEthZyPXjOfLi_4dKGi_KGRj2gQuYd_8,506
159
- crypticorn/metrics/client/api/exchanges_api.py,sha256=EDw4wzYV20fHPW1pUpfCyXR1NzIJICjBz6ugOcf_3Oo,40003
160
- crypticorn/metrics/client/api/indicators_api.py,sha256=v2cI4NIzsg2QyBeKPMHfcGiatDTJsP6XX7dM1RwdGEY,25856
161
- crypticorn/metrics/client/api/logs_api.py,sha256=8umrlamZUV1DbyKpMZHkoh5q0et_1KmaxWx93dcijf4,13480
162
- crypticorn/metrics/client/api/marketcap_api.py,sha256=-ETEtSM50DND8hG_k_FI-9MaXMNbWIarSieMka2w-8k,50855
163
- crypticorn/metrics/client/api/markets_api.py,sha256=9GDMz9NTdJ1OIWckfuFfjgid6rJy8NWkj0Y4e00BM6c,24135
164
- crypticorn/metrics/client/api/status_api.py,sha256=rnXvModJzkQFF5ta7fkxyxpelHD_9ksUufs4W-yzn7w,28770
165
- crypticorn/metrics/client/api/tokens_api.py,sha256=Z885EFuNOPLt5jziSynZsnvYzve-V_ltY6ypW6H7NCw,11381
166
- crypticorn/metrics/client/models/__init__.py,sha256=szlfEBonMQMQdyWP-3mI6cJ-P5MyZTSHtLk8QVjQtcg,625
167
- crypticorn/metrics/client/models/exception_detail.py,sha256=s2dJA_PBMYppDexprkmGI7u3kBX-HVIcwYhTxlT4Yqw,3704
160
+ crypticorn/metrics/client/api/__init__.py,sha256=nNmEy9XBH8jQboMzedrzeGl8OVuDo_iylCaFw4Fgysg,649
161
+ crypticorn/metrics/client/api/admin_api.py,sha256=8JGUN0w-bIcENKLJVgBvkVgAlDIRqilTTaF8ulUCPok,58540
162
+ crypticorn/metrics/client/api/exchanges_api.py,sha256=BZiJH8hxxSnI9SXydgErM6gzvIR-t9vNXbh9fFotpQQ,40455
163
+ crypticorn/metrics/client/api/indicators_api.py,sha256=gltFmv_EorYbeWMnp-N0QkgdVKrkvi1iOZUP_ewkXZ0,26748
164
+ crypticorn/metrics/client/api/logs_api.py,sha256=lDOixn5hn3DWc6HjExWtKZfy7U4NfcSLsO1bNFrx4GE,13550
165
+ crypticorn/metrics/client/api/marketcap_api.py,sha256=28lQlBJh5hdW7fULJl55bAJy_HWZWEdouds63YJIwAQ,51106
166
+ crypticorn/metrics/client/api/markets_api.py,sha256=NbPtD5bQK_Nt73hlVd6cd1pAZ7HO1QQgNl_abNoN00s,14739
167
+ crypticorn/metrics/client/api/quote_currencies_api.py,sha256=H4c3zOp5eTTUrRMlMH-H8aIIBpV4Ioj8c65UUt_BEuE,11259
168
+ crypticorn/metrics/client/api/status_api.py,sha256=_Ou_EGmjPyv32G-S4QKfRemdpGG6FUsgOkbGDfYaFp0,19633
169
+ crypticorn/metrics/client/api/tokens_api.py,sha256=x5a-YAeAgFJm-pN4K3-lOM-WPVYAxoBr-AYb-oxhysM,19522
170
+ crypticorn/metrics/client/models/__init__.py,sha256=Voa1tj-CTpvzF6UmGJf0h0zFqG-7wFV8TSwH_lst0WY,1285
171
+ crypticorn/metrics/client/models/api_error_identifier.py,sha256=HrL78MgQ0NbWv8CJhl6Zbp3QSIK2xO8lAZy5y6M8NCk,4948
172
+ crypticorn/metrics/client/models/api_error_level.py,sha256=fxhEXRsXIAttvVqKvv0r58fEsRl_2X8GOICw0eRGMIg,765
173
+ crypticorn/metrics/client/models/api_error_type.py,sha256=AwnguQ4VyyqMj3hGqy-kpxZhzpy-tjQVt0n3ml_wYlg,806
174
+ crypticorn/metrics/client/models/exception_detail.py,sha256=3SijhjW8homYVC4p0qgRyOUlObGCP3WpbO4IfGYLzQk,3959
175
+ crypticorn/metrics/client/models/exchange_mapping.py,sha256=SJkMHO-ZZfnnjWNHAgmLOyJyDIGV8t1T3AF_3PukXBs,4104
176
+ crypticorn/metrics/client/models/internal_exchange.py,sha256=aWc3gPt1TSQ74y5tivLAVOu-qySo9djgIWwsB8nYass,864
177
+ crypticorn/metrics/client/models/log_level.py,sha256=u_1h06MyyyfV5PYYh8Xjgq9ySF2CfU_clZbkww6aJk4,769
178
+ crypticorn/metrics/client/models/market_type.py,sha256=1fLJIuDO5wK5JABFxtnJzHMwJw1mSqf21-QVAP102xk,711
179
+ crypticorn/metrics/client/models/marketcap_ranking.py,sha256=tRA7IjesdhQWZJAucRXngMpHIjfOeQefinnJkP71UxQ,2561
180
+ crypticorn/metrics/client/models/ohlcv.py,sha256=2CZx2WOAMHn5hpA9MafWQQIgxP6UbXagh1KsPoe0ODU,3368
168
181
  crypticorn/metrics/client/models/severity.py,sha256=Bwls2jjCMP2lKc-_67d5WZbGPAebUEPge7a82iUf4Qs,731
169
182
  crypticorn/metrics/client/models/time_interval.py,sha256=8bHhMNt56xVGvJi5xNFMrAkAZFRKfym1UkeGoM2H0j8,772
170
183
  crypticorn/metrics/client/models/trading_status.py,sha256=_S-KAyuCJsLLY0UTcNKkhLWoPJS-ywf7y3yTdhIuF0w,746
@@ -236,8 +249,8 @@ crypticorn/trade/client/models/strategy_model_input.py,sha256=ala19jARyfA5ysys5D
236
249
  crypticorn/trade/client/models/strategy_model_output.py,sha256=2o2lhbgUSTznowpMLEHF1Ex9TG9oRmzlCIb-gXqo7_s,5643
237
250
  crypticorn/trade/client/models/tpsl.py,sha256=C2KgTIZs-a8W4msdaXgBKJcwtA-o5wR4rBauRP-iQxU,4317
238
251
  crypticorn/trade/client/models/trading_action_type.py,sha256=pGq_TFLMPfYFizYP-xKgEC1ZF4U3lGdJYoGa_ZH2x-Q,769
239
- crypticorn-2.8.0rc7.dist-info/METADATA,sha256=wWxFZyIaGMh4KfuE9tUK_YfAKW158U4j_SIbHK2D6Yk,8098
240
- crypticorn-2.8.0rc7.dist-info/WHEEL,sha256=0CuiUZ_p9E4cD6NyLD6UG80LBXYyiSYZOKDm5lp32xk,91
241
- crypticorn-2.8.0rc7.dist-info/entry_points.txt,sha256=d_xHsGvUTebPveVUK0SrpDFQ5ZRSjlI7lNCc11sn2PM,59
242
- crypticorn-2.8.0rc7.dist-info/top_level.txt,sha256=EP3NY216qIBYfmvGl0L2Zc9ItP0DjGSkiYqd9xJwGcM,11
243
- crypticorn-2.8.0rc7.dist-info/RECORD,,
252
+ crypticorn-2.8.0rc9.dist-info/METADATA,sha256=t3ZlP4LuMpfaSvePrOw45v3mZh8OApELN3lY1Ont6Rs,8143
253
+ crypticorn-2.8.0rc9.dist-info/WHEEL,sha256=0CuiUZ_p9E4cD6NyLD6UG80LBXYyiSYZOKDm5lp32xk,91
254
+ crypticorn-2.8.0rc9.dist-info/entry_points.txt,sha256=d_xHsGvUTebPveVUK0SrpDFQ5ZRSjlI7lNCc11sn2PM,59
255
+ crypticorn-2.8.0rc9.dist-info/top_level.txt,sha256=EP3NY216qIBYfmvGl0L2Zc9ItP0DjGSkiYqd9xJwGcM,11
256
+ crypticorn-2.8.0rc9.dist-info/RECORD,,