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
@@ -33,8 +33,12 @@ class FuturesTradingAction(BaseModel):
33
33
  Model for futures trading actions
34
34
  """ # noqa: E501
35
35
 
36
- leverage: Optional[Annotated[int, Field(strict=True, ge=1)]]
37
- margin_mode: Optional[MarginMode] = None
36
+ leverage: Optional[Annotated[int, Field(strict=True, ge=1)]] = Field(
37
+ default=1, description="Leverage to use for futures trades. Default is 1."
38
+ )
39
+ margin_mode: Optional[MarginMode] = Field(
40
+ default=None, description="Margin mode for futures trades. Default is isolated."
41
+ )
38
42
  created_at: Optional[StrictInt] = Field(
39
43
  default=None, description="Timestamp of creation"
40
44
  )
@@ -60,8 +64,6 @@ class FuturesTradingAction(BaseModel):
60
64
  take_profit: Optional[List[TPSL]] = None
61
65
  stop_loss: Optional[List[TPSL]] = None
62
66
  expiry_timestamp: Optional[StrictInt] = None
63
- client_order_id: Optional[StrictStr] = None
64
- position_id: Optional[StrictStr] = None
65
67
  __properties: ClassVar[List[str]] = [
66
68
  "leverage",
67
69
  "margin_mode",
@@ -80,8 +82,6 @@ class FuturesTradingAction(BaseModel):
80
82
  "take_profit",
81
83
  "stop_loss",
82
84
  "expiry_timestamp",
83
- "client_order_id",
84
- "position_id",
85
85
  ]
86
86
 
87
87
  model_config = ConfigDict(
@@ -135,16 +135,6 @@ class FuturesTradingAction(BaseModel):
135
135
  if _item_stop_loss:
136
136
  _items.append(_item_stop_loss.to_dict())
137
137
  _dict["stop_loss"] = _items
138
- # set to None if leverage (nullable) is None
139
- # and model_fields_set contains the field
140
- if self.leverage is None and "leverage" in self.model_fields_set:
141
- _dict["leverage"] = None
142
-
143
- # set to None if margin_mode (nullable) is None
144
- # and model_fields_set contains the field
145
- if self.margin_mode is None and "margin_mode" in self.model_fields_set:
146
- _dict["margin_mode"] = None
147
-
148
138
  # set to None if execution_id (nullable) is None
149
139
  # and model_fields_set contains the field
150
140
  if self.execution_id is None and "execution_id" in self.model_fields_set:
@@ -186,16 +176,6 @@ class FuturesTradingAction(BaseModel):
186
176
  ):
187
177
  _dict["expiry_timestamp"] = None
188
178
 
189
- # set to None if client_order_id (nullable) is None
190
- # and model_fields_set contains the field
191
- if self.client_order_id is None and "client_order_id" in self.model_fields_set:
192
- _dict["client_order_id"] = None
193
-
194
- # set to None if position_id (nullable) is None
195
- # and model_fields_set contains the field
196
- if self.position_id is None and "position_id" in self.model_fields_set:
197
- _dict["position_id"] = None
198
-
199
179
  return _dict
200
180
 
201
181
  @classmethod
@@ -236,8 +216,6 @@ class FuturesTradingAction(BaseModel):
236
216
  else None
237
217
  ),
238
218
  "expiry_timestamp": obj.get("expiry_timestamp"),
239
- "client_order_id": obj.get("client_order_id"),
240
- "position_id": obj.get("position_id"),
241
219
  }
242
220
  )
243
221
  return _obj
@@ -33,12 +33,19 @@ class FuturesTradingActionCreate(BaseModel):
33
33
  Model for sending futures trading actions
34
34
  """ # noqa: E501
35
35
 
36
- leverage: Optional[Annotated[int, Field(strict=True, ge=1)]]
37
- margin_mode: Optional[MarginMode] = None
36
+ leverage: Optional[Annotated[int, Field(strict=True, ge=1)]] = Field(
37
+ default=1, description="Leverage to use for futures trades. Default is 1."
38
+ )
39
+ margin_mode: Optional[MarginMode] = Field(
40
+ default=None, description="Margin mode for futures trades. Default is isolated."
41
+ )
38
42
  execution_id: Optional[StrictStr] = None
