crypticorn 2.17.0rc5__py3-none-any.whl → 2.17.0rc6__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 (62) hide show
  1. crypticorn/auth/client/api/admin_api.py +6 -24
  2. crypticorn/auth/client/api/auth_api.py +36 -144
  3. crypticorn/auth/client/api/service_api.py +3 -12
  4. crypticorn/auth/client/api/user_api.py +33 -132
  5. crypticorn/auth/client/api/wallet_api.py +18 -72
  6. crypticorn/cli/templates/Dockerfile +5 -2
  7. crypticorn/common/auth.py +30 -0
  8. crypticorn/common/errors.py +10 -0
  9. crypticorn/common/pagination.py +1 -1
  10. crypticorn/common/router/admin_router.py +1 -11
  11. crypticorn/common/router/status_router.py +33 -2
  12. crypticorn/common/scopes.py +2 -2
  13. crypticorn/dex/client/api/admin_api.py +21 -84
  14. crypticorn/dex/client/api/signals_api.py +9 -36
  15. crypticorn/dex/client/api/status_api.py +6 -24
  16. crypticorn/hive/client/api/admin_api.py +18 -72
  17. crypticorn/hive/client/api/data_api.py +6 -24
  18. crypticorn/hive/client/api/models_api.py +21 -84
  19. crypticorn/hive/client/api/status_api.py +6 -24
  20. crypticorn/klines/client/api/admin_api.py +18 -72
  21. crypticorn/klines/client/api/change_in_timeframe_api.py +3 -12
  22. crypticorn/klines/client/api/funding_rates_api.py +3 -12
  23. crypticorn/klines/client/api/ohlcv_data_api.py +3 -12
  24. crypticorn/klines/client/api/status_api.py +6 -24
  25. crypticorn/klines/client/api/symbols_api.py +3 -12
  26. crypticorn/klines/client/api/udf_api.py +18 -72
  27. crypticorn/metrics/client/api/admin_api.py +18 -72
  28. crypticorn/metrics/client/api/exchanges_api.py +12 -48
  29. crypticorn/metrics/client/api/indicators_api.py +6 -24
  30. crypticorn/metrics/client/api/logs_api.py +3 -12
  31. crypticorn/metrics/client/api/marketcap_api.py +12 -48
  32. crypticorn/metrics/client/api/markets_api.py +3 -12
  33. crypticorn/metrics/client/api/quote_currencies_api.py +3 -12
  34. crypticorn/metrics/client/api/status_api.py +6 -24
  35. crypticorn/metrics/client/api/tokens_api.py +6 -24
  36. crypticorn/pay/client/api/admin_api.py +21 -84
  37. crypticorn/pay/client/api/now_payments_api.py +15 -60
  38. crypticorn/pay/client/api/payments_api.py +6 -24
  39. crypticorn/pay/client/api/products_api.py +12 -48
  40. crypticorn/pay/client/api/status_api.py +6 -24
  41. crypticorn/trade/client/__init__.py +10 -0
  42. crypticorn/trade/client/api/admin_api.py +21 -84
  43. crypticorn/trade/client/api/api_keys_api.py +207 -184
  44. crypticorn/trade/client/api/bots_api.py +2435 -662
  45. crypticorn/trade/client/api/exchanges_api.py +9 -36
  46. crypticorn/trade/client/api/notifications_api.py +18 -72
  47. crypticorn/trade/client/api/orders_api.py +3 -12
  48. crypticorn/trade/client/api/status_api.py +6 -24
  49. crypticorn/trade/client/api/strategies_api.py +15 -60
  50. crypticorn/trade/client/api/trading_actions_api.py +431 -112
  51. crypticorn/trade/client/configuration.py +2 -2
  52. crypticorn/trade/client/models/__init__.py +10 -0
  53. crypticorn/trade/client/models/paginated_response_futures_trading_action.py +134 -0
  54. crypticorn/trade/client/models/paginated_response_union_futures_trading_action_spot_trading_action.py +141 -0
  55. crypticorn/trade/client/models/paginated_response_union_futures_trading_action_spot_trading_action_data_inner.py +165 -0
  56. crypticorn/trade/client/models/spot_trading_action.py +207 -0
  57. {crypticorn-2.17.0rc5.dist-info → crypticorn-2.17.0rc6.dist-info}/METADATA +3 -3
  58. {crypticorn-2.17.0rc5.dist-info → crypticorn-2.17.0rc6.dist-info}/RECORD +62 -58
  59. {crypticorn-2.17.0rc5.dist-info → crypticorn-2.17.0rc6.dist-info}/WHEEL +0 -0
  60. {crypticorn-2.17.0rc5.dist-info → crypticorn-2.17.0rc6.dist-info}/entry_points.txt +0 -0
  61. {crypticorn-2.17.0rc5.dist-info → crypticorn-2.17.0rc6.dist-info}/licenses/LICENSE +0 -0
  62. {crypticorn-2.17.0rc5.dist-info → crypticorn-2.17.0rc6.dist-info}/top_level.txt +0 -0
