From 956ed719aeb560ec3797519831d4eef48431a506 Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Fri, 21 Oct 2011 16:28:36 +0200 Subject: [PATCH] [IMP] fields.boolean,integer,float: warning when required=True, as it has no effect A PendingDeprecationWarning is used in order to reduce the verbosity of the logging, and to indicate that we might forbid passing required=True in a future OpenERP version for fields types where it makes no sense. bzr revid: odo@openerp.com-20111021142836-0k4qruhe1vgodysu --- openerp/osv/fields.py | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/openerp/osv/fields.py b/openerp/osv/fields.py index d0be75a012f..1f5feb85c98 100644 --- a/openerp/osv/fields.py +++ b/openerp/osv/fields.py @@ -131,6 +131,12 @@ class boolean(_column): _symbol_f = lambda x: x and 'True' or 'False' _symbol_set = (_symbol_c, _symbol_f) + def __init__(self, string='unknown', required=False, **args): + super(boolean, self).__init__(string=string, required=required, **args) + if required: + warnings.warn("Making a boolean field `required` has no effect, as NULL values are " + "automatically turned into False", PendingDeprecationWarning, stacklevel=2) + class integer(_column): _type = 'integer' _symbol_c = '%s' @@ -138,6 +144,12 @@ class integer(_column): _symbol_set = (_symbol_c, _symbol_f) _symbol_get = lambda self,x: x or 0 + def __init__(self, string='unknown', required=False, **args): + super(integer, self).__init__(string=string, required=required, **args) + if required: + warnings.warn("Making an integer field `required` has no effect, as NULL values are " + "automatically turned into 0", PendingDeprecationWarning, stacklevel=2) + class integer_big(_column): """Experimental 64 bit integer column type, currently unused. @@ -155,6 +167,12 @@ class integer_big(_column): _symbol_set = (_symbol_c, _symbol_f) _symbol_get = lambda self,x: x or 0 + def __init__(self, string='unknown', required=False, **args): + super(integer_big, self).__init__(string=string, required=required, **args) + if required: + warnings.warn("Making an integer_big field `required` has no effect, as NULL values are " + "automatically turned into 0", PendingDeprecationWarning, stacklevel=2) + class reference(_column): _type = 'reference' _classic_read = False # post-process to handle missing target @@ -208,10 +226,13 @@ class float(_column): _symbol_set = (_symbol_c, _symbol_f) _symbol_get = lambda self,x: x or 0.0 - def __init__(self, string='unknown', digits=None, digits_compute=None, **args): - _column.__init__(self, string=string, **args) + def __init__(self, string='unknown', digits=None, digits_compute=None, required=False, **args): + _column.__init__(self, string=string, required=required, **args) self.digits = digits self.digits_compute = digits_compute + if required: + warnings.warn("Making a float field `required` has no effect, as NULL values are " + "automatically turned into 0.0", PendingDeprecationWarning, stacklevel=2) def digits_change(self, cr):