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-03-10 22:19:27 +0300
committerDavid Rousselie <dax@happycoders.org>2008-03-10 22:19:27 +0300
commit3616e35abd9288620d063d02a2cd3dfabc1e8238 (patch)
treeea2968d17ce3b41760947a8f236dc17ca5c24d53
parent7cd473ecafc052611ad6d624edd950731d67fd17 (diff)
clean TODO comments
darcs-hash:20080310191927-86b55-89a714525eaf472ba9902a6c5064f81b85dd9900.gz
-rw-r--r--src/jmc/jabber/command.py9
-rw-r--r--src/jmc/jabber/feeder.py13
-rw-r--r--src/jmc/model/account.py63
-rw-r--r--src/jmc/model/tests/account.py96
-rw-r--r--src/jmc/model/tests/server.py4
5 files changed, 157 insertions, 28 deletions
diff --git a/src/jmc/jabber/command.py b/src/jmc/jabber/command.py
index 561b881..cfaaeea 100644
--- a/src/jmc/jabber/command.py
+++ b/src/jmc/jabber/command.py
@@ -53,7 +53,6 @@ class MailCommandManager(JCLCommandManager):
# Delayed to JMC 0.3.1
def execute_retrieve_attachment_1(self, info_query, session_context,
command_node, lang_class):
- # TODO : translate
self.__logger.debug("Executing command 'retrieve-attachment' step 1")
self.add_actions(command_node, [command.ACTION_NEXT])
bare_from_jid = info_query.get_from().bare()
@@ -62,8 +61,8 @@ class MailCommandManager(JCLCommandManager):
MailAccount)
if _account is not None:
result_form = Form(xmlnode_or_type="form",
- title="TODO:TITLE",
- instructions="TODO:INS")
+ title="TITLE",
+ instructions="INS")
field = result_form.add_field(name="attachments",
field_type="list-multi",
label="select attachments")
@@ -75,10 +74,10 @@ class MailCommandManager(JCLCommandManager):
result_form.as_xml(command_node)
return (result_form, [])
else:
- # TODO Error
+ # ERROR
return (None, [])
- # TODO: retrieve step2: Delayed to JMC 0.3.1
+ # retrieve step2: Delayed to JMC 0.3.1
def execute_force_check_root_node(self, info_query, session_context,
command_node, lang_class):
diff --git a/src/jmc/jabber/feeder.py b/src/jmc/jabber/feeder.py
index bac08b4..b469c40 100644
--- a/src/jmc/jabber/feeder.py
+++ b/src/jmc/jabber/feeder.py
@@ -80,7 +80,7 @@ class MailFeeder(Feeder):
"""Check for new emails for given MailAccount and return a list of
those emails or a summary.
"""
- self.__logger.debug("MailFeeder.feed")
+ self.__logger.debug("MailFeeder.feed")
result = []
if _account.first_check and _account.live_email_only:
continue_checking = self.initialize_live_email(_account)
@@ -105,25 +105,20 @@ class MailFeeder(Feeder):
mail_list = _account.get_new_mail_list()
default_lang_class = _account.default_lang_class
if action == MailAccount.RETRIEVE:
- # TODO : use generator (yield)
- mail_index = _account.get_next_mail_index(mail_list)
- while mail_index is not None:
+ for mail_index in _account.get_next_mail_index(mail_list):
(body, email_from) = _account.get_mail(mail_index)
result.append((email_from,
default_lang_class.new_mail_subject\
% (email_from),
body))
- mail_index = _account.get_next_mail_index(mail_list)
elif action == MailAccount.DIGEST:
body = ""
new_mail_count = 0
- mail_index = _account.get_next_mail_index(mail_list)
- while mail_index is not None:
+ for mail_index in _account.get_next_mail_index(mail_list):
(tmp_body, from_email) = \
_account.get_mail_summary(mail_index)
body += tmp_body
body += "\n----------------------------------\n"
- mail_index = _account.get_next_mail_index(mail_list)
new_mail_count += 1
if body != "":
result.append((None,
@@ -152,7 +147,7 @@ class MailSender(HeadlineSender):
def create_full_email_message(self, email_from, email_subject,
email_body, to_account):
"""
- Create a jabber message with email data and XEP-XXX addresses (TODO)
+ Create a jabber message with email data and XEP-0033 addresses
"""
message = MessageSender.create_message(self, to_account,
(email_subject, email_body))
diff --git a/src/jmc/model/account.py b/src/jmc/model/account.py
index 49a30db..ad4762a 100644
--- a/src/jmc/model/account.py
+++ b/src/jmc/model/account.py
@@ -179,7 +179,8 @@ class MailAccount(PresenceAccount):
self.default_lang_class = Lang.en
def _get_register_fields(cls, real_class=None):
- """See Account._get_register_fields
+ """
+ See Account._get_register_fields
"""
def password_post_func(password, default_func, bare_from_jid):
if password is None or password == "":
@@ -239,6 +240,14 @@ class MailAccount(PresenceAccount):
get_presence_actions_fields = classmethod(_get_presence_actions_fields)
+ 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
+ self._status = status
+
def get_decoded_header(self, header, charset_hint=None):
decoded_header = email.Header.decode_header(header)
decoded_header_str = u""
@@ -461,10 +470,13 @@ class IMAPAccount(MailAccount):
return u"Error while fetching mail " + str(index)
def get_next_mail_index(self, mail_list):
- if self.is_mail_list_valid(mail_list):
- return mail_list.pop(0)
- else:
- return None
+ """
+ Mail indexes generator. Return mail_list elements and destroy them
+ when returned.
+ """
+ while self.is_mail_list_valid(mail_list):
+ yield mail_list.pop(0)
+ return
def mark_all_as_read(self):
self.get_new_mail_list()
@@ -629,16 +641,45 @@ class POP3Account(MailAccount):
return u"Error while fetching mail " + str(index)
def get_next_mail_index(self, mail_list):
- if self.is_mail_list_valid(mail_list):
- if self.nb_mail == self.lastmail:
- return None
+ """
+ Return next mail index to be read. mail_list is a generated list of
+ 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
+ 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
+ check) and self.nb_mail contains the new count of new emails:
+ ex:
+ - First check
+ [1, 2, 3, 4, 5, 6, 7]
+ ^ ^
+ | |
+ self.lastmail self.nb_mail
+ - end of first check
+ [1, 2, 3, 4, 5, 6, 7]
+ ^
+ |
+ self.nb_mail == self.lastmail
+ - second check (no check by another client)
+ [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
+ ^ ^
+ | |
+ self.lastmail self.nb_mail
+ 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
+ indexes from 0 to self.lastmail are not sent through JMC.
+ """
+ while self.nb_mail != self.lastmail:
if self.nb_mail < self.lastmail:
self.lastmail = 0
result = int(mail_list[self.lastmail])
self.lastmail += 1
- return result
- else:
- return None
+ yield result
+ return
def mark_all_as_read(self):
self.get_new_mail_list()
diff --git a/src/jmc/model/tests/account.py b/src/jmc/model/tests/account.py
index 1128c21..4808c33 100644
--- a/src/jmc/model/tests/account.py
+++ b/src/jmc/model/tests/account.py
@@ -290,6 +290,77 @@ class POP3Account_TestCase(InheritableAccount_TestCase):
u"mymessage\n",
u"user@test.com")))
+ def test_get_next_mail_index_empty(self):
+ """
+ Test get_next_mail_index with empty mail_list parameter.
+ """
+ mail_list = []
+ self.pop3_account.nb_mail = 0
+ self.pop3_account.lastmail = 0
+ result = []
+ for elt in self.pop3_account.get_next_mail_index(mail_list):
+ result.append(elt)
+ self.assertEquals(result, [])
+
+ def test_get_next_mail_index(self):
+ """
+ Test get_next_mail_index first check.
+ """
+ mail_list = [1, 2, 3, 4]
+ self.pop3_account.nb_mail = 4
+ self.pop3_account.lastmail = 0
+ result = []
+ for elt in self.pop3_account.get_next_mail_index(mail_list):
+ result.append(elt)
+ self.assertEquals(result, [1, 2, 3, 4])
+ self.assertEquals(self.pop3_account.lastmail, 4)
+
+ def test_get_next_mail_index_second_check(self):
+ """
+ Test get_next_mail_index second check (no parallel checking).
+ """
+ mail_list = [1, 2, 3, 4, 5, 6, 7, 8]
+ self.pop3_account.nb_mail = 8
+ self.pop3_account.lastmail = 4
+ result = []
+ for elt in self.pop3_account.get_next_mail_index(mail_list):
+ result.append(elt)
+ self.assertEquals(result, [5, 6, 7, 8])
+ self.assertEquals(self.pop3_account.lastmail, 8)
+
+ def test_get_next_mail_index_second_check_parallel_check(self):
+ """
+ Test get_next_mail_index second check (with parallel checking
+ but not more new emails than last index jmc stopped:
+ 3 new emails after another client checked emails).
+ """
+ mail_list = [1, 2, 3]
+ self.pop3_account.nb_mail = 3
+ self.pop3_account.lastmail = 4
+ result = []
+ for elt in self.pop3_account.get_next_mail_index(mail_list):
+ result.append(elt)
+ self.assertEquals(result, [1, 2, 3])
+ self.assertEquals(self.pop3_account.lastmail, 3)
+
+ def test_get_next_mail_index_second_check_bug_parallel_check(self):
+ """
+ Test get_next_mail_index second check (with parallel checking
+ but with more new emails than last index jmc stopped:
+ 5 new emails after another client checked emails). Cannot make
+ the difference with one new email since last jmc email check!!
+ """
+ mail_list = [1, 2, 3, 4, 5]
+ self.pop3_account.nb_mail = 5
+ self.pop3_account.lastmail = 4
+ result = []
+ for elt in self.pop3_account.get_next_mail_index(mail_list):
+ result.append(elt)
+ # with no bug it should be:
+ # self.assertEquals(result, [1, 2, 3, 4, 5])
+ self.assertEquals(result, [5])
+ self.assertEquals(self.pop3_account.lastmail, 5)
+
class IMAPAccount_TestCase(InheritableAccount_TestCase):
def setUp(self):
JCLTestCase.setUp(self, tables=[Account, PresenceAccount, User,
@@ -600,6 +671,31 @@ class IMAPAccount_TestCase(InheritableAccount_TestCase):
call_func)
test_func()
+ def check_get_next_mail_index(self, mail_list):
+ """
+ Common tests for get_next_mail_index method.
+ """
+ result = []
+ original_mail_list = [elt for elt in mail_list]
+ for elt in self.imap_account.get_next_mail_index(mail_list):
+ 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.
+ """
+ mail_list = []
+ self.check_get_next_mail_index(mail_list)
+
+ def test_get_next_mail_index(self):
+ """
+ Test get_next_mail_index.
+ """
+ mail_list = [1, 2, 3, 4]
+ self.check_get_next_mail_index(mail_list)
+
class SMTPAccount_TestCase(Account_TestCase):
def setUp(self):
JCLTestCase.setUp(self, tables=[Account, ExampleAccount, User,
diff --git a/src/jmc/model/tests/server.py b/src/jmc/model/tests/server.py
index a318091..9ed8ca0 100644
--- a/src/jmc/model/tests/server.py
+++ b/src/jmc/model/tests/server.py
@@ -140,12 +140,11 @@ class XMLDummyServer(DummyServer):
data = None
for idx in range(len(self.responses)):
try:
- # TODO : this approximation is not clean
+ # This approximation is not clean
# received size is based on the expected size in self.queries
data = conn.recv(1024 + len(self.queries[idx]))
# print "receive : " + data
if data:
- ## TODO : without this log, test_set_register in test_component wait forever
#print "-----------RECEIVE1 " + data
r = self._reader.feed(data)
except:
@@ -153,7 +152,6 @@ class XMLDummyServer(DummyServer):
print "".join (traceback.format_exception
(type, value, stack, 5))
raise
- # TODO verify got all data </stream>
if data:
self.real_queries.append(data)
# if response is a function apply it (it must return a string)