From d7c191f844195e08877ea53907ee15ee29ea62e0 Mon Sep 17 00:00:00 2001 From: FHU-yezi Date: Fri, 31 Jan 2025 21:03:38 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E5=8D=87=E7=BA=A7=E5=88=B0=20sshared?= =?UTF-8?q?=20v0.21.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/api/v1/jpep/ftn_macket.py | 6 ++--- backend/app.py | 34 ------------------------- backend/config.example.toml | 4 +-- backend/main.py | 42 +++++++++++++++++++++++++------ backend/pyproject.toml | 2 +- backend/requirements-dev.txt | 2 +- backend/requirements.txt | 2 +- backend/uv.lock | 8 +++--- 8 files changed, 46 insertions(+), 54 deletions(-) delete mode 100644 backend/app.py diff --git a/backend/api/v1/jpep/ftn_macket.py b/backend/api/v1/jpep/ftn_macket.py index a8eee32..6c6e72e 100644 --- a/backend/api/v1/jpep/ftn_macket.py +++ b/backend/api/v1/jpep/ftn_macket.py @@ -8,7 +8,7 @@ from litestar import Response, Router, get from litestar.params import Parameter from msgspec import Struct, field -from sshared.time import get_datetime_before_now, parse_td_str +from sshared.time import get_past_datetime_from_now, parse_td_str from sspeedup.api.litestar import ( RESPONSE_STRUCT_CONFIG, generate_response_spec, @@ -130,7 +130,7 @@ async def get_price_history_handler( ) -> Response: history = await FTNMacketRecord.get_price_history( type=type_.upper(), # type: ignore - start_time=get_datetime_before_now(parse_td_str(range)), + start_time=get_past_datetime_from_now(parse_td_str(range)), resolution=RESOLUTION_MAPPING[resolution], ) @@ -163,7 +163,7 @@ async def get_amount_history_handler( ) -> Response: history = await FTNMacketRecord.get_amount_history( type=type_.upper(), # type: ignore - start_time=get_datetime_before_now(parse_td_str(range)), + start_time=get_past_datetime_from_now(parse_td_str(range)), resolution=RESOLUTION_MAPPING[resolution], ) diff --git a/backend/app.py b/backend/app.py deleted file mode 100644 index 7ac3cc5..0000000 --- a/backend/app.py +++ /dev/null @@ -1,34 +0,0 @@ -from litestar import Litestar -from litestar.openapi import OpenAPIConfig, OpenAPIController -from litestar.openapi.spec import Server -from sspeedup.api.litestar import EXCEPTION_HANDLERS - -from api import API_ROUTER - - -class CustomOpenAPIController(OpenAPIController): - path = "/docs" - swagger_ui_version = "5.17.14" - swagger_css_url = ( - "https://cdn.jsdelivr.net/npm/swagger-ui-dist@5.17.14/swagger-ui.css" - ) - swagger_ui_bundle_js_url = ( - "https://cdn.jsdelivr.net/npm/swagger-ui-dist@5.17.14/swagger-ui-bundle.js" - ) - swagger_ui_standalone_preset_js_url = "https://cdn.jsdelivr.net/npm/swagger-ui-dist@5.17.14/swagger-ui-standalone-preset.js" - favicon_url = "https://tools.sscreator.com/favicon-vector.svg" - - -app = Litestar( - route_handlers=[API_ROUTER], - exception_handlers=EXCEPTION_HANDLERS, - openapi_config=OpenAPIConfig( - openapi_controller=CustomOpenAPIController, - title="JTools API", - version="v1.0.0", - servers=[Server(description="主端点", url="/api")], - use_handler_docstrings=True, - root_schema_site="swagger", - enabled_endpoints={"swagger", "openapi.json"}, - ), -) diff --git a/backend/config.example.toml b/backend/config.example.toml index 6651bc2..ef5ab24 100644 --- a/backend/config.example.toml +++ b/backend/config.example.toml @@ -31,10 +31,8 @@ [uvicorn] host = "localhost" port = 8902 - log_level = "warning" + mode = "PROD" workers = 1 - reload = false - access_log = false [word_split_access_key] access_key_id = "" diff --git a/backend/main.py b/backend/main.py index e5bb212..f911826 100644 --- a/backend/main.py +++ b/backend/main.py @@ -1,8 +1,14 @@ import logging from asyncio import run as asyncio_run +from litestar import Litestar +from litestar.openapi import OpenAPIConfig, OpenAPIController +from litestar.openapi.spec import Server +from sshared.api.uvicorn import get_uvicorn_params_from_config +from sspeedup.api.litestar import EXCEPTION_HANDLERS from uvicorn import run as uvicorn_run +from api import API_ROUTER from models import init_db from utils.config import CONFIG from utils.log import logger @@ -11,17 +17,39 @@ logging.getLogger("httpcore").setLevel(logging.CRITICAL) +class CustomOpenAPIController(OpenAPIController): + path = "/docs" + swagger_ui_version = "5.17.14" + swagger_css_url = ( + "https://cdn.jsdelivr.net/npm/swagger-ui-dist@5.17.14/swagger-ui.css" + ) + swagger_ui_bundle_js_url = ( + "https://cdn.jsdelivr.net/npm/swagger-ui-dist@5.17.14/swagger-ui-bundle.js" + ) + swagger_ui_standalone_preset_js_url = "https://cdn.jsdelivr.net/npm/swagger-ui-dist@5.17.14/swagger-ui-standalone-preset.js" + favicon_url = "https://tools.sscreator.com/favicon-vector.svg" + + +app = Litestar( + route_handlers=[API_ROUTER], + exception_handlers=EXCEPTION_HANDLERS, + openapi_config=OpenAPIConfig( + openapi_controller=CustomOpenAPIController, + title="JTools API", + version="v1.0.0", + servers=[Server(description="主端点", url="/api")], + use_handler_docstrings=True, + root_schema_site="swagger", + enabled_endpoints={"swagger", "openapi.json"}, + ), +) + if __name__ == "__main__": asyncio_run(init_db()) logger.debug("初始化数据库成功") logger.info("启动 API 服务") uvicorn_run( - app="app:app", - host=CONFIG.uvicorn.host, - port=CONFIG.uvicorn.port, - log_level=CONFIG.uvicorn.log_level, - workers=CONFIG.uvicorn.workers, - reload=CONFIG.uvicorn.reload, - access_log=CONFIG.uvicorn.access_log, + app="main:app", + **get_uvicorn_params_from_config(CONFIG.uvicorn), ) diff --git a/backend/pyproject.toml b/backend/pyproject.toml index 5134b8a..5c31102 100644 --- a/backend/pyproject.toml +++ b/backend/pyproject.toml @@ -9,7 +9,7 @@ dependencies = [ "httptools>=0.6.0", "jkit>=3.0.0b2", "psycopg[binary]>=3.2.0", - "sshared[config, postgres]>=0.18.0", + "sshared[config, postgres]>=0.21.0", "sspeedup[api-litestar]>=0.25.0", "uvicorn>=0.32.0", "uvloop>=0.21.0", diff --git a/backend/requirements-dev.txt b/backend/requirements-dev.txt index fb3a10c..c3213b8 100644 --- a/backend/requirements-dev.txt +++ b/backend/requirements-dev.txt @@ -36,7 +36,7 @@ rich-click==1.8.5 ruff==0.9.2 six==1.16.0 sniffio==1.3.1 -sshared==0.19.1 +sshared==0.21.0 sspeedup==0.25.1 tomli==2.2.1 typing-extensions==4.12.2 diff --git a/backend/requirements.txt b/backend/requirements.txt index 1d507e7..4a4d18d 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -33,7 +33,7 @@ rich==13.9.4 rich-click==1.8.5 six==1.16.0 sniffio==1.3.1 -sshared==0.19.1 +sshared==0.21.0 sspeedup==0.25.1 tomli==2.2.1 typing-extensions==4.12.2 diff --git a/backend/uv.lock b/backend/uv.lock index fc2111f..aaaad5b 100644 --- a/backend/uv.lock +++ b/backend/uv.lock @@ -253,7 +253,7 @@ requires-dist = [ { name = "httptools", specifier = ">=0.6.0" }, { name = "jkit", specifier = ">=3.0.0b2" }, { name = "psycopg", extras = ["binary"], specifier = ">=3.2.0" }, - { name = "sshared", extras = ["config", "postgres"], specifier = ">=0.18.0" }, + { name = "sshared", extras = ["config", "postgres"], specifier = ">=0.21.0" }, { name = "sspeedup", extras = ["api-litestar"], specifier = ">=0.25.0" }, { name = "uvicorn", specifier = ">=0.32.0" }, { name = "uvloop", specifier = ">=0.21.0" }, @@ -781,14 +781,14 @@ wheels = [ [[package]] name = "sshared" -version = "0.19.1" +version = "0.21.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "msgspec" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/7c/c4/0c95970998f74029a18b659701efd18ddecc142ddf616b3251f7e5c94e85/sshared-0.19.1.tar.gz", hash = "sha256:9bd3d27d4ab693682527a36b7c494f137ca1df76a1e3bfa011fdc9f05dff4a5a", size = 15212 } +sdist = { url = "https://files.pythonhosted.org/packages/53/d0/61198eb6e8c5c6b9ba895300ccb18eb4670f7c875221cf4f2c48b228e8c9/sshared-0.21.0.tar.gz", hash = "sha256:0586ea2b2c58e51b49f5e7cfaac68c8666a747d060b93cf82bddcfb522d15137", size = 46425 } wheels = [ - { url = "https://files.pythonhosted.org/packages/57/61/3fdb4250993bfd58c551c2f5561e64abd78ee4ffe9ae6a60961804297202/sshared-0.19.1-py3-none-any.whl", hash = "sha256:2aded4f465345df8a335a4c3cb8055b43df8d83001d5263d9cd80514679be103", size = 21835 }, + { url = "https://files.pythonhosted.org/packages/43/9c/ffd48a13f809e934c82040e03478495f1384a921941c41abb01dc6e1eeaf/sshared-0.21.0-py3-none-any.whl", hash = "sha256:c9f07c8f88e2c8fc757848955adeddd589fef48b417bf89264574a832075305c", size = 22235 }, ] [package.optional-dependencies]