crypticorn 2.15.0__py3-none-any.whl → 2.17.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.
Files changed (168) hide show
  1. crypticorn/__init__.py +2 -2
  2. crypticorn/auth/client/api/admin_api.py +397 -13
  3. crypticorn/auth/client/api/auth_api.py +3610 -341
  4. crypticorn/auth/client/api/service_api.py +249 -7
  5. crypticorn/auth/client/api/user_api.py +2295 -179
  6. crypticorn/auth/client/api/wallet_api.py +1468 -81
  7. crypticorn/auth/client/configuration.py +2 -2
  8. crypticorn/auth/client/models/create_api_key_request.py +2 -1
  9. crypticorn/auth/client/models/get_api_keys200_response_inner.py +2 -1
  10. crypticorn/auth/client/rest.py +23 -4
  11. crypticorn/auth/main.py +8 -5
  12. crypticorn/cli/init.py +1 -1
  13. crypticorn/cli/templates/.env.docker.temp +3 -0
  14. crypticorn/cli/templates/.env.example.temp +4 -0
  15. crypticorn/cli/templates/Dockerfile +5 -2
  16. crypticorn/client.py +226 -59
  17. crypticorn/common/__init__.py +1 -0
  18. crypticorn/common/auth.py +45 -14
  19. crypticorn/common/decorators.py +1 -2
  20. crypticorn/common/enums.py +0 -2
  21. crypticorn/common/errors.py +10 -0
  22. crypticorn/common/metrics.py +30 -0
  23. crypticorn/common/middleware.py +94 -1
  24. crypticorn/common/pagination.py +252 -18
  25. crypticorn/common/router/admin_router.py +2 -2
  26. crypticorn/common/router/status_router.py +40 -2
  27. crypticorn/common/scopes.py +2 -0
  28. crypticorn/common/warnings.py +8 -0
  29. crypticorn/dex/__init__.py +6 -0
  30. crypticorn/dex/client/__init__.py +49 -0
  31. crypticorn/dex/client/api/__init__.py +6 -0
  32. crypticorn/dex/client/api/admin_api.py +2986 -0
  33. crypticorn/dex/client/api/signals_api.py +1798 -0
  34. crypticorn/dex/client/api/status_api.py +892 -0
  35. crypticorn/dex/client/api_client.py +758 -0
  36. crypticorn/dex/client/api_response.py +20 -0
  37. crypticorn/dex/client/configuration.py +620 -0
  38. crypticorn/dex/client/exceptions.py +220 -0
  39. crypticorn/dex/client/models/__init__.py +30 -0
  40. crypticorn/dex/client/models/api_error_identifier.py +121 -0
  41. crypticorn/dex/client/models/api_error_level.py +37 -0
  42. crypticorn/dex/client/models/api_error_type.py +37 -0
  43. crypticorn/dex/client/models/exception_detail.py +117 -0
  44. crypticorn/dex/client/models/log_level.py +38 -0
  45. crypticorn/dex/client/models/paginated_response_signal_with_token.py +134 -0
  46. crypticorn/dex/client/models/risk.py +86 -0
  47. crypticorn/dex/client/models/signal_overview_stats.py +158 -0
  48. crypticorn/dex/client/models/signal_volume.py +84 -0
  49. crypticorn/dex/client/models/signal_with_token.py +163 -0
  50. crypticorn/dex/client/models/token_data.py +127 -0
  51. crypticorn/dex/client/models/token_detail.py +116 -0
  52. crypticorn/dex/client/py.typed +0 -0
  53. crypticorn/dex/client/rest.py +217 -0
  54. crypticorn/dex/main.py +1 -0
  55. crypticorn/hive/client/api/admin_api.py +1173 -47
  56. crypticorn/hive/client/api/data_api.py +499 -17
  57. crypticorn/hive/client/api/models_api.py +1595 -87
  58. crypticorn/hive/client/api/status_api.py +397 -16
  59. crypticorn/hive/client/api_client.py +0 -5
  60. crypticorn/hive/client/models/api_error_identifier.py +1 -1
  61. crypticorn/hive/client/models/coin_info.py +1 -1
  62. crypticorn/hive/client/models/exception_detail.py +1 -1
  63. crypticorn/hive/client/models/target_info.py +1 -1
  64. crypticorn/hive/client/rest.py +23 -4
  65. crypticorn/hive/main.py +99 -25
  66. crypticorn/hive/utils.py +2 -2
  67. crypticorn/klines/client/api/admin_api.py +1173 -47
  68. crypticorn/klines/client/api/change_in_timeframe_api.py +269 -11
  69. crypticorn/klines/client/api/funding_rates_api.py +315 -11
  70. crypticorn/klines/client/api/ohlcv_data_api.py +390 -11
  71. crypticorn/klines/client/api/status_api.py +397 -16
  72. crypticorn/klines/client/api/symbols_api.py +216 -11
  73. crypticorn/klines/client/api/udf_api.py +1268 -51
  74. crypticorn/klines/client/api_client.py +0 -5
  75. crypticorn/klines/client/models/api_error_identifier.py +3 -1
  76. crypticorn/klines/client/models/exception_detail.py +1 -1
  77. crypticorn/klines/client/models/ohlcv.py +1 -1
  78. crypticorn/klines/client/models/symbol_group.py +1 -1
  79. crypticorn/klines/client/models/udf_config.py +1 -1
  80. crypticorn/klines/client/rest.py +23 -4
  81. crypticorn/klines/main.py +89 -12
  82. crypticorn/metrics/client/api/admin_api.py +1173 -47
  83. crypticorn/metrics/client/api/exchanges_api.py +1370 -145
  84. crypticorn/metrics/client/api/indicators_api.py +622 -17
  85. crypticorn/metrics/client/api/logs_api.py +296 -11
  86. crypticorn/metrics/client/api/marketcap_api.py +1207 -67
  87. crypticorn/metrics/client/api/markets_api.py +343 -11
  88. crypticorn/metrics/client/api/quote_currencies_api.py +228 -11
  89. crypticorn/metrics/client/api/status_api.py +397 -16
  90. crypticorn/metrics/client/api/tokens_api.py +382 -15
  91. crypticorn/metrics/client/api_client.py +0 -5
  92. crypticorn/metrics/client/configuration.py +4 -2
  93. crypticorn/metrics/client/models/exception_detail.py +1 -1
  94. crypticorn/metrics/client/models/exchange_mapping.py +1 -1
  95. crypticorn/metrics/client/models/marketcap_ranking.py +1 -1
  96. crypticorn/metrics/client/models/marketcap_symbol_ranking.py +1 -1
  97. crypticorn/metrics/client/models/ohlcv.py +1 -1
  98. crypticorn/metrics/client/rest.py +23 -4
  99. crypticorn/metrics/main.py +113 -19
  100. crypticorn/pay/client/api/admin_api.py +1585 -57
  101. crypticorn/pay/client/api/now_payments_api.py +961 -39
  102. crypticorn/pay/client/api/payments_api.py +562 -17
  103. crypticorn/pay/client/api/products_api.py +880 -30
  104. crypticorn/pay/client/api/status_api.py +397 -16
  105. crypticorn/pay/client/api_client.py +0 -5
  106. crypticorn/pay/client/configuration.py +2 -2
  107. crypticorn/pay/client/models/api_error_identifier.py +7 -7
  108. crypticorn/pay/client/models/exception_detail.py +1 -1
  109. crypticorn/pay/client/models/now_create_invoice_req.py +1 -1
  110. crypticorn/pay/client/models/now_create_invoice_res.py +1 -1
  111. crypticorn/pay/client/models/product.py +1 -1
  112. crypticorn/pay/client/models/product_create.py +1 -1
  113. crypticorn/pay/client/models/product_update.py +1 -1
  114. crypticorn/pay/client/models/scope.py +1 -0
  115. crypticorn/pay/client/rest.py +23 -4
  116. crypticorn/pay/main.py +10 -6
  117. crypticorn/trade/client/__init__.py +11 -1
  118. crypticorn/trade/client/api/__init__.py +0 -1
  119. crypticorn/trade/client/api/admin_api.py +1184 -55
  120. crypticorn/trade/client/api/api_keys_api.py +1678 -162
  121. crypticorn/trade/client/api/bots_api.py +7563 -187
  122. crypticorn/trade/client/api/exchanges_api.py +565 -19
  123. crypticorn/trade/client/api/notifications_api.py +1290 -116
  124. crypticorn/trade/client/api/orders_api.py +393 -55
  125. crypticorn/trade/client/api/status_api.py +397 -13
  126. crypticorn/trade/client/api/strategies_api.py +1133 -77
  127. crypticorn/trade/client/api/trading_actions_api.py +786 -65
  128. crypticorn/trade/client/models/__init__.py +11 -0
  129. crypticorn/trade/client/models/actions_count.py +88 -0
  130. crypticorn/trade/client/models/api_error_identifier.py +8 -7
  131. crypticorn/trade/client/models/bot.py +7 -18
  132. crypticorn/trade/client/models/bot_create.py +17 -1
  133. crypticorn/trade/client/models/bot_update.py +17 -1
  134. crypticorn/trade/client/models/exchange.py +6 -1
  135. crypticorn/trade/client/models/exchange_key.py +1 -1
  136. crypticorn/trade/client/models/exchange_key_balance.py +111 -0
  137. crypticorn/trade/client/models/exchange_key_create.py +17 -1
  138. crypticorn/trade/client/models/exchange_key_update.py +17 -1
  139. crypticorn/trade/client/models/execution_ids.py +1 -1
  140. crypticorn/trade/client/models/futures_balance.py +27 -25
  141. crypticorn/trade/client/models/futures_trading_action.py +6 -28
  142. crypticorn/trade/client/models/futures_trading_action_create.py +10 -13
  143. crypticorn/trade/client/models/notification.py +17 -1
  144. crypticorn/trade/client/models/notification_create.py +18 -2
  145. crypticorn/trade/client/models/notification_update.py +17 -1
  146. crypticorn/trade/client/models/order.py +2 -14
  147. crypticorn/trade/client/models/orders_count.py +88 -0
  148. crypticorn/trade/client/models/paginated_response_futures_trading_action.py +134 -0
  149. crypticorn/trade/client/models/paginated_response_order.py +134 -0
  150. crypticorn/trade/client/models/pn_l.py +95 -0
  151. crypticorn/trade/client/models/post_futures_action.py +1 -1
  152. crypticorn/trade/client/models/spot_balance.py +109 -0
  153. crypticorn/trade/client/models/spot_trading_action_create.py +4 -1
  154. crypticorn/trade/client/models/strategy.py +22 -4
  155. crypticorn/trade/client/models/strategy_create.py +23 -5
  156. crypticorn/trade/client/models/strategy_exchange_info.py +16 -4
  157. crypticorn/trade/client/models/strategy_update.py +19 -3
  158. crypticorn/trade/client/models/tpsl.py +4 -27
  159. crypticorn/trade/client/models/tpsl_create.py +6 -19
  160. crypticorn/trade/client/rest.py +23 -4
  161. crypticorn/trade/main.py +15 -12
  162. {crypticorn-2.15.0.dist-info → crypticorn-2.17.0.dist-info}/METADATA +65 -20
  163. {crypticorn-2.15.0.dist-info → crypticorn-2.17.0.dist-info}/RECORD +167 -132
  164. crypticorn/trade/client/api/futures_trading_panel_api.py +0 -1285
  165. {crypticorn-2.15.0.dist-info → crypticorn-2.17.0.dist-info}/WHEEL +0 -0
  166. {crypticorn-2.15.0.dist-info → crypticorn-2.17.0.dist-info}/entry_points.txt +0 -0
  167. {crypticorn-2.15.0.dist-info → crypticorn-2.17.0.dist-info}/licenses/LICENSE +0 -0
  168. {crypticorn-2.15.0.dist-info → crypticorn-2.17.0.dist-info}/top_level.txt +0 -0
