| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- import os
- from pathlib import Path
- import typer
- from archive_logs import run as run_archive_logs
- from clients import run
- from files import run as run_files
- from move_files import default_desktop, move_files
- from summary import run as run_summary
- app = typer.Typer(help="PC-Visit Filetracker")
- DATA_DIRECTORY = Path("data")
- def default_session_history() -> Path:
- user_profile = Path(os.environ.get("USERPROFILE", str(Path.home())))
- return user_profile / "AppData" / "Roaming" / "pcvisit Data" / "Session History"
- @app.callback(invoke_without_command=True)
- def app_callback(context: typer.Context) -> None:
- """Verwalten der PC-Visit-Filetracker-Befehle."""
- if context.invoked_subcommand is None:
- typer.echo(context.get_help())
- @app.command("clients")
- def clients_command(
- directory: Path | None = typer.Argument(None, help="Verzeichnis mit XML-Dateien"),
- output: Path = typer.Option(DATA_DIRECTORY / "clients.csv", "--output", "-o", help="Zielpfad der CSV-Datei"),
- ) -> None:
- """Importiert Client-Daten aus Session-XML-Dateien."""
- directory = directory or default_session_history()
- try:
- xml_count, row_count = run(directory, output)
- except ValueError as error:
- raise typer.BadParameter(str(error), param_hint="directory") from error
- typer.echo(f"{xml_count} XML-Dateien gelesen, {row_count} Einträge nach {output} geschrieben.")
- @app.command("files")
- def files_command(
- directory: Path | None = typer.Argument(None, help="Verzeichnis mit XML-Dateien"),
- output: Path = typer.Option(DATA_DIRECTORY / "files.csv", "--output", "-o", help="Zielpfad der CSV-Datei"),
- ignore_timestamp: bool = typer.Option(
- False,
- "--ignore-timestamp",
- help="Ignoriert den Abgleich des Erstellungsdatums mit der Session.",
- ),
- ) -> None:
- """Importiert vorhandene Dateien aus ReceivedFile-Elementen."""
- directory = directory or default_session_history()
- try:
- xml_count, row_count = run_files(directory, output, ignore_timestamp=ignore_timestamp)
- except ValueError as error:
- raise typer.BadParameter(str(error), param_hint="directory") from error
- typer.echo(f"{xml_count} XML-Dateien gelesen, {row_count} vorhandene Dateien nach {output} geschrieben.")
- @app.command("move-files")
- def move_files_command(
- directory: Path | None = typer.Argument(None, help="Verzeichnis mit XML-Dateien"),
- files_csv: Path = typer.Option(
- DATA_DIRECTORY / "files.csv", "--files-csv", help="CSV-Datei mit den gefundenen Dateien"
- ),
- clients_csv: Path = typer.Option(DATA_DIRECTORY / "clients.csv", "--clients-csv", help="CSV-Datei mit den Kunden"),
- desktop: Path | None = typer.Option(None, "--desktop", help="Desktop-Verzeichnis als Zielbasis"),
- ignore_timestamp: bool = typer.Option(
- False,
- "--ignore-timestamp",
- help="Ignoriert den Abgleich des Erstellungsdatums mit der Session.",
- ),
- ) -> None:
- """Verschiebt gefundene Dateien in Desktop/PC-Visit/Kunde."""
- directory = directory or default_session_history()
- try:
- run_files(directory, files_csv, ignore_timestamp=ignore_timestamp)
- moved_count, skipped_count, missing_client_count = move_files(
- files_csv, clients_csv, desktop or default_desktop()
- )
- except ValueError as error:
- raise typer.BadParameter(str(error)) from error
- typer.echo(
- f"{moved_count} Dateien verschoben, {skipped_count} übersprungen, " f"{missing_client_count} ohne Kunde."
- )
- @app.command("archive-logs")
- def archive_logs_command(
- directory: Path | None = typer.Argument(None, help="Verzeichnis mit XML-Dateien"),
- ) -> None:
- """Archiviert Session-XML-Dateien nach Jahr."""
- directory = directory or default_session_history()
- try:
- checked_count, archived_count, skipped_count = run_archive_logs(directory)
- except ValueError as error:
- raise typer.BadParameter(str(error), param_hint="directory") from error
- typer.echo(f"{checked_count} XML-Dateien geprüft, {archived_count} archiviert, " f"{skipped_count} übersprungen.")
- @app.command("summary")
- def summary_command(
- directory: Path | None = typer.Argument(None, help="Verzeichnis mit XML-Dateien"),
- output: Path = typer.Option(DATA_DIRECTORY / "summary.csv", "--output", "-o", help="Zielpfad der CSV-Datei"),
- ) -> None:
- """Erstellt eine Sitzungs- und Dauersumme pro Kunde."""
- directory = directory or default_session_history()
- try:
- xml_count, customer_count = run_summary(directory, output)
- except ValueError as error:
- raise typer.BadParameter(str(error), param_hint="directory") from error
- typer.echo(f"{xml_count} XML-Dateien geprüft, {customer_count} Kunden nach {output} geschrieben.")
- if __name__ == "__main__":
- app()
|