diff options
| author | Thibault Delavallée <tde@openerp.com> | 2012-08-14 13:11:43 +0200 |
|---|---|---|
| committer | Thibault Delavallée <tde@openerp.com> | 2012-08-14 13:11:43 +0200 |
| commit | 149c6f793f4f184dbf5265a7b70c4cf78ee43568 (patch) | |
| tree | ab3a0d8f9af1b51c02760ec6473c9ac28314daa5 | |
| parent | 2edf42928b20038abf522371d6f81faf89b9c3e7 (diff) | |
| parent | e4185c910f449122ca0ee3d7cd26a4d0a0f593b2 (diff) | |
[MERGE] 'My Second Not-Chatter Merge of the Day': add a deprecated attribute on fields.
This revision adds a string 'deprecated' attribute on fields. If not False, the ORM makes a warning when attempting to read the read, or write on it.
Use: 'my_field': fields.char('Old field', size=64, deprecated="This field will be removed with version 42 of OpenERP. Please yse 'my_new_field' instead.")
bzr revid: tde@openerp.com-20120814111143-9qha588hah5380fx
| -rw-r--r-- | openerp/osv/fields.py | 1 | ||||
| -rw-r--r-- | openerp/osv/orm.py | 11 |
2 files changed, 12 insertions, 0 deletions
diff --git a/openerp/osv/fields.py b/openerp/osv/fields.py index 4ff23956050..7717c1fbf51 100644 --- a/openerp/osv/fields.py +++ b/openerp/osv/fields.py @@ -109,6 +109,7 @@ class _column(object): self.selectable = True self.group_operator = args.get('group_operator', False) self.groups = False # CSV list of ext IDs of groups that can access this field + self.deprecated = False # Optional deprecation warning for a in args: if args[a]: setattr(self, a, args[a]) diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index 563c514726c..3ae9379697b 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -3596,6 +3596,14 @@ class BaseModel(object): record[f] = res2[record['id']] else: record[f] = [] + + # Warn about deprecated fields now that fields_pre and fields_post are computed + # Explicitly use list() because we may receive tuples + for f in list(fields_pre) + list(fields_post): + field_column = self._all_columns.get(f) and self._all_columns.get(f).column + if field_column and field_column.deprecated: + _logger.warning('Field %s.%s is deprecated: %s', self._name, f, field_column.deprecated) + readonly = None for vals in res: for field in vals.copy(): @@ -3973,6 +3981,9 @@ class BaseModel(object): direct = [] totranslate = context.get('lang', False) and (context['lang'] != 'en_US') for field in vals: + field_column = self._all_columns.get(field) and self._all_columns.get(field).column + if field_column and field_column.deprecated: + _logger.warning('Field %s.%s is deprecated: %s', self._name, field, field_column.deprecated) if field in self._columns: if self._columns[field]._classic_write and not (hasattr(self._columns[field], '_fnct_inv')): if (not totranslate) or not self._columns[field].translate: |
