#!/usr/bin/env python3 from pathlib import Path import sys from datetime import datetime from tempfile import mkdtemp SCRATCH_DIR = Path.home() / "scratch" WEEK_SCRATCH = SCRATCH_DIR / datetime.now().strftime("%Y/%U") (SCRATCH_DIR / "current").unlink() (SCRATCH_DIR / "current").symlink_to(WEEK_SCRATCH) def scratch_maintenance(): if not WEEK_SCRATCH.is_dir(): WEEK_SCRATCH.mkdir(exist_ok=True) for p in WEEK_SCRATCH.iterdir(): if p.is_dir() and len(list(p.iterdir())) == 0: sys.stderr.write(f"removing: {p}\n") p.rmdir() def make_temp() -> Path: return Path(mkdtemp(prefix=datetime.now().strftime("%d") + ".", dir=WEEK_SCRATCH)) def make_named(name: str) -> Path: d = WEEK_SCRATCH / name d.mkdir(exist_ok=True) return d def return_last() -> Path: dirs = [d for d in WEEK_SCRATCH.iterdir() if d.is_dir()] if len(dirs) == 0: sys.stderr.write("no directores. exiting...") return sorted(dirs, key=lambda p: p.stat().st_mtime, reverse=True)[0] def main(): scratch_maintenance() if len(sys.argv) > 2: sys.exit("unexpected number of arguments") elif len(sys.argv) > 1: name = sys.argv[1] if name == ["last", "l"]: d = return_last() elif name in ["current", "c"]: d = WEEK_SCRATCH else: d = make_named(name) else: d = make_temp() print(d) if __name__ == "__main__": main()