def load_checkpoint(self, filename): try: config = DownloadConfig.load(filename) except Exception: self._logger.exception("Could not open checkpoint file %s", filename) return metainfo = config.get_metainfo() if not metainfo: self._logger.error( "Could not resume checkpoint %s; metainfo not found", filename) return if not isinstance(metainfo, dict): self._logger.error( "Could not resume checkpoint %s; metainfo is not dict %s %s", filename, type(metainfo), repr(metainfo)) return try: url = metainfo.get(b'url', None) url = url.decode('utf-8') if url else url tdef = (TorrentDefNoMetainfo(metainfo[b'infohash'], metainfo[b'name'], url) if b'infohash' in metainfo else TorrentDef.load_from_dict(metainfo)) except (KeyError, ValueError) as e: self._logger.exception( "Could not restore tdef from metainfo dict: %s %s ", e, metainfo) return if config.get_bootstrap_download(): # In case the download is marked as bootstrap, remove it if its infohash does not # match the configured bootstrap infohash if hexlify(tdef.get_infohash()) != self.bootstrap_infohash: self.remove_config(tdef.get_infohash()) return config.state_dir = self.state_dir if config.get_dest_dir() == '': # removed torrent ignoring self._logger.info("Removing checkpoint %s destdir is %s", filename, config.get_dest_dir()) os.remove(filename) return try: if self.download_exists(tdef.get_infohash()): self._logger.info( "Not resuming checkpoint because download has already been added" ) else: self.start_download(tdef=tdef, config=config) except Exception: self._logger.exception( "Not resume checkpoint due to exception while adding download")
async def test_save_resume(mock_handle, test_download, test_tdef): """ testing call resume data alert """ mock_handle.is_valid = lambda: True mock_handle.save_resume_data = lambda: test_download.register_task( 'post_alert', test_download.process_alert, alert, 'save_resume_data_alert', delay=0.1) alert = Mock(resume_data={b'info-hash': test_tdef.get_infohash()}) await test_download.save_resume_data() basename = hexlify(test_tdef.get_infohash()) + '.conf' filename = test_download.dlmgr.get_checkpoint_dir() / basename dcfg = DownloadConfig.load(str(filename)) assert test_tdef.get_infohash(), dcfg.get_engineresumedata().get( b'info-hash')
def test_default_download_config_load(tmpdir): with open(tmpdir / "dlconfig.conf", 'wb') as conf_file: conf_file.write(b"[Tribler]\nabc=def") dcfg = DownloadConfig.load(tmpdir / "dlconfig.conf") assert dcfg.config['Tribler']['abc'] == 'def'