[boobot/twitter] fix purge system

This commit is contained in:
Bezleputh 2014-09-07 23:13:55 +02:00 committed by Florent
commit bc0a9b89db
2 changed files with 26 additions and 18 deletions

View file

@ -19,7 +19,7 @@
# along with weboob. If not, see <http://www.gnu.org/licenses/>. # along with weboob. If not, see <http://www.gnu.org/licenses/>.
from datetime import datetime from datetime import datetime, timedelta
import logging import logging
import re import re
import os import os
@ -30,7 +30,7 @@ from math import log
import urlparse import urlparse
import urllib import urllib
from random import randint, choice from random import randint, choice
import itertools
from irc.bot import SingleServerIRCBot from irc.bot import SingleServerIRCBot
import mechanize import mechanize
from mechanize import _headersutil as headersutil from mechanize import _headersutil as headersutil
@ -204,16 +204,26 @@ class MyThread(Thread):
return None return None
def check_twitter(self): def check_twitter(self):
for backend, thread in self.weboob.do('iter_resources', objs=None, nb_tweets = 10
split_path=['search', 'weboob'], backends=['twitter']):
if not thread.id in backend.storage.get('seen', default={}):
_item = thread.id.split('#')
url = 'https://twitter.com/%s/status/%s' % (_item[0], _item[1])
for msg in self.bot.on_url(url):
self.bot.send_message('%s: %s' % (_item[0], url))
self.bot.send_message(msg)
backend.set_message_read(backend.fill_thread(thread, ['root']).root) for _, backend in self.weboob.load_backends(modules=['twitter']).iteritems():
for thread in list(itertools.islice(backend.iter_resources(None, ['search', 'weboob']),
0,
nb_tweets)):
if not backend.storage.get('lastpurge'):
backend.storage.set('lastpurge', datetime.now() - timedelta(days=60))
backend.storage.save()
if thread.id not in backend.storage.get('seen', default={}) and\
thread.date > backend.storage.get('lastpurge'):
_item = thread.id.split('#')
url = 'https://twitter.com/%s/status/%s' % (_item[0], _item[1])
for msg in self.bot.on_url(url):
self.bot.send_message('%s: %s' % (_item[0], url))
self.bot.send_message(msg)
backend.set_message_read(backend.fill_thread(thread, ['root']).root)
def check_dlfp(self): def check_dlfp(self):
for backend, msg in self.weboob.do('iter_unread_messages', backends=['dlfp']): for backend, msg in self.weboob.do('iter_unread_messages', backends=['dlfp']):

View file

@ -18,7 +18,6 @@
# along with weboob. If not, see <http://www.gnu.org/licenses/>. # along with weboob. If not, see <http://www.gnu.org/licenses/>.
from datetime import datetime, timedelta from datetime import datetime, timedelta
import time
from weboob.tools.value import Value, ValueBackendPassword from weboob.tools.value import Value, ValueBackendPassword
from weboob.tools.backend import BaseBackend, BackendConfig from weboob.tools.backend import BaseBackend, BackendConfig
from weboob.capabilities.messages import CapMessages, Thread, CapMessagesPost from weboob.capabilities.messages import CapMessages, Thread, CapMessagesPost
@ -97,11 +96,10 @@ class TwitterBackend(BaseBackend, CapMessages, CapMessagesPost, CapCollection):
self._purge_message_read() self._purge_message_read()
def _purge_message_read(self): def _purge_message_read(self):
lastpurge = self.storage.get('lastpurge', default=datetime.now() - timedelta(days=60))
lastpurge = self.storage.get('lastpurge', default=0) if datetime.now() - lastpurge > timedelta(days=60):
self.storage.set('lastpurge', datetime.now() - timedelta(days=60))
if time.time() - lastpurge > 86400:
self.storage.set('lastpurge', time.time())
self.storage.save() self.storage.save()
# we can't directly delete without a "RuntimeError: dictionary changed size during iteration" # we can't directly delete without a "RuntimeError: dictionary changed size during iteration"
@ -111,7 +109,7 @@ class TwitterBackend(BaseBackend, CapMessages, CapMessagesPost, CapCollection):
# if no date available, create a new one (compatibility with "old" storage) # if no date available, create a new one (compatibility with "old" storage)
if not date: if not date:
self.storage.set('seen', id, datetime.now()) self.storage.set('seen', id, datetime.now())
elif datetime.now() - date > timedelta(days=60): elif lastpurge > date:
todelete.append(id) todelete.append(id)
for id in todelete: for id in todelete: