From 58e73872924c08c0401308f52e800c27ab8db69d Mon Sep 17 00:00:00 2001 From: bit4bit Date: Thu, 24 Jun 2021 01:37:05 +0000 Subject: [PATCH] fields.Model se adiciona __default_set__ para remplaza comportamiento de asignacion directa FossilOrigin-Name: 436c5483cf534c8d457fb403302e511e7aad4b220d66569612f7ceb2da8d8cf8 --- facho/model/__init__.py | 6 ++++++ facho/model/fields/many2one.py | 2 +- facho/model/fields/model.py | 2 +- tests/test_model.py | 16 ++++++++++++++++ 4 files changed, 24 insertions(+), 2 deletions(-) diff --git a/facho/model/__init__.py b/facho/model/__init__.py index fe8cc66..13d7c13 100644 --- a/facho/model/__init__.py +++ b/facho/model/__init__.py @@ -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(): diff --git a/facho/model/fields/many2one.py b/facho/model/fields/many2one.py index 7f5e35f..4b5caaa 100644 --- a/facho/model/fields/many2one.py +++ b/facho/model/fields/many2one.py @@ -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) diff --git a/facho/model/fields/model.py b/facho/model/fields/model.py index 073504d..9653f5a 100644 --- a/facho/model/fields/model.py +++ b/facho/model/fields/model.py @@ -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: diff --git a/tests/test_model.py b/tests/test_model.py index cfcd65c..4b1011b 100644 --- a/tests/test_model.py +++ b/tests/test_model.py @@ -272,3 +272,19 @@ def test_field_function_only_setter(): person.password = 'calculate' assert '' == 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 'hola+3' == person.to_xml()