crypticorn 2.5.3__py3-none-any.whl → 2.7.0__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/__init__.py +9 -0
- crypticorn/auth/client/api/auth_api.py +8 -5
- crypticorn/auth/client/api/user_api.py +247 -0
- crypticorn/auth/client/models/__init__.py +9 -0
- crypticorn/auth/client/models/create_api_key_request.py +2 -1
- crypticorn/auth/client/models/get_api_keys200_response_inner.py +2 -1
- crypticorn/auth/client/models/user_by_username200_response.py +91 -0
- crypticorn/auth/client/models/verify200_response.py +14 -1
- crypticorn/auth/client/models/verify_email200_response_auth_auth.py +14 -1
- crypticorn/auth/client/models/whoami200_response.py +6 -1
- crypticorn/common/__init__.py +1 -0
- crypticorn/common/auth.py +13 -9
- crypticorn/common/errors.py +320 -88
- crypticorn/common/exceptions.py +38 -4
- crypticorn/common/pagination.py +49 -0
- crypticorn/common/scopes.py +24 -5
- crypticorn/hive/client/__init__.py +2 -0
- crypticorn/hive/client/api/data_api.py +15 -12
- crypticorn/hive/client/api/models_api.py +343 -56
- crypticorn/hive/client/models/__init__.py +2 -0
- crypticorn/hive/client/models/data_info.py +44 -12
- crypticorn/hive/client/models/data_version_info.py +89 -0
- crypticorn/hive/client/models/model.py +2 -3
- crypticorn/hive/client/models/target_info.py +94 -0
- crypticorn/hive/main.py +43 -2
- crypticorn/hive/utils.py +65 -0
- {crypticorn-2.5.3.dist-info → crypticorn-2.7.0.dist-info}/METADATA +2 -2
- {crypticorn-2.5.3.dist-info → crypticorn-2.7.0.dist-info}/RECORD +31 -26
- {crypticorn-2.5.3.dist-info → crypticorn-2.7.0.dist-info}/WHEEL +1 -1
- {crypticorn-2.5.3.dist-info → crypticorn-2.7.0.dist-info}/entry_points.txt +0 -0
- {crypticorn-2.5.3.dist-info → crypticorn-2.7.0.dist-info}/top_level.txt +0 -0
@@ -17,15 +17,15 @@ import pprint
|
|
17
17
|
import re # noqa: F401
|
18
18
|
import json
|
19
19
|
|
20
|
-
from pydantic import BaseModel, ConfigDict
|
21
|
-
from typing import Any, ClassVar, Dict, List
|
20
|
+
from pydantic import BaseModel, ConfigDict
|
21
|
+
from typing import Any, ClassVar, Dict, List
|
22
22
|
from crypticorn.hive.client.models.coins import Coins
|
23
23
|
from crypticorn.hive.client.models.data_value_value_value_inner import (
|
24
24
|
DataValueValueValueInner,
|
25
25
|
)
|
26
|
-
from crypticorn.hive.client.models.
|
26
|
+
from crypticorn.hive.client.models.data_version_info import DataVersionInfo
|
27
27
|
from crypticorn.hive.client.models.feature_size import FeatureSize
|
28
|
-
from crypticorn.hive.client.models.
|
28
|
+
from crypticorn.hive.client.models.target_info import TargetInfo
|
29
29
|
from typing import Optional, Set
|
30
30
|
from typing_extensions import Self
|
31
31
|
|
@@ -38,16 +38,16 @@ class DataInfo(BaseModel):
|
|
38
38
|
data: Dict[str, Dict[str, Dict[str, List[DataValueValueValueInner]]]]
|
39
39
|
coins: List[Coins]
|
40
40
|
feature_sizes: List[FeatureSize]
|
41
|
-
targets:
|
42
|
-
|
43
|
-
|
41
|
+
targets: List[TargetInfo]
|
42
|
+
all_versions: List[DataVersionInfo]
|
43
|
+
available_versions: List[DataVersionInfo]
|
44
44
|
__properties: ClassVar[List[str]] = [
|
45
45
|
"data",
|
46
46
|
"coins",
|
47
47
|
"feature_sizes",
|
48
48
|
"targets",
|
49
|
-
"
|
50
|
-
"
|
49
|
+
"all_versions",
|
50
|
+
"available_versions",
|
51
51
|
]
|
52
52
|
|
53
53
|
model_config = ConfigDict(
|
@@ -87,6 +87,27 @@ class DataInfo(BaseModel):
|
|
87
87
|
exclude=excluded_fields,
|
88
88
|
exclude_none=True,
|
89
89
|
)
|
90
|
+
# override the default output from pydantic by calling `to_dict()` of each item in targets (list)
|
91
|
+
_items = []
|
92
|
+
if self.targets:
|
93
|
+
for _item_targets in self.targets:
|
94
|
+
if _item_targets:
|
95
|
+
_items.append(_item_targets.to_dict())
|
96
|
+
_dict["targets"] = _items
|
97
|
+
# override the default output from pydantic by calling `to_dict()` of each item in all_versions (list)
|
98
|
+
_items = []
|
99
|
+
if self.all_versions:
|
100
|
+
for _item_all_versions in self.all_versions:
|
101
|
+
if _item_all_versions:
|
102
|
+
_items.append(_item_all_versions.to_dict())
|
103
|
+
_dict["all_versions"] = _items
|
104
|
+
# override the default output from pydantic by calling `to_dict()` of each item in available_versions (list)
|
105
|
+
_items = []
|
106
|
+
if self.available_versions:
|
107
|
+
for _item_available_versions in self.available_versions:
|
108
|
+
if _item_available_versions:
|
109
|
+
_items.append(_item_available_versions.to_dict())
|
110
|
+
_dict["available_versions"] = _items
|
90
111
|
return _dict
|
91
112
|
|
92
113
|
@classmethod
|
@@ -104,12 +125,23 @@ class DataInfo(BaseModel):
|
|
104
125
|
"coins": obj.get("coins"),
|
105
126
|
"feature_sizes": obj.get("feature_sizes"),
|
106
127
|
"targets": (
|
107
|
-
|
128
|
+
[TargetInfo.from_dict(_item) for _item in obj["targets"]]
|
108
129
|
if obj.get("targets") is not None
|
109
130
|
else None
|
110
131
|
),
|
111
|
-
"
|
112
|
-
|
132
|
+
"all_versions": (
|
133
|
+
[DataVersionInfo.from_dict(_item) for _item in obj["all_versions"]]
|
134
|
+
if obj.get("all_versions") is not None
|
135
|
+
else None
|
136
|
+
),
|
137
|
+
"available_versions": (
|
138
|
+
[
|
139
|
+
DataVersionInfo.from_dict(_item)
|
140
|
+
for _item in obj["available_versions"]
|
141
|
+
]
|
142
|
+
if obj.get("available_versions") is not None
|
143
|
+
else None
|
144
|
+
),
|
113
145
|
}
|
114
146
|
)
|
115
147
|
return _obj
|
@@ -0,0 +1,89 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
"""
|
4
|
+
Hive AI API
|
5
|
+
|
6
|
+
API for Hive AI model training and evaluation
|
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
|
22
|
+
from crypticorn.hive.client.models.data_version import DataVersion
|
23
|
+
from typing import Optional, Set
|
24
|
+
from typing_extensions import Self
|
25
|
+
|
26
|
+
|
27
|
+
class DataVersionInfo(BaseModel):
|
28
|
+
"""
|
29
|
+
DataVersionInfo
|
30
|
+
""" # noqa: E501
|
31
|
+
|
32
|
+
version: DataVersion = Field(description="Data version")
|
33
|
+
release_date: StrictInt = Field(
|
34
|
+
description="Release date of the data version in unix timestamp"
|
35
|
+
)
|
36
|
+
__properties: ClassVar[List[str]] = ["version", "release_date"]
|
37
|
+
|
38
|
+
model_config = ConfigDict(
|
39
|
+
populate_by_name=True,
|
40
|
+
validate_assignment=True,
|
41
|
+
protected_namespaces=(),
|
42
|
+
)
|
43
|
+
|
44
|
+
def to_str(self) -> str:
|
45
|
+
"""Returns the string representation of the model using alias"""
|
46
|
+
return pprint.pformat(self.model_dump(by_alias=True))
|
47
|
+
|
48
|
+
def to_json(self) -> str:
|
49
|
+
"""Returns the JSON representation of the model using alias"""
|
50
|
+
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
|
51
|
+
return json.dumps(self.to_dict())
|
52
|
+
|
53
|
+
@classmethod
|
54
|
+
def from_json(cls, json_str: str) -> Optional[Self]:
|
55
|
+
"""Create an instance of DataVersionInfo from a JSON string"""
|
56
|
+
return cls.from_dict(json.loads(json_str))
|
57
|
+
|
58
|
+
def to_dict(self) -> Dict[str, Any]:
|
59
|
+
"""Return the dictionary representation of the model using alias.
|
60
|
+
|
61
|
+
This has the following differences from calling pydantic's
|
62
|
+
`self.model_dump(by_alias=True)`:
|
63
|
+
|
64
|
+
* `None` is only added to the output dict for nullable fields that
|
65
|
+
were set at model initialization. Other fields with value `None`
|
66
|
+
are ignored.
|
67
|
+
"""
|
68
|
+
excluded_fields: Set[str] = set([])
|
69
|
+
|
70
|
+
_dict = self.model_dump(
|
71
|
+
by_alias=True,
|
72
|
+
exclude=excluded_fields,
|
73
|
+
exclude_none=True,
|
74
|
+
)
|
75
|
+
return _dict
|
76
|
+
|
77
|
+
@classmethod
|
78
|
+
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
79
|
+
"""Create an instance of DataVersionInfo from a dict"""
|
80
|
+
if obj is None:
|
81
|
+
return None
|
82
|
+
|
83
|
+
if not isinstance(obj, dict):
|
84
|
+
return cls.model_validate(obj)
|
85
|
+
|
86
|
+
_obj = cls.model_validate(
|
87
|
+
{"version": obj.get("version"), "release_date": obj.get("release_date")}
|
88
|
+
)
|
89
|
+
return _obj
|
@@ -17,7 +17,6 @@ import pprint
|
|
17
17
|
import re # noqa: F401
|
18
18
|
import json
|
19
19
|
|
20
|
-
from datetime import datetime
|
21
20
|
from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr
|
22
21
|
from typing import Any, ClassVar, Dict, List
|
23
22
|
from crypticorn.hive.client.models.coins import Coins
|
@@ -42,8 +41,8 @@ class Model(BaseModel):
|
|
42
41
|
target_type: TargetType = Field(description="Target type")
|
43
42
|
evaluations: List[Evaluation] = Field(description="Model evaluations")
|
44
43
|
user_id: StrictStr = Field(description="Developer user ID")
|
45
|
-
created_at:
|
46
|
-
updated_at:
|
44
|
+
created_at: StrictInt = Field(description="Model creation unix timestamp")
|
45
|
+
updated_at: StrictInt = Field(description="Model update unix timestamp")
|
47
46
|
__properties: ClassVar[List[str]] = [
|
48
47
|
"model_id",
|
49
48
|
"name",
|
@@ -0,0 +1,94 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
"""
|
4
|
+
Hive AI API
|
5
|
+
|
6
|
+
API for Hive AI model training and evaluation
|
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
|
21
|
+
from typing import Any, ClassVar, Dict, List
|
22
|
+
from crypticorn.hive.client.models.data_version import DataVersion
|
23
|
+
from crypticorn.hive.client.models.target import Target
|
24
|
+
from crypticorn.hive.client.models.target_type import TargetType
|
25
|
+
from typing import Optional, Set
|
26
|
+
from typing_extensions import Self
|
27
|
+
|
28
|
+
|
29
|
+
class TargetInfo(BaseModel):
|
30
|
+
"""
|
31
|
+
TargetInfo
|
32
|
+
""" # noqa: E501
|
33
|
+
|
34
|
+
name: Target = Field(description="Target name")
|
35
|
+
type: TargetType = Field(description="Target type")
|
36
|
+
version: DataVersion = Field(description="Data version")
|
37
|
+
__properties: ClassVar[List[str]] = ["name", "type", "version"]
|
38
|
+
|
39
|
+
model_config = ConfigDict(
|
40
|
+
populate_by_name=True,
|
41
|
+
validate_assignment=True,
|
42
|
+
protected_namespaces=(),
|
43
|
+
)
|
44
|
+
|
45
|
+
def to_str(self) -> str:
|
46
|
+
"""Returns the string representation of the model using alias"""
|
47
|
+
return pprint.pformat(self.model_dump(by_alias=True))
|
48
|
+
|
49
|
+
def to_json(self) -> str:
|
50
|
+
"""Returns the JSON representation of the model using alias"""
|
51
|
+
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
|
52
|
+
return json.dumps(self.to_dict())
|
53
|
+
|
54
|
+
@classmethod
|
55
|
+
def from_json(cls, json_str: str) -> Optional[Self]:
|
56
|
+
"""Create an instance of TargetInfo from a JSON string"""
|
57
|
+
return cls.from_dict(json.loads(json_str))
|
58
|
+
|
59
|
+
def to_dict(self) -> Dict[str, Any]:
|
60
|
+
"""Return the dictionary representation of the model using alias.
|
61
|
+
|
62
|
+
This has the following differences from calling pydantic's
|
63
|
+
`self.model_dump(by_alias=True)`:
|
64
|
+
|
65
|
+
* `None` is only added to the output dict for nullable fields that
|
66
|
+
were set at model initialization. Other fields with value `None`
|
67
|
+
are ignored.
|
68
|
+
"""
|
69
|
+
excluded_fields: Set[str] = set([])
|
70
|
+
|
71
|
+
_dict = self.model_dump(
|
72
|
+
by_alias=True,
|
73
|
+
exclude=excluded_fields,
|
74
|
+
exclude_none=True,
|
75
|
+
)
|
76
|
+
return _dict
|
77
|
+
|
78
|
+
@classmethod
|
79
|
+
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
|
80
|
+
"""Create an instance of TargetInfo from a dict"""
|
81
|
+
if obj is None:
|
82
|
+
return None
|
83
|
+
|
84
|
+
if not isinstance(obj, dict):
|
85
|
+
return cls.model_validate(obj)
|
86
|
+
|
87
|
+
_obj = cls.model_validate(
|
88
|
+
{
|
89
|
+
"name": obj.get("name"),
|
90
|
+
"type": obj.get("type"),
|
91
|
+
"version": obj.get("version"),
|
92
|
+
}
|
93
|
+
)
|
94
|
+
return _obj
|
crypticorn/hive/main.py
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
import asyncio
|
2
|
+
from pathlib import Path
|
3
|
+
import os
|
1
4
|
from crypticorn.hive import (
|
2
5
|
ApiClient,
|
3
6
|
Configuration,
|
@@ -6,7 +9,45 @@ from crypticorn.hive import (
|
|
6
9
|
StatusApi,
|
7
10
|
Configuration,
|
8
11
|
)
|
9
|
-
from crypticorn.
|
12
|
+
from crypticorn.hive.utils import download_file
|
13
|
+
import logging
|
14
|
+
|
15
|
+
|
16
|
+
class DataApiWrapper(DataApi):
|
17
|
+
"""
|
18
|
+
A wrapper for the DataApi class.
|
19
|
+
"""
|
20
|
+
|
21
|
+
async def download_data(self, folder: Path = "data", *args, **kwargs) -> list[Path]:
|
22
|
+
"""
|
23
|
+
Download data for model training. All three files (y_train, x_test, x_train) are downloaded and saved under e.g. FOLDER/v1/coin_1/*.feather.
|
24
|
+
The folder will be created if it doesn't exist.
|
25
|
+
|
26
|
+
:param model_id: Model ID (required) (type: int)
|
27
|
+
:param version: Data version. Default is the latest public version. (optional) (type: DataVersion)
|
28
|
+
:param feature_size: The number of features in the data. Default is LARGE. (optional) (type: FeatureSize)
|
29
|
+
:return: A list of paths to the downloaded files.
|
30
|
+
"""
|
31
|
+
response = await super().download_data(*args, **kwargs)
|
32
|
+
base_path = f"{folder}/v{response.version.value}/coin_{response.coin.value}/"
|
33
|
+
os.makedirs(base_path, exist_ok=True)
|
34
|
+
|
35
|
+
return await asyncio.gather(
|
36
|
+
*[
|
37
|
+
download_file(
|
38
|
+
url=response.links.y_train,
|
39
|
+
dest_path=base_path + "y_train_" + response.target + ".feather",
|
40
|
+
),
|
41
|
+
download_file(
|
42
|
+
url=response.links.x_test,
|
43
|
+
dest_path=base_path + "x_test_" + response.feature_size + ".feather",
|
44
|
+
),
|
45
|
+
download_file(
|
46
|
+
url=response.links.x_train,
|
47
|
+
dest_path=base_path + "x_train_" + response.feature_size + ".feather",
|
48
|
+
),
|
49
|
+
]
|
50
|
+
)
|
10
51
|
|
11
52
|
|
12
53
|
class HiveClient:
|
@@ -24,5 +65,5 @@ class HiveClient:
|
|
24
65
|
self.base_client = ApiClient(configuration=self.config)
|
25
66
|
# Instantiate all the endpoint clients
|
26
67
|
self.models = ModelsApi(self.base_client)
|
27
|
-
self.data =
|
68
|
+
self.data = DataApiWrapper(self.base_client)
|
28
69
|
self.status = StatusApi(self.base_client)
|
crypticorn/hive/utils.py
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
import requests
|
2
|
+
import os
|
3
|
+
import tqdm
|
4
|
+
import logging
|
5
|
+
|
6
|
+
logger = logging.getLogger(__name__)
|
7
|
+
logger.setLevel(logging.INFO)
|
8
|
+
|
9
|
+
|
10
|
+
async def download_file(url: str, dest_path: str, show_progress_bars: bool = True) -> str:
|
11
|
+
"""downloads a file and shows a progress bar. allow resuming a download"""
|
12
|
+
file_size = 0
|
13
|
+
req = requests.get(url, stream=True, timeout=600)
|
14
|
+
req.raise_for_status()
|
15
|
+
|
16
|
+
total_size = int(req.headers.get("content-length", 0))
|
17
|
+
temp_path = dest_path + ".temp"
|
18
|
+
|
19
|
+
if os.path.exists(dest_path):
|
20
|
+
logger.info(f" file already exists: {dest_path}")
|
21
|
+
file_size = os.stat(dest_path).st_size
|
22
|
+
if file_size == total_size:
|
23
|
+
return dest_path
|
24
|
+
|
25
|
+
if os.path.exists(temp_path):
|
26
|
+
file_size = os.stat(temp_path).st_size
|
27
|
+
|
28
|
+
if file_size < total_size:
|
29
|
+
# Download incomplete
|
30
|
+
logger.info(f" resuming download")
|
31
|
+
resume_header = {"Range": f"bytes={file_size}-"}
|
32
|
+
req = requests.get(
|
33
|
+
url,
|
34
|
+
headers=resume_header,
|
35
|
+
stream=True,
|
36
|
+
verify=False,
|
37
|
+
allow_redirects=True,
|
38
|
+
timeout=600,
|
39
|
+
)
|
40
|
+
else:
|
41
|
+
# Error, delete file and restart download
|
42
|
+
logger.error(f" deleting file {dest_path} and restarting")
|
43
|
+
os.remove(temp_path)
|
44
|
+
file_size = 0
|
45
|
+
else:
|
46
|
+
# File does not exist, starting download
|
47
|
+
logger.info(f" starting download")
|
48
|
+
|
49
|
+
# write dataset to file and show progress bar
|
50
|
+
pbar = tqdm.tqdm(
|
51
|
+
total=total_size,
|
52
|
+
unit="B",
|
53
|
+
unit_scale=True,
|
54
|
+
desc=dest_path,
|
55
|
+
disable=not show_progress_bars,
|
56
|
+
)
|
57
|
+
# Update progress bar to reflect how much of the file is already downloaded
|
58
|
+
pbar.update(file_size)
|
59
|
+
with open(temp_path, "ab") as dest_file:
|
60
|
+
for chunk in req.iter_content(1024):
|
61
|
+
dest_file.write(chunk)
|
62
|
+
pbar.update(1024)
|
63
|
+
# move temp file to target destination
|
64
|
+
os.replace(temp_path, dest_path)
|
65
|
+
return dest_path
|
@@ -1,7 +1,7 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: crypticorn
|
3
|
-
Version: 2.
|
4
|
-
Summary: Maximise Your Crypto Trading Profits with
|
3
|
+
Version: 2.7.0
|
4
|
+
Summary: Maximise Your Crypto Trading Profits with Machine Learning
|
5
5
|
Author-email: Crypticorn <timon@crypticorn.com>
|
6
6
|
Project-URL: Homepage, https://crypticorn.com
|
7
7
|
Keywords: machine learning,data science,crypto,modelling
|
@@ -2,7 +2,7 @@ crypticorn/__init__.py,sha256=TL41V09dmtbd2ee07wmOuG9KJJpyvLMPJi5DEd9bDyU,129
|
|
2
2
|
crypticorn/client.py,sha256=jMdF4mZuqB8YMZZOwJkTcvpHluGqw6Q-taSF6vQS5WM,3912
|
3
3
|
crypticorn/auth/__init__.py,sha256=JAl1tBLK9pYLr_-YKaj581c-c94PWLoqnatTIVAVvMM,81
|
4
4
|
crypticorn/auth/main.py,sha256=j8eRGN2gUWyeOCnWnUPe3mCAfaidGnOMnZRiSQy-yzM,720
|
5
|
-
crypticorn/auth/client/__init__.py,sha256=
|
5
|
+
crypticorn/auth/client/__init__.py,sha256=do16xS84uXvVoJuWERjb9RwlOaLy4UF4uKBZWczFC3c,5291
|
6
6
|
crypticorn/auth/client/api_client.py,sha256=YumNsoI1ROiukpmDloiSfy7ZTd207khTmNLa7Dien5o,26888
|
7
7
|
crypticorn/auth/client/api_response.py,sha256=WhxwYDSMm6wPixp9CegO8dJzjFxDz3JF1yCq9s0ZqKE,639
|
8
8
|
crypticorn/auth/client/configuration.py,sha256=eBiet9rc3ok09IltEbCX14DhQGEOc0_sPHrRLKNSmCo,18034
|
@@ -11,20 +11,20 @@ crypticorn/auth/client/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSu
|
|
11
11
|
crypticorn/auth/client/rest.py,sha256=7ykLyiCyjtTiC1F-9JfrD79vaA831O_irNDmaRArnGg,6994
|
12
12
|
crypticorn/auth/client/api/__init__.py,sha256=c-MlPvmOXSsk_ragrcUe8WkOuCPTTpJ8maSp2sER0EU,339
|
13
13
|
crypticorn/auth/client/api/admin_api.py,sha256=SmChBoU6emc2q-AqH2yRAWFCsOKn2Uis2H9Z-_TGHwg,21215
|
14
|
-
crypticorn/auth/client/api/auth_api.py,sha256=
|
14
|
+
crypticorn/auth/client/api/auth_api.py,sha256=HsCzlkjFJjdJwNZ-toQhLaQnpH-o4fPJaf6xsO2ICiw,124272
|
15
15
|
crypticorn/auth/client/api/service_api.py,sha256=rAnJOot2xLgKY9BAaEv_KtsSUgHXbOD58jypyry7Hkg,12403
|
16
|
-
crypticorn/auth/client/api/user_api.py,sha256=
|
16
|
+
crypticorn/auth/client/api/user_api.py,sha256=1GdN2cfzY52SK_Qn_oGnzrAJVjI0capYuo-bHKOylE4,113273
|
17
17
|
crypticorn/auth/client/api/wallet_api.py,sha256=_WRT6b5E1dEI8nd2XXjFsFFrbjbO9OdFrOooSBb6nGs,68907
|
18
|
-
crypticorn/auth/client/models/__init__.py,sha256=
|
18
|
+
crypticorn/auth/client/models/__init__.py,sha256=Y6t08mCcqpV7B1OIUZ5Vb5sgtr0s9sGy-0bhSh0DEgM,4383
|
19
19
|
crypticorn/auth/client/models/add_wallet200_response.py,sha256=orw50N1bfr7qg9N8e73VmsvulFvBN0-8PMaR0ze79ks,2539
|
20
20
|
crypticorn/auth/client/models/add_wallet_request.py,sha256=lap0RG_tbW6wq2RHlgUNugI4s0lQq50OO0tXOvK637I,3184
|
21
21
|
crypticorn/auth/client/models/authorize_user200_response.py,sha256=fstTaffARzCe7woPYBuDqxzn-YYl1K1q4yQObGaXpq8,3361
|
22
22
|
crypticorn/auth/client/models/authorize_user200_response_auth.py,sha256=OQzmKNICdr7tHrlhEDIxagDZx7XuW8VO2U3OMsWIJOA,3208
|
23
23
|
crypticorn/auth/client/models/authorize_user_request.py,sha256=o_1Ms6npD_1dJQ6aYshEk9JPV7JIkmAmuRawDDPUoTc,3205
|
24
24
|
crypticorn/auth/client/models/create_api_key200_response.py,sha256=UGjZwITv2EdS7bbt55D0w2an6_uO4u6gYr-GihL9m80,2459
|
25
|
-
crypticorn/auth/client/models/create_api_key_request.py,sha256=
|
25
|
+
crypticorn/auth/client/models/create_api_key_request.py,sha256=V98HWwlRT2AYo96D7W5L4P-MFrOVi62zvHsFY3CVl8M,5479
|
26
26
|
crypticorn/auth/client/models/create_user_request.py,sha256=nq4t2R4ldqSsJUoVhLw9YocdUwatH4gQ-jdFz3jaqrg,3481
|
27
|
-
crypticorn/auth/client/models/get_api_keys200_response_inner.py,sha256=
|
27
|
+
crypticorn/auth/client/models/get_api_keys200_response_inner.py,sha256=G5YxZyrm06NrhfdsS-JA2P97doso2jFscElmGR7teXs,5867
|
28
28
|
crypticorn/auth/client/models/list_wallets200_response.py,sha256=G2LQiThhtynkuDGFvIs-BowR38ut7cRbIeCzK4wMnPw,4732
|
29
29
|
crypticorn/auth/client/models/list_wallets200_response_balances_inner.py,sha256=acTJa8B5U8j3_wS1TUYXnprptqF_T4dlV-wVaQ5ZXig,4023
|
30
30
|
crypticorn/auth/client/models/list_wallets200_response_balances_inner_sale_round.py,sha256=KrCHFXXfc6U61nDFsq26gRtQQnc2_tSjL2fwQOnBfzI,3603
|
@@ -44,35 +44,38 @@ crypticorn/auth/client/models/rotate_tokens200_response.py,sha256=LhSgnQfdCqtxmp
|
|
44
44
|
crypticorn/auth/client/models/token_info200_response.py,sha256=KFwn4oVmBR5JbwIGk0VXu0Vh9JCTRbBBmpqRXrjpWb0,2952
|
45
45
|
crypticorn/auth/client/models/unlink_wallet_request.py,sha256=dzYVVANju72DrzQSuKqGHpBv9V4Yv1wl7S42YqzFL98,2395
|
46
46
|
crypticorn/auth/client/models/update_user_request.py,sha256=eHXaMbXbM5YofcN5cl0fl7C-FBGqOpnS7ZzhEOoR7Ig,2826
|
47
|
+
crypticorn/auth/client/models/user_by_username200_response.py,sha256=JZDEm8P_bnuR6kPFEBTGpisXhEvNYjV8nTibDLXCBKs,2718
|
47
48
|
crypticorn/auth/client/models/user_reset_password_request.py,sha256=9fkUUIpLyvk3YeWcvWL4DWidzenH1mss3L54J3kThuk,2638
|
48
49
|
crypticorn/auth/client/models/user_set_password_request.py,sha256=OSaIKJ_4EcwXvV-chXbRypD8dujMt08slP_CxPWEtiM,2640
|
49
|
-
crypticorn/auth/client/models/verify200_response.py,sha256=
|
50
|
+
crypticorn/auth/client/models/verify200_response.py,sha256=qNZ2ytBJ6ShX-EEB6h6CbwWbgVW8cTj7f1NKKgjoZYo,3822
|
50
51
|
crypticorn/auth/client/models/verify_email200_response.py,sha256=NyhA3kn7lhYsjujdtHdZEjeYTQ0BuVu277twqnYTN5A,3345
|
51
52
|
crypticorn/auth/client/models/verify_email200_response_auth.py,sha256=BmH0ZD7zrlZ6uwb1aBjQXCMnFcWtByTtHrFRBAVcUew,3227
|
52
|
-
crypticorn/auth/client/models/verify_email200_response_auth_auth.py,sha256=
|
53
|
+
crypticorn/auth/client/models/verify_email200_response_auth_auth.py,sha256=BNfpNWk0kLFc3oUjCIEv-S3R8J20dJbGCsniouK_c4U,3874
|
53
54
|
crypticorn/auth/client/models/verify_email_request.py,sha256=W_X14qdTADduVwY4wxSNBPrHHDuiJinD0-sjyP1fkhg,2444
|
54
55
|
crypticorn/auth/client/models/verify_wallet_request.py,sha256=gFKkFXi6b45aUfyklFeHKNJVLxYXE3wR3PvF3JVI4Po,2671
|
55
56
|
crypticorn/auth/client/models/wallet_verified200_response.py,sha256=IXhtaD0CC6Jp9ZG6sgyRg-beIzrhFDuF_bQYOjNMdY0,2445
|
56
|
-
crypticorn/auth/client/models/whoami200_response.py,sha256
|
57
|
+
crypticorn/auth/client/models/whoami200_response.py,sha256=-Kj3fB4lgNaa8v_LTertjxXahBYtTpTIXkBha9MhA1o,3199
|
57
58
|
crypticorn/cli/__init__.py,sha256=bgMmlpRThjYcxXJ1U3UmLE8ODVT5olmFY1u69VOjthQ,69
|
58
59
|
crypticorn/cli/__main__.py,sha256=x9T4xS3U-qokGEzad7rTujmq4yjV5xcYSXgNsDFkvyo,253
|
59
60
|
crypticorn/cli/init.py,sha256=xefvOCjXOiSUPWHFDDv7DWDC0Ggs1JKxk7KPCXyMZnU,3729
|
60
61
|
crypticorn/cli/templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
61
62
|
crypticorn/cli/templates/auth.py,sha256=Q1TxlA7qzhjvrqp1xz1aV2vGnj3DKFNN-VSl3o0B-dI,983
|
62
|
-
crypticorn/common/__init__.py,sha256=
|
63
|
-
crypticorn/common/auth.py,sha256=
|
63
|
+
crypticorn/common/__init__.py,sha256=42ajAXlz0LDBb1AFyX8xvwpp1MB_YrvqutFDkLthUQM,464
|
64
|
+
crypticorn/common/auth.py,sha256=60SRXlW72VJO8rGzCiemWmzGu8tXDqWr0wt9EM6p8aI,8631
|
64
65
|
crypticorn/common/decorators.py,sha256=pmnGYCIrLv59wZkDbvPyK9NJmgPJWW74LXTdIWSjOkY,1063
|
65
66
|
crypticorn/common/enums.py,sha256=RitDVqlG_HTe6tHT6bWusZNFCeYk1eQvJVH-7x3_Zlg,668
|
66
|
-
crypticorn/common/errors.py,sha256=
|
67
|
-
crypticorn/common/exceptions.py,sha256=
|
67
|
+
crypticorn/common/errors.py,sha256=K1VSEKZro1I4cmi-sOhx24pTrvhbbD4RBRRqKodWpA8,27851
|
68
|
+
crypticorn/common/exceptions.py,sha256=Rrpk2ORou2F__cNUWmXs6tFZwIFBZppF4YapUSZLfOQ,5662
|
68
69
|
crypticorn/common/mixins.py,sha256=LKPcNTR8uREeDGWTlWozNx7rS1mYdQVx1RllLhxIAsE,1640
|
69
|
-
crypticorn/common/
|
70
|
+
crypticorn/common/pagination.py,sha256=c07jrMNrBaNTmgx4sppdP7ND4RNT7NBqBXWvofazIlE,2251
|
71
|
+
crypticorn/common/scopes.py,sha256=D1IPujWhRUHD9Xq_ln6_kQUC5Fh0Pam-JLSNNK7m9uk,2364
|
70
72
|
crypticorn/common/status_router.py,sha256=s7LY3aNQPhtDUgNWHRszfCQMl0Uh13li_jR8jeeolnw,1139
|
71
73
|
crypticorn/common/urls.py,sha256=3Gf1NU1XQYcOTjcdztG3bDAE98FVbgTK2QXzUe7tFVQ,878
|
72
74
|
crypticorn/common/utils.py,sha256=Kz2-I96MKIGKM18PHQ77VbKHLMGUvZG_jjj7xpQed8k,2138
|
73
75
|
crypticorn/hive/__init__.py,sha256=hRfTlEzEql4msytdUC_04vfaHzVKG5CGZle1M-9QFgY,81
|
74
|
-
crypticorn/hive/main.py,sha256=
|
75
|
-
crypticorn/hive/
|
76
|
+
crypticorn/hive/main.py,sha256=8-MKEE9zjxjSk4QMD-PcezD5MS-A1BzCFAmdgunJqyg,2308
|
77
|
+
crypticorn/hive/utils.py,sha256=nQe_GLb2Xk9EsuYpHASb_Sik5VyNXEHewCgT1LN4woo,2060
|
78
|
+
crypticorn/hive/client/__init__.py,sha256=BZ7MlUhK1x5j73WRPTPJFbTSELv9urdbpPonq04m6Aw,2331
|
76
79
|
crypticorn/hive/client/api_client.py,sha256=fDFsACK7hxXw_sgt3ZJVH2RplEdUhR0YZd4tsZA9P5Q,26869
|
77
80
|
crypticorn/hive/client/api_response.py,sha256=WhxwYDSMm6wPixp9CegO8dJzjFxDz3JF1yCq9s0ZqKE,639
|
78
81
|
crypticorn/hive/client/configuration.py,sha256=J4tZF5m71BMOFE1rfWzgrBWEPQ-DQ-FByFJiNZ81W48,19105
|
@@ -80,25 +83,27 @@ crypticorn/hive/client/exceptions.py,sha256=IKuM8sbMtr3T9z-fOuePTJmheUFahzmyZ8ia
|
|
80
83
|
crypticorn/hive/client/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
81
84
|
crypticorn/hive/client/rest.py,sha256=VhXkE7R3y1RD0QmbvIwmsk-LP_DmOei_zd9YiIXer28,6975
|
82
85
|
crypticorn/hive/client/api/__init__.py,sha256=y0KYdyqWZTjlf6IKASYmLdUs9a2aiFMHrfQO_V_-ZUw,223
|
83
|
-
crypticorn/hive/client/api/data_api.py,sha256=
|
84
|
-
crypticorn/hive/client/api/models_api.py,sha256=
|
86
|
+
crypticorn/hive/client/api/data_api.py,sha256=GJlH2Qs1KmWCc4nv7y5byyyFDiidLdooG-WvbBv-Z-4,22624
|
87
|
+
crypticorn/hive/client/api/models_api.py,sha256=61r9uObh1puEGJOXi_v-LmEP1xNqfbEo5spEYzlAA44,74136
|
85
88
|
crypticorn/hive/client/api/status_api.py,sha256=3ZZ9e1duL9Oz8gWvQQMryUevuRY_ERMPpClW8gY2THE,28714
|
86
|
-
crypticorn/hive/client/models/__init__.py,sha256=
|
89
|
+
crypticorn/hive/client/models/__init__.py,sha256=C-SmdIMEQljgJaxgADRAgHQuknh0sCZiAELnHC4SuJI,1539
|
87
90
|
crypticorn/hive/client/models/coins.py,sha256=9fTwC6_7mMS2dz4cUZoLYWloOpAjCr-KySGYrVZO_IE,795
|
88
91
|
crypticorn/hive/client/models/data_download_response.py,sha256=ZipGpZW_BPmjLeHimiveacWc3R27afjA2c8R7xXAlAE,3425
|
89
|
-
crypticorn/hive/client/models/data_info.py,sha256=
|
92
|
+
crypticorn/hive/client/models/data_info.py,sha256=2moeH1k9b6-jot6HIzyduONTNWXFcB2ltW3U0sZd5nk,5068
|
90
93
|
crypticorn/hive/client/models/data_value_value_value_inner.py,sha256=fMkZWwAwrdmTDjwD9PVNIh4WzZ_nFACD57B7OPKO4n4,4987
|
91
94
|
crypticorn/hive/client/models/data_version.py,sha256=MMgH6JyFdcpAc6mzs4j13Gumd0vDTw3UEOsKFSOcsSg,668
|
95
|
+
crypticorn/hive/client/models/data_version_info.py,sha256=LdwEwSgGfOzjitxiPXZfEp7IDkMQJs_7SCftZI0-5TQ,2687
|
92
96
|
crypticorn/hive/client/models/download_links.py,sha256=bmxzXwpGxlFwoOPPsKFtEGdotzP_04WHQvzuj2mtu-Q,2639
|
93
97
|
crypticorn/hive/client/models/evaluation.py,sha256=WeLJA4tCS4W_CnGxRAgrxySWko3QPYzpxeVDuYyLPgM,2608
|
94
98
|
crypticorn/hive/client/models/evaluation_response.py,sha256=iwE1G1_EOFga6Zztf1A8z6TNiNc_R06r2lKLHIr5_6A,2526
|
95
99
|
crypticorn/hive/client/models/exception_detail.py,sha256=xLvJvILpIQl3Nl0LYtDPXsZcIouWIUB-0fqoUAaqiaU,3657
|
96
100
|
crypticorn/hive/client/models/feature_size.py,sha256=4lICZHaNU9eLkHzcTaquajSrcOGlBBRFvEKySPp89bc,705
|
97
|
-
crypticorn/hive/client/models/model.py,sha256=
|
101
|
+
crypticorn/hive/client/models/model.py,sha256=xbyqGaaiql35T2-qGyG1kkLsnKJCEmzm1bBNvQDf4FI,4536
|
98
102
|
crypticorn/hive/client/models/model_create.py,sha256=f6Ayw3KD39qw0qtvYF77K3huy7_Tmzv8pDyyQ_ooAG8,2828
|
99
103
|
crypticorn/hive/client/models/model_status.py,sha256=-2H6CHw6jhJgv4VJgwr1sgN2NtT1m7LGCX7L8ULTxEQ,685
|
100
104
|
crypticorn/hive/client/models/model_update.py,sha256=iO-VtYt0aRzj9z_GeIUK2OVNg9yvM01OUVfWyCA36fc,2413
|
101
105
|
crypticorn/hive/client/models/target.py,sha256=eTDXDO4Vv1bB-cFrH7FuEeY7Eaf0YDIrQgba9TW7Y6s,697
|
106
|
+
crypticorn/hive/client/models/target_info.py,sha256=evxehW41BlLG2EUYb4ZZBKgF-0-3ZzHNSFWe_7qyjiQ,2841
|
102
107
|
crypticorn/hive/client/models/target_type.py,sha256=rv9ub_0BM5DAR8jtGAZKbTO7RObEu-86kPT4dTS-OuM,672
|
103
108
|
crypticorn/klines/__init__.py,sha256=9UUW013uZ5x4evz5zRUxbNid-6O9WAPPYvPZIHpAwms,87
|
104
109
|
crypticorn/klines/main.py,sha256=uQ7Ds_pQZ68o3uvSUOd7J0NEyy9--88dKXhzzm0F9dI,2754
|
@@ -216,8 +221,8 @@ crypticorn/trade/client/models/strategy_model_input.py,sha256=ala19jARyfA5ysys5D
|
|
216
221
|
crypticorn/trade/client/models/strategy_model_output.py,sha256=2o2lhbgUSTznowpMLEHF1Ex9TG9oRmzlCIb-gXqo7_s,5643
|
217
222
|
crypticorn/trade/client/models/tpsl.py,sha256=C2KgTIZs-a8W4msdaXgBKJcwtA-o5wR4rBauRP-iQxU,4317
|
218
223
|
crypticorn/trade/client/models/trading_action_type.py,sha256=pGq_TFLMPfYFizYP-xKgEC1ZF4U3lGdJYoGa_ZH2x-Q,769
|
219
|
-
crypticorn-2.
|
220
|
-
crypticorn-2.
|
221
|
-
crypticorn-2.
|
222
|
-
crypticorn-2.
|
223
|
-
crypticorn-2.
|
224
|
+
crypticorn-2.7.0.dist-info/METADATA,sha256=WcIXa2urQyx79i-xY-v6Q6TicA9zaybXWNOcmg2euxo,6249
|
225
|
+
crypticorn-2.7.0.dist-info/WHEEL,sha256=wXxTzcEDnjrTwFYjLPcsW_7_XihufBwmpiBeiXNBGEA,91
|
226
|
+
crypticorn-2.7.0.dist-info/entry_points.txt,sha256=d_xHsGvUTebPveVUK0SrpDFQ5ZRSjlI7lNCc11sn2PM,59
|
227
|
+
crypticorn-2.7.0.dist-info/top_level.txt,sha256=EP3NY216qIBYfmvGl0L2Zc9ItP0DjGSkiYqd9xJwGcM,11
|
228
|
+
crypticorn-2.7.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|