Skip to content

Latest commit

 

History

History
209 lines (144 loc) · 5.53 KB

README.rst

File metadata and controls

209 lines (144 loc) · 5.53 KB

travis-master coverall-master Documentation Status Downloads Latest Version Supported Python versions Development Status License Download format Supported Python implementations

dirty-models

Dirty models for python 3

Documentation

http://dirty-models.readthedocs.org

Features

  • 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)

Changelog

Version 0.6.1

  • Improved model field autoreference.
class ExampleModel(BaseModel):
    model_field = ModelField()  # Field with a ExampleModel
    array_of_model = ArrayField(field_type=ModelField())  # Array of ExampleModels

Version 0.6.0

  • 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'

Version 0.5.2

  • Fixex model structure.
  • Makefile helpers.

Version 0.5.1

  • Added a easy way to get model structure. It will be used by autodoc libraries as sphinx or json-schema.

Version 0.5.0

  • 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'

Installation

$ pip install dirty-models

Issues

  • 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.

Basic usage

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