def _get_sequence_data_pkg(self, sequence_file, upload_id): """ Creates the data encoder, and attaches a monitor for callback functionality """ # build data encoder encoder = self._get_multipart_encoder(sequence_file, upload_id) # create callback monitor for file progressk monitor = MultipartEncoderMonitor(encoder, self._send_file_callback) # override max byte read size # This lambda overrides httplibs hard coded 8192 byte read size # More details: https://github.com/requests/toolbelt/issues/75#issuecomment-237189952 monitor._read = monitor.read monitor.read = lambda size: monitor._read(1024 * 1024) # return the monitor/encoder object return monitor
def upload_progress_callback(self, monitor: MultipartEncoderMonitor) -> None: # Mandamos um sinal pra barra de progresso para que atualize o valor mostrado # baseado na quantidade de bytes lidos e faltantes val = int(100 * monitor.bytes_read / monitor.len) self.signal_update_progress_bar.emit(val) # Se a flag de upload cancelado for ativada, então cancelamos a requisição trocando # o método read do MultipartEncoder por uma função que simplesmente levanta a exceção # UploadCancelledError. Em seguida, basta tratar da exceção como se fosse um erro de # conexão. if self.upload_cancelled: def cancel_upload(*args, **kwargs): raise UploadCancelledError monitor.read = cancel_upload