mirror of
https://github.com/remnawave/python-sdk.git
synced 2026-08-03 22:25:14 +00:00
Новые эндпоинты: - GET /tokens/scopes (api_tokens_management.get_scopes) - GET /users/stream — keyset-пагинация (users.get_users_stream) - PATCH /hosts/bulk/update (hosts_bulk_actions.update_hosts) - POST /bandwidth-stats/nodes/users (bandwidthstats.get_stats_nodes_users_usage) Удалённые эндпоинты (вслед за API): - POST /hosts/bulk/set-inbound, /hosts/bulk/set-port (заменены update_hosts) - POST /system/tools/happ/encrypt Изменения моделей: - Hosts: tags (вместо tag), mihomoIpVersion, pinnedPeerCertSha256, verifyPeerCertByName, finalMask, xhttpExtraParams; fingerprint -> str; удалены tag/allowInsecure (с обратной совместимостью через свойства) - API-токены: name/expiresInDays/scopes, tokens/enabled; новый enum Scope (полный каталог scope-ов v2.8.0) - Nodes: nodeConsumptionMultiplier, note, proxyUrl; тело RestartNodeRequestBodyDto - trafficLimitBytes int -> float (users, nodes, bulk-actions) - Infra billing: name, nullable nodeUuid, обязательное nextBillingAt - HWID: requestIp; webhook-события (user/service) обновлены - Новый enum MihomoIpVersion Исправления: - Bulk-ответы хостов переведены на RootModel (раньше падали с ValueError) - revoke_user_subscription: исправлен порядок Annotated/Optional (тело терялось) - Restart*RequestBodyDto: populate_by_name (force_restart игнорировался) Зависимости: - Убраны избыточные пины pydantic и pydantic-core (покрыты pydantic[email]) - requires-python <3.14 -> <3.15, добавлен классификатор Python 3.14 Версия пакета 2.7.1 -> 2.8.0.
47 lines
1.4 KiB
Python
47 lines
1.4 KiB
Python
from typing import Annotated, List
|
|
from uuid import UUID
|
|
|
|
from rapid_api_client import PydanticBody
|
|
|
|
from remnawave.models import (
|
|
BulkDeleteHostsResponseDto,
|
|
BulkDisableHostsResponseDto,
|
|
BulkEnableHostsResponseDto,
|
|
UpdateManyHostsRequestDto,
|
|
UpdateManyHostsResponseDto,
|
|
)
|
|
from remnawave.rapid import AttributeBody, BaseController, patch, post
|
|
|
|
|
|
class HostsBulkActionsController(BaseController):
|
|
@post("/hosts/bulk/delete", response_class=BulkDeleteHostsResponseDto)
|
|
async def delete_hosts(
|
|
self,
|
|
uuids: Annotated[List[UUID], AttributeBody()],
|
|
) -> BulkDeleteHostsResponseDto:
|
|
"""Delete many hosts"""
|
|
...
|
|
|
|
@post("/hosts/bulk/disable", response_class=BulkDisableHostsResponseDto)
|
|
async def disable_hosts(
|
|
self,
|
|
uuids: Annotated[List[UUID], AttributeBody()],
|
|
) -> BulkDisableHostsResponseDto:
|
|
"""Disable many hosts"""
|
|
...
|
|
|
|
@post("/hosts/bulk/enable", response_class=BulkEnableHostsResponseDto)
|
|
async def enable_hosts(
|
|
self,
|
|
uuids: Annotated[List[UUID], AttributeBody()],
|
|
) -> BulkEnableHostsResponseDto:
|
|
"""Enable many hosts"""
|
|
...
|
|
|
|
@patch("/hosts/bulk/update", response_class=UpdateManyHostsResponseDto)
|
|
async def update_hosts(
|
|
self,
|
|
body: Annotated[UpdateManyHostsRequestDto, PydanticBody()],
|
|
) -> UpdateManyHostsResponseDto:
|
|
"""Update many hosts"""
|
|
...
|