Source code for dgenies.lib.latest

import requests
import json
import os
import threading
from dgenies.config_reader import AppConfigReader

[docs]class Latest: """ Search latest version """ def __init__(self): self.latest = "" self.win32 = "" config = AppConfigReader() self._save_latest = os.path.join(config.config_dir, ".latest") self.load()
[docs] def load(self): """ Load latest version: use cached version (if any) and then sync with Github """ if os.path.exists(self._save_latest): with open(self._save_latest, "r") as latest_f: self.latest = latest_f.readline().rstrip() self.win32 = latest_f.readline().rstrip() if self.latest == "" or self.win32 == "": self.update() else: self.update_async() else: self.update()
[docs] def update_async(self): """ Update latest version asynchronously """ thread = threading.Timer(1, self.update) thread.start()
[docs] def update(self): """ Get latest version from Github """ try: call = requests.get("") if call.ok: release = json.loads(call.content.decode("utf-8")) if "tag_name" in release: self.latest = release["tag_name"][1:] for asset in release["assets"]: if asset["name"].endswith(".exe"): self.win32 = asset["browser_download_url"] break except ConnectionError: pass else: self._write_update()
def _write_update(self): """ Save latest version to a file """ if self.latest != "" or self.win32 != "": with open(self._save_latest, "w") as latest_f: latest_f.write("\n".join([self.latest, self.win32]))