mirror of
https://github.com/fishyboteso/fishyboteso.git
synced 2024-08-30 18:32:13 +00:00
68 lines
1.8 KiB
Python
68 lines
1.8 KiB
Python
"""
|
|
auto_update.py
|
|
checks version and auto updates
|
|
"""
|
|
import logging
|
|
import re
|
|
import subprocess
|
|
import sys
|
|
from os import execl
|
|
from fishy.web import web
|
|
|
|
|
|
def _normalize_version(v):
|
|
"""
|
|
converts version string into an "normalized" of versions which is a list of version codes,
|
|
eg, input: '0.3.0', output: [0,3,0]
|
|
this is done so that, versions can be compared easily
|
|
:param v: string
|
|
:return: list
|
|
"""
|
|
rv = []
|
|
for x in v.split("."):
|
|
try:
|
|
rv.append(int(x))
|
|
except ValueError:
|
|
for y in re.split("([0-9]+)", x):
|
|
try:
|
|
if y != '':
|
|
rv.append(int(y))
|
|
except ValueError:
|
|
rv.append(y)
|
|
return rv
|
|
|
|
|
|
def _get_current_version():
|
|
"""
|
|
Gets the current version of the package installed
|
|
"""
|
|
import fishy
|
|
return fishy.__version__
|
|
|
|
|
|
def versions():
|
|
return _get_current_version(), web.get_highest_version()
|
|
|
|
|
|
def upgrade_avail():
|
|
"""
|
|
Checks if update is available
|
|
:return: boolean
|
|
"""
|
|
|
|
highest_version_normalized = _normalize_version(web.get_highest_version())
|
|
current_version_normalized = _normalize_version(_get_current_version())
|
|
|
|
return current_version_normalized < highest_version_normalized
|
|
|
|
|
|
def update_now(version):
|
|
"""
|
|
calling this function updates fishy,
|
|
should be the last thing to be executed as this function will restart fishy
|
|
the flaw is handed by `EngineEventHandler.update_flag` which is the last thing to be stopped
|
|
"""
|
|
logging.info(f"Updating to v{version}, Please Wait...")
|
|
subprocess.call(["python", '-m', 'pip', 'install', '--upgrade', 'fishy', '--user'])
|
|
execl(sys.executable, *([sys.executable, '-m', 'fishy'] + sys.argv[1:]))
|