diff options
| author | Barry Warsaw | 2011-04-16 16:41:50 -0400 |
|---|---|---|
| committer | Barry Warsaw | 2011-04-16 16:41:50 -0400 |
| commit | b2b32e2599ba4f4618de38a3eafaf6604d305aa3 (patch) | |
| tree | a04c45251fa4742646c12ad424aedb18519ea17f /src/mailman/model/user.py | |
| parent | 60b4e06d867fc74ad629d6724d7642b03af5f8f7 (diff) | |
| download | mailman-b2b32e2599ba4f4618de38a3eafaf6604d305aa3.tar.gz mailman-b2b32e2599ba4f4618de38a3eafaf6604d305aa3.tar.zst mailman-b2b32e2599ba4f4618de38a3eafaf6604d305aa3.zip | |
Diffstat (limited to 'src/mailman/model/user.py')
| -rw-r--r-- | src/mailman/model/user.py | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/src/mailman/model/user.py b/src/mailman/model/user.py index f0048c5f4..7c4c15d36 100644 --- a/src/mailman/model/user.py +++ b/src/mailman/model/user.py @@ -32,7 +32,7 @@ from mailman.config import config from mailman.database.model import Model from mailman.interfaces.address import ( AddressAlreadyLinkedError, AddressNotLinkedError) -from mailman.interfaces.user import IUser +from mailman.interfaces.user import IUser, UnverifiedAddressError from mailman.model.address import Address from mailman.model.preferences import Preferences from mailman.model.roster import Memberships @@ -53,6 +53,8 @@ class User(Model): _created_on = DateTime() addresses = ReferenceSet(id, 'Address.user_id') + _preferred_address_id = Int() + _preferred_address = Reference(_preferred_address_id, 'Address.id') preferences_id = Int() preferences = Reference(preferences_id, 'Preferences.id') @@ -93,6 +95,30 @@ class User(Model): raise AddressNotLinkedError(address) address.user = None + @property + def preferred_address(self): + """See `IUser`.""" + return self._preferred_address + + @preferred_address.setter + def preferred_address(self, address): + """See `IUser`.""" + if address.verified_on is None: + raise UnverifiedAddressError(address) + if self.controls(address.email): + # This user already controls the email address. + pass + elif address.user is None: + self.link(address) + elif address.user != self: + raise AddressAlreadyLinkedError(address) + self._preferred_address = address + + @preferred_address.deleter + def preferred_address(self): + """See `IUser`.""" + self._preferred_address = None + def controls(self, email): """See `IUser`.""" found = config.db.store.find(Address, email=email) |
