From be894166effc13a0b2dc1993237f584a157f899c Mon Sep 17 00:00:00 2001 From: Raphael Collet Date: Wed, 8 Oct 2014 16:32:48 +0200 Subject: [PATCH] [IMP] fields: add assertions to check parameters (comodel_name, size, digits) --- openerp/fields.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/openerp/fields.py b/openerp/fields.py index 0fae78d745f..df1433087cb 100644 --- a/openerp/fields.py +++ b/openerp/fields.py @@ -25,6 +25,7 @@ from copy import copy from datetime import date, datetime from functools import partial from operator import attrgetter +from types import NoneType import logging import pytz import xmlrpclib @@ -983,6 +984,9 @@ class Float(Field): def _setup_digits(self, env): """ Setup the digits for `self` and its corresponding column """ self.digits = self._digits(env.cr) if callable(self._digits) else self._digits + if self.digits: + assert isinstance(self.digits, (tuple, list)) and len(self.digits) >= 2, \ + "Float field %s with digits %r, expecting (total, decimal)" % (self, self.digits) if self.store: column = env[self.model_name]._columns[self.name] column.digits_change(env.cr) @@ -1025,6 +1029,11 @@ class Char(_String): type = 'char' size = None + def _setup(self, env): + super(Char, self)._setup(env) + assert isinstance(self.size, (NoneType, int)), \ + "Char field %s with non-integer size %r" % (self, self.size) + _column_size = property(attrgetter('size')) _related_size = property(attrgetter('size')) _description_size = property(attrgetter('size')) @@ -1303,6 +1312,11 @@ class Reference(Selection): def __init__(self, selection=None, string=None, **kwargs): super(Reference, self).__init__(selection=selection, string=string, **kwargs) + def _setup(self, env): + super(Reference, self)._setup(env) + assert isinstance(self.size, int), \ + "Reference field %s with non-integer size %r" % (self, self.size) + _related_size = property(attrgetter('size')) _column_size = property(attrgetter('size')) @@ -1335,6 +1349,11 @@ class _Relational(Field): domain = None # domain for searching values context = None # context for searching values + def _setup(self, env): + super(_Relational, self)._setup(env) + assert self.comodel_name in env.registry, \ + "Field %s with unknown comodel_name %r" % (self, self.comodel_name) + _description_relation = property(attrgetter('comodel_name')) _description_context = property(attrgetter('context'))