summaryrefslogtreecommitdiff
path: root/src/mailman/model/user.py
diff options
context:
space:
mode:
authorBarry Warsaw2011-04-16 16:41:50 -0400
committerBarry Warsaw2011-04-16 16:41:50 -0400
commitb2b32e2599ba4f4618de38a3eafaf6604d305aa3 (patch)
treea04c45251fa4742646c12ad424aedb18519ea17f /src/mailman/model/user.py
parent60b4e06d867fc74ad629d6724d7642b03af5f8f7 (diff)
downloadmailman-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.py28
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)