Files
tryton/trytond/model/fields/function.py
T
Cédric Krier e28edc4d99 Add model.fields
Use better naming of field attributes
2009-02-03 18:58:25 +01:00

60 lines
2.3 KiB
Python

#This file is part of Tryton. The COPYRIGHT file at the top level of
#this repository contains the full copyright notices and license terms.
from trytond.model.fields.field import Field
import inspect
class Function(Field):
_type = 'float'
def __init__(self, fnct, arg=None, fnct_inv='', fnct_inv_arg=None,
type='float', fnct_search='', model_name=None, selection=None,
digits=None, relation=None, add_remove=None, **args):
super(Function, self).__init__(**args)
self.model_name = model_name
self.fnct = fnct
self.arg = arg
self.fnct_inv = fnct_inv
self.fnct_inv_arg = fnct_inv_arg
if not self.fnct_inv:
self.readonly = True
self._type = type
self.fnct_search = fnct_search
self.selection = selection
self.digits = digits
if relation:
self.model_name = relation
self.add_remove = add_remove
def search(self, cursor, user, model, name, args, context=None):
if not self.fnct_search:
return []
return getattr(model, self.fnct_search)(cursor, user, name, args,
context=context)
def get(self, cursor, user, ids, model, name, values=None, context=None):
if isinstance(name, list):
names = name
# Test is the function works with a list of names
if 'names' in inspect.getargspec(getattr(model, self.fnct))[0]:
return getattr(model, self.fnct)(cursor, user, ids, names,
self.arg, context=context)
res = {}
for name in names:
res[name] = getattr(model, self.fnct)(cursor, user, ids, name,
self.arg, context=context)
return res
else:
# Test is the function works with a list of names
if 'names' in inspect.getargspec(getattr(model, self.fnct))[0]:
name = [name]
return getattr(model, self.fnct)(cursor, user, ids, name, self.arg,
context=context)
def set(self, cursor, user, record_id, model, name, values, context=None):
if self.fnct_inv:
getattr(model, self.fnct_inv)(cursor, user, record_id, name, values,
self.fnct_inv_arg, context=context)