Skip to main content

Simple Models for Python

Project description

https://travis-ci.org/lamenezes/simple-model.svg?branch=master https://coveralls.io/repos/github/lamenezes/simple-model/badge.svg?branch=master https://badge.fury.io/py/pysimplemodel.svg

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

  • Convert 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', 'height', 'weight')
    allow_empty = ('height', 'weight')

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

    def validate_height(self, value):
        if value <= 0:
            raise ValidationError
>> person = Person(name='John Doe', age=18)
>> person.name
'John Doe'
>> person.validate()
>> dict(person)
{'name': 'John Doe', 'age': 18, 'height': '', 'weight': ''}

Validation

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)
>> 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)
False
>>> person = Person(name='Jane Doe', age=60)
>>> person.validate(raise_exception=False)
True

Cleaning

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

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

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

    def clean_age(self, value):
        return int(value)

>> person = CleanPerson(name='John Doe  \n', age='10')
>> person.name, person.age
('John Doe  \n', '10')
>> person.clean()
>> person.name, person.age
('John Doe', 10)

Conversion to Dict

To convert to dict is pretty straight-forward task:

>> person = Person(name='Jane Doe', age=60)
>> dict(person)
{'age': 60, 'height': None, 'name': 'Jane Doe', 'weight': None}

Simple model also supports dict conversion of nested models:

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

>> person = Person(name='Jane Doe', age=60)
>> other_person = SocialPerson(name='John Doe', friend=person)
>> dict(other_person)
{'friend': {'age': 60, '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)
>> other_person = Person(name='John Doe', age=15)
>> social_person = MoreSocialPerson(name='Foo Bar', friends=[person, other_person])
{
    'name': 'Foo Bar',
    'friends': [
        {
            'age': 60,
            'height': None,
            'name': 'Jane Doe',
            'weight': None
        },
        {
            'age': 15,
            '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.

Source Distribution

pysimplemodel-0.8.5.tar.gz (4.5 kB view details)

Uploaded Source

File details

Details for the file pysimplemodel-0.8.5.tar.gz.

File metadata

File hashes

Hashes for pysimplemodel-0.8.5.tar.gz
Algorithm Hash digest
SHA256 7d2478fb3fba0d890baa57a6db7afe3ed240c1d376bfc7819735d8e037b07be1
MD5 e7e67cd00b2479926b013b7e2c1d51e3
BLAKE2b-256 5590763f2620269b5f18442445538383e0f2d4eab2e87bb6b1701dea9a2abfae

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page