Skip to content

Commit

Permalink
Merge pull request #113 from alfred82santa/fix/multitype-creation
Browse files Browse the repository at this point in the history
Fix Multitype on creation mode and fixes
  • Loading branch information
alfred82santa committed Apr 16, 2020
2 parents 8e78fc4 + 2d6b4ac commit 4233faf
Show file tree
Hide file tree
Showing 6 changed files with 38 additions and 6 deletions.
10 changes: 10 additions & 0 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,16 @@ Features
Changelog
---------

Version 0.12.1
--------------

* Fix :class:`~dirty_models.fields.MultiFieldType` on creation mode.

* Fix :class:`~dirty_models.utils.BaseModelFormatterIter` to be aware about override access modes.

* Exposed all useful classes on package root.


Version 0.12.0
--------------

Expand Down
2 changes: 1 addition & 1 deletion dirty_models/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,4 @@
from .utils import *
from .base import *

__version__ = '0.12.0'
__version__ = '0.12.1'
9 changes: 7 additions & 2 deletions dirty_models/fields.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@
from .base import AccessMode, Creating
from .model_types import ListModel

__all__ = ['IntegerField', 'FloatField', 'BooleanField', 'StringField', 'StringIdField',
__all__ = ['IntegerField', 'FloatField', 'BooleanField', 'StringField', 'StringIdField', 'DateTimeBaseField',
'TimeField', 'DateField', 'DateTimeField', 'TimedeltaField', 'ModelField', 'ArrayField',
'HashMapField', 'BlobField', 'MultiTypeField', 'EnumField']
'HashMapField', 'BlobField', 'MultiTypeField', 'EnumField', 'BytesField', 'BaseField']


class BaseField:
Expand Down Expand Up @@ -896,6 +896,11 @@ def convert_value(self, value):
if ft.can_use_value(value):
return ft.convert_value(value)

def convert_value_creating(self, value):
for ft in self._field_types:
if ft.can_use_value(value):
return ft.convert_value_creating(value)

def check_value(self, value):
for ft in self._field_types:
if ft.check_value(value):
Expand Down
2 changes: 1 addition & 1 deletion dirty_models/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
StringField
from .model_types import ListModel

__all__ = ['BaseModel', 'DynamicModel', 'FastDynamicModel', 'HashMapModel']
__all__ = ['BaseModel', 'DynamicModel', 'FastDynamicModel', 'HashMapModel', 'DirtyModelMeta', 'CamelCaseMeta']


class DirtyModelMeta(type):
Expand Down
14 changes: 13 additions & 1 deletion dirty_models/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -92,12 +92,24 @@ class BaseModelFormatterIter(BaseModelIterator, BaseFormatterIter):

def __iter__(self):
for name, field, value in super(BaseModelFormatterIter, self).__iter__():
if field.access_mode == AccessMode.HIDDEN:
if self.must_to_skip(name, field, value):
continue

yield name, self.format_field(field,
self.model.get_field_value(name))

def must_to_skip(self, name, field, value):
am = field.access_mode
try:
am = self.model.__override_field_access_modes__[name]
except KeyError:
pass

if am == AccessMode.HIDDEN:
return True

return False

def format_field(self, field, value):
if isinstance(field, MultiTypeField):
return self.format_field(field.get_field_type_by_value(value), value)
Expand Down
7 changes: 6 additions & 1 deletion tests/dirty_models/tests_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -2300,6 +2300,8 @@ class ModelCreation(BaseModel):
testFieldList = ArrayField(access_mode=AccessMode.WRITABLE_ONLY_ON_CREATION, field_type=IntegerField())
testFieldModelList = ArrayField(access_mode=AccessMode.WRITABLE_ONLY_ON_CREATION,
field_type=ModelField())
testFieldMulti = MultiTypeField(field_types=[IntegerField(), StringField()],
access_mode=AccessMode.WRITABLE_ONLY_ON_CREATION)


class TestModelCreation(TestCase):
Expand All @@ -2313,7 +2315,8 @@ def test_ignore_read_only_on_creating_new_model(self):
'testFieldModelList': [{'testField1': 61, 'testField2': 51, 'testField3': 41,
'testFieldList': [5, 6, 3, 66, 42, 22]},
{'testField1': 61, 'testField2': 51, 'testField3': 41,
'testFieldList': [5, 6, 3, 66, 42, 22]}]
'testFieldList': [5, 6, 3, 66, 42, 22]}],
'testFieldMulti': 1.1
}

model = ModelCreation.create_new_model(data)
Expand All @@ -2329,6 +2332,8 @@ def test_ignore_read_only_on_creating_new_model(self):
self.assertIsNone(model.testFieldModelList[0].testField1)
self.assertIsNone(model.testFieldModelList[0].testField3)

self.assertEquals(model.testFieldMulti, 1)


class TestOverrideFieldModeAccessModel(TestCase):

Expand Down

0 comments on commit 4233faf

Please sign in to comment.