From 185af05f99e07e469c89783e521bf0fbe57470ac Mon Sep 17 00:00:00 2001 From: Bastian Schroll Date: Fri, 8 Mar 2019 09:05:20 +0100 Subject: [PATCH 1/2] implement fetching from online version --- boswatch/updater.py | 71 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 boswatch/updater.py diff --git a/boswatch/updater.py b/boswatch/updater.py new file mode 100644 index 00000000..ff51f361 --- /dev/null +++ b/boswatch/updater.py @@ -0,0 +1,71 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +"""! + ____ ____ ______ __ __ __ _____ + / __ )/ __ \/ ___/ | / /___ _/ /______/ /_ |__ / + / __ / / / /\__ \| | /| / / __ `/ __/ ___/ __ \ /_ < + / /_/ / /_/ /___/ /| |/ |/ / /_/ / /_/ /__/ / / / ___/ / +/_____/\____//____/ |__/|__/\__,_/\__/\___/_/ /_/ /____/ + German BOS Information Script + by Bastian Schroll + +@file: updater.py +@date: 08.03.2019 +@author: Bastian Schroll +@description: Class for a BOSWatch automated updates +""" +import logging +import urllib.request +import re +from boswatch import version + +logging.debug("- %s loaded", __name__) + + +class Updater: + def __init__(self): + self._url = "https://raw.githubusercontent.com/BOSWatch/BW3-Core/master/boswatch/version.py" + self._clientVersion = None + self._serverVersion = None + self._date = None + self._branch = None + + def getVersion(self): + logging.debug("check for updates") + data = urllib.request.urlopen(self._url) + for line in data: + content = str(line, "utf8") + + if "client = " in content: + data = re.findall("(\d+)", content) + self._clientVersion = {"major": int(data[0]), "minor": int(data[1]), "patch": int(data[2])} + + if "server = " in content: + data = re.findall("(\d+)", content) + self._serverVersion = {"major": int(data[0]), "minor": int(data[1]), "patch": int(data[2])} + + if "date = " in content: + data = re.findall("(\d+)", content) + self._date = {"day": int(data[0]), "month": int(data[1]), "year": int(data[2])} + + if "branch = " in content: + data = re.findall("(?:branch)(?:[ =\"]+)(\w*)", content) + self._branch = data[0] + + def checkVersion(self): + if version.client["major"] < self._clientVersion["major"] or \ + version.client["minor"] < self._clientVersion["minor"] or \ + version.client["patch"] < self._clientVersion["patch"]: + logging.info("There is a client update available: %d.%d.%d -> %d.%d.%d", + version.client["major"], version.client["minor"], version.client["patch"], + self._clientVersion["major"], self._clientVersion["minor"], self._clientVersion["patch"]) + + if version.server["major"] < self._serverVersion["major"] or \ + version.server["minor"] < self._serverVersion["minor"] or \ + version.server["patch"] < self._serverVersion["patch"]: + logging.info("There is a server update available: %d.%d.%d -> %d.%d.%d", + version.server["major"], version.server["minor"], version.server["patch"], + self._serverVersion["major"], self._serverVersion["minor"], self._serverVersion["patch"]) + + + From 5ad33eac7ea4598a2419400bf318d575034265dd Mon Sep 17 00:00:00 2001 From: Bastian Schroll Date: Mon, 11 Mar 2019 22:04:19 +0100 Subject: [PATCH 2/2] improve updater class --- boswatch/updater.py | 38 ++++++++++++++++++++++++++------------ 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/boswatch/updater.py b/boswatch/updater.py index ff51f361..6495a18b 100644 --- a/boswatch/updater.py +++ b/boswatch/updater.py @@ -23,16 +23,14 @@ class Updater: - def __init__(self): - self._url = "https://raw.githubusercontent.com/BOSWatch/BW3-Core/master/boswatch/version.py" + def __init__(self, branch): self._clientVersion = None self._serverVersion = None self._date = None - self._branch = None + self._branch = branch - def getVersion(self): - logging.debug("check for updates") - data = urllib.request.urlopen(self._url) + def _getOnlineVersion(self): + data = urllib.request.urlopen("https://raw.githubusercontent.com/BOSWatch/BW3-Core/" + self._branch + "/boswatch/version.py") for line in data: content = str(line, "utf8") @@ -52,20 +50,36 @@ def getVersion(self): data = re.findall("(?:branch)(?:[ =\"]+)(\w*)", content) self._branch = data[0] - def checkVersion(self): + def checkClientUpdate(self): + logging.debug("checking for client update") + self._getOnlineVersion() if version.client["major"] < self._clientVersion["major"] or \ version.client["minor"] < self._clientVersion["minor"] or \ version.client["patch"] < self._clientVersion["patch"]: - logging.info("There is a client update available: %d.%d.%d -> %d.%d.%d", + logging.info("There is a client update from available: %d.%d.%d (%d.%d.%d) -> %d.%d.%d (%d.%d.%d)", version.client["major"], version.client["minor"], version.client["patch"], - self._clientVersion["major"], self._clientVersion["minor"], self._clientVersion["patch"]) + version.date["day"], version.date["month"], version.date["year"], + self._clientVersion["major"], self._clientVersion["minor"], self._clientVersion["patch"], + self._date["day"], self._date["month"], self._date["year"]) + return False + else: + logging.debug("client is up to date") + return True + def checkServerUpdate(self): + logging.debug("checking for server update") + self._getOnlineVersion() if version.server["major"] < self._serverVersion["major"] or \ version.server["minor"] < self._serverVersion["minor"] or \ version.server["patch"] < self._serverVersion["patch"]: - logging.info("There is a server update available: %d.%d.%d -> %d.%d.%d", + logging.info("There is a server update from %d.%d.%d available: %d.%d.%d -> %d.%d.%d", + version.date["day"], version.date["month"], version.date["year"], version.server["major"], version.server["minor"], version.server["patch"], self._serverVersion["major"], self._serverVersion["minor"], self._serverVersion["patch"]) + return False + else: + logging.debug("server is up to date") + return True - - + def doUpdate(self): + pass