Skip to content

Commit a0a1bde

Browse files
authored
Update capability plugin config validation (#1219)
1 parent 9251a5d commit a0a1bde

2 files changed

Lines changed: 12 additions & 3 deletions

File tree

.schemas/plugin.schema.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
"plugin": {
1212
"type": "object",
1313
"description": "Plugin metadata",
14-
"required": ["summary", "version", "description", "author", "tags", "database"],
14+
"required": ["summary", "version", "description", "author", "tags"],
1515
"additionalProperties": false,
1616
"x-tombi-table-keys-order": "schema",
1717
"properties": {
@@ -55,7 +55,7 @@
5555
"database": {
5656
"type": "array",
5757
"minItems": 1,
58-
"description": "Supported databases",
58+
"description": "Supported databases. Required for app-level and extend-level plugins, optional for capability-level plugins without models.",
5959
"items": {
6060
"type": "string",
6161
"enum": ["mysql", "postgresql"]

backend/plugin/validator.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,12 @@ def validate_depends_on(cls, v: list[str]) -> list[str]:
6969
return v
7070

7171

72+
class CapabilityPluginInfoSchema(PluginInfoSchema):
73+
"""能力型插件信息模型"""
74+
75+
database: list[str] = Field(default_factory=list, description='数据库支持')
76+
77+
7278
class AppPluginAppSchema(BaseModel):
7379
"""应用级插件 app 配置模型"""
7480

@@ -168,7 +174,7 @@ class CapabilityPluginConfigSchema(BaseModel):
168174

169175
model_config = ConfigDict(extra='forbid')
170176

171-
plugin: PluginInfoSchema = Field(..., description='插件信息')
177+
plugin: CapabilityPluginInfoSchema = Field(..., description='插件信息')
172178
settings: dict[str, Any] = Field(default_factory=dict, description='配置项')
173179

174180
@field_validator('settings')
@@ -220,6 +226,9 @@ def validate_plugin_config(plugin_name: str, config: dict[str, Any]) -> PluginLe
220226
plugin_dir = Path(PLUGIN_DIR) / plugin_name
221227
model_dir = plugin_dir / 'model'
222228
if model_dir.is_dir():
229+
if not config['plugin'].get('database'):
230+
raise PluginConfigError(f'插件 {plugin_name} 包含 model 目录时必须声明支持的数据库')
231+
223232
sql_dir = plugin_dir / 'sql'
224233
supported_db_types = []
225234
missing_details = []

0 commit comments

Comments
 (0)