ublue-forge/anvil/nicegui/menu.py
2024-05-20 18:14:29 +00:00

56 lines
1.9 KiB
Python

import pandas
import toml
from nicegui import ui
from importlib.metadata import version
from utils.helper import get_project_root
def load_pyproject_toml() -> str:
project_root = get_project_root().parent
pyproject_file = toml.load(f"{project_root}/pyproject.toml")
return pyproject_file
def get_project_version() -> str:
pyproject_file = load_pyproject_toml()
project_version = pyproject_file["tool"]["poetry"]["version"]
return project_version
def get_python_package_version() -> pandas.DataFrame:
pyproject_file = load_pyproject_toml()
python_packages = pyproject_file["tool"]["poetry"]["dependencies"]
python_packages_data = []
for key, value in python_packages.items():
# Skip python itself
if key == "python":
continue
get_version = version(key)
python_packages_data.append({"Package": key, "Version": get_version})
python_packages_version = pandas.DataFrame(data=python_packages_data).sort_values(
by="Package"
)
return python_packages_version
def get_about(dialog) -> None:
project_version = get_project_version()
python_packages_versions = get_python_package_version()
with ui.column().classes("items-center"):
ui.label("uBlue-OS Forge").classes("text-h5")
ui.label(f"v{project_version}").classes("text-h6")
ui.table.from_pandas(df=python_packages_versions)
ui.button("Close", on_click=dialog.close)
def menu() -> None:
with ui.button(icon="menu"):
with ui.menu().props("auto-close"):
ui.menu_item("Home", lambda: ui.navigate.to(target="/"))
ui.menu_item("Ansible", lambda: ui.navigate.to(target="/ansible"))
ui.menu_item("Registry", lambda: ui.navigate.to(target="/registry"))
ui.menu_item("About", lambda: dialog.open())
with ui.dialog() as dialog, ui.card():
get_about(dialog)