[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 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'))