diff options
Diffstat (limited to 'src/mailman/model/preferences.py')
| -rw-r--r-- | src/mailman/model/preferences.py | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/mailman/model/preferences.py b/src/mailman/model/preferences.py index 53bfe6975..22d22ed94 100644 --- a/src/mailman/model/preferences.py +++ b/src/mailman/model/preferences.py @@ -20,6 +20,7 @@ from mailman import public from mailman.database.model import Model from mailman.database.types import Enum +from mailman.database.transaction import dbconnection from mailman.interfaces.languages import ILanguageManager from mailman.interfaces.member import DeliveryMode, DeliveryStatus from mailman.interfaces.preferences import IPreferences @@ -43,6 +44,8 @@ class Preferences(Model): receive_own_postings = Column(Boolean) delivery_mode = Column(Enum(DeliveryMode)) delivery_status = Column(Enum(DeliveryStatus)) + # When adding new columns, also add them to + # mailman.model.tests.test_preferences.TestPreferences.test_absorb_all_attributes() def __repr__(self): return '<Preferences object at {:#x}>'.format(id(self)) @@ -62,3 +65,14 @@ class Preferences(Model): self._preferred_language = language.code except AttributeError: self._preferred_language = language + + @dbconnection + def absorb(self, store, preferences): + """See `IPreferences`.""" + column_names = [ c.name for c in self.__table__.columns + if not c.primary_key ] + for cname in column_names: + if (getattr(self, cname) is None and + getattr(preferences, cname) is not None): + setattr(self, cname, getattr(preferences, cname)) + store.delete(preferences) |
