author | Pascal Volk <neverseen@users.sourceforge.net> |
Sun, 16 Oct 2011 18:12:55 +0000 | |
branch | v0.6.x |
changeset 430 | c11edcfc6e5f |
parent 425 | 8394e222aba3 |
child 568 | 14abdd04ddf5 |
permissions | -rw-r--r-- |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
1 |
# -*- coding: UTF-8 -*- |
366
d6573da35b5f
Updated copyright notices to include the year 2011.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
352
diff
changeset
|
2 |
# Copyright (c) 2007 - 2011, Pascal Volk |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
3 |
# See COPYING for distribution information. |
196
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
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.alias |
011066435e6f
VMM/*: Made all modules names lowercase, adjusted imports.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
316
diff
changeset
|
6 |
~~~~~~~~~~~~~~~~~~~~~~~~ |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
7 |
|
196
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
185
diff
changeset
|
8 |
Virtual Mail Manager's Alias class to manage e-mail aliases. |
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
185
diff
changeset
|
9 |
""" |
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
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 |
424
46c296c6e231
VMM/alias: Alias._load_dests() use class DestinationEmailAddress
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
12 |
from VirtualMailManager.emailaddress import \ |
46c296c6e231
VMM/alias: Alias._load_dests() use class DestinationEmailAddress
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
13 |
EmailAddress, DestinationEmailAddress as DestAddr |
216
0c8c053b451c
Moved VirtualMailManager/Exceptions to VirtualMailManager/errors.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
215
diff
changeset
|
14 |
from VirtualMailManager.errors import AliasError as AErr |
320
011066435e6f
VMM/*: Made all modules names lowercase, adjusted imports.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
316
diff
changeset
|
15 |
from VirtualMailManager.ext.postconf import Postconf |
221
371ae0b4443d
VMM/Alias: renamed Alias.add_destination() to add_destinations().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
216
diff
changeset
|
16 |
from VirtualMailManager.pycompat import all |
316
31d8931dc535
VMM/constants: Replaced the constants subpackage by a module.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
295
diff
changeset
|
17 |
from VirtualMailManager.constants import \ |
222
d0c16e70a9fb
VMM/Domain: get_gid() return 0 instead of raising an Exception,
Pascal Volk <neverseen@users.sourceforge.net>
parents:
221
diff
changeset
|
18 |
ALIAS_EXCEEDS_EXPANSION_LIMIT, NO_SUCH_ALIAS, NO_SUCH_DOMAIN |
196
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
185
diff
changeset
|
19 |
|
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
185
diff
changeset
|
20 |
|
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
185
diff
changeset
|
21 |
_ = lambda msg: msg |
281
59ff7c719697
VMM/Alias: moved the postconf stuff from the Handlers to Alias class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
257
diff
changeset
|
22 |
cfg_dget = lambda option: None |
196
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
185
diff
changeset
|
23 |
|
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
24 |
|
122
30abf0abf8f8
Converted to new-style class, added __slots__.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
102
diff
changeset
|
25 |
class Alias(object): |
76
14c0a092d7d2
* 'VirtualMailManager/EmailAddress.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
52
diff
changeset
|
26 |
"""Class to manage e-mail aliases.""" |
196
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
185
diff
changeset
|
27 |
__slots__ = ('_addr', '_dests', '_gid', '_dbh') |
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
185
diff
changeset
|
28 |
|
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
185
diff
changeset
|
29 |
def __init__(self, dbh, address): |
213
1a9fee6b93bc
VMM:/{Alias,EmailAddress,Relocated}: use assertions for argument checks.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
203
diff
changeset
|
30 |
assert isinstance(address, EmailAddress) |
203
4d601240b7db
VMM/Alias: small code cleanups and cosmetic.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
198
diff
changeset
|
31 |
self._addr = address |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
32 |
self._dbh = dbh |
198
02d467e4fbab
VMM/Domain: added function get_gid() to the Domain module.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
196
diff
changeset
|
33 |
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:
221
diff
changeset
|
34 |
if not self._gid: |
417
8209da83e256
VMM: Updated some messages. (doesn't, isn't) -> (does not, is not)
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
35 |
raise AErr(_(u"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:
221
diff
changeset
|
36 |
self._addr.domainname, NO_SUCH_DOMAIN) |
196
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
185
diff
changeset
|
37 |
self._dests = [] |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
38 |
|
322
94bd10e237e5
VMM/…: More PEP-8 fixes; eliminated __names.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
39 |
self._load_dests() |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
40 |
|
322
94bd10e237e5
VMM/…: More PEP-8 fixes; eliminated __names.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
41 |
def _load_dests(self): |
196
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
185
diff
changeset
|
42 |
"""Loads all known destination addresses into the _dests list.""" |
88
b3debcfea7bc
* 'VirtualMailManager/Alias.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
82
diff
changeset
|
43 |
dbc = self._dbh.cursor() |
290
e2785e04f92e
VMM/…: re-indented long queries and error messages.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
281
diff
changeset
|
44 |
dbc.execute('SELECT destination FROM alias WHERE gid = %s AND ' |
352
22d115376e4d
VMM/…: Provide parameters as tuple to cursor.execute().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
322
diff
changeset
|
45 |
'address = %s', (self._gid, self._addr.localpart)) |
295
18086c6a2521
VMM/maillocation: Code cleanups.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
290
diff
changeset
|
46 |
dests = dbc.fetchall() |
196
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
185
diff
changeset
|
47 |
if dbc.rowcount > 0: |
424
46c296c6e231
VMM/alias: Alias._load_dests() use class DestinationEmailAddress
Pascal Volk <neverseen@users.sourceforge.net>
parents:
417
diff
changeset
|
48 |
self._dests.extend(DestAddr(dest[0], self._dbh) for dest in dests) |
88
b3debcfea7bc
* 'VirtualMailManager/Alias.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
82
diff
changeset
|
49 |
dbc.close() |
196
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
185
diff
changeset
|
50 |
|
322
94bd10e237e5
VMM/…: More PEP-8 fixes; eliminated __names.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
51 |
def _check_expansion(self, count_new): |
196
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
185
diff
changeset
|
52 |
"""Checks the current expansion limit of the alias.""" |
281
59ff7c719697
VMM/Alias: moved the postconf stuff from the Handlers to Alias class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
257
diff
changeset
|
53 |
postconf = Postconf(cfg_dget('bin.postconf')) |
59ff7c719697
VMM/Alias: moved the postconf stuff from the Handlers to Alias class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
257
diff
changeset
|
54 |
limit = long(postconf.read('virtual_alias_expansion_limit')) |
196
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
185
diff
changeset
|
55 |
dcount = len(self._dests) |
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
185
diff
changeset
|
56 |
failed = False |
221
371ae0b4443d
VMM/Alias: renamed Alias.add_destination() to add_destinations().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
216
diff
changeset
|
57 |
if dcount == limit or dcount + count_new > limit: |
196
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
185
diff
changeset
|
58 |
failed = True |
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
185
diff
changeset
|
59 |
errmsg = _( |
417
8209da83e256
VMM: Updated some messages. (doesn't, isn't) -> (does not, is not)
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
60 |
u"""Cannot add %(count_new)i new destination(s) to alias '%(address)s'. |
196
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
185
diff
changeset
|
61 |
Currently this alias expands into %(count)i/%(limit)i recipients. |
221
371ae0b4443d
VMM/Alias: renamed Alias.add_destination() to add_destinations().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
216
diff
changeset
|
62 |
%(count_new)i additional destination(s) will render this alias unusable. |
196
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
185
diff
changeset
|
63 |
Hint: Increase Postfix' virtual_alias_expansion_limit""") |
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
185
diff
changeset
|
64 |
elif dcount > limit: |
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
185
diff
changeset
|
65 |
failed = True |
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
185
diff
changeset
|
66 |
errmsg = _( |
417
8209da83e256
VMM: Updated some messages. (doesn't, isn't) -> (does not, is not)
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
67 |
u"""Cannot add %(count_new)i new destination(s) to alias '%(address)s'. |
257
5b8fde01e4f0
VMM/Alias.py: Replaced some %r with '%s'.
Tobias Berling <mail@tobiasberling.de>
parents:
250
diff
changeset
|
68 |
This alias already exceeds its expansion limit (%(count)i/%(limit)i). |
196
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
185
diff
changeset
|
69 |
So its unusable, all messages addressed to this alias will be bounced. |
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
185
diff
changeset
|
70 |
Hint: Delete some destination addresses.""") |
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
185
diff
changeset
|
71 |
if failed: |
257
5b8fde01e4f0
VMM/Alias.py: Replaced some %r with '%s'.
Tobias Berling <mail@tobiasberling.de>
parents:
250
diff
changeset
|
72 |
raise AErr(errmsg % {'address': self._addr, 'count': dcount, |
221
371ae0b4443d
VMM/Alias: renamed Alias.add_destination() to add_destinations().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
216
diff
changeset
|
73 |
'limit': limit, 'count_new': count_new}, |
216
0c8c053b451c
Moved VirtualMailManager/Exceptions to VirtualMailManager/errors.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
215
diff
changeset
|
74 |
ALIAS_EXCEEDS_EXPANSION_LIMIT) |
88
b3debcfea7bc
* 'VirtualMailManager/Alias.py'
Pascal Volk <neverseen@users.sourceforge.net>
parents:
82
diff
changeset
|
75 |
|
322
94bd10e237e5
VMM/…: More PEP-8 fixes; eliminated __names.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
76 |
def _delete(self, destination=None): |
215
33f727efa7c4
PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
213
diff
changeset
|
77 |
"""Deletes a destination from the alias, if ``destination`` is |
33f727efa7c4
PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
213
diff
changeset
|
78 |
not ``None``. If ``destination`` is None, the alias with all |
257
5b8fde01e4f0
VMM/Alias.py: Replaced some %r with '%s'.
Tobias Berling <mail@tobiasberling.de>
parents:
250
diff
changeset
|
79 |
its destination addresses will be deleted. |
215
33f727efa7c4
PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
213
diff
changeset
|
80 |
|
33f727efa7c4
PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
213
diff
changeset
|
81 |
""" |
196
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
185
diff
changeset
|
82 |
dbc = self._dbh.cursor() |
203
4d601240b7db
VMM/Alias: small code cleanups and cosmetic.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
198
diff
changeset
|
83 |
if not destination: |
290
e2785e04f92e
VMM/…: re-indented long queries and error messages.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
281
diff
changeset
|
84 |
dbc.execute('DELETE FROM alias WHERE gid = %s AND address = %s', |
352
22d115376e4d
VMM/…: Provide parameters as tuple to cursor.execute().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
322
diff
changeset
|
85 |
(self._gid, self._addr.localpart)) |
196
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
185
diff
changeset
|
86 |
else: |
290
e2785e04f92e
VMM/…: re-indented long queries and error messages.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
281
diff
changeset
|
87 |
dbc.execute('DELETE FROM alias WHERE gid = %s AND address = %s ' |
352
22d115376e4d
VMM/…: Provide parameters as tuple to cursor.execute().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
322
diff
changeset
|
88 |
'AND destination = %s', |
22d115376e4d
VMM/…: Provide parameters as tuple to cursor.execute().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
322
diff
changeset
|
89 |
(self._gid, self._addr.localpart, str(destination))) |
196
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
185
diff
changeset
|
90 |
if dbc.rowcount > 0: |
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
185
diff
changeset
|
91 |
self._dbh.commit() |
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
185
diff
changeset
|
92 |
dbc.close() |
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
185
diff
changeset
|
93 |
|
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
185
diff
changeset
|
94 |
def __len__(self): |
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
185
diff
changeset
|
95 |
"""Returns the number of destinations of the alias.""" |
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
185
diff
changeset
|
96 |
return len(self._dests) |
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
185
diff
changeset
|
97 |
|
250
73cd082cd724
VMM/{Account,Alias,Relocated}: added a address property to the classes
Pascal Volk <neverseen@users.sourceforge.net>
parents:
223
diff
changeset
|
98 |
@property |
73cd082cd724
VMM/{Account,Alias,Relocated}: added a address property to the classes
Pascal Volk <neverseen@users.sourceforge.net>
parents:
223
diff
changeset
|
99 |
def address(self): |
73cd082cd724
VMM/{Account,Alias,Relocated}: added a address property to the classes
Pascal Volk <neverseen@users.sourceforge.net>
parents:
223
diff
changeset
|
100 |
"""The Alias' EmailAddress instance.""" |
73cd082cd724
VMM/{Account,Alias,Relocated}: added a address property to the classes
Pascal Volk <neverseen@users.sourceforge.net>
parents:
223
diff
changeset
|
101 |
return self._addr |
73cd082cd724
VMM/{Account,Alias,Relocated}: added a address property to the classes
Pascal Volk <neverseen@users.sourceforge.net>
parents:
223
diff
changeset
|
102 |
|
281
59ff7c719697
VMM/Alias: moved the postconf stuff from the Handlers to Alias class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
257
diff
changeset
|
103 |
def add_destinations(self, destinations, warnings=None): |
221
371ae0b4443d
VMM/Alias: renamed Alias.add_destination() to add_destinations().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
216
diff
changeset
|
104 |
"""Adds the `EmailAddress`es from *destinations* list to the |
371ae0b4443d
VMM/Alias: renamed Alias.add_destination() to add_destinations().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
216
diff
changeset
|
105 |
destinations of the alias. |
371ae0b4443d
VMM/Alias: renamed Alias.add_destination() to add_destinations().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
216
diff
changeset
|
106 |
|
371ae0b4443d
VMM/Alias: renamed Alias.add_destination() to add_destinations().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
216
diff
changeset
|
107 |
Destinations, that are already assigned to the alias, will be |
371ae0b4443d
VMM/Alias: renamed Alias.add_destination() to add_destinations().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
216
diff
changeset
|
108 |
removed from *destinations*. When done, this method will return |
257
5b8fde01e4f0
VMM/Alias.py: Replaced some %r with '%s'.
Tobias Berling <mail@tobiasberling.de>
parents:
250
diff
changeset
|
109 |
a set with all destinations, that were saved in the database. |
221
371ae0b4443d
VMM/Alias: renamed Alias.add_destination() to add_destinations().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
216
diff
changeset
|
110 |
""" |
371ae0b4443d
VMM/Alias: renamed Alias.add_destination() to add_destinations().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
216
diff
changeset
|
111 |
destinations = set(destinations) |
371ae0b4443d
VMM/Alias: renamed Alias.add_destination() to add_destinations().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
216
diff
changeset
|
112 |
assert destinations and \ |
371ae0b4443d
VMM/Alias: renamed Alias.add_destination() to add_destinations().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
216
diff
changeset
|
113 |
all(isinstance(dest, EmailAddress) for dest in destinations) |
371ae0b4443d
VMM/Alias: renamed Alias.add_destination() to add_destinations().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
216
diff
changeset
|
114 |
if not warnings is None: |
371ae0b4443d
VMM/Alias: renamed Alias.add_destination() to add_destinations().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
216
diff
changeset
|
115 |
assert isinstance(warnings, list) |
371ae0b4443d
VMM/Alias: renamed Alias.add_destination() to add_destinations().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
216
diff
changeset
|
116 |
if self._addr in destinations: |
371ae0b4443d
VMM/Alias: renamed Alias.add_destination() to add_destinations().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
216
diff
changeset
|
117 |
destinations.remove(self._addr) |
371ae0b4443d
VMM/Alias: renamed Alias.add_destination() to add_destinations().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
216
diff
changeset
|
118 |
if not warnings is None: |
371ae0b4443d
VMM/Alias: renamed Alias.add_destination() to add_destinations().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
216
diff
changeset
|
119 |
warnings.append(self._addr) |
371ae0b4443d
VMM/Alias: renamed Alias.add_destination() to add_destinations().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
216
diff
changeset
|
120 |
duplicates = destinations.intersection(set(self._dests)) |
371ae0b4443d
VMM/Alias: renamed Alias.add_destination() to add_destinations().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
216
diff
changeset
|
121 |
if duplicates: |
371ae0b4443d
VMM/Alias: renamed Alias.add_destination() to add_destinations().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
216
diff
changeset
|
122 |
destinations.difference_update(set(self._dests)) |
371ae0b4443d
VMM/Alias: renamed Alias.add_destination() to add_destinations().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
216
diff
changeset
|
123 |
if not warnings is None: |
371ae0b4443d
VMM/Alias: renamed Alias.add_destination() to add_destinations().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
216
diff
changeset
|
124 |
warnings.extend(duplicates) |
371ae0b4443d
VMM/Alias: renamed Alias.add_destination() to add_destinations().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
216
diff
changeset
|
125 |
if not destinations: |
371ae0b4443d
VMM/Alias: renamed Alias.add_destination() to add_destinations().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
216
diff
changeset
|
126 |
return destinations |
322
94bd10e237e5
VMM/…: More PEP-8 fixes; eliminated __names.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
127 |
self._check_expansion(len(destinations)) |
203
4d601240b7db
VMM/Alias: small code cleanups and cosmetic.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
198
diff
changeset
|
128 |
dbc = self._dbh.cursor() |
379
7518d927d443
VMM/*: Use target column names in all INSERT statements.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
370
diff
changeset
|
129 |
dbc.executemany("INSERT INTO alias (gid, address, destination) " |
7518d927d443
VMM/*: Use target column names in all INSERT statements.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
370
diff
changeset
|
130 |
"VALUES (%d, '%s', %%s)" % (self._gid, |
7518d927d443
VMM/*: Use target column names in all INSERT statements.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
370
diff
changeset
|
131 |
self._addr.localpart), |
370
1b1f8f0cc687
VMM/alias.py: Fixed TypeError when calling dbc.executemany()
Tobias Berling <t-obi@users.sourceforge.net>
parents:
366
diff
changeset
|
132 |
((str(destination),) for destination in destinations)) |
203
4d601240b7db
VMM/Alias: small code cleanups and cosmetic.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
198
diff
changeset
|
133 |
self._dbh.commit() |
4d601240b7db
VMM/Alias: small code cleanups and cosmetic.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
198
diff
changeset
|
134 |
dbc.close() |
221
371ae0b4443d
VMM/Alias: renamed Alias.add_destination() to add_destinations().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
216
diff
changeset
|
135 |
self._dests.extend(destinations) |
371ae0b4443d
VMM/Alias: renamed Alias.add_destination() to add_destinations().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
216
diff
changeset
|
136 |
return destinations |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
137 |
|
215
33f727efa7c4
PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
213
diff
changeset
|
138 |
def del_destination(self, destination): |
196
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
185
diff
changeset
|
139 |
"""Deletes the specified ``destination`` address from the alias.""" |
213
1a9fee6b93bc
VMM:/{Alias,EmailAddress,Relocated}: use assertions for argument checks.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
203
diff
changeset
|
140 |
assert isinstance(destination, EmailAddress) |
196
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
185
diff
changeset
|
141 |
if not self._dests: |
417
8209da83e256
VMM: Updated some messages. (doesn't, isn't) -> (does not, is not)
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
142 |
raise AErr(_(u"The alias '%s' does not exist.") % self._addr, |
216
0c8c053b451c
Moved VirtualMailManager/Exceptions to VirtualMailManager/errors.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
215
diff
changeset
|
143 |
NO_SUCH_ALIAS) |
196
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
185
diff
changeset
|
144 |
if not destination in self._dests: |
417
8209da83e256
VMM: Updated some messages. (doesn't, isn't) -> (does not, is not)
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
145 |
raise AErr(_(u"The address '%(addr)s' is not a destination of " |
425
8394e222aba3
VMM/alias: Alias.del_destination() corrected the value assignment
Pascal Volk <neverseen@users.sourceforge.net>
parents:
424
diff
changeset
|
146 |
u"the alias '%(alias)s'.") % {'addr': destination, |
8394e222aba3
VMM/alias: Alias.del_destination() corrected the value assignment
Pascal Volk <neverseen@users.sourceforge.net>
parents:
424
diff
changeset
|
147 |
'alias': self._addr}, NO_SUCH_ALIAS) |
322
94bd10e237e5
VMM/…: More PEP-8 fixes; eliminated __names.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
148 |
self._delete(destination) |
196
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
185
diff
changeset
|
149 |
self._dests.remove(destination) |
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
185
diff
changeset
|
150 |
|
215
33f727efa7c4
PEP-8-ified the work of the last days.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
213
diff
changeset
|
151 |
def get_destinations(self): |
196
65a3163bd113
VMM/{Alias,Handler}: reworked Alias class, adjusted Handler class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
185
diff
changeset
|
152 |
"""Returns an iterator for all destinations of the alias.""" |
203
4d601240b7db
VMM/Alias: small code cleanups and cosmetic.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
198
diff
changeset
|
153 |
if not self._dests: |
417
8209da83e256
VMM: Updated some messages. (doesn't, isn't) -> (does not, is not)
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
154 |
raise AErr(_(u"The alias '%s' does not exist.") % self._addr, |
216
0c8c053b451c
Moved VirtualMailManager/Exceptions to VirtualMailManager/errors.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
215
diff
changeset
|
155 |
NO_SUCH_ALIAS) |
203
4d601240b7db
VMM/Alias: small code cleanups and cosmetic.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
198
diff
changeset
|
156 |
return iter(self._dests) |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
157 |
|
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
158 |
def delete(self): |
221
371ae0b4443d
VMM/Alias: renamed Alias.add_destination() to add_destinations().
Pascal Volk <neverseen@users.sourceforge.net>
parents:
216
diff
changeset
|
159 |
"""Deletes the alias with all its destinations.""" |
203
4d601240b7db
VMM/Alias: small code cleanups and cosmetic.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
198
diff
changeset
|
160 |
if not self._dests: |
417
8209da83e256
VMM: Updated some messages. (doesn't, isn't) -> (does not, is not)
Pascal Volk <neverseen@users.sourceforge.net>
parents:
379
diff
changeset
|
161 |
raise AErr(_(u"The alias '%s' does not exist.") % self._addr, |
216
0c8c053b451c
Moved VirtualMailManager/Exceptions to VirtualMailManager/errors.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
215
diff
changeset
|
162 |
NO_SUCH_ALIAS) |
322
94bd10e237e5
VMM/…: More PEP-8 fixes; eliminated __names.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
320
diff
changeset
|
163 |
self._delete() |
203
4d601240b7db
VMM/Alias: small code cleanups and cosmetic.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
198
diff
changeset
|
164 |
del self._dests[:] |
0
bb0aa2102206
Initial import @sf.net
Pascal Volk <neverseen@users.sourceforge.net>
parents:
diff
changeset
|
165 |
|
281
59ff7c719697
VMM/Alias: moved the postconf stuff from the Handlers to Alias class.
Pascal Volk <neverseen@users.sourceforge.net>
parents:
257
diff
changeset
|
166 |
del _, cfg_dget |