Source code for jetset.version_notifier
import sys
import io
import pip
from contextlib import redirect_stdout
from packaging import version
import subprocess
[docs]
class capture(redirect_stdout):
def __init__(self):
self.f = io.StringIO()
self._new_target = self.f
self._old_targets = [] # verbatim from parent class
def __enter__(self):
self._old_targets.append(getattr(sys, self._stream)) # verbatim from parent class
setattr(sys, self._stream, self._new_target) # verbatim from parent class
return self # instead of self._new_target in the parent class
def __repr__(self):
return self.f.getvalue()
[docs]
def check_version():
try:
p = subprocess.run(['python', '-m','pip', 'index', '--retries', '1', 'versions', 'jetset'], capture_output=True, text=True,timeout=1)
message = p.stdout
except:
p.kill()
outs, errs = p.communicate()
lines=str(message).split('\n')
installed= None
latest = None
for line in lines:
if 'INSTALLED:' in line:
installed=line.split(':')[1].strip()
if 'LATEST:' in line:
latest=line.split(':')[1].strip()
if installed is not None and latest is not None:
if version.parse(installed) < version.parse(latest):
o_message=('there is a new jetset version %s\n '%latest)
o_message+=('there installed one is %s',installed)
else:
o_message='jetset version is up to date v:%s'%installed
else:
o_message='not able to get latest version info from pip'
print(o_message)
[docs]
def run_version_checking():
try:
check_version()
except Exception as e:
print("can not establish internet connection, I can't verify if jetset version is up to date")