@@ -27,6 +27,24 @@ from crypticorn.auth.client.api_client import ApiClient, RequestSerialized
27
27
  from crypticorn.auth.client.api_response import ApiResponse
28
28
  from crypticorn.auth.client.rest import RESTResponseType
29
29
 
30
+ # Import async_to_sync for sync methods
31
+ try:
32
+ from asgiref.sync import async_to_sync
33
+
34
+ _HAS_ASGIREF = True
35
+ except ImportError:
36
+ _HAS_ASGIREF = False
37
+
38
+ def async_to_sync(async_func):
39
+ """Fallback decorator that raises an error if asgiref is not available."""
40
+
41
+ def wrapper(*args, **kwargs):
42
+ raise ImportError(
43
+ "asgiref is required for sync methods. Install with: pip install asgiref"
44
+ )
45
+
46
+ return wrapper
47
+
30
48
 
31
49
  class ServiceApi:
32
50
  """NOTE: This class is auto generated by OpenAPI Generator
@@ -35,13 +53,144 @@ class ServiceApi:
35
53
  Do not edit the class manually.
36
54
  """
37
55
 
38
- def __init__(self, api_client=None) -> None:
56
+ def __init__(self, api_client=None, is_sync: bool = False) -> None:
39
57
  if api_client is None:
