Add checksum control od db download and switch to urllib3
This commit is contained in:
@@ -2,13 +2,15 @@ from io import BytesIO
|
|||||||
from os import mkdir
|
from os import mkdir
|
||||||
import os.path
|
import os.path
|
||||||
from shutil import rmtree
|
from shutil import rmtree
|
||||||
import urllib
|
import urllib3
|
||||||
from zipfile import ZipFile
|
from zipfile import ZipFile
|
||||||
from PyQt5.QtCore import QThread, pyqtSignal
|
from PyQt5.QtCore import QThread, pyqtSignal
|
||||||
|
import utilities
|
||||||
|
|
||||||
class DownloadThread(QThread):
|
class DownloadThread(QThread):
|
||||||
no_connection_error = pyqtSignal()
|
no_connection_error = pyqtSignal()
|
||||||
bad_db_download_error = pyqtSignal()
|
bad_db_download_error = pyqtSignal()
|
||||||
|
bad_file_error = pyqtSignal()
|
||||||
|
|
||||||
def __init__(self, db_location, path):
|
def __init__(self, db_location, path):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
@@ -22,12 +24,11 @@ class DownloadThread(QThread):
|
|||||||
self.wait()
|
self.wait()
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
if os.path.exists(self.__path):
|
|
||||||
rmtree(self.__path)
|
|
||||||
try:
|
try:
|
||||||
db = urllib.request.urlopen(self.__db_location)
|
db = urllib3.PoolManager().request('GET', self.__db_location)
|
||||||
|
# db = urllib.request.urlopen(self.__db_location)
|
||||||
# raise urllib.error.URLError('Test')
|
# raise urllib.error.URLError('Test')
|
||||||
except urllib.error.URLError: # No internet connection.
|
except urllib3.exceptions.MaxRetryError: # No internet connection.
|
||||||
self.regular_execution = False
|
self.regular_execution = False
|
||||||
self.no_connection_error.emit()
|
self.no_connection_error.emit()
|
||||||
return
|
return
|
||||||
@@ -36,8 +37,18 @@ class DownloadThread(QThread):
|
|||||||
self.reason = db.reason
|
self.reason = db.reason
|
||||||
self.bad_db_download_error.emit()
|
self.bad_db_download_error.emit()
|
||||||
return
|
return
|
||||||
|
if not utilities.checksum_ok(db.data, "folder"):
|
||||||
|
regular_execution = False
|
||||||
|
self.bad_db_download_error.emit()
|
||||||
|
return
|
||||||
|
if os.path.exists(self.__path):
|
||||||
|
rmtree(self.__path)
|
||||||
try:
|
try:
|
||||||
with ZipFile(BytesIO(db.read())) as zipped:
|
# data_folder = db.read()
|
||||||
|
# data_folder = db.data
|
||||||
|
with ZipFile(BytesIO(db.data)) as zipped:
|
||||||
zipped.extractall()
|
zipped.extractall()
|
||||||
except:
|
except:
|
||||||
pass
|
self.regular_execution = False
|
||||||
|
self.bad_file_error.emit()
|
||||||
|
return
|
||||||
|
|||||||
@@ -18,14 +18,23 @@ class DownloadWindow(QWidget, Ui_Download_window):
|
|||||||
self.everything_ok = True
|
self.everything_ok = True
|
||||||
self.no_internet_msg = QMessageBox(self)
|
self.no_internet_msg = QMessageBox(self)
|
||||||
self.no_internet_msg.setWindowTitle("No internet connection")
|
self.no_internet_msg.setWindowTitle("No internet connection")
|
||||||
self.no_internet_msg.setText("Unable to establish an internet connection")
|
self.no_internet_msg.setText("Unable to establish an internet connection.")
|
||||||
# self.no_internet_msg.buttonClicked.connect(self.close)
|
# self.no_internet_msg.buttonClicked.connect(self.close)
|
||||||
self.no_internet_msg.finished.connect(self.close)
|
self.no_internet_msg.finished.connect(self.close)
|
||||||
|
|
||||||
self.bad_db_download_msg = QMessageBox(self)
|
self.bad_db_download_msg = QMessageBox(self)
|
||||||
self.bad_db_download_msg.setWindowTitle("Something wrong")
|
self.bad_db_download_msg.setWindowTitle("Something wrong")
|
||||||
|
self.bad_db_download_msg.setText("""Something went wrong with the downaload.
|
||||||
|
Check your internet connection and try again.""")
|
||||||
self.bad_db_download_msg.finished.connect(self.close)
|
self.bad_db_download_msg.finished.connect(self.close)
|
||||||
|
|
||||||
|
self.bad_file_msg = QMessageBox(self)
|
||||||
|
self.bad_file_msg.setWindowTitle("Bad file detected")
|
||||||
|
self.bad_file_msg.setText("""The downloaded file seems to be corrupted.
|
||||||
|
The old database has not been deleted and
|
||||||
|
the downloaded file has been discarded.""")
|
||||||
|
self.bad_file_msg.finished.connect(self.close)
|
||||||
|
|
||||||
self.download_thread = DownloadThread(db_location, data_folder)
|
self.download_thread = DownloadThread(db_location, data_folder)
|
||||||
self.download_thread.finished.connect(self.wait_close)
|
self.download_thread.finished.connect(self.wait_close)
|
||||||
self.download_thread.no_connection_error.connect(self.show_no_connection_warning)
|
self.download_thread.no_connection_error.connect(self.show_no_connection_warning)
|
||||||
|
|||||||
18
utilities.py
Normal file
18
utilities.py
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
import hashlib
|
||||||
|
from pandas import read_csv
|
||||||
|
|
||||||
|
def checksum_ok(data, what):
|
||||||
|
code = hashlib.sha256()
|
||||||
|
code.update(data)
|
||||||
|
ref_loc = 'https://aresvalley.com/Storage/Artemis/Database/data.zip.log'
|
||||||
|
if what == "folder":
|
||||||
|
n = 0
|
||||||
|
elif what == "db":
|
||||||
|
n = 1
|
||||||
|
else:
|
||||||
|
raise ValueError("Wrong entry name.")
|
||||||
|
try:
|
||||||
|
reference = read_csv(ref_loc, delimiter = '*').iat[-1, n]
|
||||||
|
except HTTPError:
|
||||||
|
return False
|
||||||
|
return code.hexdigest() == reference
|
||||||
Reference in New Issue
Block a user