Skip to content

Instantly share code, notes, and snippets.

@claudiug
Created March 12, 2020 10:49
Show Gist options
  • Save claudiug/304f2d4d133f44b8f03bf541994b77ba to your computer and use it in GitHub Desktop.
Save claudiug/304f2d4d133f44b8f03bf541994b77ba to your computer and use it in GitHub Desktop.
import os
import sys
import boto3
from PySide2.QtCore import QRunnable, QObject, QThreadPool, Signal, Slot
from PySide2.QtWidgets import QMainWindow, QVBoxLayout, QProgressBar, QPushButton, QWidget, QApplication
class TestWindow(QMainWindow):
def __init__(self):
super(TestWindow, self).__init__()
self.tasks = Tasks(parent=self)
layout = QVBoxLayout()
self.bar = QProgressBar()
self.button = QPushButton('upload')
self.button.pressed.connect(self.execute)
w = QWidget()
layout.addWidget(self.bar)
layout.addWidget(self.button)
w.setLayout(layout)
self.setCentralWidget(w)
def execute(self):
self.tasks.start()
@Slot(int)
def track_progress(self, value):
self.bar.setValue(value)
if value != 100:
self.button.setDisabled(True)
self.button.setText("upload in progress...")
class Worker(QRunnable):
def __init__(self, parent=None):
super(Worker, self).__init__()
self.signals = Communicate()
self.parent = parent
self.signals.progress.connect(self.parent.track_progress)
self.s3 = boto3.client(
's3',
aws_access_key_id='sssss',
aws_secret_access_key='s++s/s',
region_name='eu-lol-1')
self.uploaded = 0
self.progress = 0
self.total = 0
def upload_callback(self, size):
if self.total == 0:
return
self.uploaded += size
self.progress = int(self.uploaded / self.total * 100)
self.signals.progress.emit(self.progress)
def run(self):
self.total = os.stat('file.pdf').st_size
with open('file.pdf', 'rb') as data:
self.s3.upload_fileobj(data, 'files', 'magic1', Callback=self.upload_callback)
class Tasks(QObject):
def __init__(self, parent):
super(Tasks, self).__init__()
self.parent = parent
self.pool = QThreadPool()
self.pool.setMaxThreadCount(4)
def start(self):
worker = Worker(parent=self.parent)
self.pool.start(worker)
class Communicate(QObject):
progress = Signal(int)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = TestWindow()
window.show()
app.exec_()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment