VirtualMailManager/relocated.py
author Pascal Volk <user@localhost.localdomain.org>
Sat, 08 Feb 2014 18:36:30 +0000
branchv0.7.x
changeset 715 c6a33da1aa93
parent 711 2a75058fc064
permissions -rw-r--r--
VMM/constants: Added MIN_DOVECOT_VERSION (>= 2.0.0).
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
76
14c0a092d7d2 * 'VirtualMailManager/EmailAddress.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff changeset
     1
# -*- coding: UTF-8 -*-
703
58815c004a61 Updated copyright notices to include the year 2014.
Pascal Volk <user@localhost.localdomain.org>
parents: 675
diff changeset
     2
# Copyright (c) 2008 - 2014, Pascal Volk
76
14c0a092d7d2 * 'VirtualMailManager/EmailAddress.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff changeset
     3
# See COPYING for distribution information.
197
d2712e8c724e VMM/{Relocated,Handler}: reworked Relocated class, adjusted Handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 185
diff changeset
     4
"""
320
011066435e6f VMM/*: Made all modules names lowercase, adjusted imports.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 316
diff changeset
     5
    VirtualMailManager.relocated
011066435e6f VMM/*: Made all modules names lowercase, adjusted imports.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 316
diff changeset
     6
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
76
14c0a092d7d2 * 'VirtualMailManager/EmailAddress.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff changeset
     7
197
d2712e8c724e VMM/{Relocated,Handler}: reworked Relocated class, adjusted Handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 185
diff changeset
     8
    Virtual Mail Manager's Relocated class to handle relocated users.
d2712e8c724e VMM/{Relocated,Handler}: reworked Relocated class, adjusted Handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 185
diff changeset
     9
"""
d2712e8c724e VMM/{Relocated,Handler}: reworked Relocated class, adjusted Handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 185
diff changeset
    10
