A Python port of the Invisible Internet Project (I2P)
1"""RouterContext adapter — provides router state to console pages.
2
3Reads router state for display in the console. When no live router
4is available, returns safe defaults.
5
6Ported from net.i2p.router.web.HelperBase / RouterContext.
7"""
8
9from __future__ import annotations
10
11import time
12
13
14class ConsoleContext:
15 """Adapter for reading router state in the console."""
16
17 def __init__(self) -> None:
18 self._start_time = time.monotonic()
19 self._properties: dict[str, str] = {}
20 self._version = "0.1.0"
21
22 @property
23 def uptime_seconds(self) -> float:
24 return time.monotonic() - self._start_time
25
26 @property
27 def version(self) -> str:
28 return self._version
29
30 @property
31 def status(self) -> dict:
32 return {
33 "state": "running",
34 "uptime": self.uptime_seconds,
35 "version": self.version,
36 }
37
38 @property
39 def network_status(self) -> dict:
40 return {
41 "active_peers": 0,
42 "known_routers": 0,
43 "active_tunnels": 0,
44 "participating_tunnels": 0,
45 }
46
47 def get_property(self, key: str, default: str | None = None) -> str | None:
48 return self._properties.get(key, default)
49
50 def set_property(self, key: str, value: str) -> None:
51 self._properties[key] = value
52
53 def get_all_properties(self) -> dict[str, str]:
54 return dict(self._properties)