Пример #1
0
 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()
Пример #5
0
 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()