From 9953a93be4287429b081edc319f02dbf3db368b7 Mon Sep 17 00:00:00 2001 From: StardustDL Date: Wed, 13 Mar 2024 22:47:41 +0800 Subject: [PATCH] add server command --- Dockerfile | 2 +- scripts/docker_build.py | 3 ++- scripts/server_build.py | 3 ++- src/servers/api/__init__.py | 15 +++++++++++---- src/servers/cli.py | 18 ++++++++++++++++-- src/servers/entrypoint.py | 8 ++++---- src/servers/frontend.py | 4 ++-- 7 files changed, 38 insertions(+), 15 deletions(-) diff --git a/Dockerfile b/Dockerfile index 59bb4d5a..4d0d7f0f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -19,7 +19,7 @@ COPY --from=ENV /usr/local/bin/_dockerfile_setup_root_prefix.sh /usr/local/bin/_ RUN /usr/local/bin/_dockerfile_initialize_user_accounts.sh && \ /usr/local/bin/_dockerfile_setup_root_prefix.sh -ENV PYTHONUTF8=1 RUN_IN_CONTAINER=1 AEXPY_ENV_PROVIDER=micromamba MAMBA_SKIP_ACTIVATE=1 +ENV PYTHONUTF8=1 RUN_IN_CONTAINER=1 AEXPY_ENV_PROVIDER=micromamba AEXPY_SERVER_DATA=/data MAMBA_SKIP_ACTIVATE=1 COPY requirements.txt /tmp/requirements.txt COPY --from=BUILD /dist /tmp/packages diff --git a/scripts/docker_build.py b/scripts/docker_build.py index ddb416c9..e09de7e7 100644 --- a/scripts/docker_build.py +++ b/scripts/docker_build.py @@ -15,7 +15,8 @@ def frontend(): - shutil.rmtree(serverWww) + if serverWww.is_dir(): + shutil.rmtree(serverWww) shutil.copytree(webDist, serverWww) diff --git a/scripts/server_build.py b/scripts/server_build.py index 21128bcc..6750bc9d 100644 --- a/scripts/server_build.py +++ b/scripts/server_build.py @@ -24,7 +24,8 @@ def build(): def copy(): - shutil.rmtree(serverWww) + if serverWww.is_dir(): + shutil.rmtree(serverWww) shutil.copytree(webDist, serverWww) diff --git a/src/servers/api/__init__.py b/src/servers/api/__init__.py index 013a4552..b2b5137c 100644 --- a/src/servers/api/__init__.py +++ b/src/servers/api/__init__.py @@ -2,17 +2,17 @@ from pathlib import Path from flask import Blueprint, Response, jsonify, request, send_file, send_from_directory -wwwdata = Path(__file__).parent.parent.joinpath("wwwdata") +WWW_DATA = Path(__file__).parent.parent.joinpath("wwwdata") -if not wwwdata.is_dir(): - os.makedirs(wwwdata, exist_ok=True) api = Blueprint("api", __name__) @api.route("/data/", methods=["GET"]) def wwwrootFiles(path: str = "index.html"): - return send_from_directory(wwwdata, path) + if not WWW_DATA.is_dir(): + os.makedirs(WWW_DATA, exist_ok=True) + return send_from_directory(WWW_DATA, path) @api.route("/tasks/extract", methods=["POST"]) @@ -35,3 +35,10 @@ def info(): "buildDate": BUILD_DATE.isoformat(), } ) + + +def build(wwwdata: Path | None = None): + if wwwdata: + global WWW_DATA + WWW_DATA = wwwdata + return api diff --git a/src/servers/cli.py b/src/servers/cli.py index c28ebc2b..b592fc44 100644 --- a/src/servers/cli.py +++ b/src/servers/cli.py @@ -1,11 +1,25 @@ import click +from pathlib import Path @click.command() +@click.option( + "--data", + type=click.Path( + exists=True, + file_okay=False, + resolve_path=True, + dir_okay=True, + path_type=Path, + ), + default=None, + envvar="AEXPY_SERVER_DATA", + help="Path to data storage directory.", +) @click.option("-d", "--debug", is_flag=True, help="Debug mode.") @click.option("-p", "--port", type=int, default=8008, help="Port to listen on.") -def serve(debug: "bool" = False, port: "int" = 8008): +def serve(data: Path | None = None, debug: bool = False, port: int = 8008): """Serve web server.""" from .entrypoint import serve as inner, buildApp - inner(buildApp(), debug, port) + inner(buildApp(data), debug, port) diff --git a/src/servers/entrypoint.py b/src/servers/entrypoint.py index b2040513..40a35de3 100644 --- a/src/servers/entrypoint.py +++ b/src/servers/entrypoint.py @@ -1,5 +1,5 @@ import os -import pathlib +from pathlib import Path import shutil import click @@ -9,12 +9,12 @@ from flask import Flask -def buildApp(): +def buildApp(wwwdata: Path | None = None): from . import app - from .api import api + from .api import build from .frontend import frontend - app.register_blueprint(api, url_prefix="/api") + app.register_blueprint(build(wwwdata), url_prefix="/api") app.register_blueprint(frontend, url_prefix="/") return app diff --git a/src/servers/frontend.py b/src/servers/frontend.py index 751a9d73..cb4f7c4e 100644 --- a/src/servers/frontend.py +++ b/src/servers/frontend.py @@ -1,8 +1,8 @@ -import pathlib +from pathlib import Path from flask import Blueprint, send_file, send_from_directory -wwwroot = pathlib.Path(__file__).parent.joinpath("wwwroot") +wwwroot = Path(__file__).parent.joinpath("wwwroot") frontend = Blueprint("frontend", __name__)