fields.Model se adiciona __default_set__ para remplaza comportamiento de asignacion directa
FossilOrigin-Name: 436c5483cf534c8d457fb403302e511e7aad4b220d66569612f7ceb2da8d8cf8
This commit is contained in:
		| @@ -31,6 +31,12 @@ class ModelBase(object, metaclass=ModelMeta): | |||||||
|     def __before_xml__(self): |     def __before_xml__(self): | ||||||
|         pass |         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): |     def _hook_before_xml(self): | ||||||
|         self.__before_xml__() |         self.__before_xml__() | ||||||
|         for field in self._fields.values(): |         for field in self._fields.values(): | ||||||
|   | |||||||
| @@ -29,7 +29,7 @@ class Many2One(Field): | |||||||
|         if callable(setter): |         if callable(setter): | ||||||
|             setter(inst_model, value) |             setter(inst_model, value) | ||||||
|         else: |         else: | ||||||
|             inst_model._text = str(value) |             inst_model._set_content(value) | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
| @@ -14,7 +14,7 @@ class Model(Field): | |||||||
|  |  | ||||||
|     def __set__(self, inst, value): |     def __set__(self, inst, value): | ||||||
|         obj = self._create_model(inst) |         obj = self._create_model(inst) | ||||||
|         obj._text = str(value) |         obj._set_content(value) | ||||||
|  |  | ||||||
|     def _create_model(self, inst): |     def _create_model(self, inst): | ||||||
|         try: |         try: | ||||||
|   | |||||||
| @@ -272,3 +272,19 @@ def test_field_function_only_setter(): | |||||||
|     person.password = 'calculate' |     person.password = 'calculate' | ||||||
|     assert '<Person hash="calculate+2"/>' == person.to_xml() |     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() | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user