Skip to content

Instantly share code, notes, and snippets.

@chespinoza
Last active March 1, 2021 14:09
Show Gist options
  • Save chespinoza/4823ec982e9a9fb9dd89aa25e80e84af to your computer and use it in GitHub Desktop.
Save chespinoza/4823ec982e9a9fb9dd89aa25e80e84af to your computer and use it in GitHub Desktop.
from validate import dataclass, field, types, ValidationError
@dataclass
class User:
name: str
surname: str
age: int
email: str = field(validate=types.Email)
payload = {
"name": "Peter",
"surname": "Parker",
"age": 12,
"email": "[email protected]"
}
try:
User().validate(payload)
except ValidationError as e:
print(e.messages)
try:
user = User().load(payload)
user_dict = user.to_dict()
user_json = user.to_json()
except ValidationError as e:
print(e.messages)
from typing import Dict, Optional, Union, Literal
from validate import dataclass, field, types, ValidationError
@dataclass
class BaseSchema:
other_data: Optional[Dict]
@dataclass
class Pagination:
limit: int = field(validate(range(min=1, max=1000)))
offset: int = field(validate(range(min=0)))
@dataclass
class DictFilter:
key: str
value: str
@dataclass
class UserFilter:
id: int
name: str
surname: str
email: types.Email
@dataclass
class TicketFilter:
id: int
client_id: int
status: Literal["new", "in progress"]
created_by: int
created_at: types.UtcDateTime
@dataclass(base=BaseSchema)
class Parameters:
pagination: Optional[Pagination]
filter: Optional[Union[DictFilter, UserFilter, TicketFilter]]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment