mirror of
https://github.com/aclist/dztui.git
synced 2026-11-07 02:20:39 +01:00
chore: change modelman to model factory
This commit is contained in:
1 parent
85c1d18622
commit
bdfebf9a69
6 files changed
+110
-147
No files matched your search
@@ -0,0 +1,82 @@
|
||||
from dataclasses import dataclass
|
||||
|
||||
from dzgui.const.enum import HELP_MENU_ROWS
|
||||
from dzgui.util.redact import redact_log
|
||||
from dzgui.util.strings import delimiter
|
||||
from dzgui.views.dialogs.generic import ExceptionDialog
|
||||
|
||||
import gi
|
||||
|
||||
gi.require_version("Gtk", "3.0")
|
||||
from gi.repository.Gtk import ListStore # noqa E402
|
||||
from gi.repository import GObject # noqa E402
|
||||
|
||||
|
||||
@dataclass(slots=True, frozen=True)
|
||||
class ModCols:
|
||||
name: str
|
||||
symlink: str
|
||||
directory: str
|
||||
size: float
|
||||
color: str
|
||||
|
||||
|
||||
@dataclass(slots=True, frozen=True)
|
||||
class LogCols:
|
||||
timestamp: str
|
||||
flag: str
|
||||
traceback: str
|
||||
msg: str
|
||||
|
||||
|
||||
@dataclass(slots=True, frozen=True)
|
||||
class ServerModCols:
|
||||
name: str
|
||||
uid: GObject.TYPE_INT64
|
||||
installed: str
|
||||
|
||||
|
||||
@dataclass(slots=True, frozen=True)
|
||||
class MenuCols:
|
||||
name: str
|
||||
hidden: GObject.TYPE_PYOBJECT
|
||||
|
||||
|
||||
class ModelFactory:
|
||||
def __init__(self) -> None:
|
||||
pass
|
||||
|
||||
def new_model_from_logfile(self, path: str) -> None:
|
||||
store = self.make_log_store()
|
||||
with open(path, "r") as f:
|
||||
lines = [
|
||||
line.split(delimiter) for line in f.read().splitlines()
|
||||
]
|
||||
for record in lines:
|
||||
# NOTE: strip PII and API keys
|
||||
clean = redact_log(record)
|
||||
store.append(clean)
|
||||
return store
|
||||
|
||||
def new_model_from_class(self, cls: type) -> ListStore:
|
||||
store = ListStore(*[ftype for field, ftype in cls.__annotations__.items()])
|
||||
return store
|
||||
|
||||
def make_map_store(self) -> ListStore:
|
||||
return ListStore(str)
|
||||
|
||||
def make_help_store(self) -> ListStore:
|
||||
store = self.new_model_from_class(MenuCols)
|
||||
for row in HELP_MENU_ROWS:
|
||||
label = row.dict["label"]
|
||||
store.append([label, row])
|
||||
return store
|
||||
|
||||
def make_mod_store(self) -> ListStore:
|
||||
return self.new_model_from_class(ModCols)
|
||||
|
||||
def make_log_store(self) -> ListStore:
|
||||
return self.new_model_from_class(LogCols)
|
||||
|
||||
def make_server_mod_store(self) -> ListStore:
|
||||
return self.new_model_from_class(ServerModCols)
|
||||
Reference in new issue
Block a user