summaryrefslogtreecommitdiff
path: root/Mailman/database/user.py
diff options
context:
space:
mode:
authorBarry Warsaw2007-12-08 11:51:36 -0500
committerBarry Warsaw2007-12-08 11:51:36 -0500
commit5495accf05d77e1c4ff2855f5e42c2e56f51e45d (patch)
treee4d3ae8e89bf380137183fd045c41aae983f1e15 /Mailman/database/user.py
parent8ccaa3f611fd822d916abf17ccf308d5ebbe9383 (diff)
downloadmailman-5495accf05d77e1c4ff2855f5e42c2e56f51e45d.tar.gz
mailman-5495accf05d77e1c4ff2855f5e42c2e56f51e45d.tar.zst
mailman-5495accf05d77e1c4ff2855f5e42c2e56f51e45d.zip
Reorganize the database subpackage, primarily by removing the 'model'
subdirectory and updating all relevant imports. Move of the circular import problems have been eliminated in the process.
Diffstat (limited to 'Mailman/database/user.py')
-rw-r--r--Mailman/database/user.py74
1 files changed, 74 insertions, 0 deletions
diff --git a/Mailman/database/user.py b/Mailman/database/user.py
new file mode 100644
index 000000000..3ca320f36
--- /dev/null
+++ b/Mailman/database/user.py
@@ -0,0 +1,74 @@
+# Copyright (C) 2007 by the Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+# USA.
+
+from email.utils import formataddr
+from storm.locals import *
+from zope.interface import implements
+
+from Mailman import Errors
+from Mailman.configuration import config
+from Mailman.database.model import Model
+from Mailman.database.address import Address
+from Mailman.database.preferences import Preferences
+from Mailman.interfaces import IUser
+
+
+
+class User(Model):
+ implements(IUser)
+
+ id = Int(primary=True)
+ real_name = Unicode()
+ password = Unicode()
+
+ addresses = ReferenceSet(id, 'Address.user_id')
+ preferences_id = Int()
+ preferences = Reference(preferences_id, 'Preferences.id')
+
+ def __repr__(self):
+ return '<User "%s" at %#x>' % (self.real_name, id(self))
+
+ def link(self, address):
+ if address.user is not None:
+ raise Errors.AddressAlreadyLinkedError(address)
+ address.user = self
+
+ def unlink(self, address):
+ if address.user is None:
+ raise Errors.AddressNotLinkedError(address)
+ address.user = None
+
+ def controls(self, address):
+ found = config.db.store.find(Address, address=address)
+ if found.count() == 0:
+ return False
+ assert found.count() == 1, 'Unexpected count'
+ return found[0].user is self
+
+ def register(self, address, real_name=None):
+ # First, see if the address already exists
+ addrobj = config.db.store.find(Address, address=address).one()
+ if addrobj is None:
+ if real_name is None:
+ real_name = u''
+ addrobj = Address(address=address, real_name=real_name)
+ addrobj.preferences = Preferences()
+ # Link the address to the user if it is not already linked.
+ if addrobj.user is not None:
+ raise Errors.AddressAlreadyLinkedError(addrobj)
+ addrobj.user = self
+ return addrobj