diff -r 659c4476c57c -r b678a1c43027 VirtualMailManager/transport.py --- a/VirtualMailManager/transport.py Mon Mar 24 19:22:04 2014 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,100 +0,0 @@ -# -*- coding: UTF-8 -*- -# Copyright (c) 2008 - 2014, Pascal Volk -# See COPYING for distribution information. -""" - VirtualMailManager.transport - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - Virtual Mail Manager's Transport class to manage the transport for - domains and accounts. -""" - -from VirtualMailManager.pycompat import any - -_ = lambda msg: msg - - -class Transport(object): - """A wrapper class that provides access to the transport table""" - __slots__ = ('_tid', '_transport', '_dbh') - - def __init__(self, dbh, tid=None, transport=None): - """Creates a new Transport instance. - - Either tid or transport must be specified. When both arguments - are given, tid will be used. - - Keyword arguments: - dbh -- a pyPgSQL.PgSQL.connection - tid -- the id of a transport (int/long) - transport -- the value of the transport (str) - - """ - self._dbh = dbh - self._tid = 0 - assert any((tid, transport)) - if tid: - assert not isinstance(tid, bool) and isinstance(tid, (int, long)) - self._load_by_id(tid) - else: - assert isinstance(transport, basestring) - self._transport = transport - self._load_by_name() - - @property - def tid(self): - """The transport's unique ID.""" - return self._tid - - @property - def transport(self): - """The transport's value, ex: 'dovecot:'""" - return self._transport - - def __eq__(self, other): - if isinstance(other, self.__class__): - return self._tid == other._tid - return NotImplemented - - def __ne__(self, other): - if isinstance(other, self.__class__): - return self._tid != other._tid - return NotImplemented - - def __str__(self): - return self._transport - - def _load_by_id(self, tid): - """load a transport by its id from the database""" - dbc = self._dbh.cursor() - dbc.execute('SELECT transport FROM transport WHERE tid = %s', (tid,)) - result = dbc.fetchone() - dbc.close() - if not result: - raise ValueError('Unknown transport id specified: %r' % tid) - self._transport = result[0] - self._tid = tid - - def _load_by_name(self): - """Load a transport by its transport name from the database.""" - dbc = self._dbh.cursor() - dbc.execute('SELECT tid FROM transport WHERE transport = %s', - (self._transport,)) - result = dbc.fetchone() - dbc.close() - if result: - self._tid = result[0] - else: - self._save() - - def _save(self): - """Save the new transport in the database.""" - dbc = self._dbh.cursor() - dbc.execute("SELECT nextval('transport_id')") - self._tid = dbc.fetchone()[0] - dbc.execute('INSERT INTO transport (tid, transport) VALUES (%s, %s)', - (self._tid, self._transport)) - self._dbh.commit() - dbc.close() - -del _