Skip to main content
Join the official 2019 Python Developers SurveyStart the survey!

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):
        self.id = id
        self.name = 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')

print(entity.to_dict())
# {"id": 1, "name": "John"}

print(entity.to_json())
# '{"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

Features

Validation:

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):
        self.name = 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
        self.name = 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
        self.name = 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 hashes

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page