mirror of
https://github.com/langgenius/dify.git
synced 2026-09-06 09:14:25 +08:00
refactor(web): dep-inject the passport query with @model_validate (#41845)
This commit is contained in:
parent
00e5786067
commit
d69b19b567
@ -5,6 +5,7 @@ from werkzeug.exceptions import NotFound, Unauthorized
|
||||
|
||||
from constants import HEADER_NAME_APP_CODE
|
||||
from controllers.common.schema import query_params_from_model, register_response_schema_models, register_schema_models
|
||||
from controllers.console.wraps import model_validate
|
||||
from controllers.web import web_ns
|
||||
from controllers.web.error import WebAppAuthRequiredError
|
||||
from extensions.ext_application_services import application_services
|
||||
@ -48,12 +49,12 @@ class PassportResource(Resource):
|
||||
}
|
||||
)
|
||||
@web_ns.response(200, "Passport retrieved successfully", web_ns.models[PassportAccessTokenResponse.__name__])
|
||||
def get(self):
|
||||
@model_validate(PassportQuery)
|
||||
def get(self, query: PassportQuery):
|
||||
app_code = request.headers.get(HEADER_NAME_APP_CODE)
|
||||
if app_code is None:
|
||||
raise Unauthorized("X-App-Code header is missing.")
|
||||
|
||||
query = PassportQuery.model_validate(request.args.to_dict(flat=True))
|
||||
passport_request = WebPassportRequest(
|
||||
app_code=app_code,
|
||||
user_session_id=query.user_id,
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
"""Unit tests for the thin web-passport Flask adapter."""
|
||||
|
||||
from inspect import unwrap
|
||||
from types import SimpleNamespace
|
||||
from unittest.mock import MagicMock, patch
|
||||
|
||||
@ -31,7 +30,7 @@ def test_passport_resource_parses_input_and_serializes_result(app: Flask) -> Non
|
||||
patch("controllers.web.passport.application_services", return_value=services),
|
||||
patch("controllers.web.passport.extract_webapp_access_token", return_value="login-token"),
|
||||
):
|
||||
result = unwrap(PassportResource.get)(PassportResource())
|
||||
result = PassportResource().get()
|
||||
|
||||
assert result == {"access_token": "issued-token"}
|
||||
service.issue.assert_called_once_with(
|
||||
@ -41,7 +40,7 @@ def test_passport_resource_parses_input_and_serializes_result(app: Flask) -> Non
|
||||
|
||||
def test_passport_resource_requires_app_code(app: Flask) -> None:
|
||||
with app.test_request_context("/passport"), pytest.raises(Unauthorized, match="X-App-Code"):
|
||||
unwrap(PassportResource.get)(PassportResource())
|
||||
PassportResource().get()
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
@ -66,4 +65,4 @@ def test_passport_resource_translates_application_errors(
|
||||
patch("controllers.web.passport.application_services", return_value=services),
|
||||
pytest.raises(http_error),
|
||||
):
|
||||
unwrap(PassportResource.get)(PassportResource())
|
||||
PassportResource().get()
|
||||
|
||||
Loading…
Reference in New Issue
Block a user