se adiciona archivo faltante
FossilOrigin-Name: 9b0c4d69d898ddbcd9279b3055e72df525feaefb0d46700dc6c019acdba01e80
This commit is contained in:
		
							
								
								
									
										24
									
								
								facho/model/fields/function.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								facho/model/fields/function.py
									
									
									
									
									
										Normal file
									
								
							| @@ -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) | ||||||
| @@ -217,13 +217,15 @@ def test_field_function_with_model(): | |||||||
|     class Person(facho.model.Model): |     class Person(facho.model.Model): | ||||||
|         __name__ = 'Person' |         __name__ = 'Person' | ||||||
|  |  | ||||||
|         hash = fields.Function('get_hash', field=fields.Model(Hash)) |         hash = fields.Function('get_hash', field=Hash) | ||||||
|  |  | ||||||
|         def get_hash(self, name, field): |         def get_hash(self, name, field): | ||||||
|             field.id = 'calculate' |             field.id = 'calculate' | ||||||
|  |             return field | ||||||
|          |          | ||||||
|     person = Person() |     person = Person() | ||||||
|     assert '<Person><Hash id="calculate"/></Person>' |     assert person.hash.id == 'calculate' | ||||||
|  |     assert '<Person/>' | ||||||
|  |  | ||||||
| def test_field_function(): | def test_field_function(): | ||||||
|     class Person(facho.model.Model): |     class Person(facho.model.Model): | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user