dotfiles/home/private_bin/executable_mkscratch

63 lines
1.4 KiB
Python

#!/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()