Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/dax/jmc.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Rousselie <dax@happycoders.org>2008-05-05 23:56:58 +0400
committerDavid Rousselie <dax@happycoders.org>2008-05-05 23:56:58 +0400
commit9f52f9ed7ead6c81cc56d5b19b40e7537d7e37be (patch)
tree55b84b853b3af546017c6e3798a066b7ec43f517
parent3616e35abd9288620d063d02a2cd3dfabc1e8238 (diff)
Raise exception when an IMAP error occurs
darcs-hash:20080505195658-86b55-43e77ad09f160837cadc7b49dd0b88664f7cdaaf.gz
-rw-r--r--src/jmc.egg-info/SOURCES.txt2
-rw-r--r--src/jmc/model/account.py40
-rw-r--r--src/jmc/model/tests/account.py58
3 files changed, 80 insertions, 20 deletions
diff --git a/src/jmc.egg-info/SOURCES.txt b/src/jmc.egg-info/SOURCES.txt
index f8645cb..691d4d1 100644
--- a/src/jmc.egg-info/SOURCES.txt
+++ b/src/jmc.egg-info/SOURCES.txt
@@ -17,4 +17,4 @@ src/jmc/jabber/feeder.py
src/jmc/jabber/message.py
src/jmc/jabber/presence.py
src/jmc/model/__init__.py
-src/jmc/model/account.py
+src/jmc/model/account.py \ No newline at end of file
diff --git a/src/jmc/model/account.py b/src/jmc/model/account.py
index ad4762a..ce32b7a 100644
--- a/src/jmc/model/account.py
+++ b/src/jmc/model/account.py
@@ -242,7 +242,7 @@ class MailAccount(PresenceAccount):
def set_status(self, status):
"""Set current Jabber status"""
-
+
if status != account.OFFLINE and self._status == account.OFFLINE:
PresenceAccount.set_status(self, status)
self.first_check = True
@@ -425,20 +425,21 @@ class IMAPAccount(MailAccount):
of tuple (email_index, email_subject)
"""
self.__logger.debug("Getting mail list summary")
- typ, count = self.connection.select(self._get_real_mailbox(), True)
- result = []
+ typ, data = self.connection.select(self._get_real_mailbox(), True)
if typ == "OK":
typ, data = self.connection.fetch(str(start_index) + ":" +
str(end_index),
"RFC822.header")
if typ == 'OK':
+ result = []
index = start_index
for _email in data:
if isinstance(_email, types.TupleType) and len(_email) == 2:
subject_header = self.get_decoded_header(email.message_from_string(_email[1])["Subject"])[0]
result.append((str(index), subject_header))
index += 1
- return result
+ return result
+ raise Exception(data[0])
def get_new_mail_list(self):
"""
@@ -446,28 +447,31 @@ class IMAPAccount(MailAccount):
"""
self.__logger.debug("Getting mail list")
typ, data = self.connection.select(self._get_real_mailbox())
- typ, data = self.connection.search(None, 'RECENT')
if typ == 'OK':
- return data[0].split(' ')
- return None
+ typ, data = self.connection.search(None, 'RECENT')
+ if typ == 'OK':
+ return data[0].split(' ')
+ raise Exception(data[0])
def get_mail(self, index):
self.__logger.debug("Getting mail " + str(index))
typ, data = self.connection.select(self._get_real_mailbox(), True)
- typ, data = self.connection.fetch(index, '(RFC822)')
if typ == 'OK':
- return self.format_message(\
- email.message_from_string(data[0][1]))
- return u"Error while fetching mail " + str(index)
+ typ, data = self.connection.fetch(index, '(RFC822)')
+ if typ == 'OK':
+ return self.format_message(\
+ email.message_from_string(data[0][1]))
+ raise Exception(data[0] + " (email " + str(index) + ")")
def get_mail_summary(self, index):
self.__logger.debug("Getting mail summary " + str(index))
typ, data = self.connection.select(self._get_real_mailbox(), True)
- typ, data = self.connection.fetch(index, '(RFC822.header)')
if typ == 'OK':
- return self.format_message_summary(\
- email.message_from_string(data[0][1]))
- return u"Error while fetching mail " + str(index)
+ typ, data = self.connection.fetch(index, '(RFC822.header)')
+ if typ == 'OK':
+ return self.format_message_summary(\
+ email.message_from_string(data[0][1]))
+ raise Exception(data[0] + " (email " + str(index) + ")")
def get_next_mail_index(self, mail_list):
"""
@@ -548,7 +552,7 @@ class IMAPAccount(MailAccount):
# replace any previous delimiter in self.mailbox by "/"
if self.delimiter != "/":
self.mailbox = self.mailbox.replace(self.delimiter, "/")
-
+
class POP3Account(MailAccount):
nb_mail = IntCol(default=0)
@@ -646,7 +650,7 @@ class POP3Account(MailAccount):
mail indexes in the mailbox. If the mailbox has been check by another
client, self.nb_mail should be < to self.lastmail (last mail_list
index that has been returned), so self.lastmail is set to 0 to return
- indexes from the begining of the mail_list array. If the mailbox has
+ indexes from the begining of the mail_list array. If the mailbox has
not been checked by another client since last check from JMC, then
only new email indexes of mail_list should be returned. self.lastmail
sill contains old nb_mail value (it has stop at this value in the last
@@ -670,7 +674,7 @@ class POP3Account(MailAccount):
Only emails indexes form 8 to 13 are returned
- a checking done by another client is dectected only if self.nb_mail
become < to self.lastmail. If the number of new emails is superior to
- self.lastmail after another client has check the mailbox, emails
+ self.lastmail after another client has check the mailbox, emails
indexes from 0 to self.lastmail are not sent through JMC.
"""
while self.nb_mail != self.lastmail:
diff --git a/src/jmc/model/tests/account.py b/src/jmc/model/tests/account.py
index 4808c33..09d85ac 100644
--- a/src/jmc/model/tests/account.py
+++ b/src/jmc/model/tests/account.py
@@ -431,6 +431,10 @@ class IMAPAccount_TestCase(InheritableAccount_TestCase):
('2', 'mail subject 2')]))
test_func()
+ def test_get_mail_list_summary_inbox_does_not_exist(self):
+ self.__test_select_inbox_does_not_exist(\
+ lambda: self.imap_account.get_mail_list_summary(), readonly=True)
+
def test_get_mail_list_summary_start_index(self):
test_func = self.make_test(\
[lambda data: "* 42 EXISTS\r\n* 1 RECENT\r\n* OK" +\
@@ -487,6 +491,30 @@ class IMAPAccount_TestCase(InheritableAccount_TestCase):
['9', '10']))
test_func()
+ def __test_select_inbox_does_not_exist(self, tested_func,
+ exception_message="Mailbox does not exist",
+ readonly=False):
+ def check_func(self):
+ try:
+ tested_func()
+ except Exception, e:
+ self.assertEquals(e.message, exception_message)
+ return
+ self.fail("No exception raised when selecting non existing mailbox")
+ test_func = self.make_test(\
+ [lambda data: "* 42 EXISTS\n* 1 RECENT\n* OK" + \
+ " [UNSEEN 9]\n* FLAGS (\Deleted \Seen\*)\n*" + \
+ " OK [PERMANENTFLAGS (\Deleted \Seen\*)\n" + \
+ data.split()[0] + \
+ " NO Mailbox does not exist \n"],
+ ["^[^ ]* " + (readonly and "EXAMINE" or "SELECT") + " INBOX"],
+ check_func)
+ test_func()
+
+ def test_get_new_mail_list_inbox_does_not_exist(self):
+ self.__test_select_inbox_does_not_exist(\
+ lambda: self.imap_account_get_new_mail_list())
+
def test_get_new_mail_list_delimiter1(self):
self.imap_account.mailbox = "INBOX/dir1/subdir2"
self.imap_account.delimiter = "."
@@ -541,6 +569,29 @@ class IMAPAccount_TestCase(InheritableAccount_TestCase):
u"None")))
test_func()
+ def test_get_mail_summary_inbox_does_not_exist(self):
+ self.__test_select_inbox_does_not_exist(\
+ lambda: self.imap_account.get_mail_summary(1),
+ "Mailbox does not exist (email 1)", True)
+
+ def test_get_new_mail_list_inbox_does_not_exist(self):
+ def check_func(self):
+ try:
+ self.imap_account.get_new_mail_list()
+ except Exception, e:
+ self.assertEquals(e.message, "Mailbox does not exist")
+ return
+ self.fail("No exception raised when selecting non existing mailbox")
+ test_func = self.make_test(\
+ [lambda data: "* 42 EXISTS\n* 1 RECENT\n* OK" + \
+ " [UNSEEN 9]\n* FLAGS (\Deleted \Seen\*)\n*" + \
+ " OK [PERMANENTFLAGS (\Deleted \Seen\*)\n" + \
+ data.split()[0] + \
+ " NO Mailbox does not exist \n"],
+ ["^[^ ]* SELECT INBOX"],
+ check_func)
+ test_func()
+
def test_get_mail_summary_delimiter(self):
self.imap_account.mailbox = "INBOX/dir1/subdir2"
self.imap_account.delimiter = "."
@@ -579,6 +630,11 @@ class IMAPAccount_TestCase(InheritableAccount_TestCase):
u"None")))
test_func()
+ def test_get_mail_inbox_does_not_exist(self):
+ self.__test_select_inbox_does_not_exist(\
+ lambda: self.imap_account.get_mail(1),
+ "Mailbox does not exist (email 1)", True)
+
def test_get_mail_delimiter(self):
self.imap_account.mailbox = "INBOX/dir1/subdir2"
self.imap_account.delimiter = "."
@@ -681,7 +737,7 @@ class IMAPAccount_TestCase(InheritableAccount_TestCase):
result.append(elt)
self.assertEquals(mail_list, [])
self.assertEquals(result, original_mail_list)
-
+
def test_get_next_mail_index_empty(self):
"""
Test get_next_mail_index with empty mail_list parameter.