VMM/Config: reworked configuration handling.
Implemented LazyConfig(RawConfigParser) and LazyConfigOption(object)
Rewrote Config class:
* use default values and added some validation stuff
* removed attributes: __VMMsections and __changes
* replaced methods __chkSections() and __chkOptions() with __chkCfg
VMM/VMM: Adjusted to reworked Config class.
* removed attribute __cfgSections
* removed methods: cfgGetBoolean(), cfgGetInt(), cfgGetString()
* added methods: cfgDget(), cfgPget(), cfgSet()
VMM/__init__: added function get_unicode()
vmm: Adjusted to replaced methods in VMM/VMM.
# -*- 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__importERRfromExceptionsimportVMMRelocatedExceptionasVMMREfromDomainimportDomainfromEmailAddressimportEmailAddressimportVirtualMailManagerasVMMclassRelocated(object):"""Class to manage e-mail addresses of relocated users."""__slots__=('_addr','_dest','_gid','_isNew','_dbh')def__init__(self,dbh,address,destination=None):ifisinstance(address,EmailAddress):self._addr=addresselse:raiseTypeError("Argument 'address' is not an EmailAddress")ifdestinationisNone:self._dest=Noneelifisinstance(destination,EmailAddress):self._dest=destinationelse:raiseTypeError("Argument 'destination' is not an EmailAddress")ifaddress==destination:raiseVMMRE(_(u"Address and destination are identical."),ERR.RELOCATED_ADDR_DEST_IDENTICAL)self._dbh=dbhself._gid=0self._isNew=Falseself._setAddr()self._exists()ifself._isNewandVMM.VirtualMailManager.accountExists(self._dbh,self._addr):raiseVMMRE(_(u"There is already an account with address “%s”.")%\self._addr,ERR.ACCOUNT_EXISTS)ifself._isNewandVMM.VirtualMailManager.aliasExists(self._dbh,self._addr):raiseVMMRE(_(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()ifgidisNone:self._isNew=Truedef_setAddr(self):dom=Domain(self._dbh,self._addr._domainname)self._gid=dom.getID()ifself._gid==0:raiseVMMRE(_(u"The domain “%s” doesn't exist.")%\self._addr._domainname,ERR.NO_SUCH_DOMAIN)defsave(self):ifself._destisNone:raiseVMMRE(_(u"No destination address specified for relocated user."),ERR.RELOCATED_MISSING_DEST)ifself._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:raiseVMMRE(_(u"The relocated user “%s” already exists.")%self._addr,ERR.RELOCATED_EXISTS)defgetInfo(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()ifdestinationisnotNone:returndestination[0]else:raiseVMMRE(_(u"The relocated user “%s” doesn't exist.")%self._addr,ERR.NO_SUCH_RELOCATED)defdelete(self):dbc=self._dbh.cursor()dbc.execute("DELETE FROM relocated WHERE gid = %s AND address = %s",self._gid,self._addr._localpart)rowcount=dbc.rowcountdbc.close()ifrowcount>0:self._dbh.commit()else:raiseVMMRE(_(u"The relocated user “%s” doesn't exist.")%self._addr,ERR.NO_SUCH_RELOCATED)