crypticorn 2.8.0rc8__py3-none-any.whl → 2.8.1__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 (57) hide show
  1. crypticorn/cli/init.py +2 -2
  2. crypticorn/common/exceptions.py +2 -1
  3. crypticorn/common/logging.py +5 -5
  4. crypticorn/common/router/admin_router.py +10 -12
  5. crypticorn/common/router/status_router.py +2 -2
  6. crypticorn/hive/utils.py +1 -2
  7. crypticorn/klines/client/__init__.py +9 -1
  8. crypticorn/klines/client/api/__init__.py +1 -0
  9. crypticorn/klines/client/api/admin_api.py +1455 -0
  10. crypticorn/klines/client/api/change_in_timeframe_api.py +24 -20
  11. crypticorn/klines/client/api/funding_rates_api.py +12 -10
  12. crypticorn/klines/client/api/ohlcv_data_api.py +37 -24
  13. crypticorn/klines/client/api/status_api.py +8 -235
  14. crypticorn/klines/client/api/symbols_api.py +12 -9
  15. crypticorn/klines/client/api/udf_api.py +6 -6
  16. crypticorn/klines/client/models/__init__.py +8 -1
  17. crypticorn/klines/client/models/api_error_identifier.py +115 -0
  18. crypticorn/klines/client/models/api_error_level.py +37 -0
  19. crypticorn/klines/client/models/api_error_type.py +37 -0
  20. crypticorn/klines/client/models/exception_detail.py +6 -3
  21. crypticorn/klines/client/models/funding_rate.py +6 -12
  22. crypticorn/klines/client/models/funding_rate_response.py +103 -0
  23. crypticorn/klines/client/models/internal_exchange.py +39 -0
  24. crypticorn/klines/client/models/log_level.py +38 -0
  25. crypticorn/klines/client/models/market_type.py +35 -0
  26. crypticorn/klines/client/models/{ohlcv_history.py → ohlcv.py} +12 -13
  27. crypticorn/klines/client/models/search_symbol.py +3 -4
  28. crypticorn/klines/client/models/udf_config.py +2 -1
  29. crypticorn/klines/main.py +1 -13
  30. crypticorn/metrics/client/__init__.py +11 -0
  31. crypticorn/metrics/client/api/__init__.py +2 -0
  32. crypticorn/metrics/client/api/admin_api.py +1452 -0
  33. crypticorn/metrics/client/api/exchanges_api.py +51 -40
  34. crypticorn/metrics/client/api/indicators_api.py +49 -32
  35. crypticorn/metrics/client/api/logs_api.py +7 -7
  36. crypticorn/metrics/client/api/marketcap_api.py +28 -25
  37. crypticorn/metrics/client/api/markets_api.py +50 -278
  38. crypticorn/metrics/client/api/quote_currencies_api.py +289 -0
  39. crypticorn/metrics/client/api/status_api.py +4 -231
  40. crypticorn/metrics/client/api/tokens_api.py +241 -37
  41. crypticorn/metrics/client/models/__init__.py +9 -0
  42. crypticorn/metrics/client/models/api_error_identifier.py +115 -0
  43. crypticorn/metrics/client/models/api_error_level.py +37 -0
  44. crypticorn/metrics/client/models/api_error_type.py +37 -0
  45. crypticorn/metrics/client/models/exception_detail.py +6 -3
  46. crypticorn/metrics/client/models/exchange_mapping.py +121 -0
  47. crypticorn/metrics/client/models/internal_exchange.py +39 -0
  48. crypticorn/metrics/client/models/log_level.py +38 -0
  49. crypticorn/metrics/client/models/market_type.py +35 -0
  50. crypticorn/metrics/client/models/marketcap_ranking.py +87 -0
  51. crypticorn/metrics/client/models/ohlcv.py +113 -0
  52. crypticorn/metrics/main.py +14 -2
  53. {crypticorn-2.8.0rc8.dist-info → crypticorn-2.8.1.dist-info}/METADATA +3 -2
  54. {crypticorn-2.8.0rc8.dist-info → crypticorn-2.8.1.dist-info}/RECORD +57 -38
  55. {crypticorn-2.8.0rc8.dist-info → crypticorn-2.8.1.dist-info}/WHEEL +0 -0
  56. {crypticorn-2.8.0rc8.dist-info → crypticorn-2.8.1.dist-info}/entry_points.txt +0 -0
  57. {crypticorn-2.8.0rc8.dist-info → crypticorn-2.8.1.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.0rc8
3
+ Version: 2.8.1
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
@@ -57,7 +57,7 @@ crypticorn/auth/client/models/wallet_verified200_response.py,sha256=IXhtaD0CC6Jp
57
57
  crypticorn/auth/client/models/whoami200_response.py,sha256=-Kj3fB4lgNaa8v_LTertjxXahBYtTpTIXkBha9MhA1o,3199
58
58
  crypticorn/cli/__init__.py,sha256=bgMmlpRThjYcxXJ1U3UmLE8ODVT5olmFY1u69VOjthQ,69
59
59
  crypticorn/cli/__main__.py,sha256=x9T4xS3U-qokGEzad7rTujmq4yjV5xcYSXgNsDFkvyo,253
60
- crypticorn/cli/init.py,sha256=xefvOCjXOiSUPWHFDDv7DWDC0Ggs1JKxk7KPCXyMZnU,3729
60
+ crypticorn/cli/init.py,sha256=8f7fihi1Wcd95ChvbLWl6U_zWnEYZC7XYSm6xacUTdE,3718
61
61
  crypticorn/cli/templates/Dockerfile,sha256=89KlphaXJH51L7Vs4B928WmwYcMtpvLmKGyoDAhOcMw,726
62
62
  crypticorn/cli/templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
63
63
  crypticorn/cli/templates/auth.py,sha256=Q1TxlA7qzhjvrqp1xz1aV2vGnj3DKFNN-VSl3o0B-dI,983
@@ -69,19 +69,19 @@ crypticorn/common/auth.py,sha256=GIb9MikQsSxqz-K5rDIOroP5mFoTgQqwByTGO5JqcdM,871
69
69
  crypticorn/common/decorators.py,sha256=pmnGYCIrLv59wZkDbvPyK9NJmgPJWW74LXTdIWSjOkY,1063
70
70
  crypticorn/common/enums.py,sha256=RitDVqlG_HTe6tHT6bWusZNFCeYk1eQvJVH-7x3_Zlg,668
71
71
  crypticorn/common/errors.py,sha256=8jxZ2lLn_NoFKKq6n2JwKPsR0dA2vkGnbXDfEK6ndH0,27851
72
- crypticorn/common/exceptions.py,sha256=Kw3AtqaLaAvSs1fLCn7uNMhV6QZdsCpS2CjtIsoiXSA,6198
73
- crypticorn/common/logging.py,sha256=MTB94rsKxnfQVMECHW16A1MmnnzrHaEQ6oWHmQqHUFA,4339
72
+ crypticorn/common/exceptions.py,sha256=9ftvKoMFP9rNvaYhCKDgbJXwTYrBlReMmFwL3RzZJYQ,6203
73
+ crypticorn/common/logging.py,sha256=xF7j4-rGj6ALlz5JwbMi4oEeyfI6VKDh3GlR3kCe3hc,4295
74
74
  crypticorn/common/middleware.py,sha256=YF0_tTjQekZkb6ip3xsqy04JCI4S8011CiSL3helU2E,962
75
75
  crypticorn/common/mixins.py,sha256=o-VONtAS_nHH-OPCFXox6kdX_Xdn1g37uTtkLqij-6U,1722
76
76
  crypticorn/common/pagination.py,sha256=c07jrMNrBaNTmgx4sppdP7ND4RNT7NBqBXWvofazIlE,2251
77
77
  crypticorn/common/scopes.py,sha256=ofJ5FDf30wab572XvDzAXVKBIUWa3shScAmzNrJsWqQ,2453
78
78
  crypticorn/common/urls.py,sha256=3Gf1NU1XQYcOTjcdztG3bDAE98FVbgTK2QXzUe7tFVQ,878
79
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
80
+ crypticorn/common/router/admin_router.py,sha256=_Uvpkrg6daNiAdfr_2rtBlcCq8OvHy04Me12VRWdh4Y,3434
81
+ crypticorn/common/router/status_router.py,sha256=_PPeYi8ps2Og-oJCnf9O7heaCYHq3oStF0_He0D_tZo,642
82
82
  crypticorn/hive/__init__.py,sha256=hRfTlEzEql4msytdUC_04vfaHzVKG5CGZle1M-9QFgY,81
83
83
  crypticorn/hive/main.py,sha256=eoo5bTmbfS94zuYHDkD20orNANESYuTURHQNw3pIEvQ,2875
84
- crypticorn/hive/utils.py,sha256=dxQ_OszrnTsslO5hDefMmgfj6yRwRPr8sr17fGizWIw,2066
84
+ crypticorn/hive/utils.py,sha256=5T2GYnIFazXgAdUlO03xWqcMWhWkM82cfWvwsO8geHE,2040
85
85
  crypticorn/hive/client/__init__.py,sha256=DIC-Gy384GgwFXehCLPrsud67WQn2zADFVo4FbgHWiY,2636
86
86
  crypticorn/hive/client/api_client.py,sha256=fDFsACK7hxXw_sgt3ZJVH2RplEdUhR0YZd4tsZA9P5Q,26869
87
87
  crypticorn/hive/client/api_response.py,sha256=WhxwYDSMm6wPixp9CegO8dJzjFxDz3JF1yCq9s0ZqKE,639
@@ -118,53 +118,72 @@ crypticorn/hive/client/models/target.py,sha256=otOJK8s5WVUen6J1AQZpRiD330RIpaJU6
118
118
  crypticorn/hive/client/models/target_info.py,sha256=hFaOMZlirH2B68DQstL_c4WvtejwXyOk67lxIaeuh3Q,2857
119
119
  crypticorn/hive/client/models/target_type.py,sha256=FUMaEFkPM7EvStPJE1auimDJ9mxDf6pbsFf-dF3coGw,684
120
120
  crypticorn/klines/__init__.py,sha256=9UUW013uZ5x4evz5zRUxbNid-6O9WAPPYvPZIHpAwms,87
121
- crypticorn/klines/main.py,sha256=yJJn4UCsAzokuI7aSwuQ4pvDN1twCrsarqSfWp7RjGs,2789
122
- crypticorn/klines/client/__init__.py,sha256=YLtas-sCXyq543ujKIWIT73qfQ1D97stsztr1AWjhSc,2222
121
+ crypticorn/klines/main.py,sha256=AHeV-qiAyebV6n_vLPJCV3CliK2N85fXm7dXjjY6TNE,2347
122
+ crypticorn/klines/client/__init__.py,sha256=KAwR6kMFkKap_1Un_HsT8LqYLsTIKUNIJe9JI6Acprg,2792
123
123
  crypticorn/klines/client/api_client.py,sha256=XYk_eoVRHxQDoTKJJwMpO__LbU1DQtpMikBTyulJrvE,26925
124
124
  crypticorn/klines/client/api_response.py,sha256=WhxwYDSMm6wPixp9CegO8dJzjFxDz3JF1yCq9s0ZqKE,639
125
125
  crypticorn/klines/client/configuration.py,sha256=BbSjKLJEKc7v3aY4BX1G9U6nac_Krqi4msBkBZQ5tKg,19153
126
126
  crypticorn/klines/client/exceptions.py,sha256=UQOoeVgvSQknAxeG-nfg0629MfAQH0IpDBwnB0t4Qb8,6418
127
127
  crypticorn/klines/client/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
128
128
  crypticorn/klines/client/rest.py,sha256=M3VBl9SLU3D0L3DBX3Nr7sgL0Moh1G2mJX8KD_yyKbY,7021
129
- crypticorn/klines/client/api/__init__.py,sha256=LFjvjTTg79by1SCVX1jjyjQUa-4sj7pUwa1UYQ1JXo0,459
130
- crypticorn/klines/client/api/change_in_timeframe_api.py,sha256=e0q50TKN6cOh5Kuiah355RMVl9COmnezUo06zzm18lQ,12768
131
- crypticorn/klines/client/api/funding_rates_api.py,sha256=EoG3YlB1g5yY69wGHGEE1RvdZgPbUaEmCN8uSh7Lp28,13843
132
- crypticorn/klines/client/api/ohlcv_data_api.py,sha256=trMw6pUBTO3qwyPcKUtVepXnfHbPHBiqyCACY_jxFTw,16390
133
- crypticorn/klines/client/api/status_api.py,sha256=x1dozAmylT5pLK2rvL-IBd8fDKgMjQkVn-XDxER02dw,28764
134
- crypticorn/klines/client/api/symbols_api.py,sha256=OfrTMlJy547mk0T2HbRYVlDbQi1wRlNDNoFv81k_VbQ,10960
135
- crypticorn/klines/client/api/udf_api.py,sha256=0vdczpzBLfAB8667iBLs5gK-0HJtWUwHHZmMIConclU,60949
136
- crypticorn/klines/client/models/__init__.py,sha256=R3WUYXWXvI9yGxAOIdm-Irq_xROr6uuxI0d27RhQ8pI,1176
129
+ crypticorn/klines/client/api/__init__.py,sha256=OPC4DMWEWdqEKjnZicasGIx7tlOCenxz_rdAQJli-2M,519
130
+ crypticorn/klines/client/api/admin_api.py,sha256=SF3nAFP7kWyzG-z9pkUW_EjdKN_PkXiIR33e1W6TzKY,59124
131
+ crypticorn/klines/client/api/change_in_timeframe_api.py,sha256=ALxGByJu6KBs2DBtoSP8ijjT4fc8eeWFsMn4focnbaA,12710
132
+ crypticorn/klines/client/api/funding_rates_api.py,sha256=8RNBfVKzLchukiPDjN7IXErF0audGsaJizL6iCuAh7U,13860
133
+ crypticorn/klines/client/api/ohlcv_data_api.py,sha256=zmj0dMTzofFf97np9mDZ4647Rj4gjL6w268GdUo_dmc,16806
134
+ crypticorn/klines/client/api/status_api.py,sha256=t25JyJxf7tCVCwrSUpyqN0ad8vcTRtxSfqQNLmurEeo,19708
135
+ crypticorn/klines/client/api/symbols_api.py,sha256=5TXxVW_6dHUAwbHd9qq2dNaM8orszUpYk1NdrNu6m9k,11059
136
+ crypticorn/klines/client/api/udf_api.py,sha256=zaPJPsyyuYfNzO28xkkn_ZDJOwVaDlwtYSq8uoHLQMo,60899
137
+ crypticorn/klines/client/models/__init__.py,sha256=xcPaL5Lz08YQOYkpODE_u13QTeOQSEomdcO4WMlJcmc,1686
138
+ crypticorn/klines/client/models/api_error_identifier.py,sha256=DJFq_7Bf4LSuUuckQjFXtWzbJCi9OxvY2wT3oIIk3jc,4945
139
+ crypticorn/klines/client/models/api_error_level.py,sha256=5m0d06bYaHGVgGC2y8cDmmokuHzIjJOPFM50874Wkm8,762
140
+ crypticorn/klines/client/models/api_error_type.py,sha256=SiuXT2lbTkDgNDA6pptaPwO1g4jSHSHnJprUmavmHS0,803
137
141
  crypticorn/klines/client/models/change_in_timeframe.py,sha256=NBt_u2n5U1P1S8c28edokdbqyvTOYUQ7dYgvi2g_Ci8,2554
138
- crypticorn/klines/client/models/exception_detail.py,sha256=hULFn3y6aM5mjRjg5m3qdVUzOTeZKWUSRMvIXHJVEQo,3701
139
- crypticorn/klines/client/models/funding_rate.py,sha256=91Ok500h7lBBefTYTtcNoIG-lLQc6MNke91pJzd7rK8,2727
140
- crypticorn/klines/client/models/ohlcv_history.py,sha256=dKjy5SJQw9a4-8ABVMdMiis3VD1gpDBkUpMqFO3r6wA,3292
142
+ crypticorn/klines/client/models/exception_detail.py,sha256=OU_H52xmYcKJ2f0W-kovSdISVaBYrpwF3XH7_Q88Fck,3953
143
+ crypticorn/klines/client/models/funding_rate.py,sha256=MU24vcCoIbyFQntfzkWaU8HHIDkjogrKDjvQwA7_FXU,2687
144
+ crypticorn/klines/client/models/funding_rate_response.py,sha256=HuvD4kd6jzJGzJBbZh2nUGbY022kfOBcvTbY9Nswx0E,3497
145
+ crypticorn/klines/client/models/internal_exchange.py,sha256=Kf_eokFz8j6LFXKRYV4NU9zSsEB3GdMppnSgDplGgG8,861
146
+ crypticorn/klines/client/models/log_level.py,sha256=7Fs-tsgqDurXrTfovY-B-wz3OTE_wr6IGlAZaveXJbc,766
147
+ crypticorn/klines/client/models/market_type.py,sha256=iborRpJg9DypJuxB_RtkAzlzFaJLL4Onn1HYDbFXkEc,708
148
+ crypticorn/klines/client/models/ohlcv.py,sha256=Xht0wCRM-2cHn3b9nwRKM0x8RVZNg5Dqxly0jrzHTiU,3194
141
149
  crypticorn/klines/client/models/resolution.py,sha256=xmyK99K0R7-8XEz3vEjEfPUT70BtRjbSHtsTs6wheFE,761
142
- crypticorn/klines/client/models/search_symbol.py,sha256=QYoi4VHcxkD6kBJCsjQHGsHscFy9XjuOkwuX3rMhEdo,2812
150
+ crypticorn/klines/client/models/search_symbol.py,sha256=nxYE-yLT71UXXEh4I8euPMZcGrlbkBxGZKONJvRxK2g,2798
143
151
  crypticorn/klines/client/models/sort_direction.py,sha256=wFU7tm4M9bgR55rgN2aKLBPISnG9xKGTEXqcNV4fkSw,707
144
152
  crypticorn/klines/client/models/symbol_group.py,sha256=E_BxSCHzZQCInnakWw1Q5VI6ysHdjMR3SuZRJ9p0Ukk,2437
145
153
  crypticorn/klines/client/models/symbol_info.py,sha256=aAdze6VgvTqnfhTelP1fVzCJkh5L7OUwcWN7J0nCRkc,3998
146
154
  crypticorn/klines/client/models/symbol_type.py,sha256=uOEqlQJ714fa0SEYOxzCOx9cG-q1OoP_rZ5_nU461Vc,2449
147
155
  crypticorn/klines/client/models/timeframe.py,sha256=bSZJz3Q78V1RAnm3ZDtGBzFOnDKE3Pc5A0eP3ky3KaI,760
148
- crypticorn/klines/client/models/udf_config.py,sha256=3VxMqMJb7AqwxWyeM1SxEd4jp2r-iRZppVRW7RHR7iY,5066
156
+ crypticorn/klines/client/models/udf_config.py,sha256=cVSxnJrkwnS4p0fEUgZMekueDv28k-p58bZwvHMSmqc,5152
149
157
  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
158
+ crypticorn/metrics/main.py,sha256=I4KZ-46ro6I6-EWf3p1BZV-8Iryorr8pRUZhv3yXzXI,3581
159
+ crypticorn/metrics/client/__init__.py,sha256=zp5tyfddEBfFrCqp9YEAwObC60lZ0GnqO3dvsAOt1zE,2530
152
160
  crypticorn/metrics/client/api_client.py,sha256=pGWJuO-mgxlUdhJGwkScf7CviGzjDrmUAiU0LXasQY4,26934
153
161
  crypticorn/metrics/client/api_response.py,sha256=WhxwYDSMm6wPixp9CegO8dJzjFxDz3JF1yCq9s0ZqKE,639
154
162
  crypticorn/metrics/client/configuration.py,sha256=wA1hBWEINMM_AlZg-DAv1AelmkjBERB5d2gA66aEwSM,19158
155
163
  crypticorn/metrics/client/exceptions.py,sha256=UegnYftFlQDXAQv8BmD20yRzTtWpjTHcuOymTBWmgeE,6421
156
164
  crypticorn/metrics/client/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
157
165
  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
166
+ crypticorn/metrics/client/api/__init__.py,sha256=nNmEy9XBH8jQboMzedrzeGl8OVuDo_iylCaFw4Fgysg,649
167
+ crypticorn/metrics/client/api/admin_api.py,sha256=8JGUN0w-bIcENKLJVgBvkVgAlDIRqilTTaF8ulUCPok,58540
168
+ crypticorn/metrics/client/api/exchanges_api.py,sha256=BZiJH8hxxSnI9SXydgErM6gzvIR-t9vNXbh9fFotpQQ,40455
169
+ crypticorn/metrics/client/api/indicators_api.py,sha256=gltFmv_EorYbeWMnp-N0QkgdVKrkvi1iOZUP_ewkXZ0,26748
170
+ crypticorn/metrics/client/api/logs_api.py,sha256=lDOixn5hn3DWc6HjExWtKZfy7U4NfcSLsO1bNFrx4GE,13550
171
+ crypticorn/metrics/client/api/marketcap_api.py,sha256=28lQlBJh5hdW7fULJl55bAJy_HWZWEdouds63YJIwAQ,51106
172
+ crypticorn/metrics/client/api/markets_api.py,sha256=NbPtD5bQK_Nt73hlVd6cd1pAZ7HO1QQgNl_abNoN00s,14739
173
+ crypticorn/metrics/client/api/quote_currencies_api.py,sha256=H4c3zOp5eTTUrRMlMH-H8aIIBpV4Ioj8c65UUt_BEuE,11259
174
+ crypticorn/metrics/client/api/status_api.py,sha256=_Ou_EGmjPyv32G-S4QKfRemdpGG6FUsgOkbGDfYaFp0,19633
175
+ crypticorn/metrics/client/api/tokens_api.py,sha256=x5a-YAeAgFJm-pN4K3-lOM-WPVYAxoBr-AYb-oxhysM,19522
176
+ crypticorn/metrics/client/models/__init__.py,sha256=Voa1tj-CTpvzF6UmGJf0h0zFqG-7wFV8TSwH_lst0WY,1285
177
+ crypticorn/metrics/client/models/api_error_identifier.py,sha256=HrL78MgQ0NbWv8CJhl6Zbp3QSIK2xO8lAZy5y6M8NCk,4948
178
+ crypticorn/metrics/client/models/api_error_level.py,sha256=fxhEXRsXIAttvVqKvv0r58fEsRl_2X8GOICw0eRGMIg,765
179
+ crypticorn/metrics/client/models/api_error_type.py,sha256=AwnguQ4VyyqMj3hGqy-kpxZhzpy-tjQVt0n3ml_wYlg,806
180
+ crypticorn/metrics/client/models/exception_detail.py,sha256=3SijhjW8homYVC4p0qgRyOUlObGCP3WpbO4IfGYLzQk,3959
181
+ crypticorn/metrics/client/models/exchange_mapping.py,sha256=SJkMHO-ZZfnnjWNHAgmLOyJyDIGV8t1T3AF_3PukXBs,4104
182
+ crypticorn/metrics/client/models/internal_exchange.py,sha256=aWc3gPt1TSQ74y5tivLAVOu-qySo9djgIWwsB8nYass,864
183
+ crypticorn/metrics/client/models/log_level.py,sha256=u_1h06MyyyfV5PYYh8Xjgq9ySF2CfU_clZbkww6aJk4,769
184
+ crypticorn/metrics/client/models/market_type.py,sha256=1fLJIuDO5wK5JABFxtnJzHMwJw1mSqf21-QVAP102xk,711
185
+ crypticorn/metrics/client/models/marketcap_ranking.py,sha256=tRA7IjesdhQWZJAucRXngMpHIjfOeQefinnJkP71UxQ,2561
186
+ crypticorn/metrics/client/models/ohlcv.py,sha256=2CZx2WOAMHn5hpA9MafWQQIgxP6UbXagh1KsPoe0ODU,3368
168
187
  crypticorn/metrics/client/models/severity.py,sha256=Bwls2jjCMP2lKc-_67d5WZbGPAebUEPge7a82iUf4Qs,731
169
188
  crypticorn/metrics/client/models/time_interval.py,sha256=8bHhMNt56xVGvJi5xNFMrAkAZFRKfym1UkeGoM2H0j8,772
170
189
  crypticorn/metrics/client/models/trading_status.py,sha256=_S-KAyuCJsLLY0UTcNKkhLWoPJS-ywf7y3yTdhIuF0w,746
@@ -236,8 +255,8 @@ crypticorn/trade/client/models/strategy_model_input.py,sha256=ala19jARyfA5ysys5D
236
255
  crypticorn/trade/client/models/strategy_model_output.py,sha256=2o2lhbgUSTznowpMLEHF1Ex9TG9oRmzlCIb-gXqo7_s,5643
237
256
  crypticorn/trade/client/models/tpsl.py,sha256=C2KgTIZs-a8W4msdaXgBKJcwtA-o5wR4rBauRP-iQxU,4317
238
257
  crypticorn/trade/client/models/trading_action_type.py,sha256=pGq_TFLMPfYFizYP-xKgEC1ZF4U3lGdJYoGa_ZH2x-Q,769
239
- crypticorn-2.8.0rc8.dist-info/METADATA,sha256=xyT_tWQ05a1RdYJIUHk1rs2GffyzAN9PMGoqKHbE5ak,8098
240
- crypticorn-2.8.0rc8.dist-info/WHEEL,sha256=0CuiUZ_p9E4cD6NyLD6UG80LBXYyiSYZOKDm5lp32xk,91
241
- crypticorn-2.8.0rc8.dist-info/entry_points.txt,sha256=d_xHsGvUTebPveVUK0SrpDFQ5ZRSjlI7lNCc11sn2PM,59
242
- crypticorn-2.8.0rc8.dist-info/top_level.txt,sha256=EP3NY216qIBYfmvGl0L2Zc9ItP0DjGSkiYqd9xJwGcM,11
243
- crypticorn-2.8.0rc8.dist-info/RECORD,,
258
+ crypticorn-2.8.1.dist-info/METADATA,sha256=03ryK64UR_9PrQWtB60H8y896n-YKmmb99gW2DO9gJU,8140
259
+ crypticorn-2.8.1.dist-info/WHEEL,sha256=0CuiUZ_p9E4cD6NyLD6UG80LBXYyiSYZOKDm5lp32xk,91
260
+ crypticorn-2.8.1.dist-info/entry_points.txt,sha256=d_xHsGvUTebPveVUK0SrpDFQ5ZRSjlI7lNCc11sn2PM,59
261
+ crypticorn-2.8.1.dist-info/top_level.txt,sha256=EP3NY216qIBYfmvGl0L2Zc9ItP0DjGSkiYqd9xJwGcM,11
262
+ crypticorn-2.8.1.dist-info/RECORD,,