39
43
  open_order_execution_id: Optional[StrictStr] = None
40
44
  action_type: TradingActionType = Field(description="The type of action.")
41
- market_type: MarketType = Field(description="The type of market the action is for.")
45
+ market_type: Optional[MarketType] = Field(
46
+ default=None,
47
+ description="The type of market the action is for. Must be set to futures.",
48
+ )
42
49
  strategy_id: StrictStr = Field(description="UID for the strategy.")
43
50
  symbol: StrictStr = Field(
44
51
  description="Trading symbol or asset pair in format: 'symbol/quote_currency' (see market service for valid symbols)"
@@ -119,16 +126,6 @@ class FuturesTradingActionCreate(BaseModel):
119
126
  if _item_stop_loss:
120
127
  _items.append(_item_stop_loss.to_dict())
121
128
  _dict["stop_loss"] = _items
122
- # set to None if leverage (nullable) is None
123
- # and model_fields_set contains the field
124
- if self.leverage is None and "leverage" in self.model_fields_set:
125
- _dict["leverage"] = None
126
-
127
- # set to None if margin_mode (nullable) is None
128
- # and model_fields_set contains the field
129
- if self.margin_mode is None and "margin_mode" in self.model_fields_set:
130
- _dict["margin_mode"] = None
131
-
132
129
  # set to None if execution_id (nullable) is None
133
130
  # and model_fields_set contains the field
134
131
  if self.execution_id is None and "execution_id" in self.model_fields_set:
@@ -56,6 +56,7 @@ class Notification(BaseModel):
56
56
  type: ApiErrorType = Field(
57
57
  description="Type of the notification. Of type ApiErrorType"
58
58
  )
59
+ additional_properties: Dict[str, Any] = {}
59
60
  __properties: ClassVar[List[str]] = [
60
61
  "user_id",
61
62
  "created_at",
@@ -97,14 +98,24 @@ class Notification(BaseModel):
97
98
  * `None` is only added to the output dict for nullable fields that
98
99
  were set at model initialization. Other fields with value `None`
99
100
  are ignored.
101
+ * Fields in `self.additional_properties` are added to the output dict.
100
102
  """
101
- excluded_fields: Set[str] = set([])
103
+ excluded_fields: Set[str] = set(
104
+ [
105
+ "additional_properties",
106
+ ]
107
+ )
102
108
 
103
109
  _dict = self.model_dump(
104
110
  by_alias=True,
105
111
  exclude=excluded_fields,
106
112
  exclude_none=True,
107
113
  )
114
+ # puts key-value pairs in additional_properties in the top level
115
+ if self.additional_properties is not None:
116
+ for _key, _value in self.additional_properties.items():
117
+ _dict[_key] = _value
118
+
108
119
  return _dict
109
120
 
110
121
  @classmethod
@@ -129,4 +140,9 @@ class Notification(BaseModel):
129
140
  "type": obj.get("type"),
130
141
  }
131
142
  )
143
+ # store additional fields in additional_properties
144
+ for _key in obj.keys():
145
+ if _key not in cls.__properties:
146
+ _obj.additional_properties[_key] = obj.get(_key)
147
+
132
148
  return _obj
@@ -28,7 +28,7 @@ from typing_extensions import Self
28
28
 
29
29
  class NotificationCreate(BaseModel):
30
30
  """
31
- Notification model for create operations.
31
+ Notification model for creating new system alerts and messages.
32
32
  """ # noqa: E501
33
33
 
34
34
  viewed: Optional[StrictBool] = Field(
@@ -46,6 +46,7 @@ class NotificationCreate(BaseModel):
46
46
  type: ApiErrorType = Field(
47
47
  description="Type of the notification. Of type ApiErrorType"
48
48
  )
49
+ additional_properties: Dict[str, Any] = {}
49
50
  __properties: ClassVar[List[str]] = [
50
51
  "viewed",
51
52
  "sent",
@@ -83,14 +84,24 @@ class NotificationCreate(BaseModel):
83
84
  * `None` is only added to the output dict for nullable fields that
84
85
  were set at model initialization. Other fields with value `None`
85
86
  are ignored.
87
+ * Fields in `self.additional_properties` are added to the output dict.
86
88
  """
87
- excluded_fields: Set[str] = set([])
89
+ excluded_fields: Set[str] = set(
90
+ [
91
+ "additional_properties",
92
+ ]
93
+ )
88
94
 
89
95
  _dict = self.model_dump(
90
96
  by_alias=True,
91
97
  exclude=excluded_fields,
92
98
  exclude_none=True,
93
99
  )
100
+ # puts key-value pairs in additional_properties in the top level
101
+ if self.additional_properties is not None:
102
+ for _key, _value in self.additional_properties.items():
103
+ _dict[_key] = _value
104
+
94
105
  return _dict
95
106
 
96
107
  @classmethod
@@ -111,4 +122,9 @@ class NotificationCreate(BaseModel):
111
122
  "type": obj.get("type"),
112
123
  }
113
124
  )
