diff --git a/.gitignore b/.gitignore index 67095ee..04fbdb8 100644 --- a/.gitignore +++ b/.gitignore @@ -13,4 +13,6 @@ test/* *.build -C:/* # Windows paths on linux \ No newline at end of file +C:/* # Windows paths on linux + +uploader.log \ No newline at end of file diff --git a/build.py b/build.py index fa64414..addce8b 100644 --- a/build.py +++ b/build.py @@ -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__": diff --git a/nice.py b/nice.py index 61b8566..c5abdc5 100644 --- a/nice.py +++ b/nice.py @@ -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"), diff --git a/requirements.txt b/requirements.txt index 42a30f7..3790b28 100644 --- a/requirements.txt +++ b/requirements.txt @@ -10,3 +10,4 @@ loguru dicom2jpg pyinstaller nicegui +pywebview