class Pets(BaseModel):
__root__: List[str]
class Controller(HTTPMethodView):
@validate(json=Pets)
async def post(self, req: request.Request, body: Pets):
return json({})
Expected behavior
sanic_ext.exceptions.ValidationError: Invalid request body: EncryptVO. Error: ModelMetaclass object argument after ** must be a mapping, not list
Additional context
how to fix:
extra/validation/validators.py line 33
[old]
def _validate_instance(model, body, allow_coerce):
data = clean_data(model, body) if allow_coerce else body
return model(**data)
[new]
def _validate_instance(model, body, allow_coerce):
data = clean_data(model, body) if allow_coerce else body
from sanic_ext.utils.typing import is_pydantic
if is_pydantic(model) and isinstance(body,list):
return model.parse_obj(body)
return model(**data)
2.extensions/openapi/types.py line 301
[old]
if is_pydantic(value):
try:
value = value.__pydantic_model__
except AttributeError:
...
extra = value.schema()["properties"]
[new]
if is_pydantic(value):
try:
value = value.__pydantic_model__
except AttributeError:
...
value_schema = value.schema()
if "properties" in value_schema:
extra = value_schema["properties"]
else:
extra = value_schema
Environment (please complete the following information):
Describe the bug ex: curl --location --request POST 'http://127.0.0.1:8080/testarray' \ --header 'Content-Type: application/json' \ --data-raw '[ "dog","cat"]' the pydantic example: https://docs.pydantic.dev/latest/usage/models/ Custom Root Types
Expected behavior sanic_ext.exceptions.ValidationError: Invalid request body: EncryptVO. Error: ModelMetaclass object argument after ** must be a mapping, not list
Additional context how to fix:
[new]
2.extensions/openapi/types.py line 301 [old]
[new]