forked from pythonitalia/pythonit-toolkit
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbuilder.py
More file actions
28 lines (20 loc) · 854 Bytes
/
builder.py
File metadata and controls
28 lines (20 loc) · 854 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
from dataclasses import make_dataclass
import pydantic
import strawberry
from strawberry.field import StrawberryField
from .types import FieldError
def create_validation_error_type(prefix: str, type_: StrawberryField):
@classmethod
def from_validation_error(cls, validation_error: pydantic.ValidationError):
errors = validation_error.errors()
payload = {}
for error in errors:
field = error["loc"][0]
message = error["msg"]
error_type = error["type"]
errors = payload.setdefault(field, [])
errors.append(FieldError(message=message, type=error_type))
return cls(errors=type_(**payload))
cls = make_dataclass(f"{prefix}ValidationError", [("errors", type_)])
cls.from_validation_error = from_validation_error
return strawberry.type(cls)