Dirty models for python 3
http://dirty-models.readthedocs.org
- Python 3 package.
- Easy to create a model.
- Non destructive modifications.
- Non false positive modifications.
- Able to restore original data for each field or whole model.
- Access to original data.
- Read only fields.
- Alias for fields.
- Custom getters and setters for each fields.
- Automatic cast value.
- Easy import from/export to dict.
- Basic field type implemented.
- Multi type fields.
- Default values for each field or whole model.
- HashMap model. It could be used instead of DynamicModel.
- FastDynamicModel. It could be used instead of DynamicModel. Same behavior, better performance.
- Pickable models.
- Datetime fields can use any datetime format using parser and formatter functions.
- No database dependent.
- Auto documentation using https://github.com/alfred82santa/dirty-models-sphinx
- Opensource (BSD License)
- Improved model field autoreference.
class ExampleModel(BaseModel):
model_field = ModelField() # Field with a ExampleModel
array_of_model = ArrayField(field_type=ModelField()) # Array of ExampleModels
- Added default value for fields.
class ExampleModel(BaseModel):
integer_field = IntegerField(default=1)
model = ExampleModel()
assert model.integer_field is 1
- Added default values at model level. Inherit default values could be override on new model classes.
class InheritExampleModel(ExampleModel):
_default_data = {'integer_field': 2}
model = InheritExampleModel()
assert model.integer_field is 2
- Added multi type fields.
class ExampleModel(BaseModel):
multi_field = MultiTypeField(field_types=[IntegerField(), StringField()])
model = ExampleModel()
model.multi_field = 2
assert model.multi_field is 2
model.multi_field = 'foo'
assert model.multi_field is 'foo'
- Fixex model structure.
- Makefile helpers.
- Added a easy way to get model structure. It will be used by autodoc libraries as sphinx or json-schema.
- Added autolist parameter to ArrayField. It allows to assign a single item to a list field,
so it will be converted to a list with this value.
class ExampleModel(BaseModel):
array_field = ArrayField(field_type=StringField(), autolist=True)
model = ExampleModel()
model.array_field = 'foo'
assert model.array_field[0] is 'foo'
$ pip install dirty-models
- Getter and setter feature needs refactor to be able to use as decorators.
- DynamicModel is too strange. I don't trust in it. Try to use HashMapModel or FastDynamicModel.
from dirty_models.models import BaseModel
from dirty_models.fields import StringField, IntegerField
class FooBarModel(BaseModel):
foo = IntegerField()
bar = StringField(name="real_bar")
alias_field = IntegerField(alias=['alias1', 'alias2'])
fb = FooBarModel()
fb.foo = 2
assert fb.foo is 2
fb.bar = 'wow'
assert fb.bar is 'wow'
assert fb.real_bar is 'wow'
fb.alias_field = 3
assert fb.alias_field is 3
assert fb.alias1 is fb.alias_field
assert fb.alias2 is fb.alias_field
Note
Look at tests for more examples