40
58
  api_client = ApiClient.get_default()
41
59
  self.api_client = api_client
60
+ self.is_sync = is_sync
42
61
 
43
62
  @validate_call
44
- async def get_balances_by_email(
63
+ def get_balances_by_email(
64
+ self,
65
+ email: StrictStr,
66
+ x_refresh_token: Annotated[
67
+ Optional[StrictStr],
68
+ Field(description="The refresh token for rotating the access token."),
69
+ ] = None,
70
+ _request_timeout: Union[
71
+ None,
72
+ Annotated[StrictFloat, Field(gt=0)],
73
+ Tuple[
74
+ Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]
75
+ ],
76
+ ] = None,
77
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
78
+ _content_type: Optional[StrictStr] = None,
79
+ _headers: Optional[Dict[StrictStr, Any]] = None,
80
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
81
+ ) -> ListWallets200ResponseUserValue:
82
+ """Get the balances of a user by email"""
83
+ if self.is_sync:
84
+ return self._get_balances_by_email_sync(
85
+ email=email,
86
+ x_refresh_token=x_refresh_token,
87
+ _request_timeout=_request_timeout,
88
+ _request_auth=_request_auth,
89
+ _content_type=_content_type,
90
+ _headers=_headers,
91
+ _host_index=_host_index,
92
+ )
93
+
94
+ else:
95
+ return self._get_balances_by_email_async(
96
+ email=email,
97
+ x_refresh_token=x_refresh_token,
98
+ _request_timeout=_request_timeout,
99
+ _request_auth=_request_auth,
100
+ _content_type=_content_type,
101
+ _headers=_headers,
102
+ _host_index=_host_index,
103
+ )
104
+
105
+ @validate_call
106
+ def get_balances_by_email_with_http_info(
107
+ self,
108
+ email: StrictStr,
109
+ x_refresh_token: Annotated[
110
+ Optional[StrictStr],
111
+ Field(description="The refresh token for rotating the access token."),
112
+ ] = None,
113
+ _request_timeout: Union[
114
+ None,
115
+ Annotated[StrictFloat, Field(gt=0)],
116
+ Tuple[
117
+ Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]
118
+ ],
119
+ ] = None,
120
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
121
+ _content_type: Optional[StrictStr] = None,
122
+ _headers: Optional[Dict[StrictStr, Any]] = None,
123
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
124
+ ) -> ApiResponse[ListWallets200ResponseUserValue]:
125
+ """Get the balances of a user by email with HTTP info"""
126
+ if self.is_sync:
127
+ return self._get_balances_by_email_sync_with_http_info(
128
+ email=email,
129
+ x_refresh_token=x_refresh_token,
130
+ _request_timeout=_request_timeout,
131
+ _request_auth=_request_auth,
132
+ _content_type=_content_type,
133
+ _headers=_headers,
134
+ _host_index=_host_index,
135
+ )
136
+
137
+ else:
138
+ return self._get_balances_by_email_async_with_http_info(
139
+ email=email,
140
+ x_refresh_token=x_refresh_token,
141
+ _request_timeout=_request_timeout,
142
+ _request_auth=_request_auth,
143
+ _content_type=_content_type,
144
+ _headers=_headers,
145
+ _host_index=_host_index,
146
+ )
147
+
148
+ @validate_call
149
+ def get_balances_by_email_without_preload_content(
150
+ self,
151
+ email: StrictStr,
152
+ x_refresh_token: Annotated[
153
+ Optional[StrictStr],
154
+ Field(description="The refresh token for rotating the access token."),
155
+ ] = None,
156
+ _request_timeout: Union[
157
+ None,
158
+ Annotated[StrictFloat, Field(gt=0)],
159
+ Tuple[
160
+ Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]
161
+ ],
162
+ ] = None,
163
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
164
+ _content_type: Optional[StrictStr] = None,
165
+ _headers: Optional[Dict[StrictStr, Any]] = None,
166
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
167
+ ) -> RESTResponseType:
168
+ """Get the balances of a user by email without preloading content"""
169
+ if self.is_sync:
170
+ return self._get_balances_by_email_sync_without_preload_content(
171
+ email=email,
172
+ x_refresh_token=x_refresh_token,
173
+ _request_timeout=_request_timeout,
174
+ _request_auth=_request_auth,
175
+ _content_type=_content_type,
176
+ _headers=_headers,
177
+ _host_index=_host_index,
178
+ )
179
+
180
+ else:
181
+ return self._get_balances_by_email_async_without_preload_content(
182
+ email=email,
183
+ x_refresh_token=x_refresh_token,
184
+ _request_timeout=_request_timeout,
185
+ _request_auth=_request_auth,
186
+ _content_type=_content_type,
187
+ _headers=_headers,
188
+ _host_index=_host_index,
189
+ )
190
+
191
+ # Private async implementation methods
192
+ @validate_call
193
+ async def _get_balances_by_email_async(
45
194
  self,
46
195
  email: StrictStr,
47
196
  x_refresh_token: Annotated[
@@ -112,7 +261,7 @@ class ServiceApi:
112
261
  ).data
113
262
 
114
263
  @validate_call
115
- async def get_balances_by_email_with_http_info(
264
+ async def _get_balances_by_email_async_with_http_info(
116
265
  self,
117
266
  email: StrictStr,
118
267
  x_refresh_token: Annotated[
@@ -178,12 +327,11 @@ class ServiceApi:
178
327
  )
179
328
  await response_data.read()
180
329
  return self.api_client.response_deserialize(
181
- response_data=response_data,
182
- response_types_map=_response_types_map,
330
+ response_data=response_data, response_types_map=_response_types_map
183
331
  )
184
332
 
185
333
  @validate_call
186
- async def get_balances_by_email_without_preload_content(
334
+ async def _get_balances_by_email_async_without_preload_content(
187
335
  self,
188
336
  email: StrictStr,
189
337
  x_refresh_token: Annotated[
@@ -247,7 +395,101 @@ class ServiceApi:
247
395
  response_data = await self.api_client.call_api(
248
396
  *_param, _request_timeout=_request_timeout
249
397
  )
250
- return response_data.response
398
+ return response_data
399
+
400
+ # Private sync implementation methods
401
+ @validate_call
402
+ def _get_balances_by_email_sync(
403
+ self,
404
+ email: StrictStr,
405
+ x_refresh_token: Annotated[
406
+ Optional[StrictStr],
407
+ Field(description="The refresh token for rotating the access token."),
408
+ ] = None,
409
+ _request_timeout: Union[
410
+ None,
411
+ Annotated[StrictFloat, Field(gt=0)],
412
+ Tuple[
413
+ Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]
414
+ ],
415
+ ] = None,
416
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
417
+ _content_type: Optional[StrictStr] = None,
418
+ _headers: Optional[Dict[StrictStr, Any]] = None,
419
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
420
+ ) -> ListWallets200ResponseUserValue:
421
+ """Synchronous version of get_balances_by_email"""
422
+ return async_to_sync(self._get_balances_by_email_async)(
423
+ email=email,
424
+ x_refresh_token=x_refresh_token,
425
+ _request_timeout=_request_timeout,
426
+ _request_auth=_request_auth,
427
+ _content_type=_content_type,
428
+ _headers=_headers,
429
+ _host_index=_host_index,
430
+ )
431
+
432
+ @validate_call
433
+ def _get_balances_by_email_sync_with_http_info(
434
+ self,
435
+ email: StrictStr,
436
+ x_refresh_token: Annotated[
437
+ Optional[StrictStr],
438
+ Field(description="The refresh token for rotating the access token."),
439
+ ] = None,
440
+ _request_timeout: Union[
441
+ None,
442
+ Annotated[StrictFloat, Field(gt=0)],
443
+ Tuple[
444
+ Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]
445
+ ],
446
+ ] = None,
447
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
448
+ _content_type: Optional[StrictStr] = None,
449
+ _headers: Optional[Dict[StrictStr, Any]] = None,
450
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
451
+ ) -> ApiResponse[ListWallets200ResponseUserValue]:
452
+ """Synchronous version of get_balances_by_email_with_http_info"""
453
+ return async_to_sync(self._get_balances_by_email_async_with_http_info)(
454
+ email=email,
455
+ x_refresh_token=x_refresh_token,
456
+ _request_timeout=_request_timeout,
457
+ _request_auth=_request_auth,
458
+ _content_type=_content_type,
459
+ _headers=_headers,
460
+ _host_index=_host_index,
461
+ )
462
+
463
+ @validate_call
464
+ def _get_balances_by_email_sync_without_preload_content(
465
+ self,
466
+ email: StrictStr,
467
+ x_refresh_token: Annotated[
468
+ Optional[StrictStr],
469
+ Field(description="The refresh token for rotating the access token."),
470
+ ] = None,
471
+ _request_timeout: Union[
472
+ None,
473
+ Annotated[StrictFloat, Field(gt=0)],
474
+ Tuple[
475
+ Annotated[StrictFloat, Field(gt=0)], Annotated[StrictFloat, Field(gt=0)]
476
+ ],
477
+ ] = None,
478
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
479
+ _content_type: Optional[StrictStr] = None,
480
+ _headers: Optional[Dict[StrictStr, Any]] = None,
481
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
482
+ ) -> RESTResponseType:
483
+ """Synchronous version of get_balances_by_email_without_preload_content"""
484
+ return async_to_sync(self._get_balances_by_email_async_without_preload_content)(
485
+ email=email,
486
+ x_refresh_token=x_refresh_token,
487
+ _request_timeout=_request_timeout,
488
+ _request_auth=_request_auth,
489
+ _content_type=_content_type,
490
+ _headers=_headers,
491
+ _host_index=_host_index,
492
+ )
251
493
 
252
494
  def _get_balances_by_email_serialize(
253
495
  self,