320
011066435e6f VMM/*: Made all modules names lowercase, adjusted imports.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 316
diff changeset
    11
from VirtualMailManager.domain import get_gid
480
099de308fd98 VMM/relocated: Don't accept something@localhost as destination.
Pascal Volk <user@localhost.localdomain.org>
parents: 417
diff changeset
    12
from VirtualMailManager.emailaddress import EmailAddress, \
099de308fd98 VMM/relocated: Don't accept something@localhost as destination.
Pascal Volk <user@localhost.localdomain.org>
parents: 417
diff changeset
    13
     DestinationEmailAddress
216
0c8c053b451c Moved VirtualMailManager/Exceptions to VirtualMailManager/errors.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 215
diff changeset
    14
from VirtualMailManager.errors import RelocatedError as RErr
480
099de308fd98 VMM/relocated: Don't accept something@localhost as destination.
Pascal Volk <user@localhost.localdomain.org>
parents: 417
diff changeset
    15
from VirtualMailManager.constants import DOMAIN_INVALID, NO_SUCH_DOMAIN, \
197
d2712e8c724e VMM/{Relocated,Handler}: reworked Relocated class, adjusted Handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 185
diff changeset
    16
     NO_SUCH_RELOCATED, RELOCATED_ADDR_DEST_IDENTICAL, RELOCATED_EXISTS
d2712e8c724e VMM/{Relocated,Handler}: reworked Relocated class, adjusted Handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 185
diff changeset
    17
d2712e8c724e VMM/{Relocated,Handler}: reworked Relocated class, adjusted Handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 185
diff changeset
    18
d2712e8c724e VMM/{Relocated,Handler}: reworked Relocated class, adjusted Handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 185
diff changeset
    19
_ = lambda msg: msg
d2712e8c724e VMM/{Relocated,Handler}: reworked Relocated class, adjusted Handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 185
diff changeset
    20
76
14c0a092d7d2 * 'VirtualMailManager/EmailAddress.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff changeset
    21
122
30abf0abf8f8 Converted to new-style class, added __slots__.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 102
diff changeset
    22
class Relocated(object):
197
d2712e8c724e VMM/{Relocated,Handler}: reworked Relocated class, adjusted Handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 185
diff changeset
    23
    """Class to handle e-mail addresses of relocated users."""
d2712e8c724e VMM/{Relocated,Handler}: reworked Relocated class, adjusted Handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 185
diff changeset
    24
    __slots__ = ('_addr', '_dest', '_gid', '_dbh')
d2712e8c724e VMM/{Relocated,Handler}: reworked Relocated class, adjusted Handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 185
diff changeset
    25
d2712e8c724e VMM/{Relocated,Handler}: reworked Relocated class, adjusted Handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 185
diff changeset
    26
    def __init__(self, dbh, address):
215
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 213
diff changeset
    27
        """Creates a new *Relocated* instance.  The ``address`` is the
197
d2712e8c724e VMM/{Relocated,Handler}: reworked Relocated class, adjusted Handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 185
diff changeset
    28
        old e-mail address of the user.
d2712e8c724e VMM/{Relocated,Handler}: reworked Relocated class, adjusted Handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 185
diff changeset
    29
d2712e8c724e VMM/{Relocated,Handler}: reworked Relocated class, adjusted Handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 185
diff changeset
    30
        Use `setDestination()` to set/update the new address, where the
215
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 213
diff changeset
    31
        user has moved to.
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 213
diff changeset
    32
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 213
diff changeset
    33
        """
213
1a9fee6b93bc VMM:/{Alias,EmailAddress,Relocated}: use assertions for argument checks.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 202
diff changeset
    34
        assert isinstance(address, EmailAddress)
202
43e7c8b440da VMM/Relocated: small code cleanups and cosmetic.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 198
diff changeset
    35
        self._addr = address
76
14c0a092d7d2 * 'VirtualMailManager/EmailAddress.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff changeset
    36
        self._dbh = dbh
198
02d467e4fbab VMM/Domain: added function get_gid() to the Domain module.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 197
diff changeset
    37
        self._gid = get_gid(self._dbh, self._addr.domainname)
222
d0c16e70a9fb VMM/Domain: get_gid() return 0 instead of raising an Exception,
Pascal Volk <neverseen@users.sourceforge.net>
parents: 216
diff changeset
    38
        if not self._gid:
643
df1e3b67882a Ran 2to3 from Python 3.2.3.
Pascal Volk <user@localhost.localdomain.org>
parents: 568
diff changeset
    39
            raise RErr(_("The domain '%s' does not exist.") %
222
d0c16e70a9fb VMM/Domain: get_gid() return 0 instead of raising an Exception,
Pascal Volk <neverseen@users.sourceforge.net>
parents: 216
diff changeset
    40
                       self._addr.domainname, NO_SUCH_DOMAIN)
197
d2712e8c724e VMM/{Relocated,Handler}: reworked Relocated class, adjusted Handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 185
diff changeset
    41
        self._dest = None
76
14c0a092d7d2 * 'VirtualMailManager/EmailAddress.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff changeset
    42
322
94bd10e237e5 VMM/…: More PEP-8 fixes; eliminated __names.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 320
diff changeset
    43
        self._load()
76
14c0a092d7d2 * 'VirtualMailManager/EmailAddress.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff changeset
    44
643
df1e3b67882a Ran 2to3 from Python 3.2.3.
Pascal Volk <user@localhost.localdomain.org>
parents: 568
diff changeset
    45
    def __bool__(self):
249
bb7d9906c529 VMM/Relocated: implemented Relocated.__nonzero__() for truth value testing.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 222
diff changeset
    46
        """Returns `True` if the Relocated is known, `False` if it's new."""
bb7d9906c529 VMM/Relocated: implemented Relocated.__nonzero__() for truth value testing.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 222
diff changeset
    47
        return self._dest is not None
bb7d9906c529 VMM/Relocated: implemented Relocated.__nonzero__() for truth value testing.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 222
diff changeset
    48
322
94bd10e237e5 VMM/…: More PEP-8 fixes; eliminated __names.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 320
diff changeset
    49
    def _load(self):
197
d2712e8c724e VMM/{Relocated,Handler}: reworked Relocated class, adjusted Handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 185
diff changeset
    50
        """Loads the destination address from the database into the
215
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 213
diff changeset
    51
        `_dest` attribute.
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 213
diff changeset
    52
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 213
diff changeset
    53
        """
197
d2712e8c724e VMM/{Relocated,Handler}: reworked Relocated class, adjusted Handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 185
diff changeset
    54
        dbc = self._dbh.cursor()
290
e2785e04f92e VMM/…: re-indented long queries and error messages.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 250
diff changeset
    55
        dbc.execute('SELECT destination FROM relocated WHERE gid = %s AND '
352
22d115376e4d VMM/…: Provide parameters as tuple to cursor.execute().
Pascal Volk <neverseen@users.sourceforge.net>
parents: 341
diff changeset
    56
                    'address = %s', (self._gid, self._addr.localpart))
197
d2712e8c724e VMM/{Relocated,Handler}: reworked Relocated class, adjusted Handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 185
diff changeset
    57
        destination = dbc.fetchone()
d2712e8c724e VMM/{Relocated,Handler}: reworked Relocated class, adjusted Handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 185
diff changeset
    58
        dbc.close()
d2712e8c724e VMM/{Relocated,Handler}: reworked Relocated class, adjusted Handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 185
diff changeset
    59
        if destination:
480
099de308fd98 VMM/relocated: Don't accept something@localhost as destination.
Pascal Volk <user@localhost.localdomain.org>
parents: 417
diff changeset
    60
            destination = DestinationEmailAddress(destination[0], self._dbh)
099de308fd98 VMM/relocated: Don't accept something@localhost as destination.
Pascal Volk <user@localhost.localdomain.org>
parents: 417
diff changeset
    61
            if destination.at_localhost:
643
df1e3b67882a Ran 2to3 from Python 3.2.3.
Pascal Volk <user@localhost.localdomain.org>
parents: 568
diff changeset
    62
                raise RErr(_("The destination address' domain name must not "
df1e3b67882a Ran 2to3 from Python 3.2.3.
Pascal Volk <user@localhost.localdomain.org>
parents: 568
diff changeset
    63
                             "be localhost."), DOMAIN_INVALID)
480
099de308fd98 VMM/relocated: Don't accept something@localhost as destination.
Pascal Volk <user@localhost.localdomain.org>
parents: 417
diff changeset
    64
            self._dest = destination
76
14c0a092d7d2 * 'VirtualMailManager/EmailAddress.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff changeset
    65
250
73cd082cd724 VMM/{Account,Alias,Relocated}: added a address property to the classes
Pascal Volk <neverseen@users.sourceforge.net>
parents: 249
diff changeset
    66
    @property
73cd082cd724 VMM/{Account,Alias,Relocated}: added a address property to the classes
Pascal Volk <neverseen@users.sourceforge.net>
parents: 249
diff changeset
    67
    def address(self):
73cd082cd724 VMM/{Account,Alias,Relocated}: added a address property to the classes
Pascal Volk <neverseen@users.sourceforge.net>
parents: 249
diff changeset
    68
        """The Relocated's EmailAddress instance."""
73cd082cd724 VMM/{Account,Alias,Relocated}: added a address property to the classes
Pascal Volk <neverseen@users.sourceforge.net>
parents: 249
diff changeset
    69
        return self._addr
73cd082cd724 VMM/{Account,Alias,Relocated}: added a address property to the classes
Pascal Volk <neverseen@users.sourceforge.net>
parents: 249
diff changeset
    70
215
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 213
diff changeset
    71
    def set_destination(self, destination):
197
d2712e8c724e VMM/{Relocated,Handler}: reworked Relocated class, adjusted Handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 185
diff changeset
    72
        """Sets/updates the new address of the relocated user."""
d2712e8c724e VMM/{Relocated,Handler}: reworked Relocated class, adjusted Handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 185
diff changeset
    73
        update = False
480
099de308fd98 VMM/relocated: Don't accept something@localhost as destination.
Pascal Volk <user@localhost.localdomain.org>
parents: 417
diff changeset
    74
        assert isinstance(destination, DestinationEmailAddress)
099de308fd98 VMM/relocated: Don't accept something@localhost as destination.
Pascal Volk <user@localhost.localdomain.org>
parents: 417
diff changeset
    75
        if destination.at_localhost:
643
df1e3b67882a Ran 2to3 from Python 3.2.3.
Pascal Volk <user@localhost.localdomain.org>
parents: 568
diff changeset
    76
            raise RErr(_("The destination address' domain name must not be "
df1e3b67882a Ran 2to3 from Python 3.2.3.
Pascal Volk <user@localhost.localdomain.org>
parents: 568
diff changeset
    77
                         "localhost."), DOMAIN_INVALID)
202
43e7c8b440da VMM/Relocated: small code cleanups and cosmetic.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 198
diff changeset
    78
        if self._addr == destination:
643
df1e3b67882a Ran 2to3 from Python 3.2.3.
Pascal Volk <user@localhost.localdomain.org>
parents: 568
diff changeset
    79
            raise RErr(_('Address and destination are identical.'),
216
0c8c053b451c Moved VirtualMailManager/Exceptions to VirtualMailManager/errors.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 215
diff changeset
    80
                       RELOCATED_ADDR_DEST_IDENTICAL)
202
43e7c8b440da VMM/Relocated: small code cleanups and cosmetic.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 198
diff changeset
    81
        if self._dest:
43e7c8b440da VMM/Relocated: small code cleanups and cosmetic.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 198
diff changeset
    82
            if self._dest == destination:
643
df1e3b67882a Ran 2to3 from Python 3.2.3.
Pascal Volk <user@localhost.localdomain.org>
parents: 568
diff changeset
    83
                raise RErr(_("The relocated user '%s' already exists.") %
216
0c8c053b451c Moved VirtualMailManager/Exceptions to VirtualMailManager/errors.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 215
diff changeset
    84
                           self._addr, RELOCATED_EXISTS)
197
d2712e8c724e VMM/{Relocated,Handler}: reworked Relocated class, adjusted Handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 185
diff changeset
    85
            else:
d2712e8c724e VMM/{Relocated,Handler}: reworked Relocated class, adjusted Handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 185
diff changeset
    86
                self._dest = destination
202
43e7c8b440da VMM/Relocated: small code cleanups and cosmetic.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 198
diff changeset
    87
                update = True
76
14c0a092d7d2 * 'VirtualMailManager/EmailAddress.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff changeset
    88
        else:
202
43e7c8b440da VMM/Relocated: small code cleanups and cosmetic.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 198
diff changeset
    89
            self._dest = destination
197
d2712e8c724e VMM/{Relocated,Handler}: reworked Relocated class, adjusted Handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 185
diff changeset
    90
d2712e8c724e VMM/{Relocated,Handler}: reworked Relocated class, adjusted Handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 185
diff changeset
    91
        dbc = self._dbh.cursor()
d2712e8c724e VMM/{Relocated,Handler}: reworked Relocated class, adjusted Handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 185
diff changeset
    92
        if not update:
379
7518d927d443 VMM/*: Use target column names in all INSERT statements.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 366
diff changeset
    93
            dbc.execute('INSERT INTO relocated (gid, address, destination) '
7518d927d443 VMM/*: Use target column names in all INSERT statements.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 366
diff changeset
    94
                        'VALUES (%s, %s, %s)',
352
22d115376e4d VMM/…: Provide parameters as tuple to cursor.execute().
Pascal Volk <neverseen@users.sourceforge.net>
parents: 341
diff changeset
    95
                        (self._gid, self._addr.localpart, str(self._dest)))
197
d2712e8c724e VMM/{Relocated,Handler}: reworked Relocated class, adjusted Handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 185
diff changeset
    96
        else:
290
e2785e04f92e VMM/…: re-indented long queries and error messages.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 250
diff changeset
    97
            dbc.execute('UPDATE relocated SET destination = %s WHERE gid = %s '
352
22d115376e4d VMM/…: Provide parameters as tuple to cursor.execute().
Pascal Volk <neverseen@users.sourceforge.net>
parents: 341
diff changeset
    98
                        'AND address = %s',
22d115376e4d VMM/…: Provide parameters as tuple to cursor.execute().
Pascal Volk <neverseen@users.sourceforge.net>
parents: 341
diff changeset
    99
                        (str(self._dest), self._gid, self._addr.localpart))
197
d2712e8c724e VMM/{Relocated,Handler}: reworked Relocated class, adjusted Handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 185
diff changeset
   100
        self._dbh.commit()
d2712e8c724e VMM/{Relocated,Handler}: reworked Relocated class, adjusted Handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 185
diff changeset
   101
        dbc.close()
76
14c0a092d7d2 * 'VirtualMailManager/EmailAddress.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff changeset
   102
215
33f727efa7c4 PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 213
diff changeset
   103
    def get_info(self):
197
d2712e8c724e VMM/{Relocated,Handler}: reworked Relocated class, adjusted Handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 185
diff changeset
   104
        """Returns the address to which mails should be sent."""
202
43e7c8b440da VMM/Relocated: small code cleanups and cosmetic.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 198
diff changeset
   105
        if not self._dest:
643
df1e3b67882a Ran 2to3 from Python 3.2.3.
Pascal Volk <user@localhost.localdomain.org>
parents: 568
diff changeset
   106
            raise RErr(_("The relocated user '%s' does not exist.") %
216
0c8c053b451c Moved VirtualMailManager/Exceptions to VirtualMailManager/errors.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 215
diff changeset
   107
                       self._addr, NO_SUCH_RELOCATED)
202
43e7c8b440da VMM/Relocated: small code cleanups and cosmetic.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 198
diff changeset
   108
        return self._dest
76
14c0a092d7d2 * 'VirtualMailManager/EmailAddress.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff changeset
   109
14c0a092d7d2 * 'VirtualMailManager/EmailAddress.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff changeset
   110
    def delete(self):
197
d2712e8c724e VMM/{Relocated,Handler}: reworked Relocated class, adjusted Handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 185
diff changeset
   111
        """Deletes the relocated entry from the database."""
d2712e8c724e VMM/{Relocated,Handler}: reworked Relocated class, adjusted Handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 185
diff changeset
   112
        if not self._dest:
643
df1e3b67882a Ran 2to3 from Python 3.2.3.
Pascal Volk <user@localhost.localdomain.org>
parents: 568
diff changeset
   113
            raise RErr(_("The relocated user '%s' does not exist.") %
249
bb7d9906c529 VMM/Relocated: implemented Relocated.__nonzero__() for truth value testing.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 222
diff changeset
   114
                       self._addr, NO_SUCH_RELOCATED)
76
14c0a092d7d2 * 'VirtualMailManager/EmailAddress.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff changeset
   115
        dbc = self._dbh.cursor()
290
e2785e04f92e VMM/…: re-indented long queries and error messages.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 250
diff changeset
   116
        dbc.execute('DELETE FROM relocated WHERE gid = %s AND address = %s',
352
22d115376e4d VMM/…: Provide parameters as tuple to cursor.execute().
Pascal Volk <neverseen@users.sourceforge.net>
parents: 341
diff changeset
   117
                    (self._gid, self._addr.localpart))
197
d2712e8c724e VMM/{Relocated,Handler}: reworked Relocated class, adjusted Handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 185
diff changeset
   118
        if dbc.rowcount > 0:
76
14c0a092d7d2 * 'VirtualMailManager/EmailAddress.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff changeset
   119
            self._dbh.commit()
197
d2712e8c724e VMM/{Relocated,Handler}: reworked Relocated class, adjusted Handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 185
diff changeset
   120
        dbc.close()
d2712e8c724e VMM/{Relocated,Handler}: reworked Relocated class, adjusted Handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 185
diff changeset
   121
        self._dest = None
76
14c0a092d7d2 * 'VirtualMailManager/EmailAddress.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff changeset
   122
197
d2712e8c724e VMM/{Relocated,Handler}: reworked Relocated class, adjusted Handler.
Pascal Volk <neverseen@users.sourceforge.net>
parents: 185
diff changeset
   123
del _