60 lines
1.2 KiB
Python
60 lines
1.2 KiB
Python
from dataclasses import dataclass, field
|
|
from enum import Enum
|
|
from typing import Any
|
|
|
|
|
|
class RouteStatus(Enum):
|
|
OPEN = "RTOPEN"
|
|
CLOSE = "RTCLOSE"
|
|
|
|
|
|
class RouteMode(Enum):
|
|
NORMAL = "normal"
|
|
RECONFIGURE = "reconfigure"
|
|
|
|
|
|
@dataclass
|
|
class Route:
|
|
name: str
|
|
mode: RouteMode = RouteMode.NORMAL
|
|
status: str = "close"
|
|
|
|
@property
|
|
def is_open(self) -> bool:
|
|
return self.status == "open"
|
|
|
|
@property
|
|
def is_reconfigurable(self) -> bool:
|
|
return self.mode == RouteMode.RECONFIGURE
|
|
|
|
|
|
@dataclass
|
|
class ApiResponse:
|
|
ok: bool
|
|
data: dict[str, Any]
|
|
http_code: int
|
|
headers: dict[str, str] = field(default_factory=dict)
|
|
|
|
@property
|
|
def is_rate_limited(self) -> bool:
|
|
return self.http_code == 429
|
|
|
|
@property
|
|
def is_server_error(self) -> bool:
|
|
return self.http_code == 503
|
|
|
|
@property
|
|
def retry_after(self) -> int:
|
|
return self.data.get("retry_after", 5)
|
|
|
|
@property
|
|
def message(self) -> str:
|
|
return self.data.get("message", "")
|
|
|
|
@property
|
|
def flag(self) -> str | None:
|
|
msg = self.message
|
|
if msg and "{FLG:" in msg:
|
|
return msg
|
|
return None
|