Skip to main content
Help us improve PyPI by participating in user testing. All experience levels needed!

Convenient anonymous and nested models using dict literal syntax for Schematics.

Project description

Schematics Factory
==================


Inspired by [Voluptuous](https://github.com/alecthomas/voluptuous).

It's sometimes inconvenient to define
named [Schematics](https://github.com/schematics/schematics)
Models, especially when those models are deeply nested.

Example:

```
class InnerModel(Model):
inner_bool = BooleanType()


class MiddleModel(Model):
middle_int = IntType()
middle_nested = ModelType(InnerModel)


class OuterModel(Model):
outer_str = StringType()
outer_nested = ModelType(MiddleModel)


model_instance = OuterModel(input_)
model_instance.validate()
```

So, this library provides a convenient syntax for defining
deeply nested Models.

```
from schematics_factory import model

OuterModel = model({
'outer_str': StringType(),
'outer_nested': ModelType(model({
'middle_int': IntType(),
'middle_nested': ModelType(model({
'inner_bool': BooleanType()
}))
}))
})

model_instance = OuterModel(input_)
model_instance.validate()
```

The model() function can also be imported as _model_factory_.

Alternative Syntax
------------------

Schema factory arguments can also be supplied as keyword
arguments rather than a dictionary.

```
Person = model(name=StringType(), age=IntType())

person = Person(dict(name='Test', age=27))

person.validate()
```

For nested Models, a concise __nested()__ convenience function
is provided to replace ModelType(model(...)) with nested(...).
The nested() function can also be imported as _nested_model_.

```
from schematics_factory import model, nested

Person = model(name=StringType(), pet=nested(name=StringType()))

person = Person(dict(name='Test', pet=dict(name='Rover')))

person.validate()
```

Nested models can also be provided as plain dictionary literals.

```
Person = model(name=StringType(), pet=dict(name=StringType()))

person = Person(dict(name='Test', pet=dict(name='Rover')))

person.validate()
```

Or equivalently...

```
Person = model({
'name': StringType(),
'pet': {
'name': StringType()
}
})

person = Person({
'name': 'Test',
'pet': {
'name': 'Rover'
}
})

person.validate()
```


Project details


Release history Release notifications

This version
History Node

0.1.0

Download files

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

Filename, size & hash SHA256 hash help File type Python version Upload date
schematics_factory-0.1.0-py2.py3-none-any.whl (4.2 kB) Copy SHA256 hash SHA256 Wheel py2.py3 Jun 13, 2017
schematics-factory-0.1.0.tar.gz (2.9 kB) Copy SHA256 hash SHA256 Source None Jun 13, 2017

Supported by

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