crypticorn/common/auth.py CHANGED
@@ -15,9 +15,11 @@ from fastapi.security import (
15
15
  SecurityScopes,
16
16
  HTTPBearer,
17
17
  APIKeyHeader,
18
+ HTTPBasic,
18
19
  )
19
20
  from typing_extensions import Annotated
20
21
  from typing import Union
22
+ from fastapi.security import HTTPBasicCredentials
21
23
 
22
24
  # Auth Schemes
23
25
  http_bearer = HTTPBearer(
@@ -32,6 +34,12 @@ apikey_header = APIKeyHeader(
32
34
  description="The API key to use for authentication.",
33
35
  )
34
36
 
37
+ basic_auth = HTTPBasic(
38
+ scheme_name="Basic",
39
+ auto_error=False,
40
+ description="The username and password to use for authentication. Only used in /admin/metrics",
41
+ )
42
+
35
43
 
36
44
  # Auth Handler
37
45
  class AuthHandler:
@@ -150,6 +158,7 @@ class AuthHandler:
150
158
  error=ApiError.NO_API_KEY,
151
159
  message="No credentials provided. API key is required",
152
160
  ),
161
+ headers={"WWW-Authenticate": "X-API-Key"},
153
162
  )
154
163
  raise e
155
164
 
@@ -175,6 +184,7 @@ class AuthHandler:
175
184
  error=ApiError.NO_BEARER,
176
185
  message="No credentials provided. Bearer token is required",
177
186
  ),
187
+ headers={"WWW-Authenticate": "Bearer"},
178
188
  )
179
189
  raise e
180
190
 
@@ -222,6 +232,7 @@ class AuthHandler:
222
232
  error=ApiError.NO_CREDENTIALS,
223
233
  message="No credentials provided. Either API key or bearer token is required.",
224
234
  ),
235
+ headers={"WWW-Authenticate": "Bearer, X-API-Key"},
225
236
  )
226
237
 
227
238
  async def ws_api_key_auth(
@@ -266,3 +277,22 @@ class AuthHandler:
266
277
  else None
267
278
  )
268
279
  return await self.combined_auth(bearer=credentials, api_key=api_key, sec=sec)
280
+
281
+ async def basic_auth(
282
+ self,
283
+ credentials: Annotated[HTTPBasicCredentials, Depends(basic_auth)],
284
+ ):
285
+ """
286
+ Verifies the basic authentication credentials. This authentication method should just be used for special cases like /admin/metrics, where JWT and API key authentication are not desired or not possible.
287
+ """
288
+ try:
289
+ await self.client.login.verify_basic_auth(credentials.username, credentials.password)
290
+ except ApiException as e:
291
+ raise HTTPException(
292
+ content=ExceptionContent(
293
+ error=ApiError.INVALID_BASIC_AUTH,
294
+ message="Invalid basic authentication credentials",
295
+ ),
296
+ headers={"WWW-Authenticate": "Basic"},
297
+ )
298
+ return credentials.username
@@ -70,6 +70,7 @@ class ApiErrorIdentifier(StrEnum):
70
70
  INSUFFICIENT_MARGIN = "insufficient_margin"
71
71
  INSUFFICIENT_SCOPES = "insufficient_scopes"
72
72
  INVALID_API_KEY = "invalid_api_key"
73
+ INVALID_BASIC_AUTH = "invalid_basic_auth"
73
74
  INVALID_BEARER = "invalid_bearer"
