Use an enum to define the thread status

This commit is contained in:
alessandro90
2018-11-04 11:16:09 +01:00
parent f224fcc0bc
commit a7c44ca981
3 changed files with 38 additions and 25 deletions

62
threads.py Normal file
View File

@@ -0,0 +1,62 @@
from enum import Enum, auto
from io import BytesIO
from os import mkdir
import os.path
from shutil import rmtree
import urllib3
from zipfile import ZipFile
from PyQt5.QtCore import QThread
import utilities
class ThreadStatus(Enum):
ok = auto()
no_connection_err = auto()
no_file_err = auto()
bad_download_err = auto()
class DownloadThread(QThread):
def __init__(self, db_location, path):
super().__init__()
self.__db_location = db_location
self.__path = path
self.__status = None
self.reason = 0
@property
def status(self):
return self.__status
def __del__(self):
self.terminate()
self.wait()
def run(self):
try:
db = urllib3.PoolManager().request('GET', self.__db_location)
# db = urllib.request.urlopen(self.__db_location)
# raise urllib.error.URLError('Test')
except urllib3.exceptions.MaxRetryError: # No internet connection.
# self.no_connection_error.emit()
self.__status = ThreadStatus.no_connection_err
return
if db.status != 200:
self.reason = db.reason
# self.bad_download_error.emit()
self.__status = ThreadStatus.bad_download_err
return
if not utilities.checksum_ok(db.data, "folder"):
# self.bad_download_error.emit()
self.__status = ThreadStatus.bad_download_err
return
if os.path.exists(self.__path):
rmtree(self.__path)
try:
# data_folder = db.read()
with ZipFile(BytesIO(db.data)) as zipped:
zipped.extractall()
except:
# self.bad_file_error.emit()
self.__status = ThreadStatus.bad_file_err
return
else:
self.__status = ThreadStatus.ok