From 0216d0141af6ddf48bfa00a5009d3e7ee123aa1b Mon Sep 17 00:00:00 2001 From: bit4bit Date: Thu, 24 Jun 2021 01:23:51 +0000 Subject: [PATCH] se adiciona archivo faltante FossilOrigin-Name: 9b0c4d69d898ddbcd9279b3055e72df525feaefb0d46700dc6c019acdba01e80 --- facho/model/fields/function.py | 24 ++++++++++++++++++++++++ tests/test_model.py | 6 ++++-- 2 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 facho/model/fields/function.py diff --git a/facho/model/fields/function.py b/facho/model/fields/function.py new file mode 100644 index 0000000..34e3195 --- /dev/null +++ b/facho/model/fields/function.py @@ -0,0 +1,24 @@ +from .field import Field +from .model import Model + +class Function(Field): + def __init__(self, getter, setter=None, field=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.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) + + def __set__(self, inst, value): + if self.setter is None: + return super().__set__(self.name, value) + self._call(inst, self.setter, self.name, value) diff --git a/tests/test_model.py b/tests/test_model.py index a4fd540..fa92e9f 100644 --- a/tests/test_model.py +++ b/tests/test_model.py @@ -217,13 +217,15 @@ def test_field_function_with_model(): class Person(facho.model.Model): __name__ = 'Person' - hash = fields.Function('get_hash', field=fields.Model(Hash)) + hash = fields.Function('get_hash', field=Hash) def get_hash(self, name, field): field.id = 'calculate' + return field person = Person() - assert '' + assert person.hash.id == 'calculate' + assert '' def test_field_function(): class Person(facho.model.Model):