74
75
  INVALID_DATA_REQUEST = "invalid_data"
75
76
  INVALID_DATA_RESPONSE = "invalid_data_response"
@@ -302,6 +303,11 @@ class ApiError(Enum, metaclass=ApiErrorFallback):
302
303
  ApiErrorType.USER_ERROR,
303
304
  ApiErrorLevel.ERROR,
304
305
  )
306
+ INVALID_BASIC_AUTH = (
307
+ ApiErrorIdentifier.INVALID_BASIC_AUTH,
308
+ ApiErrorType.USER_ERROR,
309
+ ApiErrorLevel.ERROR,
310
+ )
305
311
  INVALID_BEARER = (
306
312
  ApiErrorIdentifier.INVALID_BEARER,
307
313
  ApiErrorType.USER_ERROR,
@@ -569,6 +575,10 @@ class StatusCodeMapper:
569
575
  status.HTTP_401_UNAUTHORIZED,
570
576
  status.WS_1008_POLICY_VIOLATION,
571
577
  ),
578
+ ApiError.INVALID_BASIC_AUTH: (
579
+ status.HTTP_401_UNAUTHORIZED,
580
+ status.WS_1008_POLICY_VIOLATION,
581
+ ),
572
582
  ApiError.INVALID_BEARER: (
573
583
  status.HTTP_401_UNAUTHORIZED,
574
584
  status.WS_1008_POLICY_VIOLATION,
@@ -139,7 +139,7 @@ class FilterParams(BaseModel, Generic[T]):
139
139
  """
140
140
 
141
141
  filter_by: Optional[str] = Field(None, description="The field to filter by")
142
- filter_value: Optional[str] = Field(None, description="The value to filter with")
142
+ filter_value: Optional[str] = Field(None, description="The value to filter with")
143
143
  # currently openapi-gen does not support typing.Any in combo with None, so we use str
144
144
  # this is fine since the input is a string anyways from the request and the correct type is enforced by the model validator from the filter_by field
145
145
 
@@ -13,10 +13,8 @@ import psutil
13
13
  import re
14
14
  import logging
15
15
  from typing import Literal
16
- from fastapi import APIRouter, Query, Response
17
- from prometheus_client import generate_latest, CONTENT_TYPE_LATEST
16
+ from fastapi import APIRouter, Query
18
17
  from crypticorn.common.logging import LogLevel
19
- from crypticorn.common.metrics import registry
20
18
 
21
19
  router = APIRouter(tags=["Admin"], prefix="/admin")
22
20
 
@@ -106,11 +104,3 @@ def list_installed_packages(
106
104
  or any(re.match(pattern, dist.metadata["Name"]) for pattern in include)
107
105
  }
108
106
  return dict(sorted(packages.items()))
109
-
110
-
111
- @router.get("/metrics", operation_id="getMetrics")
112
- def metrics():
113
- """
114
- Get Prometheus metrics for the application. Returns plain text.
115
- """
116
- return Response(generate_latest(registry), media_type=CONTENT_TYPE_LATEST)
@@ -2,14 +2,36 @@
2
2
  This module contains the status router for the API.
3
3
  It provides endpoints for checking the status of the API and get the server's time.
4
4
  SHOULD ALLOW ACCESS TO THIS ROUTER WITHOUT AUTH.
5
+ To enable metrics, pass enable_metrics=True and the auth_handler to the router.
6
+ >>> status_router.enable_metrics = True
7
+ >>> status_router.auth_handler = auth_handler
8
+ Then include the router in the FastAPI app.
5
9
  >>> app.include_router(status_router)
6
10
  """
7
11
 
8
12
  from datetime import datetime
9
- from typing import Literal
10
13
  from fastapi import APIRouter, Request
14
+ from typing import Annotated, Literal
15
+ from fastapi import APIRouter, Response, Depends
16
+ from prometheus_client import generate_latest, CONTENT_TYPE_LATEST
17
+ from crypticorn.common.metrics import registry
18
+ from crypticorn.common.auth import AuthHandler, basic_auth
11
19
 
12
- router = APIRouter(tags=["Status"], prefix="")
20
+ class EnhancedApiRouter(APIRouter):
21
+ def __init__(self, enable_metrics: bool = False, auth_handler: AuthHandler = None, *args, **kwargs):
22
+ """
23
+ Enhanced API Router that allows for metrics and authentication.
24
+ If enable_metrics is True, the router will include the metrics endpoint.
25
+ If auth_handler is provided, the router will use the auth handler to authenticate requests with
26
+ """
27
+ super().__init__(*args, **kwargs)
28
+ self.enable_metrics = enable_metrics
29
+ self.auth_handler = auth_handler
30
+
31
+ if self.enable_metrics and not self.auth_handler:
32
+ raise ValueError("auth_handler must be provided if enable_metrics is True")
33
+
34
+ router = EnhancedApiRouter(tags=["Status"], prefix="", enable_metrics=False, auth_handler=None)
13
35
 
14
36
 
15
37
  @router.get("/", operation_id="ping")
@@ -29,3 +51,12 @@ async def time(type: Literal["iso", "unix"] = "iso") -> str:
29
51
  return datetime.now().isoformat()
30
52
  elif type == "unix":
31
53
  return str(int(datetime.now().timestamp()))
54
+
55
+
56
+ @router.get("/metrics", operation_id="getMetrics", include_in_schema=router.enable_metrics)
57
+ def metrics(username: Annotated[str, Depends(basic_auth)]):
58
+ """
59
+ Get Prometheus metrics for the application. Returns plain text.
60
+ """
61
+ return Response(generate_latest(registry), media_type=CONTENT_TYPE_LATEST)
62
+
@@ -16,7 +16,7 @@ class Scope(StrEnum):
16
16
 
17
17
  # Scopes that can be purchased - these actually exist in the jwt token
18
18
  READ_PREDICTIONS = "read:predictions"
19
- READ_DEXSIGNALS = "read:dexsignals"
19
+ READ_DEX_SIGNALS = "read:dex:signals"
20
20
 
21
21
  # Hive scopes
22
22
  READ_HIVE_MODEL = "read:hive:model"
@@ -88,5 +88,5 @@ class Scope(StrEnum):
88
88
  cls.READ_METRICS_MARKETS,
89
89
  cls.READ_KLINES,
90
90
  cls.READ_SENTIMENT,
91
- cls.READ_DEXSIGNALS,
91
+ cls.READ_DEX_SIGNALS,
92
92
  ]
