5
5
6
6
from pydantic import BaseModel , Field , root_validator , validator
7
7
from pydantic .color import Color
8
- from pydantic .errors import JsonError , ListError
8
+ from pydantic .errors import JsonError , SetError
9
9
10
10
if TYPE_CHECKING :
11
11
from pydantic .error_wrappers import ErrorDict as PydanticErrorDict
@@ -19,6 +19,7 @@ class ErrorDict(PydanticErrorDict, total=False):
19
19
PLUGIN_VALID_TYPE ,
20
20
PYPI_PACKAGE_NAME_PATTERN ,
21
21
PYTHON_MODULE_NAME_REGEX ,
22
+ VALIDATION_CONTEXT ,
22
23
)
23
24
from .errors import (
24
25
DuplicationError ,
@@ -56,8 +57,6 @@ class PyPIMixin(BaseModel):
56
57
module_name : str
57
58
project_link : str
58
59
59
- previous_data : list [dict [str , Any ]]
60
-
61
60
@validator ("module_name" , pre = True )
62
61
def module_name_validator (cls , v : str ) -> str :
63
62
if not PYTHON_MODULE_NAME_REGEX .match (v ):
@@ -78,7 +77,7 @@ def prevent_duplication(cls, values: dict[str, Any]) -> dict[str, Any]:
78
77
module_name = values .get ("module_name" )
79
78
project_link = values .get ("project_link" )
80
79
81
- data = values .get ("previous_data" )
80
+ data = VALIDATION_CONTEXT . get () .get ("previous_data" )
82
81
if data is None :
83
82
raise ValueError ("未获取到数据列表" )
84
83
@@ -155,8 +154,9 @@ def type_validator(cls, v: str) -> str:
155
154
def supported_adapters_validator (
156
155
cls , v : str | list [str ] | None
157
156
) -> list [str ] | None :
157
+ skip_plugin_test = VALIDATION_CONTEXT .get ().get ("skip_plugin_test" )
158
158
# 如果是从 issue 中获取的数据,需要先解码
159
- if isinstance (v , str ):
159
+ if skip_plugin_test and isinstance (v , str ):
160
160
try :
161
161
v = json .loads (v )
162
162
except json .JSONDecodeError :
@@ -166,8 +166,8 @@ def supported_adapters_validator(
166
166
if v is None :
167
167
return None
168
168
169
- if not isinstance (v , list ):
170
- raise ListError ()
169
+ if not isinstance (v , ( list , set ) ):
170
+ raise SetError ()
171
171
172
172
supported_adapters = {resolve_adapter_name (x ) for x in v }
173
173
store_adapters = get_adapters ()
0 commit comments