mirror of
https://github.com/langgenius/dify.git
synced 2026-09-24 23:22:26 +08:00
refactor(web): remove custom console contract loaders (#38284)
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
This commit is contained in:
co-authored by
autofix-ci[bot]
parent
4fc8f0ddd1
commit
61650d34ce
@@ -147,11 +147,15 @@ register_schema_models(
|
||||
InstalledAppCreatePayload,
|
||||
InstalledAppUpdatePayload,
|
||||
InstalledAppsListQuery,
|
||||
)
|
||||
register_response_schema_models(
|
||||
console_ns,
|
||||
InstalledAppInfoResponse,
|
||||
InstalledAppResponse,
|
||||
InstalledAppListResponse,
|
||||
SimpleMessageResponse,
|
||||
SimpleResultMessageResponse,
|
||||
)
|
||||
register_response_schema_models(console_ns, SimpleMessageResponse, SimpleResultMessageResponse)
|
||||
|
||||
|
||||
@console_ns.route("/installed-apps")
|
||||
|
||||
@@ -13,7 +13,12 @@ from services.app_service import AppService
|
||||
|
||||
|
||||
class ExploreAppMetaResponse(BaseModel):
|
||||
tool_icons: dict[str, Any] = Field(default_factory=dict)
|
||||
"""Metadata consumed by the installed-app chat UI.
|
||||
|
||||
Built-in tool icons are URL strings; API-based tool icons are provider-defined payload objects.
|
||||
"""
|
||||
|
||||
tool_icons: dict[str, str | dict[str, Any]] = Field(default_factory=dict)
|
||||
|
||||
|
||||
register_response_schema_models(console_ns, fields.Parameters, ExploreAppMetaResponse)
|
||||
|
||||
@@ -3,7 +3,7 @@ from uuid import UUID
|
||||
|
||||
from flask import request
|
||||
from flask_restx import Resource
|
||||
from pydantic import BaseModel, Field, computed_field, field_validator
|
||||
from pydantic import BaseModel, Field, RootModel, computed_field, field_validator
|
||||
|
||||
from constants.languages import languages
|
||||
from controllers.common.schema import query_params_from_model, register_response_schema_models, register_schema_models
|
||||
@@ -80,15 +80,23 @@ class RecommendedAppDetailResponse(ResponseModel):
|
||||
can_trial: bool | None = None
|
||||
|
||||
|
||||
class RecommendedAppDetailNullableResponse(RootModel[RecommendedAppDetailResponse | None]):
|
||||
pass
|
||||
|
||||
|
||||
register_schema_models(
|
||||
console_ns,
|
||||
RecommendedAppsQuery,
|
||||
)
|
||||
register_response_schema_models(
|
||||
console_ns,
|
||||
RecommendedAppInfoResponse,
|
||||
RecommendedAppResponse,
|
||||
RecommendedAppListResponse,
|
||||
LearnDifyAppListResponse,
|
||||
RecommendedAppDetailResponse,
|
||||
RecommendedAppDetailNullableResponse,
|
||||
)
|
||||
register_response_schema_models(console_ns, RecommendedAppDetailResponse)
|
||||
|
||||
|
||||
def _resolve_language(language: str | None, user: Account) -> str:
|
||||
@@ -136,7 +144,7 @@ class LearnDifyAppListApi(Resource):
|
||||
|
||||
@console_ns.route("/explore/apps/<uuid:app_id>")
|
||||
class RecommendedAppApi(Resource):
|
||||
@console_ns.response(200, "Success", console_ns.models[RecommendedAppDetailResponse.__name__])
|
||||
@console_ns.response(200, "Success", console_ns.models[RecommendedAppDetailNullableResponse.__name__])
|
||||
@login_required
|
||||
@account_initialization_required
|
||||
def get(self, app_id: UUID):
|
||||
|
||||
@@ -6802,7 +6802,7 @@ Check if dataset is in use
|
||||
|
||||
| Code | Description | Schema |
|
||||
| ---- | ----------- | ------ |
|
||||
| 200 | Success | **application/json**: [RecommendedAppDetailResponse](#recommendedappdetailresponse)<br> |
|
||||
| 200 | Success | **application/json**: [RecommendedAppDetailNullableResponse](#recommendedappdetailnullableresponse)<br> |
|
||||
|
||||
### [GET] /features
|
||||
**Get feature configuration for current tenant**
|
||||
@@ -17287,6 +17287,10 @@ The type of the parameter
|
||||
|
||||
#### ExploreAppMetaResponse
|
||||
|
||||
Metadata consumed by the installed-app chat UI.
|
||||
|
||||
Built-in tool icons are URL strings; API-based tool icons are provider-defined payload objects.
|
||||
|
||||
| Name | Type | Description | Required |
|
||||
| ---- | ---- | ----------- | -------- |
|
||||
| tool_icons | object | | No |
|
||||
@@ -17984,6 +17988,7 @@ Input field definition for snippet parameters.
|
||||
| icon | string | | No |
|
||||
| icon_background | string | | No |
|
||||
| icon_type | string | | No |
|
||||
| icon_url | string | | Yes |
|
||||
| id | string | | Yes |
|
||||
| mode | string | | No |
|
||||
| name | string | | No |
|
||||
@@ -20080,6 +20085,12 @@ Whitelist scopes accepted by RBAC app and dataset access config APIs.
|
||||
| result | string | | Yes |
|
||||
| updated_at | integer | | Yes |
|
||||
|
||||
#### RecommendedAppDetailNullableResponse
|
||||
|
||||
| Name | Type | Description | Required |
|
||||
| ---- | ---- | ----------- | -------- |
|
||||
| RecommendedAppDetailNullableResponse | [RecommendedAppDetailResponse](#recommendedappdetailresponse) | | |
|
||||
|
||||
#### RecommendedAppDetailResponse
|
||||
|
||||
| Name | Type | Description | Required |
|
||||
@@ -20099,6 +20110,7 @@ Whitelist scopes accepted by RBAC app and dataset access config APIs.
|
||||
| icon | string | | No |
|
||||
| icon_background | string | | No |
|
||||
| icon_type | string | | No |
|
||||
| icon_url | string | | Yes |
|
||||
| id | string | | Yes |
|
||||
| mode | string | | No |
|
||||
| name | string | | No |
|
||||
|
||||
@@ -204,6 +204,18 @@ def test_generate_specs_include_console_contract_shapes_for_schema_migration(tmp
|
||||
assert app_detail_schema["properties"]["id"]["type"] == "string"
|
||||
assert app_detail_schema["properties"]["export_data"]["type"] == "string"
|
||||
assert {"type": "boolean"} in app_detail_schema["properties"]["can_trial"]["anyOf"]
|
||||
app_detail_nullable_schema = schemas["RecommendedAppDetailNullableResponse"]
|
||||
assert _response_schema(paths["/explore/apps/{app_id}"]["get"])["$ref"] == (
|
||||
"#/components/schemas/RecommendedAppDetailNullableResponse"
|
||||
)
|
||||
assert {"$ref": "#/components/schemas/RecommendedAppDetailResponse"} in app_detail_nullable_schema["anyOf"]
|
||||
assert {"type": "null"} in app_detail_nullable_schema["anyOf"]
|
||||
assert schemas["RecommendedAppInfoResponse"]["properties"]["icon_url"]["readOnly"] is True
|
||||
assert schemas["InstalledAppInfoResponse"]["properties"]["icon_url"]["readOnly"] is True
|
||||
tool_icon_schema = schemas["ExploreAppMetaResponse"]["properties"]["tool_icons"]["additionalProperties"]
|
||||
assert {"type": "string"} in tool_icon_schema["anyOf"]
|
||||
assert {"additionalProperties": True, "type": "object"} in tool_icon_schema["anyOf"]
|
||||
assert "ToolIconResponse" not in schemas
|
||||
|
||||
plugin_versions = schemas["PluginVersionsResponse"]["properties"]["versions"]
|
||||
assert plugin_versions["additionalProperties"]["anyOf"][0]["$ref"] == "#/components/schemas/LatestPluginCache"
|
||||
|
||||
Reference in New Issue
Block a user