Codice sorgente per digital_signature.update_checker

import digital_signature
import tkinter as tk
import tkinter.ttk as ttk
import time
import sys
from pyupdater.client import Client
from client_config import ClientConfig
from my_logger import MyLogger

log = MyLogger().my_logger()
CLIENT_CONFIG = ClientConfig()
progbar = None
root = None


[documenti]class UpdateStatus(object): """Enumerated data type""" # pylint: disable=invalid-name # pylint: disable=too-few-public-methods UNKNOWN = 0 NO_AVAILABLE_UPDATES = 1 UPDATE_DOWNLOAD_FAILED = 2 EXTRACTING_UPDATE_AND_RESTARTING = 3 UPDATE_AVAILABLE_BUT_APP_NOT_FROZEN = 4 COULDNT_CHECK_FOR_UPDATES = 5
UPDATE_STATUS_STR = \ ['Unknown', 'No available updates were found.', 'Update download failed.', 'Extracting update and restarting.', 'Update available but application is not frozen.', 'Couldn\'t check for updates.']
[documenti]def check_for_updates(rev_checker_url=None): """Controllo nuovi aggiornamenti. :param update_checker_url: Url server degli aggiornamenti, defaults to None :type update_checker_url: str, optional :return: UpdateObject utilizzato per aggiornare i binari :rtype: AppUpdate """ assert CLIENT_CONFIG.PUBLIC_KEY is not None # Se update_checker_url รจ presente nel json, allora il controllo degli aggiornamenti viene # fatto su quell'URL altrimenti prendo il default dal file di configurazione if rev_checker_url is not None: CLIENT_CONFIG.UPDATE_URLS[0] = rev_checker_url + "deploy/" client = Client(CLIENT_CONFIG, refresh=True, progress_hooks=[progress]) log.info("Actual client version: %s" % digital_signature.__version__) appUpdate = client.update_check(CLIENT_CONFIG.APP_NAME, digital_signature.__version__, channel='stable') return appUpdate
[documenti]def run_updates(app_update): """Lancia il download dell'aggiornamento e al completamento estrae il file dal zip e riavvia l'applicazione :param app_update: UpdateObject utilizzato per aggiornare i binari :type app_update: AppUpdate :return: Lo stato dell'aggiornamento :rtype: UpdateStatus """ log.info('Extracting update and restart...') if hasattr(sys, "frozen"): downloaded = app_update.download() if downloaded: status = UpdateStatus.EXTRACTING_UPDATE_AND_RESTARTING log.info('Extracting update and restart...') time.sleep(1) app_update.extract_restart() else: status = UpdateStatus.UPDATE_DOWNLOAD_FAILED else: status = UpdateStatus.UPDATE_AVAILABLE_BUT_APP_NOT_FROZEN return UPDATE_STATUS_STR[status]
[documenti]def progress(data): global progbar global root if progbar is None: root = tk.Tk() # root.geometry('250x60+100+100') root.title('Aggiornamento...') step = tk.DoubleVar() step.set(0) frame = tk.Frame() frame.pack(fill=tk.BOTH, padx=2, pady=2) lbl = tk.Label(frame, text="Aggiornamento in corso, attendere prego...") lbl.pack() progbar = ttk.Progressbar( frame, orient=tk.HORIZONTAL, mode='determinate', variable=step) progbar.pack(fill=tk.X, expand=True) log.info('Downloading udpdate') root.attributes("-topmost", True) root.protocol("WM_DELETE_WINDOW", _on_closing) _center(root) root.update() n = int(float(data['percent_complete'])) log.info('Percent complete: %2d' % n) progbar['value'] = n time.sleep(.2) root.update()
def _center(widget): """ Center `widget` on the screen """ screen_width = widget.winfo_screenwidth() screen_height = widget.winfo_screenheight() x = screen_width / 2 - widget.winfo_width() / 2 # Little higher than center y = screen_height / 2 - widget.winfo_height() / 2 widget.geometry(f"+{int(x) - 100}+{int(y)}") def _on_closing(): pass
[documenti]def UpdatePyUpdaterClientConfig(revocation_checker_url): updateUrl = revocation_checker_url CLIENT_CONFIG.UPDATE_URLS = [updateUrl]