Initial development by Claude
This commit is contained in:
99
path_juggler.py
Normal file
99
path_juggler.py
Normal file
@@ -0,0 +1,99 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Path Juggler - Command Line Interface
|
||||
|
||||
Watches folders for rendered files and automatically organizes them
|
||||
into structured folder hierarchies based on source material locations.
|
||||
|
||||
Usage:
|
||||
python3 path_juggler.py [--dry-run] [--once] [-v]
|
||||
|
||||
For the GUI version, run:
|
||||
python3 path_juggler_gui.py
|
||||
"""
|
||||
|
||||
import argparse
|
||||
import logging
|
||||
import time
|
||||
|
||||
from path_juggler_core import PathJuggler, get_honey_volumes
|
||||
|
||||
# Setup logging for CLI
|
||||
logging.basicConfig(
|
||||
level=logging.INFO,
|
||||
format="%(asctime)s - %(levelname)s - %(message)s",
|
||||
datefmt="%H:%M:%S"
|
||||
)
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(
|
||||
description="Watch for rendered files and organize into structured folders"
|
||||
)
|
||||
parser.add_argument(
|
||||
"--dry-run",
|
||||
action="store_true",
|
||||
help="Show what would be done without actually moving files"
|
||||
)
|
||||
parser.add_argument(
|
||||
"--once",
|
||||
action="store_true",
|
||||
help="Process existing files and exit (don't watch)"
|
||||
)
|
||||
parser.add_argument(
|
||||
"--verbose", "-v",
|
||||
action="store_true",
|
||||
help="Enable verbose logging"
|
||||
)
|
||||
parser.add_argument(
|
||||
"--gui",
|
||||
action="store_true",
|
||||
help="Launch the GUI version"
|
||||
)
|
||||
args = parser.parse_args()
|
||||
|
||||
# Launch GUI if requested
|
||||
if args.gui:
|
||||
from path_juggler_gui import main as gui_main
|
||||
gui_main()
|
||||
return
|
||||
|
||||
if args.verbose:
|
||||
logging.getLogger().setLevel(logging.DEBUG)
|
||||
|
||||
if args.dry_run:
|
||||
logger.info("DRY RUN MODE - no files will be moved")
|
||||
|
||||
# Create juggler instance
|
||||
juggler = PathJuggler(dry_run=args.dry_run)
|
||||
|
||||
if args.once:
|
||||
# Just process existing files and exit
|
||||
juggler.setup_folders()
|
||||
|
||||
volumes = get_honey_volumes()
|
||||
if volumes:
|
||||
logger.info(f"Found HONEY volumes: {[v.name for v in volumes]}")
|
||||
else:
|
||||
logger.warning("No HONEY volumes currently mounted")
|
||||
|
||||
logger.info("Processing existing files...")
|
||||
juggler.process_existing()
|
||||
logger.info("Done")
|
||||
return
|
||||
|
||||
# Start watching
|
||||
juggler.start()
|
||||
|
||||
try:
|
||||
while juggler.is_running():
|
||||
time.sleep(1)
|
||||
except KeyboardInterrupt:
|
||||
logger.info("Interrupted")
|
||||
finally:
|
||||
juggler.stop()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user