Esempio n. 1
0
 def __init__(self, path, base, index, size, fmap, piece_size, prioritize_fn):
     AbstractFile.__init__(self, path, base, size, piece_size)
     self.index=index
     self.first_piece=fmap.piece
     self.last_piece=self.first_piece + max((size-1+fmap.start),0) // piece_size
     self.offset=fmap.start
     self._prioritize_fn=prioritize_fn
Esempio n. 2
0
 def __init__(self, path, base, index, size, fmap, piece_size, prioritize_fn):
     AbstractFile.__init__(self, path, base, size, piece_size)
     self.index=index
     self.first_piece=fmap.piece
     self.last_piece=self.first_piece + max((size-1+fmap.start),0) // piece_size
     self.offset=fmap.start
     self._prioritize_fn=prioritize_fn
Esempio n. 3
0
 def __init__(self, path, base, size, piece_size=2097152, prioritize_fn=None):
     self._full_path= os.path.join(base,path)
     self._prioritize_fn=prioritize_fn
     self.pieces=None
     self.mime=None
     size=self._load_cached(size)
     AbstractFile.__init__(self, path, base, size, piece_size)
     if not self.pieces or len(self.pieces)!=self.last_piece+1:
         self.pieces=[False for _i in xrange(self.last_piece+1)]
     self._file=open(self.full_path,'r+b')
Esempio n. 4
0
 def update_piece(self, n, data):
     assert n!= self.last_piece and len(data)==self.piece_size or \
            n==self.last_piece and len(data)==(self.size % self.piece_size) or self.piece_size, "Invalid size of piece %d - %d"% (n,len(data))   
     assert n>=self.first_piece and  n<=self.last_piece,'Invalid piece no %d'%n
     
     with self._lock:
         if not self.pieces[n]:
             self._file.seek(n*self.piece_size)
             self._file.write(data)
             self._file.flush()
             self.pieces[n]=True
             logger.debug('Received piece %d in thread %s', n, threading.current_thread().name)
     AbstractFile.update_piece(self, n, data)
Esempio n. 5
0
    def update_piece(self, n, data):
        assert n!= self.last_piece and len(data)==self.piece_size or \
               n==self.last_piece and len(data)==(self.size % self.piece_size) or self.piece_size, "Invalid size of piece %d - %d"% (n,len(data))
        assert n >= self.first_piece and n <= self.last_piece, 'Invalid piece no %d' % n

        with self._lock:
            if not self.pieces[n]:
                self._file.seek(n * self.piece_size)
                self._file.write(data)
                self._file.flush()
                self.pieces[n] = True
                logger.debug('Received piece %d in thread %s', n,
                             threading.current_thread().name)
        AbstractFile.update_piece(self, n, data)
Esempio n. 6
0
 def prioritize_piece(self, piece, idx):
     assert piece >= self.first_piece and piece <= self.last_piece, 'Invalid piece no %d' % piece
     data = None
     with self._lock:
         if self.pieces[piece]:
             sz = self.piece_size if piece < self.last_piece else self.size % self.piece_size
             self._file.seek(piece * self.piece_size)
             data = self._file.read(sz)
             assert len(data) == sz
     if data:
         AbstractFile.update_piece(self, piece, data)
     elif self._prioritize_fn:
         self._prioritize_fn(piece, idx)
     else:
         assert False, 'Missing prioritize fn'
Esempio n. 7
0
 def __init__(self,
              path,
              base,
              size,
              piece_size=2097152,
              prioritize_fn=None):
     self._full_path = os.path.join(base, path)
     self._prioritize_fn = prioritize_fn
     self.pieces = None
     self.mime = None
     size = self._load_cached(size)
     AbstractFile.__init__(self, path, base, size, piece_size)
     if not self.pieces or len(self.pieces) != self.last_piece + 1:
         self.pieces = [False for _i in xrange(self.last_piece + 1)]
     self._file = open(self.full_path, 'r+b')
Esempio n. 8
0
 def prioritize_piece(self, piece, idx):
     assert piece>=self.first_piece and  piece<=self.last_piece,'Invalid piece no %d'%piece
     data=None
     with self._lock:
         if self.pieces[piece]:
             sz = self.piece_size if piece < self.last_piece else self.size % self.piece_size
             self._file.seek(piece*self.piece_size)
             data=self._file.read(sz)
             assert len(data)==sz
     if data:
         AbstractFile.update_piece(self, piece, data)
     elif self._prioritize_fn:
         self._prioritize_fn(piece,idx)
     else:
         assert False, 'Missing prioritize fn'
Esempio n. 9
0
 def remove(self):
     AbstractFile.remove(self)
     if os.path.exists(self.pieces_index_file):
         os.unlink(self.pieces_index_file)
Esempio n. 10
0
 def remove(self):
     AbstractFile.remove(self)
     if os.path.exists(self.pieces_index_file):
         os.unlink(self.pieces_index_file)