#!/usr/bin/env python3 import argparse import re from datetime import datetime from pathlib import Path import bottle from bottle import request, run def latest_file(directory: Path) -> Path | None: files = [p for p in directory.glob("*.md") if re.match(r"^\d{14}\.md$", p.name)] return max(files, key=lambda p: p.stat().st_mtime) if files else None def save(directory: Path, text: str) -> None: filename = f"{datetime.now():%Y%m%d%H%M%S}.md" path = directory / filename path.write_text(text, encoding="utf-8") def make_page(directory: Path) -> str: latest = latest_file(directory) content = latest.read_text(encoding="utf-8") if latest else "" filename = latest.name if latest else "(none)" return f""" notes
latest: {filename}

""" def main(): parser = argparse.ArgumentParser(description="note server") parser.add_argument("directory", type=Path, help="where to store .md files") parser.add_argument("--host", default="127.0.0.1") parser.add_argument("--port", type=int, default=8080) args = parser.parse_args() args.directory.mkdir(parents=True, exist_ok=True) @bottle.route("/") def index(): return make_page(args.directory) @bottle.route("/save", method="POST") def save_route(): text = request.forms.get("text", "") save(args.directory, text) return bottle.redirect("/") run(host=args.host, port=args.port) if __name__ == "__main__": main()