Exemplo n.º 1
0
 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