diff -r 96761c442dcf -r 7e3ce56f49e6 VirtualMailManager/Transport.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/VirtualMailManager/Transport.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 Transport class to manage the transport for +domains and accounts.""" + +from constants.VERSION import VERSION + +__author__ = 'Pascal Volk ' +__version__ = VERSION +__revision__ = 'rev '+'$Rev$'.split()[1] +__date__ = '$Date$'.split()[1] + +from Exceptions import VMMTransportException +import constants.ERROR as ERR + +class Transport: + """A wrapper class thats provide access to the transport table""" + def __init__(self, dbh, tid=None, transport=None): + """Creates a new Transport instance. + + Either tid or transport must be specified. + + Keyword arguments: + dbh -- a pyPgSQL.PgSQL.connection + tid -- the id of a transport (long) + transport -- the value of the transport (str) + """ + self._dbh = dbh + if tid is None and transport is None: + raise VMMTransportException( + ('Either tid or transport must be specified.', + ERR.TRANSPORT_INIT)) + elif tid is not None: + try: + self.__id = long(tid) + except ValueError: + raise VMMTransportException(('tid must be an int/long.', + ERR.TRANSPORT_INIT)) + self._loadByID() + else: + self.__transport = transport + self._loadByName() + + def _loadByID(self): + dbc = self._dbh.cursor() + dbc.execute('SELECT transport FROM transport WHERE tid = %s', self.__id) + result = dbc.fetchone() + dbc.close() + if result is not None: + self.__transport = result[0] + else: + raise VMMTransportException(('Unknown tid specified.', + ERR.UNKNOWN_TRANSPORT_ID)) + + def _loadByName(self): + dbc = self._dbh.cursor() + dbc.execute('SELECT tid FROM transport WHERE transport = %s', + self.__transport) + 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('transport_id')") + self.__id = dbc.fetchone()[0] + dbc.execute('INSERT INTO transport (tid, transport) VALUES (%s, %s)', + self.__id, self.__transport) + self._dbh.commit() + dbc.close() + + def getID(self): + """Returns the unique ID of the transport.""" + return self.__id + + def getTransport(self): + """Returns the value of transport, ex: 'dovecot:'""" + return self.__transport