def __init__(self): if DEBUG: print >> sys.stderr, 'mainlineDHTChecker: initialization' if mainlineDHTChecker.__single: raise RuntimeError, 'mainlineDHTChecker is Singleton' mainlineDHTChecker.__single = self self.dht = None self.torrent_db = TorrentDBHandler.getInstance()
def register(self, session, metadata_handler, helpdir, dlconfig): self.session = session self.helpdir = helpdir self.dlconfig = dlconfig self.metadata_handler = metadata_handler self.torrent_db = TorrentDBHandler.getInstance()
def run(self): try: if DEBUG: print >> sys.stderr, 'Torrent Checking: RUN', threading.currentThread( ).getName() event = threading.Event() return_value = safe_dict() return_value['event'] = event return_value['torrent'] = None if self.infohash is None: policy = self.selectPolicy() if self.db_thread: self.db_thread.add_task( lambda: TorrentDBHandler.getInstance( ).selectTorrentToCheck(policy=policy, return_value=return_value)) else: TorrentDBHandler.getInstance().selectTorrentToCheck( policy=policy, return_value=return_value) elif self.db_thread: self.db_thread.add_task(lambda: TorrentDBHandler.getInstance( ).selectTorrentToCheck(infohash=self.infohash, return_value=return_value)) else: TorrentDBHandler.getInstance().selectTorrentToCheck( infohash=self.infohash, return_value=return_value) event.wait(60.0) torrent = return_value['torrent'] if DEBUG: print >> sys.stderr, 'Torrent Checking: get value from DB:', torrent if not torrent: return if self.infohash is None and torrent['ignored_times'] > 0: if DEBUG: print >> sys.stderr, 'Torrent_checking: torrent: %s' % torrent kw = {'ignored_times': torrent['ignored_times'] - 1} if self.db_thread: self.db_thread.add_task( lambda: TorrentDBHandler.getInstance().updateTracker( torrent['infohash'], kw)) else: TorrentDBHandler.getInstance().updateTracker( torrent['infohash'], kw) return torrent = self.readTorrent(torrent) if 'info' not in torrent: if self.db_thread: self.db_thread.add_task( lambda: TorrentDBHandler.getInstance().deleteTorrent( torrent['infohash'])) else: TorrentDBHandler.getInstance().deleteTorrent( torrent['infohash']) return if DEBUG: print >> sys.stderr, 'Tracker Checking' trackerChecking(torrent) self.mldhtchecker.lookup(torrent['infohash']) self.updateTorrentInfo(torrent) kw = { 'last_check_time': int(time()), 'seeder': torrent['seeder'], 'leecher': torrent['leecher'], 'status': torrent['status'], 'ignored_times': torrent['ignored_times'], 'retried_times': torrent['retried_times'] } if DEBUG: print >> sys.stderr, 'Torrent Checking: selectTorrentToCheck:', kw if self.db_thread: self.db_thread.add_task(lambda: TorrentDBHandler.getInstance( ).updateTorrent(torrent['infohash'], **kw)) else: TorrentDBHandler.getInstance().updateTorrent( torrent['infohash'], **kw) finally: if not self.db_thread: TorrentDBHandler.getInstance().close()
def run(self): try: if DEBUG: print >> sys.stderr, 'Torrent Checking: RUN', threading.currentThread().getName() event = threading.Event() return_value = safe_dict() return_value['event'] = event return_value['torrent'] = None if self.infohash is None: policy = self.selectPolicy() if self.db_thread: self.db_thread.add_task(lambda : TorrentDBHandler.getInstance().selectTorrentToCheck(policy=policy, return_value=return_value)) else: TorrentDBHandler.getInstance().selectTorrentToCheck(policy=policy, return_value=return_value) elif self.db_thread: self.db_thread.add_task(lambda : TorrentDBHandler.getInstance().selectTorrentToCheck(infohash=self.infohash, return_value=return_value)) else: TorrentDBHandler.getInstance().selectTorrentToCheck(infohash=self.infohash, return_value=return_value) event.wait(60.0) torrent = return_value['torrent'] if DEBUG: print >> sys.stderr, 'Torrent Checking: get value from DB:', torrent if not torrent: return if self.infohash is None and torrent['ignored_times'] > 0: if DEBUG: print >> sys.stderr, 'Torrent_checking: torrent: %s' % torrent kw = {'ignored_times': torrent['ignored_times'] - 1} if self.db_thread: self.db_thread.add_task(lambda : TorrentDBHandler.getInstance().updateTracker(torrent['infohash'], kw)) else: TorrentDBHandler.getInstance().updateTracker(torrent['infohash'], kw) return torrent = self.readTorrent(torrent) if 'info' not in torrent: if self.db_thread: self.db_thread.add_task(lambda : TorrentDBHandler.getInstance().deleteTorrent(torrent['infohash'])) else: TorrentDBHandler.getInstance().deleteTorrent(torrent['infohash']) return if DEBUG: print >> sys.stderr, 'Tracker Checking' trackerChecking(torrent) self.mldhtchecker.lookup(torrent['infohash']) self.updateTorrentInfo(torrent) kw = {'last_check_time': int(time()), 'seeder': torrent['seeder'], 'leecher': torrent['leecher'], 'status': torrent['status'], 'ignored_times': torrent['ignored_times'], 'retried_times': torrent['retried_times']} if DEBUG: print >> sys.stderr, 'Torrent Checking: selectTorrentToCheck:', kw if self.db_thread: self.db_thread.add_task(lambda : TorrentDBHandler.getInstance().updateTorrent(torrent['infohash'], **kw)) else: TorrentDBHandler.getInstance().updateTorrent(torrent['infohash'], **kw) finally: if not self.db_thread: TorrentDBHandler.getInstance().close()