diff options
-rw-r--r-- | pykolab/cli/cmd_delete_message.py | 69 | ||||
-rw-r--r-- | pykolab/cli/cmd_list_messages.py | 96 | ||||
-rw-r--r-- | pykolab/imap/__init__.py | 5 | ||||
-rw-r--r-- | tests/functional/test_wallace/test_002_footer.py | 2 |
4 files changed, 171 insertions, 1 deletions
diff --git a/pykolab/cli/cmd_delete_message.py b/pykolab/cli/cmd_delete_message.py new file mode 100644 index 0000000..105cfd9 --- /dev/null +++ b/pykolab/cli/cmd_delete_message.py @@ -0,0 +1,69 @@ +# -*- coding: utf-8 -*- +# Copyright 2010-2012 Kolab Systems AG (http://www.kolabsys.com) +# +# Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen a kolabsys.com> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 3 or, at your option, any later version +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Library General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# + +import sys + +import commands + +import pykolab + +from pykolab.imap import IMAP +from pykolab.translate import _ + +log = pykolab.getLogger('pykolab.cli') +conf = pykolab.getConf() + +def __init__(): + commands.register('delete_message', execute, description=description()) + +def description(): + return _("Delete a message from a folder") + +def execute(*args, **kw): + """ + Delete a message from a mail folder + """ + + try: + folder = conf.cli_args.pop(0) + + try: + uid = conf.cli_args.pop(0) + except: + log.error(_("Specify a UID")) + sys.exit(1) + except: + log.error(_("Specify a folder")) + sys.exit(1) + + imap = IMAP() + imap.connect() + + _folder = imap.lm(folder) + + if _folder == None or _folder == []: + log.error(_("No such folder")) + sys.exit(1) + + imap.set_acl(folder, 'cyrus-admin', 'lrswt') + + imap.select(folder) + + imap.store(uid, '+FLAGS', '\\Deleted') + diff --git a/pykolab/cli/cmd_list_messages.py b/pykolab/cli/cmd_list_messages.py new file mode 100644 index 0000000..586e2ae --- /dev/null +++ b/pykolab/cli/cmd_list_messages.py @@ -0,0 +1,96 @@ +# -*- coding: utf-8 -*- +# Copyright 2010-2012 Kolab Systems AG (http://www.kolabsys.com) +# +# Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen a kolabsys.com> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 3 or, at your option, any later version +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Library General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# + +import sys + +import commands + +import pykolab + +from pykolab.imap import IMAP +from pykolab.translate import _ + +log = pykolab.getLogger('pykolab.cli') +conf = pykolab.getConf() + +def __init__(): + commands.register('list_messages', execute, description=description()) + +def cli_options(): + my_option_group = conf.add_cli_parser_option_group(_("CLI Options")) + my_option_group.add_option( + '--deleted', + dest = "list_deleted", + action = "store_true", + default = False, + help = _("Include messages flagged as \Deleted") + ) + +def description(): + return _("List messages in a folder") + +def execute(*args, **kw): + """ + List messages in a folder + """ + + try: + folder = conf.cli_args.pop(0) + + except: + log.error(_("Specify a folder")) + sys.exit(1) + + imap = IMAP() + imap.connect() + + _folder = imap.lm(folder) + + if _folder == None or _folder == []: + log.error(_("No such folder")) + sys.exit(1) + + imap.set_acl(folder, 'cyrus-admin', 'lrs') + + imap.select(folder) + + if conf.list_deleted: + typ, data = imap.search(None, 'ALL') + else: + typ, data = imap.search(None, '(ALL UNDELETED)') + + num_messages = len(data[0].split()) + + for num in data[0].split(): + typ, flags = imap.fetch(num, 'FLAGS') + flags = flags[0].split() + if len(flags) >= 3: + # Any flags are set + if flags[2] == '(\\Deleted))': + print num, '\Deleted' + elif flags[2] == '(\\Deleted': + print num, '\Deleted' + elif '\\Deleted' in flags[3:]: + print num, '\Deleted' + elif '\\Deleted))' in flags[3:]: + print num, '\Deleted' + else: + print num + else: + print num diff --git a/pykolab/imap/__init__.py b/pykolab/imap/__init__.py index baf7b30..20e284b 100644 --- a/pykolab/imap/__init__.py +++ b/pykolab/imap/__init__.py @@ -228,6 +228,11 @@ class IMAP(object): def __getattr__(self, name): if hasattr(self.imap, name): return getattr(self.imap, name) + elif hasattr(self.imap, 'm'): + if hasattr(self.imap.m, name): + return getattr(self.imap.m, name) + else: + raise AttributeError, _("%r has no attribute %s") % (self,name) else: raise AttributeError, _("%r has no attribute %s") % (self,name) diff --git a/tests/functional/test_wallace/test_002_footer.py b/tests/functional/test_wallace/test_002_footer.py index f888eb0..ac3e1ba 100644 --- a/tests/functional/test_wallace/test_002_footer.py +++ b/tests/functional/test_wallace/test_002_footer.py @@ -121,7 +121,7 @@ class TestWallaceFooter(unittest.TestCase): folders = imap.lm('user/%(local)s@%(domain)s' % (self.user)) self.assertEqual(len(folders), 1) - + def test_002_send_plaintext(self): subject = "test_002_send_plaintext" body = "This is a test message" |