-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathclassifier.py
More file actions
39 lines (33 loc) · 990 Bytes
/
classifier.py
File metadata and controls
39 lines (33 loc) · 990 Bytes
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
from dataclasses import dataclass
@dataclass
class CheckResult:
proxy: str
success: bool
country_code: str | None = None
trust_score: int | None = None
asn_type: str | None = None
ip: str | None = None
rtt: int = 0
def classify(result: CheckResult) -> str:
if not result.success:
return "failed"
if result.country_code == "CN":
return "cn"
if result.asn_type == "isp":
return "home"
score = result.trust_score or 0
if score == 100:
return "premium"
if score >= 60:
return "good"
if score >= 30:
return "normal"
return "bad"
def format_line(result: CheckResult, level: str, label: str = "none") -> str:
if label == "none":
return result.proxy
cc = result.country_code or "??"
rtt = result.rtt
if label == "roxy":
return f"{result.proxy} {{CC: {cc}, rtt: {rtt}ms, lv: {level}}}"
return f"{result.proxy} # CC: {cc}, rtt: {rtt}ms, lv: {level}"