diff --git a/InvenTree/InvenTree/context.py b/InvenTree/InvenTree/context.py index 1d07511fa9..43e8b904b9 100644 --- a/InvenTree/InvenTree/context.py +++ b/InvenTree/InvenTree/context.py @@ -42,6 +42,8 @@ def health_status(request): status['system_healthy'] = all_healthy + status['up_to_date'] = InvenTree.version.isInvenTreeUpToDate() + return status diff --git a/InvenTree/InvenTree/version.py b/InvenTree/InvenTree/version.py index 6aa5c2616c..bd11c50882 100644 --- a/InvenTree/InvenTree/version.py +++ b/InvenTree/InvenTree/version.py @@ -25,10 +25,13 @@ def inventreeVersion(): return INVENTREE_SW_VERSION -def inventreeVersionTuple(): +def inventreeVersionTuple(version=None): """ Return the InvenTree version string as (maj, min, sub) tuple """ - match = re.match(r"^.*(\d+)\.(\d+)\.(\d+).*$", INVENTREE_SW_VERSION) + if version is None: + version = INVENTREE_SW_VERSION + + match = re.match(r"^.*(\d+)\.(\d+)\.(\d+).*$", str(version)) return [int(g) for g in match.groups()] @@ -44,7 +47,30 @@ def versionTupleToInt(version): n += version[2] return n - + + +def isInvenTreeUpToDate(): + """ + Test if the InvenTree instance is "up to date" with the latest version. + + A background task periodically queries GitHub for latest version, + and stores it to the database as INVENTREE_LATEST_VERSION + """ + + latest = common.models.InvenTreeSetting.get_setting('INVENTREE_LATEST_VERSION', None) + + # No record for "latest" version - we must assume we are up to date! + if not latest: + return True + + # Extract "tuple" version + version = inventreeVersionTuple(latest) + version_int = versionTupleToInt(version) + + inventree_int = versionTupleToInt(inventreeVersionTuple()) + + return inventree_int >= version_int + def inventreeApiVersion(): return INVENTREE_API_VERSION diff --git a/InvenTree/templates/about.html b/InvenTree/templates/about.html index cedfb40ca1..30f9bd19d7 100644 --- a/InvenTree/templates/about.html +++ b/InvenTree/templates/about.html @@ -19,19 +19,30 @@