[IMP] fields: add assertions to check parameters (comodel_name, size, digits)

This commit is contained in:
Raphael Collet 2014-10-08 16:32:48 +02:00
parent 36174fcc6e
commit be894166ef
1 changed files with 19 additions and 0 deletions

View File

@ -25,6 +25,7 @@ from copy import copy
from datetime import date, datetime from datetime import date, datetime
from functools import partial from functools import partial
from operator import attrgetter from operator import attrgetter
from types import NoneType
import logging import logging
import pytz import pytz
import xmlrpclib import xmlrpclib
@ -983,6 +984,9 @@ class Float(Field):
def _setup_digits(self, env): def _setup_digits(self, env):
""" Setup the digits for `self` and its corresponding column """ """ Setup the digits for `self` and its corresponding column """
self.digits = self._digits(env.cr) if callable(self._digits) else self._digits 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: if self.store:
column = env[self.model_name]._columns[self.name] column = env[self.model_name]._columns[self.name]
column.digits_change(env.cr) column.digits_change(env.cr)
@ -1025,6 +1029,11 @@ class Char(_String):
type = 'char' type = 'char'
size = None 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')) _column_size = property(attrgetter('size'))
_related_size = property(attrgetter('size')) _related_size = property(attrgetter('size'))
_description_size = property(attrgetter('size')) _description_size = property(attrgetter('size'))
@ -1303,6 +1312,11 @@ class Reference(Selection):
def __init__(self, selection=None, string=None, **kwargs): def __init__(self, selection=None, string=None, **kwargs):
super(Reference, self).__init__(selection=selection, string=string, **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')) _related_size = property(attrgetter('size'))
_column_size = property(attrgetter('size')) _column_size = property(attrgetter('size'))
@ -1335,6 +1349,11 @@ class _Relational(Field):
domain = None # domain for searching values domain = None # domain for searching values
context = None # context 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_relation = property(attrgetter('comodel_name'))
_description_context = property(attrgetter('context')) _description_context = property(attrgetter('context'))