@@ -69,10 +69,7 @@ class AdminApi:
69
69
  _headers: Optional[Dict[StrictStr, Any]] = None,
70
70
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
71
71
  ) -> Dict[str, object]:
72
- """Get Container Limits
73
-
74
- This method can work in both sync and async modes based on the is_sync flag.
75
- """
72
+ """Get Container Limits"""
76
73
  if self.is_sync:
77
74
  return self._get_container_limits_sync(
78
75
  _request_timeout=_request_timeout,
@@ -106,10 +103,7 @@ class AdminApi:
106
103
  _headers: Optional[Dict[StrictStr, Any]] = None,
107
104
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
108
105
  ) -> ApiResponse[Dict[str, object]]:
109
- """Get Container Limits with HTTP info
110
-
111
- This method can work in both sync and async modes based on the is_sync flag.
112
- """
106
+ """Get Container Limits with HTTP info"""
113
107
  if self.is_sync:
114
108
  return self._get_container_limits_sync_with_http_info(
115
109
  _request_timeout=_request_timeout,
@@ -143,10 +137,7 @@ class AdminApi:
143
137
  _headers: Optional[Dict[StrictStr, Any]] = None,
144
138
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
145
139
  ) -> RESTResponseType:
146
- """Get Container Limits without preloading content
147
-
148
- This method can work in both sync and async modes based on the is_sync flag.
149
- """
140
+ """Get Container Limits without preloading content"""
150
141
  if self.is_sync:
151
142
  return self._get_container_limits_sync_without_preload_content(
152
143
  _request_timeout=_request_timeout,
@@ -486,10 +477,7 @@ class AdminApi:
486
477
  _headers: Optional[Dict[StrictStr, Any]] = None,
487
478
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
488
479
  ) -> Dict[str, Optional[str]]:
489
- """List Installed Packages
490
-
491
- This method can work in both sync and async modes based on the is_sync flag.
492
- """
480
+ """List Installed Packages"""
493
481
  if self.is_sync:
494
482
  return self._get_dependencies_sync(
495
483
  include=include,
@@ -531,10 +519,7 @@ class AdminApi:
531
519
  _headers: Optional[Dict[StrictStr, Any]] = None,
532
520
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
533
521
  ) -> ApiResponse[Dict[str, Optional[str]]]:
534
- """List Installed Packages with HTTP info
535
-
536
- This method can work in both sync and async modes based on the is_sync flag.
537
- """
522
+ """List Installed Packages with HTTP info"""
538
523
  if self.is_sync:
539
524
  return self._get_dependencies_sync_with_http_info(
540
525
  include=include,
@@ -576,10 +561,7 @@ class AdminApi:
576
561
  _headers: Optional[Dict[StrictStr, Any]] = None,
577
562
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
578
563
  ) -> RESTResponseType:
579
- """List Installed Packages without preloading content
580
-
581
- This method can work in both sync and async modes based on the is_sync flag.
582
- """
564
+ """List Installed Packages without preloading content"""
583
565
  if self.is_sync:
584
566
  return self._get_dependencies_sync_without_preload_content(
585
567
  include=include,
@@ -970,10 +952,7 @@ class AdminApi:
970
952
  _headers: Optional[Dict[StrictStr, Any]] = None,
971
953
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
972
954
  ) -> LogLevel:
973
- """Get Logging Level
974
-
975
- This method can work in both sync and async modes based on the is_sync flag.
976
- """
955
+ """Get Logging Level"""
977
956
  if self.is_sync:
978
957
  return self._get_log_level_sync(
979
958
  _request_timeout=_request_timeout,
@@ -1007,10 +986,7 @@ class AdminApi:
1007
986
  _headers: Optional[Dict[StrictStr, Any]] = None,
1008
987
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
1009
988
  ) -> ApiResponse[LogLevel]:
1010
- """Get Logging Level with HTTP info
1011
-
1012
- This method can work in both sync and async modes based on the is_sync flag.
1013
- """
989
+ """Get Logging Level with HTTP info"""
1014
990
  if self.is_sync:
1015
991
  return self._get_log_level_sync_with_http_info(
1016
992
  _request_timeout=_request_timeout,
@@ -1044,10 +1020,7 @@ class AdminApi:
1044
1020
  _headers: Optional[Dict[StrictStr, Any]] = None,
1045
1021
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
1046
1022
  ) -> RESTResponseType:
1047
- """Get Logging Level without preloading content
1048
-
1049
- This method can work in both sync and async modes based on the is_sync flag.
1050
- """
1023
+ """Get Logging Level without preloading content"""
1051
1024
  if self.is_sync:
1052
1025
  return self._get_log_level_sync_without_preload_content(
1053
1026
  _request_timeout=_request_timeout,
@@ -1384,10 +1357,7 @@ class AdminApi:
1384
1357
  _headers: Optional[Dict[StrictStr, Any]] = None,
1385
1358
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
1386
1359
  ) -> float:
1387
- """Get Memory Usage
1388
-
1389
- This method can work in both sync and async modes based on the is_sync flag.
1390
- """
1360
+ """Get Memory Usage"""
1391
1361
  if self.is_sync:
1392
1362
  return self._get_memory_usage_sync(
1393
1363
  _request_timeout=_request_timeout,
@@ -1421,10 +1391,7 @@ class AdminApi:
1421
1391
  _headers: Optional[Dict[StrictStr, Any]] = None,
1422
1392
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
1423
1393
  ) -> ApiResponse[float]:
1424
- """Get Memory Usage with HTTP info
1425
-
1426
- This method can work in both sync and async modes based on the is_sync flag.
1427
- """
1394
+ """Get Memory Usage with HTTP info"""
1428
1395
  if self.is_sync:
1429
1396
  return self._get_memory_usage_sync_with_http_info(
1430
1397
  _request_timeout=_request_timeout,
@@ -1458,10 +1425,7 @@ class AdminApi:
1458
1425
  _headers: Optional[Dict[StrictStr, Any]] = None,
1459
1426
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
1460
1427
  ) -> RESTResponseType:
1461
- """Get Memory Usage without preloading content
1462
-
1463
- This method can work in both sync and async modes based on the is_sync flag.
1464
- """
1428
+ """Get Memory Usage without preloading content"""
1465
1429
  if self.is_sync:
