mirror of
https://github.com/kennethreitz/pydantic.git
synced 2026-06-05 23:00:18 +00:00
044fd42f4f
* working on parsers * starting parse tests * proper tests for parse * adding parse docs * tweaks and history * add test for datetime direct, fix tests * tweak docs
44 lines
1.4 KiB
Python
44 lines
1.4 KiB
Python
import pickle
|
|
from pathlib import Path
|
|
from datetime import datetime
|
|
import msgpack
|
|
from pydantic import BaseModel, ValidationError
|
|
|
|
class User(BaseModel):
|
|
id: int
|
|
name = 'John Doe'
|
|
signup_ts: datetime = None
|
|
|
|
m = User.parse_obj({'id': 123, 'name': 'James'})
|
|
print(m)
|
|
# > User id=123 name='James' signup_ts=None
|
|
|
|
try:
|
|
User.parse_obj(['not', 'a', 'dict'])
|
|
except ValidationError as e:
|
|
print(e)
|
|
# > error validating input
|
|
# > User expected dict not list (error_type=TypeError)
|
|
|
|
m = User.parse_raw('{"id": 123, "name": "James"}') # assumes json as no content type passed
|
|
print(m)
|
|
# > User id=123 name='James' signup_ts=None
|
|
|
|
msgpack_data = msgpack.packb({'id': 123, 'name': 'James', 'signup_ts': 1500000000})
|
|
m = User.parse_raw(msgpack_data, content_type='application/msgpack')
|
|
print(m)
|
|
# > User id=123 name='James' signup_ts=datetime.datetime(2017, 7, 14, 2, 40, tzinfo=datetime.timezone.utc)
|
|
|
|
|
|
pickle_data = pickle.dumps({'id': 123, 'name': 'James', 'signup_ts': datetime(2017, 7, 14)})
|
|
m = User.parse_raw(pickle_data, content_type='application/pickle', allow_pickle=True)
|
|
print(m)
|
|
# > User id=123 name='James' signup_ts=datetime.datetime(2017, 7, 14, 0, 0)
|
|
|
|
|
|
Path('/tmp/data.mp').write_bytes(msgpack_data)
|
|
# data.json: {"id": 123, "name": "James"}
|
|
m = User.parse_file('/tmp/data.mp')
|
|
print(m)
|
|
# > User id=123 name='James' signup_ts=datetime.datetime(2017, 7, 14, 2, 40, tzinfo=datetime.timezone.utc)
|