From 81fd373f5c160b02b5655712626869bf090087cd Mon Sep 17 00:00:00 2001 From: Stedoss Date: Fri, 1 Nov 2024 04:00:49 +0000 Subject: [PATCH] nise-circleguard: Update to use sanic instead of Flask --- nise-circleguard/Dockerfile | 7 ++++--- nise-circleguard/requirements.txt | 3 +-- nise-circleguard/src/main.py | 32 ++++++++++++++----------------- 3 files changed, 19 insertions(+), 23 deletions(-) diff --git a/nise-circleguard/Dockerfile b/nise-circleguard/Dockerfile index 9eed673..0d11025 100644 --- a/nise-circleguard/Dockerfile +++ b/nise-circleguard/Dockerfile @@ -9,8 +9,7 @@ RUN apt update COPY requirements.txt ./requirements.txt -RUN pip3 install --upgrade pip && \ - pip3 install -r requirements.txt +RUN pip3 install --no-cache-dir -r requirements.txt # This is *really* bad, but I'd rather get this working rather than forking packages and re-publishing them. # It'll probably break some day. @@ -24,5 +23,7 @@ COPY ./src/ ./src/ ENV GUNICORN_CMD_ARGS="--bind=0.0.0.0:5000 --workers=16" +WORKDIR /app/src + # Run gunicorn with the application -CMD ["gunicorn", "--chdir", "src", "main:app"] \ No newline at end of file +CMD ["sanic", "main", "--port=5000"] diff --git a/nise-circleguard/requirements.txt b/nise-circleguard/requirements.txt index 45a9b69..a070b01 100644 --- a/nise-circleguard/requirements.txt +++ b/nise-circleguard/requirements.txt @@ -1,5 +1,4 @@ ossapi==3.4.3 circleguard==5.4.1 -flask==3.0.2 brparser==1.0.4 -gunicorn==21.2.0 \ No newline at end of file +sanic==24.6.0 diff --git a/nise-circleguard/src/main.py b/nise-circleguard/src/main.py index 6c1adae..faeaf15 100644 --- a/nise-circleguard/src/main.py +++ b/nise-circleguard/src/main.py @@ -5,21 +5,21 @@ from dataclasses import dataclass, asdict from typing import List, Iterable import numpy as np +from sanic import Request, Sanic, exceptions, json import scipy from brparser import Replay, BeatmapOsu, Mod from circleguard import Circleguard, ReplayString, Hit -from flask import Flask, request, jsonify, abort from itertools import combinations from math import isnan from slider import Beatmap, Circle, Slider, Spinner -from src.WriteStreamWrapper import WriteStreamWrapper -from src.keypresses import get_kp_sliders +from WriteStreamWrapper import WriteStreamWrapper +from keypresses import get_kp_sliders # Circleguard cg = Circleguard(os.getenv("OSU_API_KEY"), db_path="./dbs/db.db", slider_dir="./dbs/") -app = Flask(__name__) +app = Sanic(__name__) def my_filter_outliers(arr, bias=1.5): """ @@ -123,11 +123,11 @@ class ScoreJudgement: @app.post("/replay") -def process_replay(): +async def process_replay(request: Request): try: - request_data = request.get_json() + request_data = request.json if not request_data: - abort(400, description="Bad Request: No JSON data provided.") + raise exceptions.BadRequest("Bad Request: No JSON data provided.") replay_request = ReplayRequest.from_dict(request_data) @@ -219,10 +219,10 @@ def process_replay(): judgements=judgements ) - return jsonify(ur_response.to_dict()) + return json(ur_response.to_dict()) except ValueError as e: - abort(400, description=str(e)) + raise exceptions.BadRequest(str(e)) @dataclass @@ -242,11 +242,11 @@ class ReplayDto: @app.post("/similarity") -def process_similarity(): +async def process_similarity(request: Request): try: - request_data = request.get_json() + request_data = request.json if not request_data: - abort(400, description="Bad Request: No JSON data provided.") + raise exceptions.BadRequest("Bad Request: No JSON data provided.") replays: List[ReplayDto] = request_data['replays'] replay_cache = {} @@ -287,11 +287,7 @@ def process_similarity(): ) response.append(new_score_similarity) - return jsonify({'result': response}) + return json({'result': response}) except ValueError as e: - abort(400, description=str(e)) - - -if __name__ == "__main__": - app.run(host='0.0.0.0', debug=False) + raise exceptions.BadRequest(str(e))