import http.server, json, sys PORT = int(sys.argv[1]) DATA_FILE = sys.argv[2] class Handler(http.server.BaseHTTPRequestHandler): def log_message(self, fmt, *args): pass def _read_body(self): length = int(self.headers.get("Content-Length", 0)) return json.loads(self.rfile.read(length)) if length else {} def _json(self, code, body): data = json.dumps(body).encode() self.send_response(code) self.send_header("Content-Type", "application/json") self.end_headers() self.wfile.write(data) def do_POST(self): if self.path == "/api/annotations": body = self._read_body() try: with open(DATA_FILE) as f: annotations = json.load(f) except Exception: annotations = [] aid = len(annotations) + 1 body["id"] = aid annotations.append(body) with open(DATA_FILE, "w") as f: json.dump(annotations, f) self._json(200, {"id": aid, "message": "Annotation added"}) else: self.send_response(404) self.end_headers() def do_PATCH(self): if self.path.startswith("/api/annotations/"): aid = int(self.path.rsplit("/", 1)[-1]) body = self._read_body() try: with open(DATA_FILE) as f: annotations = json.load(f) except Exception: annotations = [] for a in annotations: if a["id"] == aid: a.update(body) with open(DATA_FILE, "w") as f: json.dump(annotations, f) self._json(200, {"message": "Annotation patched"}) else: self.send_response(404) self.end_headers() http.server.HTTPServer(("127.0.0.1", PORT), Handler).serve_forever()