fields.Model se adiciona __default_set__ para remplaza comportamiento de asignacion directa

FossilOrigin-Name: 436c5483cf534c8d457fb403302e511e7aad4b220d66569612f7ceb2da8d8cf8
This commit is contained in:
bit4bit 2021-06-24 01:37:05 +00:00
parent a015a9361b
commit 58e7387292
4 changed files with 24 additions and 2 deletions

View File

@ -31,6 +31,12 @@ class ModelBase(object, metaclass=ModelMeta):
def __before_xml__(self):
pass
def __default_set__(self, value):
return str(value)
def _set_content(self, value):
self._text = str(self.__default_set__(value))
def _hook_before_xml(self):
self.__before_xml__()
for field in self._fields.values():

View File

@ -29,7 +29,7 @@ class Many2One(Field):
if callable(setter):
setter(inst_model, value)
else:
inst_model._text = str(value)
inst_model._set_content(value)

View File

@ -14,7 +14,7 @@ class Model(Field):
def __set__(self, inst, value):
obj = self._create_model(inst)
obj._text = str(value)
obj._set_content(value)
def _create_model(self, inst):
try:

View File

@ -272,3 +272,19 @@ def test_field_function_only_setter():
person.password = 'calculate'
assert '<Person hash="calculate+2"/>' == person.to_xml()
def test_model_set_default_setter():
class Hash(facho.model.Model):
__name__ = 'Hash'
def __default_set__(self, value):
return "%s+3" % (value)
class Person(facho.model.Model):
__name__ = 'Person'
hash = fields.Many2One(Hash)
person = Person()
person.hash = 'hola'
assert '<Person><Hash>hola+3</Hash></Person>' == person.to_xml()