Source code for util.upgrade_check
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# Copyright 2009 Glencoe Software, Inc. All rights reserved.
# Use is subject to license terms supplied in LICENSE.txt
from omero_version import omero_version
import platform
import logging
import requests
[docs]
class UpgradeCheck(object):
"""
Port of Java UpgradeCheck:
>>> from omero.util.upgrade_check import UpgradeCheck
>>> uc = UpgradeCheck("doctest")
>>> uc.run()
>>> uc.isUpgradeNeeded()
False
>>> uc.isExceptionThrown()
False
>>> uc = UpgradeCheck("doctest", version = "0.0.0")
>>> uc.run()
>>> uc.isUpgradeNeeded()
True
>>> uc.isExceptionThrown()
False
>>>
>>> uc = UpgradeCheck("doctest",
... url = "http://some-completely-unknown-host.abcd/")
>>> uc.run()
>>> uc.isUpgradeNeeded()
False
>>> uc.isExceptionThrown()
True
"""
#
# our default timeout to use for requests; package default is no timeout
# * https://requests.readthedocs.io/en/master/user/quickstart/#timeouts
#
DEFAULT_TIMEOUT = 6.0
def __init__(self, agent, url="http://upgrade.openmicroscopy.org.uk/",
version=omero_version, timeout=DEFAULT_TIMEOUT):
"""
::
agent := Name of the agent which is accessing the registry.
This will be appended to "OMERO." in order to adhere
to the registry API.
url := Connection information for the upgrade check.
None or empty string disables check.
Defaults to upgrade.openmicroscopy.org.uk
version := Version to check against the returned value.
Defaults to current version as specified
in omero_version.py.
timeout := How long to wait for the HTTP GET in seconds (float).
The default timeout is 3 seconds.
"""
self.log = logging.getLogger("omero.util.UpgradeCheck")
self.url = str(url)
self.version = str(version)
self.timeout = float(timeout)
self.agent = "OMERO." + str(agent)
self.upgradeUrl = None
self.exc = None
[docs]
def isUpgradeNeeded(self):
return self.upgradeUrl is not None
[docs]
def getUpgradeUrl(self):
return self.upgradeUrl
[docs]
def isExceptionThrown(self):
return self.exc is not None
[docs]
def getExceptionThrown(self):
return self.exc
def _set(self, results, e):
self.upgradeUrl = results
self.exc = e
[docs]
def getOSVersion(self):
try:
if len(platform.mac_ver()[0]) > 0:
version = "%s;%s" % (platform.platform(),
platform.mac_ver()[0])
else:
version = platform.platform()
except Exception:
version = platform.platform()
return version
[docs]
def run(self):
"""
If the {@link #url} has been set to null or the empty string, then no
upgrade check will be performed (silently). If however the string is an
invalid URL, a warning will be printed.
This method should <em>never</em> throw an exception.
"""
# If None or empty, the upgrade check is disabled.
if self.url is None or len(self.url) == 0:
return
# EARLY EXIT!
try:
params = {}
params["version"] = self.version
params["os.name"] = platform.system()
params["os.arch"] = platform.machine()
params["os.version"] = self.getOSVersion()
params["python.version"] = platform.python_version()
params["python.compiler"] = platform.python_compiler()
params["python.build"] = platform.python_build()
headers = {'User-Agent': self.agent}
request = requests.get(
self.url, headers=headers, params=params,
timeout=self.DEFAULT_TIMEOUT
)
result = request.text
except Exception as e:
self.log.error(str(e), exc_info=0)
self._set(None, e)
return
if len(result) == 0:
self.log.info("no update needed")
self._set(None, None)
else:
self.log.warn("UPGRADE AVAILABLE:" + result)
self._set(result, None)