watch.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. from pathlib import Path
  2. from watchdog.events import FileSystemEvent, FileSystemEventHandler
  3. from watchdog.observers import Observer
  4. from move_files import refresh_and_move
  5. class XmlChangeHandler(FileSystemEventHandler):
  6. def __init__(
  7. self,
  8. directory: Path,
  9. files_csv: Path,
  10. clients_csv: Path,
  11. desktop_directory: Path,
  12. ignore_timestamp: bool,
  13. ) -> None:
  14. self.directory = directory
  15. self.files_csv = files_csv
  16. self.clients_csv = clients_csv
  17. self.desktop_directory = desktop_directory
  18. self.ignore_timestamp = ignore_timestamp
  19. def on_created(self, event: FileSystemEvent) -> None:
  20. self.process_xml(event)
  21. def on_modified(self, event: FileSystemEvent) -> None:
  22. self.process_xml(event)
  23. def on_moved(self, event: FileSystemEvent) -> None:
  24. self.process_xml(event)
  25. def process_xml(self, event: FileSystemEvent) -> None:
  26. if event.is_directory or not Path(event.src_path).suffix.lower() == ".xml":
  27. return
  28. refresh_and_move(
  29. self.directory,
  30. self.files_csv,
  31. self.clients_csv,
  32. self.desktop_directory,
  33. self.ignore_timestamp,
  34. )
  35. def run(
  36. directory: Path,
  37. files_csv: Path,
  38. clients_csv: Path,
  39. desktop_directory: Path,
  40. ignore_timestamp: bool = False,
  41. ) -> None:
  42. if not directory.is_dir():
  43. raise ValueError(f"Das Verzeichnis existiert nicht: {directory}")
  44. observer = Observer()
  45. observer.schedule(
  46. XmlChangeHandler(directory, files_csv, clients_csv, desktop_directory, ignore_timestamp),
  47. str(directory),
  48. recursive=True,
  49. )
  50. print(f"Überwachung des XML-Verzeichnisses gestartet: {directory}")
  51. print("Mit Strg+C kann die Überwachung beendet werden.")
  52. observer.start()
  53. try:
  54. while observer.is_alive():
  55. observer.join(1)
  56. except KeyboardInterrupt:
  57. observer.stop()
  58. print("Überwachung wurde manuell mit Strg+C beendet.")
  59. observer.join()