Skip to main content

Class models with validation and serialization

Project description

Inspired by Marshmallow Models and by ORM libraries.

The Toasted Marshmallow Models package makes it easy to define serializable classes based on the ultra fast serialization that Toasted Marshmallow provides.

Installing toastedmarshmallow-models

pip install toastedmarshmallow-models

Using Toasted Marshmallow Models

Using Toasted Marshmallow Models in an existing class requires your class to inherit the Model class and specify the relevant Marshmallow fields. For example:

from marshmallow import fields
from toastedmarshmallow_models import Model

class Entity(Model):  # Inherit Model
    # Define Marshmallow fields
    id = fields.Integer()
    name = fields.String()

    def __init__(self, id, name): = id = name

How it works

The Toasted Marshmallow Models package makes it easy to dump and load models.

Dump methods:

entity = Entity(id=1, name='John Doe')

# {"id": 1, "name": "John"}

# '{"id": 1, "name": "John"}'

Load Methods:

entity = Entity.from_dict({"id": 1, "name": "John"}) # creates an Entity instance

entity = Entity.from_json('{"id": 1, "name": "John"}') # creates an Entity instance



entity = Entity(id='i-am-not-a-valid-int', name='John Doe')

entity.validate()  # throws marshmallow.ValidationError if not valid

Get validation errors:

entity = Entity(id='i-am-not-a-valid-int', name='John Doe')

entity.get_validation_errors()  # returns dict(id=['Not a valid integer.'])

Nested Models:

class ChildEntity(Model):
    name = fields.String()

    def __init__(self, name: str): = name

class ParentEntity(Model):
    name = fields.String()
    # Use NestedModel to define parent-child relationships
    children = fields.Nested(NestedModel(ChildEntity), many=True)

    def __init__(self, name: str, children: List[ChildEntity]):
        self.children = children = name

Self Referencing Model:

class Employee(Model):
    name = fields.String()
    # Use SelfReferencingModel to define self-referencing relationships
    subordinates = fields.Nested(SelfReferencingModel('Employee'), many=True, allow_none=True)

    def __init__(self, name: str, subordinates: List['Employee'] = None):
        self.subordinates = subordinates = name

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for toastedmarshmallow-models, version 1.0.4
Filename, size File type Python version Upload date Hashes
Filename, size toastedmarshmallow-models-1.0.4.tar.gz (3.6 kB) File type Source Python version None Upload date Hashes View

Supported by

Pingdom Pingdom Monitoring Google Google Object Storage and Download Analytics Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page