diff -r 96761c442dcf -r 7e3ce56f49e6 VirtualMailManager/MailLocation.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/VirtualMailManager/MailLocation.py Sat Feb 02 19:48:17 2008 +0000 @@ -0,0 +1,85 @@ +#!/usr/bin/env python +# -*- coding: UTF-8 -*- +# Copyright 2008 VEB IT +# See COPYING for distribution information. +# $Id$ + +"""Virtual Mail Manager's MailLocation class to manage the mail_location +for accounts.""" + +from constants.VERSION import VERSION + +__author__ = 'Pascal Volk ' +__version__ = VERSION +__revision__ = 'rev '+'$Rev$'.split()[1] +__date__ = '$Date$'.split()[1] + + +from Exceptions import VMMMailLocationException as MLE +import constants.ERROR as ERR + +class MailLocation: + """A wrapper class thats provide access to the maillocation table""" + 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 = dbh + if mid is None and maillocation is None: + raise MLE(('Either mid or maillocation must be specified.', + ERR.MAILLOCATION_INIT)) + elif mid is not None: + try: + self.__id = long(tid) + except ValueError: + raise MLE(('mid must be an int/long.', ERR.MAILLOCATION_INIT)) + self._loadByID() + else: + self.__maillocation = maillocation + self._loadByName() + + def _loadByID(self): + dbc = self._dbh.cursor() + dbc.execute('SELECT maillocation FROM maillocation WHERE mid = %s', + self.__id) + result = dbc.fetchone() + dbc.close() + if result is not None: + self.__maillocation = result[0] + else: + raise MLE(('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() + if result is not None: + 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() + + def getID(self): + """Returns the unique ID of the maillocation.""" + return self.__id + + def getMailLocation(self): + """Returns the value of maillocation, ex: 'Maildir'""" + return self.__maillocation +