Change MailAccount.lastcheck semantic. Now store time in second since the Epoch

darcs-hash:20080528175140-86b55-bdc04a37258a53658908fb453a4be45370b82355.gz
This commit is contained in:
David Rousselie
2008-05-28 19:51:40 +02:00
parent e212499456
commit 697e47e2dc
4 changed files with 58 additions and 28 deletions

View File

@@ -22,6 +22,7 @@
import logging import logging
import re import re
import time
from pyxmpp.jabber.dataforms import Form from pyxmpp.jabber.dataforms import Form
@@ -101,7 +102,8 @@ class MailCommandManager(JCLCommandManager):
for account_name in session_context["account_names"]: for account_name in session_context["account_names"]:
name, user_jid = self.get_name_and_jid(account_name) name, user_jid = self.get_name_and_jid(account_name)
_account = account.get_account(user_jid, name) _account = account.get_account(user_jid, name)
_account.lastcheck = _account.interval - 1 _account.lastcheck = int(time.time()) \
- (_account.interval * self.component.time_unit)
accounts.append(_account) accounts.append(_account)
else: else:
return self.execute_force_check_root_node(info_query, return self.execute_force_check_root_node(info_query,
@@ -111,7 +113,8 @@ class MailCommandManager(JCLCommandManager):
else: else:
_account = account.get_account(bare_from_jid, account_name) _account = account.get_account(bare_from_jid, account_name)
if _account is not None: if _account is not None:
_account.lastcheck = _account.interval - 1 _account.lastcheck = int(time.time()) \
- (_account.interval * self.component.time_unit)
accounts.append(_account) accounts.append(_account)
command_node.setProp("status", command.STATUS_COMPLETED) command_node.setProp("status", command.STATUS_COMPLETED)
self.component.check_email_accounts(accounts, lang_class) self.component.check_email_accounts(accounts, lang_class)

View File

@@ -28,6 +28,7 @@ FeederComponent with JMC Feeder and Sender implementation
__revision__ = "$Id: feeder.py,v 1.1 2008/03/05 20:24:07 dax Exp $" __revision__ = "$Id: feeder.py,v 1.1 2008/03/05 20:24:07 dax Exp $"
import logging import logging
import time
from pyxmpp.jid import JID from pyxmpp.jid import JID
@@ -83,13 +84,15 @@ class MailFeeder(Feeder):
""" """
self.__logger.debug("MailFeeder.feed") self.__logger.debug("MailFeeder.feed")
result = [] result = []
if _account.first_check and _account.live_email_only: if _account.first_check:
_account.lastcheck = int(time.time())
if _account.live_email_only:
continue_checking = self.initialize_live_email(_account) continue_checking = self.initialize_live_email(_account)
if not continue_checking: if not continue_checking:
return result return result
_account.lastcheck += 1 if (int(time.time()) - _account.lastcheck) \
if _account.lastcheck == _account.interval: >= (_account.interval * self.component.time_unit):
_account.lastcheck = 0 _account.lastcheck = int(time.time())
action = _account.action action = _account.action
if action != PresenceAccount.DO_NOTHING: if action != PresenceAccount.DO_NOTHING:
try: try:

View File

@@ -1,3 +1,4 @@
# -*- coding: utf-8 -*-
## ##
## command.py ## command.py
## Login : David Rousselie <dax@happycoders.org> ## Login : David Rousselie <dax@happycoders.org>
@@ -26,6 +27,7 @@ from ConfigParser import ConfigParser
import os import os
import sys import sys
import logging import logging
import time
from pyxmpp.iq import Iq from pyxmpp.iq import Iq
from pyxmpp.jabber.dataforms import Field from pyxmpp.jabber.dataforms import Field
@@ -100,7 +102,8 @@ class MailCommandManagerTestCase(JCLCommandManagerTestCase):
def feed(self, _account): def feed(self, _account):
self.checked_accounts.append(_account) self.checked_accounts.append(_account)
assert(_account.lastcheck == (_account.interval - 1)) assert((int(time.time()) - _account.lastcheck \
>= (_account.interval * self.component.time_unit)))
return [] return []
self.comp.handler.feeder = MockFeederHandler(self.comp) self.comp.handler.feeder = MockFeederHandler(self.comp)

View File

@@ -25,6 +25,7 @@ import unittest
import sys import sys
import time import time
import logging import logging
import time
from sqlobject import * from sqlobject import *
from sqlobject.dbconnection import TheURIOpener from sqlobject.dbconnection import TheURIOpener
@@ -204,6 +205,13 @@ class MailComponent_TestCase(JCLTestCase):
self.comp.stream = MockStream() self.comp.stream = MockStream()
self.comp.stream_class = MockStream self.comp.stream_class = MockStream
def _account_has_been_checked(self, _account, old_value):
if old_value == _account.lastcheck:
return False
else:
delta = int(time.time()) - _account.lastcheck
return (delta <= 1) and (delta >= 0)
########################################################################### ###########################################################################
# 'feed' test methods # 'feed' test methods
########################################################################### ###########################################################################
@@ -256,11 +264,24 @@ class MailComponent_TestCase(JCLTestCase):
jid="account11@jmc.test.com") jid="account11@jmc.test.com")
account11._action = PresenceAccount.DO_NOTHING account11._action = PresenceAccount.DO_NOTHING
account11.first_check = False account11.first_check = False
self.assertEquals(account11.lastcheck, 0) account11.lastcheck = old_value = int(time.time()) - 2
account11.interval = 2 account11.interval = 2
result = self.comp.handler.feeder.feed(account11) result = self.comp.handler.feeder.feed(account11)
self.assertEquals(result, []) self.assertEquals(result, [])
self.assertEquals(account11.lastcheck, 1) self.assertFalse(self._account_has_been_checked(account11,
old_value))
def test_feed_interval_first_check(self):
account11 = MockIMAPAccount(user=User(jid="test1@test.com"),
name="account11",
jid="account11@jmc.test.com")
account11._action = PresenceAccount.DO_NOTHING
account11.first_check = True
account11.lastcheck = 0
account11.interval = 2
result = self.comp.handler.feeder.feed(account11)
self.assertEquals(result, [])
self.assertTrue(self._account_has_been_checked(account11, 0))
def test_feed_interval_check(self): def test_feed_interval_check(self):
account11 = MockIMAPAccount(user=User(jid="test1@test.com"), account11 = MockIMAPAccount(user=User(jid="test1@test.com"),
@@ -268,11 +289,11 @@ class MailComponent_TestCase(JCLTestCase):
jid="account11@jmc.test.com") jid="account11@jmc.test.com")
account11._action = PresenceAccount.DO_NOTHING account11._action = PresenceAccount.DO_NOTHING
account11.first_check = False account11.first_check = False
account11.lastcheck = 1 account11.lastcheck = 0
account11.interval = 2 account11.interval = 2
result = self.comp.handler.feeder.feed(account11) result = self.comp.handler.feeder.feed(account11)
self.assertEquals(result, []) self.assertEquals(result, [])
self.assertEquals(account11.lastcheck, 0) self.assertTrue(self._account_has_been_checked(account11, 0))
def test_feed_no_password(self): def test_feed_no_password(self):
account11 = MockIMAPAccount(user=User(jid="test1@test.com"), account11 = MockIMAPAccount(user=User(jid="test1@test.com"),
@@ -281,7 +302,7 @@ class MailComponent_TestCase(JCLTestCase):
account11._action = MailAccount.RETRIEVE account11._action = MailAccount.RETRIEVE
account11.status = account.ONLINE account11.status = account.ONLINE
account11.first_check = False account11.first_check = False
account11.lastcheck = 1 account11.lastcheck = 0
account11.interval = 2 account11.interval = 2
account11.password = None account11.password = None
self.assertFalse(account11.waiting_password_reply) self.assertFalse(account11.waiting_password_reply)
@@ -292,7 +313,7 @@ class MailComponent_TestCase(JCLTestCase):
self.assertEquals(len(sent), 1) self.assertEquals(len(sent), 1)
self.assertEquals(sent[0].get_to(), "test1@test.com") self.assertEquals(sent[0].get_to(), "test1@test.com")
self.assertEquals(sent[0].get_from(), "account11@jmc.test.com") self.assertEquals(sent[0].get_from(), "account11@jmc.test.com")
self.assertEquals(account11.lastcheck, 0) self.assertTrue(self._account_has_been_checked(account11, 0))
self.assertFalse(account11.connected) self.assertFalse(account11.connected)
self.assertFalse(account11.has_connected) self.assertFalse(account11.has_connected)
@@ -303,7 +324,7 @@ class MailComponent_TestCase(JCLTestCase):
account11._action = 42 # Unknown action account11._action = 42 # Unknown action
account11.status = account.ONLINE account11.status = account.ONLINE
account11.first_check = False account11.first_check = False
account11.lastcheck = 1 account11.lastcheck = 0
account11.interval = 2 account11.interval = 2
account11.password = "password" account11.password = "password"
account11.get_new_mail_list = lambda: [] account11.get_new_mail_list = lambda: []
@@ -319,7 +340,7 @@ class MailComponent_TestCase(JCLTestCase):
self.assertEquals(sent[1].xmlnode.name, "presence") self.assertEquals(sent[1].xmlnode.name, "presence")
self.assertEquals(sent[1].xmlnode.children.name, "show") self.assertEquals(sent[1].xmlnode.children.name, "show")
self.assertEquals(sent[1].xmlnode.children.content, "dnd") self.assertEquals(sent[1].xmlnode.children.content, "dnd")
self.assertEquals(account11.lastcheck, 0) self.assertTrue(self._account_has_been_checked(account11, 0))
self.assertFalse(account11.connected) self.assertFalse(account11.connected)
self.assertTrue(account11.has_connected) self.assertTrue(account11.has_connected)
@@ -330,14 +351,14 @@ class MailComponent_TestCase(JCLTestCase):
account11._action = MailAccount.RETRIEVE account11._action = MailAccount.RETRIEVE
account11.status = account.ONLINE account11.status = account.ONLINE
account11.first_check = False account11.first_check = False
account11.lastcheck = 1 account11.lastcheck = 0
account11.interval = 2 account11.interval = 2
account11.password = "password" account11.password = "password"
account11.get_new_mail_list = lambda: [] account11.get_new_mail_list = lambda: []
result = self.comp.handler.feeder.feed(account11) result = self.comp.handler.feeder.feed(account11)
self.assertEquals(account11.error, None) self.assertEquals(account11.error, None)
self.assertEquals(result, []) self.assertEquals(result, [])
self.assertEquals(account11.lastcheck, 0) self.assertTrue(self._account_has_been_checked(account11, 0))
self.assertFalse(account11.connected) self.assertFalse(account11.connected)
self.assertTrue(account11.has_connected) self.assertTrue(account11.has_connected)
self.assertEquals(len(self.comp.stream.sent), 0) self.assertEquals(len(self.comp.stream.sent), 0)
@@ -350,14 +371,14 @@ class MailComponent_TestCase(JCLTestCase):
account11.status = account.DND account11.status = account.DND
account11.error = "An error" account11.error = "An error"
account11.first_check = False account11.first_check = False
account11.lastcheck = 1 account11.lastcheck = 0
account11.interval = 2 account11.interval = 2
account11.password = "password" account11.password = "password"
account11.get_new_mail_list = lambda: [] account11.get_new_mail_list = lambda: []
result = self.comp.handler.feeder.feed(account11) result = self.comp.handler.feeder.feed(account11)
self.assertEquals(account11.error, None) self.assertEquals(account11.error, None)
self.assertEquals(result, []) self.assertEquals(result, [])
self.assertEquals(account11.lastcheck, 0) self.assertTrue(self._account_has_been_checked(account11, 0))
self.assertFalse(account11.connected) self.assertFalse(account11.connected)
self.assertTrue(account11.has_connected) self.assertTrue(account11.has_connected)
sent = self.comp.stream.sent sent = self.comp.stream.sent
@@ -379,14 +400,14 @@ class MailComponent_TestCase(JCLTestCase):
account11._action = MailAccount.RETRIEVE account11._action = MailAccount.RETRIEVE
account11.status = account.ONLINE account11.status = account.ONLINE
account11.first_check = False account11.first_check = False
account11.lastcheck = 1 account11.lastcheck = 0
account11.interval = 2 account11.interval = 2
account11.password = "password" account11.password = "password"
account11.get_new_mail_list = lambda: [0, 1] account11.get_new_mail_list = lambda: [0, 1]
account11.get_mail = mock_get_mail account11.get_mail = mock_get_mail
result = self.comp.handler.feeder.feed(account11) result = self.comp.handler.feeder.feed(account11)
self.assertEquals(account11.error, None) self.assertEquals(account11.error, None)
self.assertEquals(account11.lastcheck, 0) self.assertTrue(self._account_has_been_checked(account11, 0))
self.assertFalse(account11.connected) self.assertFalse(account11.connected)
self.assertTrue(account11.has_connected) self.assertTrue(account11.has_connected)
self.assertEquals(len(self.comp.stream.sent), 0) self.assertEquals(len(self.comp.stream.sent), 0)
@@ -413,14 +434,14 @@ class MailComponent_TestCase(JCLTestCase):
account11._action = MailAccount.DIGEST account11._action = MailAccount.DIGEST
account11.status = account.ONLINE account11.status = account.ONLINE
account11.first_check = False account11.first_check = False
account11.lastcheck = 1 account11.lastcheck = 0
account11.interval = 2 account11.interval = 2
account11.password = "password" account11.password = "password"
account11.get_new_mail_list = lambda: [] account11.get_new_mail_list = lambda: []
result = self.comp.handler.feeder.feed(account11) result = self.comp.handler.feeder.feed(account11)
self.assertEquals(account11.error, None) self.assertEquals(account11.error, None)
self.assertEquals(result, []) self.assertEquals(result, [])
self.assertEquals(account11.lastcheck, 0) self.assertTrue(self._account_has_been_checked(account11, 0))
self.assertFalse(account11.connected) self.assertFalse(account11.connected)
self.assertTrue(account11.has_connected) self.assertTrue(account11.has_connected)
self.assertEquals(len(self.comp.stream.sent), 0) self.assertEquals(len(self.comp.stream.sent), 0)
@@ -437,14 +458,14 @@ class MailComponent_TestCase(JCLTestCase):
account11._action = MailAccount.DIGEST account11._action = MailAccount.DIGEST
account11.status = account.ONLINE account11.status = account.ONLINE
account11.first_check = False account11.first_check = False
account11.lastcheck = 1 account11.lastcheck = 0
account11.interval = 2 account11.interval = 2
account11.password = "password" account11.password = "password"
account11.get_new_mail_list = lambda: [0, 1] account11.get_new_mail_list = lambda: [0, 1]
account11.get_mail_summary = mock_get_mail_summary account11.get_mail_summary = mock_get_mail_summary
result = self.comp.handler.feeder.feed(account11) result = self.comp.handler.feeder.feed(account11)
self.assertEquals(account11.error, None) self.assertEquals(account11.error, None)
self.assertEquals(account11.lastcheck, 0) self.assertTrue(self._account_has_been_checked(account11, 0))
self.assertFalse(account11.connected) self.assertFalse(account11.connected)
self.assertTrue(account11.has_connected) self.assertTrue(account11.has_connected)
self.assertEquals(len(self.comp.stream.sent), 0) self.assertEquals(len(self.comp.stream.sent), 0)