diff -r c0e1fb1b0145 -r a4aead244f75 VirtualMailManager/Relocated.py --- a/VirtualMailManager/Relocated.py Mon Nov 07 03:22:15 2011 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,103 +0,0 @@ -# -*- coding: UTF-8 -*- -# Copyright (c) 2008 - 2010, Pascal Volk -# See COPYING for distribution information. - -"""Virtual Mail Manager's Relocated class to manage relocated users.""" - -from __main__ import ERR -from Exceptions import VMMRelocatedException as VMMRE -from Domain import Domain -from EmailAddress import EmailAddress -import VirtualMailManager as VMM - -class Relocated(object): - """Class to manage e-mail addresses of relocated users.""" - __slots__ = ('_addr', '_dest', '_gid', '_isNew', '_dbh') - def __init__(self, dbh, address, destination=None): - if isinstance(address, EmailAddress): - self._addr = address - else: - raise TypeError("Argument 'address' is not an EmailAddress") - if destination is None: - self._dest = None - elif isinstance(destination, EmailAddress): - self._dest = destination - else: - raise TypeError("Argument 'destination' is not an EmailAddress") - if address == destination: - raise VMMRE(_(u"Address and destination are identical."), - ERR.RELOCATED_ADDR_DEST_IDENTICAL) - self._dbh = dbh - self._gid = 0 - self._isNew = False - self._setAddr() - self._exists() - if self._isNew and VMM.VirtualMailManager.accountExists(self._dbh, - self._addr): - raise VMMRE(_(u"There is already an account with address “%s”.") %\ - self._addr, ERR.ACCOUNT_EXISTS) - if self._isNew and VMM.VirtualMailManager.aliasExists(self._dbh, - self._addr): - raise VMMRE( - _(u"There is already an alias with the address “%s”.") %\ - self._addr, ERR.ALIAS_EXISTS) - - def _exists(self): - dbc = self._dbh.cursor() - dbc.execute("SELECT gid FROM relocated WHERE gid = %s AND address = %s", - self._gid, self._addr._localpart) - gid = dbc.fetchone() - dbc.close() - if gid is None: - self._isNew = True - - def _setAddr(self): - dom = Domain(self._dbh, self._addr._domainname) - self._gid = dom.getID() - if self._gid == 0: - raise VMMRE(_(u"The domain “%s” doesn't exist.") %\ - self._addr._domainname, ERR.NO_SUCH_DOMAIN) - - def save(self): - if self._dest is None: - raise VMMRE( - _(u"No destination address specified for relocated user."), - ERR.RELOCATED_MISSING_DEST) - if self._isNew: - dbc = self._dbh.cursor() - dbc.execute("INSERT INTO relocated VALUES (%s, %s, %s)", - self._gid, self._addr._localpart, str(self._dest)) - self._dbh.commit() - dbc.close() - else: - raise VMMRE( - _(u"The relocated user “%s” already exists.") % self._addr, - ERR.RELOCATED_EXISTS) - - def getInfo(self): - dbc = self._dbh.cursor() - dbc.execute('SELECT destination FROM relocated WHERE gid=%s\ - AND address=%s', - self._gid, self._addr._localpart) - destination = dbc.fetchone() - dbc.close() - if destination is not None: - return destination[0] - else: - raise VMMRE( - _(u"The relocated user “%s” doesn't exist.") % self._addr, - ERR.NO_SUCH_RELOCATED) - - def delete(self): - dbc = self._dbh.cursor() - dbc.execute("DELETE FROM relocated WHERE gid = %s AND address = %s", - self._gid, self._addr._localpart) - rowcount = dbc.rowcount - dbc.close() - if rowcount > 0: - self._dbh.commit() - else: - raise VMMRE( - _(u"The relocated user “%s” doesn't exist.") % self._addr, - ERR.NO_SUCH_RELOCATED) -