se adiciona @fields.on_change para ejecutar funcion cuando se cambian los varoles de algun attributo

FossilOrigin-Name: bee19b201f8c1a6b972c2a9abfe5fb57a558a67be6ecddce4f7f07b5b6980215
This commit is contained in:
bit4bit
2021-06-25 23:21:04 +00:00
parent b6219bd171
commit c694603505
7 changed files with 77 additions and 2 deletions

View File

@@ -6,3 +6,15 @@ from .virtual import Virtual
from .field import Field
__all__ = [Attribute, Many2One, Model, Virtual, Field]
def on_change(fields):
from functools import wraps
def decorator(func):
setattr(func, 'on_changes', fields)
@wraps(func)
def wrapper(self, *arg, **kwargs):
return func(self, *arg, **kwargs)
return wrapper
return decorator

View File

@@ -16,4 +16,6 @@ class Attribute(Field):
def __set__(self, inst, value):
assert self.name is not None
self.value = value
self._changed_field(inst, self.name, value)
inst._set_attribute(self.name, self.attribute, value)

View File

@@ -39,3 +39,8 @@ class Field:
self._set_namespace(obj, self.namespace, inst.__namespace__)
inst._fields[self.name] = obj
return obj
def _changed_field(self, inst, name, value):
for fun in inst._on_change_fields[name]:
getattr(inst, fun)(name, value)

View File

@@ -31,4 +31,5 @@ class Function(Field):
def __set__(self, inst, value):
inst._set_field(self.name, self.field)
self._changed_field(inst, self.name, value)
self.field.__set__(inst, value)

View File

@@ -25,6 +25,7 @@ class Many2One(Field):
setter(inst_model, value)
else:
inst_model._set_content(value)
self._changed_field(inst, self.name, value)