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

Simple Models for Python

Project description

SimpleModel offers a simple way to handle data using classes instead of a plenty of lists and dicts.

It has simple objectives:

  • Define your fields easily (just a tuple, not dicts or instances of type classes whatever)
  • Support for field validation
  • Serialize to dict

That’s it. If you want something more complex there are plenty of libraries and frameworks that does a lot of cool stuff.

How to install

pip install pysimplemodel

How to use

from simple_model import Model
from simple_model.exceptions import ValidationError

class Person(Model):
    fields = ('name', 'age', 'gender', 'height', 'weight')
    allow_empty = ('height', 'weight')

    def validate_age(self, value):
        if 0 > value > 150:
            raise ValidationError

    def validate_gender(self, value):
        if value not in ('M', 'F'):
            raise ValidationError
>> person = Person(name='John Doe', age=18, gender='M')
'John Doe'
>> person.validate()
>> person.serialize()
{'name': 'John Doe', 'age': 18, 'gender': 'M', 'height': '', 'weight': ''}


Model values aren’t validated until the validated method is called:

>> person = Person()  # no exception
>> person.validate()
EmptyField: name field cannot be empty
>> person = Person(name='Jane Doe', age=60, gender='F')
>> person.validate()  # now it's ok!

You may change the validate method to return a boolean instead of raising an exception:

>> person = Person()
>> person.validate(raise_exception=False)
>>> person = Person(name='Jane Doe', age=60, gender='F')
>>> person.validate(raise_exception=False)


Sometimes it is necessary to clean some values of your models, this can be easily done using simple-model:

class CleanPerson(Model):
    fields = ('name', 'gender')

    def clean_name(self, value):
        return value.strip()

    def clean_gender(self, value):
        return value.upper()

>> person = CleanPerson(name='John Doe  \n', gender='m')
>>, person.gender
('John Doe  \n', 'm')
>> person.clean()
>>, person.gender
('John Doe', 'M')


Simple serialization is pretty straight-forward:

>> person = Person(name='Jane Doe', age=60, gender='F')
>> person.serialize()
{'age': 60, 'gender': 'F', 'height': None, 'name': 'Jane Doe', 'weight': None}

You may also hide some fields from serialization by passing a list to the serialize method:

>> person.serialize(exclude_fields=('gender', 'weight'))
{'age': 60, 'height': None, 'name': 'Jane Doe'}

Simple model also supports nested models:

class SocialPerson(Model):
    fields = ('name', 'friend')

>> person = Person(name='Jane Doe', age=60, gender='F')
>> other_person = SocialPerson(name='John Doe', friend=person)
>> other_person.serialize()
{'friend': {'age': 60, 'gender': 'F', 'height': None, 'name': 'Jane Doe', 'weight': None}, 'name': 'John Doe'}

It also supports nested models as lists:

class MoreSocialPerson(Model):
    fields = ('name', 'friends')

>> person = Person(name='Jane Doe', age=60, gender='F')
>> other_person = Person(name='John Doe', age=15, gender='M')
>> social_person = MoreSocialPerson(name='Foo Bar', friends=[person, other_person])
    'name': 'Foo Bar',
    'friends': [
            'age': 60,
            'gender': 'F',
            'height': None,
            'name': 'Jane Doe',
            'weight': None
            'age': 15,
            'gender': 'M',
            'height': None,
            'name': 'John Doe',
            'weight': None

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 pysimplemodel, version 0.1.4
Filename, size File type Python version Upload date Hashes
Filename, size pysimplemodel-0.1.4.tar.gz (4.1 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