Moved VirtualMailManager/Exceptions to VirtualMailManager/errors.
Renamed VMM*Exception classes to *Error.
No longer add the attribute 'message' to VMMError if it doesn't exist, like in
Python 2.4. It has been deprecated as of Python 2.6.
Also removed the methods code() and msg(), the values are now accessible via
the attributes 'code' and 'msg'.
# -*- coding: UTF-8 -*-# Copyright (c) 2008 - 2010, Pascal Volk# See COPYING for distribution information."""Virtual Mail Manager's MailLocation class to manage the mail_locationfor accounts."""importreimportVirtualMailManager.constants.ERRORasERRfromVirtualMailManager.errorsimportMailLocationErrorasMLERE_MAILLOCATION="""^\w{1,20}$"""classMailLocation(object):"""A wrapper class thats provide access to the maillocation table"""__slots__=('__id','__maillocation','_dbh')def__init__(self,dbh,mid=None,maillocation=None):"""Creates a new MailLocation instance. Either mid or maillocation must be specified. Keyword arguments: dbh -- a pyPgSQL.PgSQL.connection mid -- the id of a maillocation (long) maillocation -- the value of the maillocation (str) """self._dbh=dbhifmidisNoneandmaillocationisNone:raiseMLE(_('Either mid or maillocation must be specified.'),ERR.MAILLOCATION_INIT)elifmidisnotNone:try:self.__id=long(mid)exceptValueError:raiseMLE(_('mid must be an int/long.'),ERR.MAILLOCATION_INIT)self._loadByID()else:ifre.match(RE_MAILLOCATION,maillocation):self.__maillocation=maillocationself._loadByName()else:raiseMLE(_(u'Invalid folder name “%s”, it may consist only of\n\1 - 20 single byte characters (A-Z, a-z, 0-9 and _).')%maillocation,ERR.MAILLOCATION_INIT)def_loadByID(self):dbc=self._dbh.cursor()dbc.execute('SELECT maillocation FROM maillocation WHERE mid = %s',self.__id)result=dbc.fetchone()dbc.close()ifresultisnotNone:self.__maillocation=result[0]else:raiseMLE(_('Unknown mid specified.'),ERR.UNKNOWN_MAILLOCATION_ID)def_loadByName(self):dbc=self._dbh.cursor()dbc.execute('SELECT mid FROM maillocation WHERE maillocation = %s',self.__maillocation)result=dbc.fetchone()dbc.close()ifresultisnotNone:self.__id=result[0]else:self._save()def_save(self):dbc=self._dbh.cursor()dbc.execute("SELECT nextval('maillocation_id')")self.__id=dbc.fetchone()[0]dbc.execute('INSERT INTO maillocation(mid,maillocation) VALUES(%s,%s)',self.__id,self.__maillocation)self._dbh.commit()dbc.close()defgetID(self):"""Returns the unique ID of the maillocation."""returnself.__iddefgetMailLocation(self):"""Returns the value of maillocation, ex: 'Maildir'"""returnself.__maillocation