125
+ # store additional fields in additional_properties
126
+ for _key in obj.keys():
127
+ if _key not in cls.__properties:
128
+ _obj.additional_properties[_key] = obj.get(_key)
129
+
114
130
  return _obj
@@ -30,6 +30,7 @@ class NotificationUpdate(BaseModel):
30
30
 
31
31
  viewed: Optional[StrictBool] = None
32
32
  sent: Optional[StrictBool] = None
33
+ additional_properties: Dict[str, Any] = {}
33
34
  __properties: ClassVar[List[str]] = ["viewed", "sent"]
34
35
 
35
36
  model_config = ConfigDict(
@@ -61,14 +62,24 @@ class NotificationUpdate(BaseModel):
61
62
  * `None` is only added to the output dict for nullable fields that
62
63
  were set at model initialization. Other fields with value `None`
63
64
  are ignored.
65
+ * Fields in `self.additional_properties` are added to the output dict.
64
66
  """
65
- excluded_fields: Set[str] = set([])
67
+ excluded_fields: Set[str] = set(
68
+ [
69
+ "additional_properties",
70
+ ]
71
+ )
66
72
 
67
73
  _dict = self.model_dump(
68
74
  by_alias=True,
69
75
  exclude=excluded_fields,
70
76
  exclude_none=True,
71
77
  )
78
+ # puts key-value pairs in additional_properties in the top level
79
+ if self.additional_properties is not None:
80
+ for _key, _value in self.additional_properties.items():
81
+ _dict[_key] = _value
82
+
72
83
  # set to None if viewed (nullable) is None
73
84
  # and model_fields_set contains the field
74
85
  if self.viewed is None and "viewed" in self.model_fields_set:
@@ -93,4 +104,9 @@ class NotificationUpdate(BaseModel):
93
104
  _obj = cls.model_validate(
94
105
  {"viewed": obj.get("viewed"), "sent": obj.get("sent")}
95
106
  )
107
+ # store additional fields in additional_properties
108
+ for _key in obj.keys():
109
+ if _key not in cls.__properties:
110
+ _obj.additional_properties[_key] = obj.get(_key)
111
+
96
112
  return _obj
@@ -65,7 +65,7 @@ class Order(BaseModel):
65
65
  sent_qty: Optional[StrictStr] = None
66
66
  fee: Optional[StrictStr] = None
67
67
  leverage: Optional[StrictInt] = None
68
- order_details: Optional[Any] = Field(
68
+ order_details: Optional[Dict[str, Any]] = Field(
69
69
  default=None, description="Exchange specific details of the order"
70
70
  )
71
71
  pnl: Optional[StrictStr] = None
@@ -138,9 +138,6 @@ class Order(BaseModel):
138
138
  exclude=excluded_fields,
139
139
  exclude_none=True,
140
140
  )
141
- # override the default output from pydantic by calling `to_dict()` of order_details
142
- if self.order_details:
143
- _dict["order_details"] = self.order_details.to_dict()
144
141
  # set to None if trading_action_id (nullable) is None
145
142
  # and model_fields_set contains the field
146
143
  if (
@@ -257,11 +254,6 @@ class Order(BaseModel):
257
254
  if self.leverage is None and "leverage" in self.model_fields_set:
258
255
  _dict["leverage"] = None
259
256
 
260
- # set to None if order_details (nullable) is None
261
- # and model_fields_set contains the field
262
- if self.order_details is None and "order_details" in self.model_fields_set:
263
- _dict["order_details"] = None
264
-
265
257
  # set to None if pnl (nullable) is None
266
258
  # and model_fields_set contains the field
267
259
  if self.pnl is None and "pnl" in self.model_fields_set:
@@ -310,11 +302,7 @@ class Order(BaseModel):
310
302
  "sent_qty": obj.get("sent_qty"),
311
303
  "fee": obj.get("fee"),
312
304
  "leverage": obj.get("leverage"),
313
- "order_details": (
314
- AnyOf.from_dict(obj["order_details"])
315
- if obj.get("order_details") is not None
316
- else None
317
- ),
305
+ "order_details": obj.get("order_details"),
318
306
  "pnl": obj.get("pnl"),
319
307
  "order_time": obj.get("order_time"),
320
308
  }
@@ -0,0 +1,88 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ Trading API
5
+
6
+ API for automated trading and exchange interface. This API is used to trade on the exchange and manage bots, API keys, orders, and more.
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 typing import Optional, Set
23
+ from typing_extensions import Self
24
+
25
+
26
+ class OrdersCount(BaseModel):
27
+ """
28
+ The number of orders for a user by day
29
+ """ # noqa: E501
30
+
31
+ timestamp: StrictInt = Field(
32
+ description="Timestamp of the latest order for the day"
33
+ )
34
+ count: StrictInt = Field(description="The number of orders for the day")
35
+ __properties: ClassVar[List[str]] = ["timestamp", "count"]
36
+
37
+ model_config = ConfigDict(
38
+ populate_by_name=True,
39
+ validate_assignment=True,
40
+ protected_namespaces=(),
41
+ )
42
+
43
+ def to_str(self) -> str:
44
+ """Returns the string representation of the model using alias"""
45
+ return pprint.pformat(self.model_dump(by_alias=True))
46
+
47
+ def to_json(self) -> str:
48
+ """Returns the JSON representation of the model using alias"""
49
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
50
+ return json.dumps(self.to_dict())
51
+
52
+ @classmethod
53
+ def from_json(cls, json_str: str) -> Optional[Self]:
54
+ """Create an instance of OrdersCount from a JSON string"""
55
+ return cls.from_dict(json.loads(json_str))
56
+
57
+ def to_dict(self) -> Dict[str, Any]:
58
+ """Return the dictionary representation of the model using alias.
59
+
60
+ This has the following differences from calling pydantic's
61
+ `self.model_dump(by_alias=True)`:
62
+
63
+ * `None` is only added to the output dict for nullable fields that
64
+ were set at model initialization. Other fields with value `None`
65
+ are ignored.
66
+ """
67
+ excluded_fields: Set[str] = set([])
68
+
69
+ _dict = self.model_dump(
70
+ by_alias=True,
71
+ exclude=excluded_fields,
72
+ exclude_none=True,
73
+ )
74
+ return _dict
75
+
76
+ @classmethod
77
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
78
+ """Create an instance of OrdersCount from a dict"""
79
+ if obj is None:
80
+ return None
81
+
82
+ if not isinstance(obj, dict):
83
+ return cls.model_validate(obj)
84
+
85
+ _obj = cls.model_validate(
86
+ {"timestamp": obj.get("timestamp"), "count": obj.get("count")}
87
+ )
88
+ return _obj
@@ -0,0 +1,134 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ Trading API
5
+
6
+ API for automated trading and exchange interface. This API is used to trade on the exchange and manage bots, API keys, orders, and more.
7
+
8
+ The version of the OpenAPI document: 1.0.0
9
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
10
+
11
+ Do not edit the class manually.
12
+ """ # noqa: E501
13
+
14
+
15
+ from __future__ import annotations
16
+ import pprint
17
+ import re # noqa: F401
18
+ import json
19
+
20
+ from pydantic import BaseModel, ConfigDict, Field, StrictInt
21
+ from typing import Any, ClassVar, Dict, List, Optional
22
+ from crypticorn.trade.client.models.futures_trading_action import FuturesTradingAction
23
+ from typing import Optional, Set
24
+ from typing_extensions import Self
25
+
26
+
27
+ class PaginatedResponseFuturesTradingAction(BaseModel):
28
+ """
29
+ PaginatedResponseFuturesTradingAction
30
+ """ # noqa: E501
31
+
32
+ data: List[FuturesTradingAction]
33
+ total: StrictInt = Field(description="The total number of items")
34
+ page: StrictInt = Field(description="The current page number")
35
+ page_size: StrictInt = Field(description="The number of items per page")
36
+ prev: Optional[StrictInt] = None
37
+ next: Optional[StrictInt] = None
38
+ last: Optional[StrictInt] = None
39
+ __properties: ClassVar[List[str]] = [
40
+ "data",
41
+ "total",
42
+ "page",
43
+ "page_size",
44
+ "prev",
45
+ "next",
46
+ "last",
47
+ ]
48
+
49
+ model_config = ConfigDict(
50
+ populate_by_name=True,
51
+ validate_assignment=True,
52
+ protected_namespaces=(),
53
+ )
54
+
55
+ def to_str(self) -> str:
56
+ """Returns the string representation of the model using alias"""
57
+ return pprint.pformat(self.model_dump(by_alias=True))
58
+
59
+ def to_json(self) -> str:
60
+ """Returns the JSON representation of the model using alias"""
61
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
62
+ return json.dumps(self.to_dict())
63
+
64
+ @classmethod
65
+ def from_json(cls, json_str: str) -> Optional[Self]:
66
+ """Create an instance of PaginatedResponseFuturesTradingAction from a JSON string"""
67
+ return cls.from_dict(json.loads(json_str))
68
+
69
+ def to_dict(self) -> Dict[str, Any]:
70
+ """Return the dictionary representation of the model using alias.
71
+
72
+ This has the following differences from calling pydantic's
73
+ `self.model_dump(by_alias=True)`:
74
+
75
+ * `None` is only added to the output dict for nullable fields that
76
+ were set at model initialization. Other fields with value `None`
77
+ are ignored.
78
+ """
79
+ excluded_fields: Set[str] = set([])
80
+
81
+ _dict = self.model_dump(
82
+ by_alias=True,
83
+ exclude=excluded_fields,
84
+ exclude_none=True,
85
+ )
86
+ # override the default output from pydantic by calling `to_dict()` of each item in data (list)
87
+ _items = []
88
+ if self.data:
89
+ for _item_data in self.data:
90
+ if _item_data:
91
+ _items.append(_item_data.to_dict())
92
+ _dict["data"] = _items
93
+ # set to None if prev (nullable) is None
94
+ # and model_fields_set contains the field
95
+ if self.prev is None and "prev" in self.model_fields_set:
96
+ _dict["prev"] = None
97
+
98
+ # set to None if next (nullable) is None
99
+ # and model_fields_set contains the field
100
+ if self.next is None and "next" in self.model_fields_set:
101
+ _dict["next"] = None
102
+
103
+ # set to None if last (nullable) is None
104
+ # and model_fields_set contains the field
105
+ if self.last is None and "last" in self.model_fields_set:
106
+ _dict["last"] = None
107
+
108
+ return _dict
109
+
110
+ @classmethod
111
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
112
+ """Create an instance of PaginatedResponseFuturesTradingAction from a dict"""
113
+ if obj is None:
114
+ return None
115
+
116
+ if not isinstance(obj, dict):
117
+ return cls.model_validate(obj)
118
+
119
+ _obj = cls.model_validate(
120
+ {
121
+ "data": (
122
+ [FuturesTradingAction.from_dict(_item) for _item in obj["data"]]
123
+ if obj.get("data") is not None
124
+ else None
125
+ ),
126
+ "total": obj.get("total"),
127
+ "page": obj.get("page"),
128
+ "page_size": obj.get("page_size"),
129
+ "prev": obj.get("prev"),
130
+ "next": obj.get("next"),
131
+ "last": obj.get("last"),
132
+ }
133
+ )
134
+ return _obj
@@ -0,0 +1,134 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ Trading API
5
+
6
+ API for automated trading and exchange interface. This API is used to trade on the exchange and manage bots, API keys, orders, and more.
7
+
8
+ The version of the OpenAPI document: 1.0.0
9
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
10
+
11
+ Do not edit the class manually.
12
+ """ # noqa: E501
13
+
14
+
15
+ from __future__ import annotations
16
+ import pprint
17
+ import re # noqa: F401
18
+ import json
19
+
20
+ from pydantic import BaseModel, ConfigDict, Field, StrictInt
21
+ from typing import Any, ClassVar, Dict, List, Optional
22
+ from crypticorn.trade.client.models.order import Order
23
+ from typing import Optional, Set
24
+ from typing_extensions import Self
25
+
26
+
27
+ class PaginatedResponseOrder(BaseModel):
28
+ """
29
+ PaginatedResponseOrder
30
+ """ # noqa: E501
31
+
32
+ data: List[Order]
33
+ total: StrictInt = Field(description="The total number of items")
34
+ page: StrictInt = Field(description="The current page number")
35
+ page_size: StrictInt = Field(description="The number of items per page")
36
+ prev: Optional[StrictInt] = None
37
+ next: Optional[StrictInt] = None
38
+ last: Optional[StrictInt] = None
39
+ __properties: ClassVar[List[str]] = [
40
+ "data",
41
+ "total",
42
+ "page",
43
+ "page_size",
44
+ "prev",
45
+ "next",
46
+ "last",
47
+ ]
48
+
49
+ model_config = ConfigDict(
50
+ populate_by_name=True,
51
+ validate_assignment=True,
52
+ protected_namespaces=(),
53
+ )
54
+
55
+ def to_str(self) -> str:
56
+ """Returns the string representation of the model using alias"""
57
+ return pprint.pformat(self.model_dump(by_alias=True))
58
+
59
+ def to_json(self) -> str:
60
+ """Returns the JSON representation of the model using alias"""
61
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
62
+ return json.dumps(self.to_dict())
63
+
64
+ @classmethod
65
+ def from_json(cls, json_str: str) -> Optional[Self]:
66
+ """Create an instance of PaginatedResponseOrder from a JSON string"""
67
+ return cls.from_dict(json.loads(json_str))
68
+
69
+ def to_dict(self) -> Dict[str, Any]:
70
+ """Return the dictionary representation of the model using alias.
71
+
72
+ This has the following differences from calling pydantic's
73
+ `self.model_dump(by_alias=True)`:
74
+
75
+ * `None` is only added to the output dict for nullable fields that
76
+ were set at model initialization. Other fields with value `None`
77
+ are ignored.
78
+ """
79
+ excluded_fields: Set[str] = set([])
80
+
81
+ _dict = self.model_dump(
82
+ by_alias=True,
83
+ exclude=excluded_fields,
84
+ exclude_none=True,
85
+ )
86
+ # override the default output from pydantic by calling `to_dict()` of each item in data (list)
87
+ _items = []
88
+ if self.data:
89
+ for _item_data in self.data:
90
+ if _item_data:
91
+ _items.append(_item_data.to_dict())
92
+ _dict["data"] = _items
93
+ # set to None if prev (nullable) is None
94
+ # and model_fields_set contains the field
95
+ if self.prev is None and "prev" in self.model_fields_set:
96
+ _dict["prev"] = None
97
+
98
+ # set to None if next (nullable) is None
99
+ # and model_fields_set contains the field
100
+ if self.next is None and "next" in self.model_fields_set:
101
+ _dict["next"] = None
102
+
103
+ # set to None if last (nullable) is None
104
+ # and model_fields_set contains the field
105
+ if self.last is None and "last" in self.model_fields_set:
106
+ _dict["last"] = None
107
+
108
+ return _dict
109
+
110
+ @classmethod
111
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
112
+ """Create an instance of PaginatedResponseOrder from a dict"""
113
+ if obj is None:
114
+ return None
115
+
116
+ if not isinstance(obj, dict):
117
+ return cls.model_validate(obj)
118
+
119
+ _obj = cls.model_validate(
120
+ {
121
+ "data": (
122
+ [Order.from_dict(_item) for _item in obj["data"]]
123
+ if obj.get("data") is not None
124
+ else None
125
+ ),
126
+ "total": obj.get("total"),
127
+ "page": obj.get("page"),
128
+ "page_size": obj.get("page_size"),
129
+ "prev": obj.get("prev"),
130
+ "next": obj.get("next"),
131
+ "last": obj.get("last"),
132
+ }
133
+ )
134
+ return _obj