def _data_prepare(self): if not (self.mi is None): raise Exception() self.log(20, 'Preparing data to transfer and generating metainfo.') rf = open('/dev/urandom','rb') hb = HashBuilder(self.piece_length) for cas in self.config_argsets: datadir = cas[1] if not (os.path.isdir(datadir)): os.mkdir(datadir) dd_intermediate = os.path.join(datadir, self.intermediate_ddname) if not (os.path.isdir(dd_intermediate)): os.mkdir(dd_intermediate) src_dd = self.config_argsets[0][1] i = 0 file_dicts = deque() dfns = deque() for dfl in self.dfile_lens: dfn = str(i).encode('ascii') pn = os.path.join(src_dd, self.intermediate_ddname, dfn) df = open(pn, 'w+b') _copyfile(rf, df, dfl) hb.add_file(df) df.close() dfns.append(pn) file_dicts.append({b'length':dfl, b'path':[dfn]}) i += 1 hb.finish() rf.close() mi = BTMetaInfo.build_from_dict({ b'announce':self._get_tracker_url(), b'info':{ b'name':self.intermediate_ddname, b'piece length':self.piece_length, b'pieces':b''.join(hb.digests), b'files':list(file_dicts) } }) self.mi = mi