enhance build script and logging: add destination option to build command, log output to uploader.log, and improve artifact handling

This commit is contained in:
Ross
2025-11-24 11:34:43 +00:00
parent a8c48c12f9
commit eb061992a3
4 changed files with 65 additions and 25 deletions
+2
View File
@@ -14,3 +14,5 @@ test/*
*.build
C:/* # Windows paths on linux
uploader.log
+58 -24
View File
@@ -3,44 +3,78 @@ from pathlib import Path
import PyInstaller.__main__
import typer
from rich import print
from rich.progress import Progress
app = typer.Typer()
@app.command()
def build(build: bool = True, copy: bool = True, test: bool = False):
def build(build: bool = True, copy: bool = True, test: bool = False, dest: str | None = None):
"""Windows-focused build script.
- `--test` creates a one-file test binary in `dist\test`.
- `--copy` (default) copies the artifact to the shared network path used previously.
"""
project_root = Path(__file__).resolve().parent
if build:
print("Building with PyInstaller")
PyInstaller.__main__.run([
"anon_gui.spec"
])
if test:
print("Building Windows test one-file bundle with PyInstaller")
# On Windows use ';' as add-data separator (src;dest)
PyInstaller.__main__.run([
str(project_root / "nice.py"),
"--onefile",
"--name",
"anon_gui_test",
"--distpath",
str(project_root / "dist" / "test"),
"--workpath",
str(project_root / "build" / "test"),
"--specpath",
str(project_root / "build" / "specs"),
"--add-data",
"icon;icon",
"--hidden-import",
"bs4",
"--hidden-import",
"requests",
"--hidden-import",
"nicegui",
])
else:
print("Building using spec: nice_uploader.spec")
PyInstaller.__main__.run([str(project_root / "nice_uploader.spec")])
if copy:
print("Copying file")
source = Path(r"C:\Users\krugerro\Desktop\uploader\dist\anon_gui.exe" )
dest =Path(r"T:\rad-tools\uploader" )
# Windows-only default destination used previously in the repo
default_dest = Path(r"\\ict\Go\RCH\Shared\Dragon-Xray\rad-tools\uploader\Uploader")
artifact_dir = project_root / "dist" / ("test" if test else "")
if not artifact_dir.exists():
artifact_dir = project_root / "dist"
# Look for a matching artifact
candidates = list(artifact_dir.glob("Uploader*")) + list(artifact_dir.glob("*.exe"))
if not candidates:
print(f"No build artifact found in {artifact_dir}, skipping copy")
return
n = 0
while True:
if n > 5:
break
artifact = candidates[0]
s = n if n > 0 else ""
filename = Path(f"cris_tools{s}.exe")
dest_path = Path(dest) if dest else default_dest
dest_path.mkdir(parents=True, exist_ok=True)
print(f"Destination: {filename}")
try:
shutil.copy(source, dest / filename)
break
except PermissionError:
n = n + 1
if artifact.is_file():
target = dest_path / artifact.name
print(f"Copying {artifact} -> {target}")
shutil.copy2(artifact, target)
else:
target = dest_path / artifact.name
print(f"Copying directory {artifact} -> {target}")
if target.exists():
shutil.rmtree(target)
shutil.copytree(artifact, target)
if __name__ == "__main__":
+3
View File
@@ -71,6 +71,7 @@ DELETE_FILES_ON_UPLOAD = True
DEBUG = False
logging.getLogger('niceGUI').setLevel(logging.INFO)
logger.add("uploader.log", rotation="10 MB")
if DEBUG:
BASE_SITE_URL = "http://localhost:8000"
@@ -542,6 +543,7 @@ def login() -> Optional[RedirectResponse]:
return None
@logger.catch
@ui.page("/")
def main_page():
async def watch_for_shutdown():
@@ -683,6 +685,7 @@ def main_page():
ui.button("About", on_click=about_dialog.open).props("outline color=white")
@logger.catch
def launch_app(
work_dir: Path = typer.Option(WORK_DIR, help="Working directory"),
nng: bool = typer.Option(True, help="Use nng"),
+1
View File
@@ -10,3 +10,4 @@ loguru
dicom2jpg
pyinstaller
nicegui
pywebview