Initial commit

This commit is contained in:
enzo 2026-05-12 22:36:36 +02:00
commit 184b0e6033
18 changed files with 1178 additions and 0 deletions

View file

@ -0,0 +1,69 @@
from textual.widgets import Static, ListView, ListItem, Label
from textual.containers import Vertical
from textual.message import Message
class Sidebar(Vertical):
DEFAULT_CSS = """
Sidebar {
width: 28;
border-right: solid $primary-lighten-2;
padding: 0 1;
}
ListView {
height: 1fr;
border: none;
}
ListView > ListItem {
height: auto;
padding: 0 1;
}
ListView > ListItem.--highlight {
background: $primary-darken-1;
}
"""
class TargetSelected(Message):
def __init__(self, target_id: str, name: str):
self.target_id = target_id
self.name = name
super().__init__()
def __init__(self):
super().__init__()
self._items: list[tuple[str, str, ListItem]] = []
def compose(self):
yield Static("Targets", id="sidebar-title")
yield ListView(id="sidebar-list")
def set_targets(self, targets: list):
lv = self.query_one("#sidebar-list", ListView)
lv.clear()
self._items = []
for t in targets:
label = f"{t.name} 🟠 🟠"
item = ListItem(Label(label), id=f"target-{t.target_id}")
lv.append(item)
self._items.append((t.target_id, t.name, item))
def update_status(self, target_id: str, apt_ok: bool, cve_ok: bool, apt_count: int, cve_count: int, error: str, skipped: bool = False):
for tid, name, item in self._items:
if tid == target_id:
if skipped:
label = f"{name} ⚪ ⚪"
elif error:
label = f"{name} 🔴 🔴"
elif apt_count > 0 or cve_count > 0:
label = f"{name} {'🔴' if apt_count > 0 else '🟢'} {'🔴' if cve_count > 0 else '🟢'}"
else:
label = f"{name} 🟢 🟢"
item.children[0].update(label)
break
def on_list_view_selected(self, event: ListView.Selected):
item = event.item
for tid, name, it in self._items:
if it == item:
self.post_message(self.TargetSelected(tid, name))
break