from flask import Flask, request, Response, send_from_directory
import os, random, datetime, xml.etree.ElementTree as ET
app = Flask(__name__)
BASE_DIR = os.path.dirname(__file__)
LOG_DIR = os.path.join(BASE_DIR, "ac_logs")
EVENTS_GEN4 = os.path.join(BASE_DIR, "wonder_gen4")
EVENTS_GEN5 = os.path.join(BASE_DIR, "wonder_gen5")
os.makedirs(LOG_DIR, exist_ok=True)
# ===== Logging helper =====
def save_raw_request(prefix: str, data: bytes, headers: dict):
ts = datetime.datetime.utcnow().strftime("%Y%m%dT%H%M%S%fZ")
filename = f"{prefix}_{ts}.bin"
with open(os.path.join(LOG_DIR, filename), "wb") as f:
f.write(data)
with open(os.path.join(LOG_DIR, filename + ".meta"), "w", encoding="utf-8") as f:
for k, v in headers.items():
f.write(f"{k}: {v}\n")
# ===== Gen 4: random event =====
@app.route("/gen4/event", methods=["GET"])
def gen4_event():
files = [f for f in os.listdir(EVENTS_GEN4) if f.lower().endswith((".pgt", ".pcd"))]
if not files:
return Response("No Gen4 events found", mimetype="application/xml")
chosen = random.choice(files)
print(f"Serving Gen4 event: {chosen}")
return send_from_directory(EVENTS_GEN4, chosen, mimetype="application/octet-stream")
# ===== Gen 5: random event =====
@app.route("/gen5/event", methods=["GET"])
def gen5_event():
files = [f for f in os.listdir(EVENTS_GEN5) if f.lower().endswith(".pgf")]
if not files:
return Response("No Gen5 events found", mimetype="application/xml")
chosen = random.choice(files)
print(f"Serving Gen5 event: {chosen}")
return send_from_directory(EVENTS_GEN5, chosen, mimetype="application/octet-stream")
# ===== Catch-all =====
@app.route('/', defaults={'path': ''}, methods=['GET','POST'])
@app.route('/', methods=['GET','POST'])
def catch_all(path):
raw = request.get_data()
headers = dict(request.headers)
save_raw_request(f"unknown_{path}", raw, headers)
print(f"Unhandled request: /{path}")
return Response("Unhandled path", mimetype="application/xml")
if __name__ == "__main__":
app.run(host="0.0.0.0", port=8080)