se separa responsabilidad de fields.Function
FossilOrigin-Name: 4d5daa47a75a0e283e86bf992126bf60f3a8a14287e9acc437d5f2f3eca43150
This commit is contained in:
		| @@ -2,5 +2,6 @@ from .attribute import Attribute | ||||
| from .many2one import Many2One | ||||
| from .model import Model | ||||
| from .function import Function | ||||
| from .virtual import Virtual | ||||
|  | ||||
| __all__ = [Attribute, Many2One, Model] | ||||
| __all__ = [Attribute, Many2One, Model, Virtual] | ||||
|   | ||||
| @@ -1,17 +1,18 @@ | ||||
| from .field import Field | ||||
|  | ||||
| class Attribute(Field): | ||||
|     def __init__(self, tag): | ||||
|     def __init__(self, tag, default=None): | ||||
|         self.tag = tag | ||||
|    | ||||
|         self.value = default | ||||
|  | ||||
|     def __get__(self, inst, cls): | ||||
|         if inst is None: | ||||
|             return self | ||||
|  | ||||
|         assert self.name is not None | ||||
|         (tag, value) =  inst._xml_attributes[self.name] | ||||
|         return value | ||||
|         return self.value | ||||
|  | ||||
|     def __set__(self, inst, value): | ||||
|         assert self.name is not None | ||||
|         self.value = value | ||||
|         inst._xml_attributes[self.name] = (self.tag, value) | ||||
|   | ||||
| @@ -2,29 +2,24 @@ from .field import Field | ||||
| from .model import Model | ||||
|  | ||||
| class Function(Field): | ||||
|     def __init__(self, getter=None, setter=None, field=None): | ||||
|     def __init__(self, field, getter=None): | ||||
|         self.field = field | ||||
|         self.getter = getter | ||||
|         self.setter = setter | ||||
|  | ||||
|     def __get__(self, inst, cls): | ||||
|         if inst is None: | ||||
|             return self | ||||
|         assert self.name is not None | ||||
|  | ||||
|         if self.getter is None and self.field is None: | ||||
|             return None | ||||
|         # si se indica `field` se adiciona | ||||
|         # como campo del modelo, esto es | ||||
|         # que se serializa a xml | ||||
|         inst._fields[self.name] = self.field | ||||
|  | ||||
|         if self.getter is None and self.field is not None: | ||||
|             return Model(self.field) | ||||
|         if self.getter is not None: | ||||
|             value = self._call(inst, self.getter, self.name, self.field) | ||||
|  | ||||
|         if self.field is None: | ||||
|             return self._call(inst, self.getter, self.name) | ||||
|         else: | ||||
|             obj = Model(self.field) | ||||
|             return self._call(inst, self.getter, self.name, obj) | ||||
|             if value is not None: | ||||
|                 self.field.__set__(inst, value) | ||||
|  | ||||
|     def __set__(self, inst, value): | ||||
|         if self.setter is None: | ||||
|             return super().__set__(self.name, value) | ||||
|         self._call(inst, self.setter, self.name, value) | ||||
|         return self.field | ||||
|   | ||||
		Reference in New Issue
	
	Block a user