55
66from pydantic import BaseModel , Field , root_validator , validator
77from pydantic .color import Color
8- from pydantic .errors import JsonError , ListError
8+ from pydantic .errors import JsonError , SetError
99
1010if TYPE_CHECKING :
1111 from pydantic .error_wrappers import ErrorDict as PydanticErrorDict
@@ -19,6 +19,7 @@ class ErrorDict(PydanticErrorDict, total=False):
1919 PLUGIN_VALID_TYPE ,
2020 PYPI_PACKAGE_NAME_PATTERN ,
2121 PYTHON_MODULE_NAME_REGEX ,
22+ VALIDATION_CONTEXT ,
2223)
2324from .errors import (
2425 DuplicationError ,
@@ -56,8 +57,6 @@ class PyPIMixin(BaseModel):
5657 module_name : str
5758 project_link : str
5859
59- previous_data : list [dict [str , Any ]]
60-
6160 @validator ("module_name" , pre = True )
6261 def module_name_validator (cls , v : str ) -> str :
6362 if not PYTHON_MODULE_NAME_REGEX .match (v ):
@@ -78,7 +77,7 @@ def prevent_duplication(cls, values: dict[str, Any]) -> dict[str, Any]:
7877 module_name = values .get ("module_name" )
7978 project_link = values .get ("project_link" )
8079
81- data = values .get ("previous_data" )
80+ data = VALIDATION_CONTEXT . get () .get ("previous_data" )
8281 if data is None :
8382 raise ValueError ("未获取到数据列表" )
8483
@@ -155,8 +154,9 @@ def type_validator(cls, v: str) -> str:
155154 def supported_adapters_validator (
156155 cls , v : str | list [str ] | None
157156 ) -> list [str ] | None :
157+ skip_plugin_test = VALIDATION_CONTEXT .get ().get ("skip_plugin_test" )
158158 # 如果是从 issue 中获取的数据,需要先解码
159- if isinstance (v , str ):
159+ if skip_plugin_test and isinstance (v , str ):
160160 try :
161161 v = json .loads (v )
162162 except json .JSONDecodeError :
@@ -166,8 +166,8 @@ def supported_adapters_validator(
166166 if v is None :
167167 return None
168168
169- if not isinstance (v , list ):
170- raise ListError ()
169+ if not isinstance (v , ( list , set ) ):
170+ raise SetError ()
171171
172172 supported_adapters = {resolve_adapter_name (x ) for x in v }
173173 store_adapters = get_adapters ()
0 commit comments