File size: 1,184 Bytes
64eeb8f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
from datetime import datetime
from enum import Enum
from typing import Dict, Optional

from pydantic import BaseModel, Field


class SpeedTestProvider(str, Enum):
    REAL_DEBRID = "real_debrid"
    ALL_DEBRID = "all_debrid"


class ServerInfo(BaseModel):
    url: str
    name: str


class UserInfo(BaseModel):
    ip: Optional[str] = None
    isp: Optional[str] = None
    country: Optional[str] = None


class SpeedTestResult(BaseModel):
    speed_mbps: float = Field(..., description="Speed in Mbps")
    duration: float = Field(..., description="Test duration in seconds")
    data_transferred: int = Field(..., description="Data transferred in bytes")
    timestamp: datetime = Field(default_factory=datetime.utcnow)


class LocationResult(BaseModel):
    result: Optional[SpeedTestResult] = None
    error: Optional[str] = None
    server_name: str
    server_url: str


class SpeedTestTask(BaseModel):
    task_id: str
    provider: SpeedTestProvider
    results: Dict[str, LocationResult] = {}
    started_at: datetime
    completed_at: Optional[datetime] = None
    status: str = "running"
    user_info: Optional[UserInfo] = None
    current_location: Optional[str] = None