1466
1430
  return self._get_memory_usage_sync_without_preload_content(
1467
1431
  _request_timeout=_request_timeout,
@@ -1795,10 +1759,7 @@ class AdminApi:
1795
1759
  _headers: Optional[Dict[StrictStr, Any]] = None,
1796
1760
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
1797
1761
  ) -> object:
1798
- """Metrics
1799
-
1800
- This method can work in both sync and async modes based on the is_sync flag.
1801
- """
1762
+ """Metrics"""
1802
1763
  if self.is_sync:
1803
1764
  return self._get_metrics_sync(
1804
1765
  _request_timeout=_request_timeout,
@@ -1832,10 +1793,7 @@ class AdminApi:
1832
1793
  _headers: Optional[Dict[StrictStr, Any]] = None,
1833
1794
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
1834
1795
  ) -> ApiResponse[object]:
1835
- """Metrics with HTTP info
1836
-
1837
- This method can work in both sync and async modes based on the is_sync flag.
1838
- """
1796
+ """Metrics with HTTP info"""
1839
1797
  if self.is_sync:
1840
1798
  return self._get_metrics_sync_with_http_info(
1841
1799
  _request_timeout=_request_timeout,
@@ -1869,10 +1827,7 @@ class AdminApi:
1869
1827
  _headers: Optional[Dict[StrictStr, Any]] = None,
1870
1828
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
1871
1829
  ) -> RESTResponseType:
1872
- """Metrics without preloading content
1873
-
1874
- This method can work in both sync and async modes based on the is_sync flag.
1875
- """
1830
+ """Metrics without preloading content"""
1876
1831
  if self.is_sync:
1877
1832
  return self._get_metrics_sync_without_preload_content(
1878
1833
  _request_timeout=_request_timeout,
@@ -2206,10 +2161,7 @@ class AdminApi:
2206
2161
  _headers: Optional[Dict[StrictStr, Any]] = None,
2207
2162
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
2208
2163
  ) -> Dict[str, object]:
2209
- """Get Threads
2210
-
2211
- This method can work in both sync and async modes based on the is_sync flag.
2212
- """
2164
+ """Get Threads"""
2213
2165
  if self.is_sync:
2214
2166
  return self._get_threads_sync(
2215
2167
  _request_timeout=_request_timeout,
@@ -2243,10 +2195,7 @@ class AdminApi:
2243
2195
  _headers: Optional[Dict[StrictStr, Any]] = None,
2244
2196
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
2245
2197
  ) -> ApiResponse[Dict[str, object]]:
2246
- """Get Threads with HTTP info
2247
-
2248
- This method can work in both sync and async modes based on the is_sync flag.
2249
- """
2198
+ """Get Threads with HTTP info"""
2250
2199
  if self.is_sync:
2251
2200
  return self._get_threads_sync_with_http_info(
2252
2201
  _request_timeout=_request_timeout,
@@ -2280,10 +2229,7 @@ class AdminApi:
2280
2229
  _headers: Optional[Dict[StrictStr, Any]] = None,
2281
2230
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
2282
2231
  ) -> RESTResponseType:
2283
- """Get Threads without preloading content
2284
-
2285
- This method can work in both sync and async modes based on the is_sync flag.
2286
- """
2232
+ """Get Threads without preloading content"""
2287
2233
  if self.is_sync:
2288
2234
  return self._get_threads_sync_without_preload_content(
2289
2235
  _request_timeout=_request_timeout,
@@ -2618,10 +2564,7 @@ class AdminApi:
2618
2564
  _headers: Optional[Dict[StrictStr, Any]] = None,
2619
2565
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
2620
2566
  ) -> str:
2621
- """Get Uptime
2622
-
2623
- This method can work in both sync and async modes based on the is_sync flag.
2624
- """
2567
+ """Get Uptime"""
2625
2568
  if self.is_sync:
2626
2569
  return self._get_uptime_sync(
2627
2570
  type=type,
@@ -2658,10 +2601,7 @@ class AdminApi:
2658
2601
  _headers: Optional[Dict[StrictStr, Any]] = None,
2659
2602
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
2660
2603
  ) -> ApiResponse[str]:
