Marshmallow-Peewee
Marshmallow-Peewee -- Peewee ORM integration with the Marshmallow (de)serialization library.
Requirements
- python >= 3.9
Installation
marshmallow-peewee should be installed using pip:
$ pip install marshmallow-peewee
Quickstart
import peewee as pw
class Role(pw.Model):
name = pw.CharField(255, default='user')
class User(pw.Model):
created = pw.DateTimeField(default=dt.datetime.now())
name = pw.CharField(255)
title = pw.CharField(127, null=True)
active = pw.BooleanField(default=True)
rating = pw.IntegerField(default=0)
role = pw.ForeignKeyField(Role)
from marshmallow_peewee import ModelSchema
class UserSchema(ModelSchema):
class Meta:
model = User
role = Role.create()
user = User.create(name='Mike', role=role)
result = UserSchema().dump(user)
print(result)
# {'active': True,
# 'created': '2016-03-29T15:27:18.600034+00:00',
# 'id': 1,
# 'name': 'Mike',
# 'rating': 0,
# 'role': 1,
# 'title': None}
result = UserSchema().load(result)
assert isinstance(result, User)
assert result.name == 'Mike'
from marshmallow_peewee import Related
class UserSchema(ModelSchema):
role = Related()
class Meta:
model = User
result = UserSchema().dump(user)
print(result)
# {'active': True,
# 'created': '2016-03-29T15:30:32.767483+00:00',
# 'id': 1,
# 'name': 'Mike',
# 'rating': 0,
# 'role': {'id': 5, 'name': 'user'},
# 'title': None}
result = UserSchema().load(result)
assert isinstance(result, User)
assert isinstance(result.role, Role)
Usage
import peewee as pw
class Role(pw.Model):
name = pw.CharField(255, default='user')
class User(pw.Model):
created = pw.DateTimeField(default=dt.datetime.now())
name = pw.CharField(255)
title = pw.CharField(127, null=True)
active = pw.BooleanField(default=True)
rating = pw.IntegerField(default=0)
role = pw.ForeignKeyField(Role)
from marshmallow_peewee import ModelSchema
class UserSchema(ModelSchema):
class Meta:
# model: Bind peewee.Model to the Schema
model = User
# model_converter: Use custom model_converter
# model_converter = marshmallow_peewee.DefaultConverter
# dump_only_pk: Primary key is dump only
# dump_only_pk = True
# string_keys: Convert keys to strings
# string_keys = True
# id_keys: serialize (and deserialize) ForeignKey fields with _id suffix
# id_keys = False
You may set global options for marshmallow-peewee:
from marshmallow_peewee import setup
setup(id_keys=True, string_keys=False) # Set options for all schemas
class UserSchema(ModelSchema):
# ...
Customize fields convertion:
from marshmallow_peewee import DefaultConverter
# Customize global
# Serialize boolean as string
DefaultConverter.register(peewee.BooleanField, marshmallow.fields.String)
# Alternative method
@DefaultConverter.register(peewee.BooleanField)
def build_field(field: peewee.Field, opts, **field_params):
return marshmallow.fields.String(**params)
# Customize only for a scheme
class CustomConverter(DefaultConverter):
pass
CustomConverter.register(...)
class CustomSchema(ModelSchema): # may be inherited
class Meta:
model_converter = CustomConverter
Bug tracker
If you have any suggestions, bug reports or annoyances please report them to the issue tracker at https://github.com/klen/marshmallow-peewee/issues
Contributing
Development of the project happens at: https://github.com/klen/marshmallow-peewee
License
Licensed under a MIT License
Release files for marshmallow-peewee 5.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| marshmallow_peewee-5.1.0.tar.gz | 6.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| marshmallow_peewee-5.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 14.8 kB
Release files / marshmallow_peewee-5.1.0.tar.gz
| Download URL | marshmallow_peewee-5.1.0.tar.gz |
|---|---|
| Size | 6.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c349aec724f7f0acfa6741ff6d003b28c6b7c5b6a3db1df2e3d2e3d1a40adf76
|
|
BLAKE2b-256 checksum How to use checksums |
92b1954927f47b28d6566eaf231b45ba95bf373f9cf7e909f87e1bc9a5480f89
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / marshmallow_peewee-5.1.0-py3-none-any.whl
| Download URL | marshmallow_peewee-5.1.0-py3-none-any.whl |
|---|---|
| Size | 8.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
98ed498362afd240ec758c691072e1a3e8bc49d364ba694ab9ed3998d3c64bca
|
|
BLAKE2b-256 checksum How to use checksums |
b3486d9f6b0c5093a241d9eccdb2d57510a34dec1826c0cf24c972e5ada3d878
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|