2661
- """Get Uptime with HTTP info
2662
-
2663
- This method can work in both sync and async modes based on the is_sync flag.
2664
- """
2604
+ """Get Uptime with HTTP info"""
2665
2605
  if self.is_sync:
2666
2606
  return self._get_uptime_sync_with_http_info(
2667
2607
  type=type,
@@ -2698,10 +2638,7 @@ class AdminApi:
2698
2638
  _headers: Optional[Dict[StrictStr, Any]] = None,
2699
2639
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
2700
2640
  ) -> RESTResponseType:
2701
- """Get Uptime without preloading content
2702
-
2703
- This method can work in both sync and async modes based on the is_sync flag.
2704
- """
2641
+ """Get Uptime without preloading content"""
2705
2642
  if self.is_sync:
2706
2643
  return self._get_uptime_sync_without_preload_content(
2707
2644
  type=type,
@@ -71,10 +71,7 @@ class SignalsApi:
71
71
  _headers: Optional[Dict[StrictStr, Any]] = None,
72
72
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
73
73
  ) -> SignalOverviewStats:
74
- """Get Stats
75
-
76
- This method can work in both sync and async modes based on the is_sync flag.
77
- """
74
+ """Get Stats"""
78
75
  if self.is_sync:
79
76
  return self._get_signal_stats_sync(
80
77
  _request_timeout=_request_timeout,
@@ -108,10 +105,7 @@ class SignalsApi:
108
105
  _headers: Optional[Dict[StrictStr, Any]] = None,
109
106
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
110
107
  ) -> ApiResponse[SignalOverviewStats]:
111
- """Get Stats with HTTP info
112
-
113
- This method can work in both sync and async modes based on the is_sync flag.
114
- """
108
+ """Get Stats with HTTP info"""
115
109
  if self.is_sync:
116
110
  return self._get_signal_stats_sync_with_http_info(
117
111
  _request_timeout=_request_timeout,
@@ -145,10 +139,7 @@ class SignalsApi:
145
139
  _headers: Optional[Dict[StrictStr, Any]] = None,
146
140
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
147
141
  ) -> RESTResponseType:
148
- """Get Stats without preloading content
149
-
150
- This method can work in both sync and async modes based on the is_sync flag.
151
- """
142
+ """Get Stats without preloading content"""
152
143
  if self.is_sync:
153
144
  return self._get_signal_stats_sync_without_preload_content(
154
145
  _request_timeout=_request_timeout,
@@ -503,10 +494,7 @@ class SignalsApi:
503
494
  _headers: Optional[Dict[StrictStr, Any]] = None,
504
495
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
505
496
  ) -> PaginatedResponseSignalWithToken:
506
- """Get Signals
507
-
508
- This method can work in both sync and async modes based on the is_sync flag.
509
- """
497
+ """Get Signals"""
510
498
  if self.is_sync:
511
499
  return self._get_signals_sync(
512
500
  filter_by=filter_by,
@@ -573,10 +561,7 @@ class SignalsApi:
573
561
  _headers: Optional[Dict[StrictStr, Any]] = None,
574
562
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
575
563
  ) -> ApiResponse[PaginatedResponseSignalWithToken]:
576
- """Get Signals with HTTP info
577
-
578
- This method can work in both sync and async modes based on the is_sync flag.
579
- """
564
+ """Get Signals with HTTP info"""
580
565
  if self.is_sync:
581
566
  return self._get_signals_sync_with_http_info(
582
567
  filter_by=filter_by,
@@ -643,10 +628,7 @@ class SignalsApi:
643
628
  _headers: Optional[Dict[StrictStr, Any]] = None,
644
629
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
645
630
  ) -> RESTResponseType:
646
- """Get Signals without preloading content
647
-
648
- This method can work in both sync and async modes based on the is_sync flag.
649
- """
631
+ """Get Signals without preloading content"""
650
632
  if self.is_sync:
651
633
  return self._get_signals_sync_without_preload_content(
652
634
  filter_by=filter_by,
@@ -1235,10 +1217,7 @@ class SignalsApi:
1235
1217
  _headers: Optional[Dict[StrictStr, Any]] = None,
1236
1218
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
1237
1219
  ) -> PaginatedResponseSignalWithToken:
1238
- """Get Top Signals
1239
-
1240
- This method can work in both sync and async modes based on the is_sync flag.
1241
- """
1220
+ """Get Top Signals"""
1242
1221
  if self.is_sync:
1243
1222
  return self._get_top_signals_sync(
1244
1223
  page=page,
@@ -1293,10 +1272,7 @@ class SignalsApi:
1293
1272
  _headers: Optional[Dict[StrictStr, Any]] = None,
1294
1273
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
1295
1274
  ) -> ApiResponse[PaginatedResponseSignalWithToken]:
1296
- """Get Top Signals with HTTP info
1297
-
1298
- This method can work in both sync and async modes based on the is_sync flag.
1299
- """
1275
+ """Get Top Signals with HTTP info"""
1300
1276
  if self.is_sync:
1301
1277
  return self._get_top_signals_sync_with_http_info(
1302
1278
  page=page,
@@ -1351,10 +1327,7 @@ class SignalsApi:
1351
1327
  _headers: Optional[Dict[StrictStr, Any]] = None,
1352
1328
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
1353
1329
  ) -> RESTResponseType:
1354
- """Get Top Signals without preloading content
1355
-
1356
- This method can work in both sync and async modes based on the is_sync flag.
1357
- """
1330
+ """Get Top Signals without preloading content"""
1358
1331
  if self.is_sync:
1359
1332
  return self._get_top_signals_sync_without_preload_content(
1360
1333
  page=page,
@@ -68,10 +68,7 @@ class StatusApi:
68
68
  _headers: Optional[Dict[StrictStr, Any]] = None,
69
69
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
70
70
  ) -> str:
71
- """Time
72
-
73
- This method can work in both sync and async modes based on the is_sync flag.
74
- """
71
+ """Time"""
75
72
  if self.is_sync:
76
73
  return self._get_time_sync(
77
74
  type=type,
@@ -108,10 +105,7 @@ class StatusApi:
108
105
  _headers: Optional[Dict[StrictStr, Any]] = None,
109
106
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
110
107
  ) -> ApiResponse[str]:
111
- """Time with HTTP info
112
-
113
- This method can work in both sync and async modes based on the is_sync flag.
114
- """
108
+ """Time with HTTP info"""
115
109
  if self.is_sync:
116
110
  return self._get_time_sync_with_http_info(
117
111
  type=type,
@@ -148,10 +142,7 @@ class StatusApi:
148
142
  _headers: Optional[Dict[StrictStr, Any]] = None,
149
143
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
150
144
  ) -> RESTResponseType:
151
- """Time without preloading content
152
-
153
- This method can work in both sync and async modes based on the is_sync flag.
154
- """
145
+ """Time without preloading content"""
155
146
  if self.is_sync:
156
147
  return self._get_time_sync_without_preload_content(
157
148
  type=type,
@@ -510,10 +501,7 @@ class StatusApi:
510
501
  _headers: Optional[Dict[StrictStr, Any]] = None,
511
502
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
512
503
  ) -> str:
513
- """Ping
514
-
515
- This method can work in both sync and async modes based on the is_sync flag.
516
- """
504
+ """Ping"""
517
505
  if self.is_sync:
518
506
  return self._ping_sync(
519
507
  _request_timeout=_request_timeout,
@@ -547,10 +535,7 @@ class StatusApi:
547
535
  _headers: Optional[Dict[StrictStr, Any]] = None,
548
536
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
549
537
  ) -> ApiResponse[str]:
550
- """Ping with HTTP info
551
-
552
- This method can work in both sync and async modes based on the is_sync flag.
553
- """
538
+ """Ping with HTTP info"""
554
539
  if self.is_sync:
555
540
  return self._ping_sync_with_http_info(
556
541
  _request_timeout=_request_timeout,
@@ -584,10 +569,7 @@ class StatusApi:
584
569
  _headers: Optional[Dict[StrictStr, Any]] = None,
585
570
  _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
586
571
  ) -> RESTResponseType:
587
- """Ping without preloading content
588
-
589
- This method can work in both sync and async modes based on the is_sync flag.
590
- """
572
+ """Ping without preloading content"""
591
573
  if self.is_sync:
592
574
  return self._ping_sync_without_preload_content(
593
575
  _request_timeout=_request_timeout,