Read version number from GitHub

This commit is contained in:
Oliver Walters 2021-03-11 19:56:22 +11:00
parent 3cf5aec289
commit 18defcff16
4 changed files with 72 additions and 8 deletions

View File

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import re
import json
import requests
import logging
@ -35,7 +36,7 @@ def schedule_task(taskname, **kwargs):
**kwargs
)
def delete_successful_tasks():
"""
Delete successful task logs
@ -49,6 +50,12 @@ def check_for_updates():
Check if there is an update for InvenTree
"""
try:
import common.models
import InvenTree.version
except AppRegistryNotReady:
return
response = requests.get('https://api.github.com/repos/inventree/inventree/releases/latest')
if not response.status_code == 200:
@ -57,12 +64,33 @@ def check_for_updates():
data = json.loads(response.text)
print("Response:")
print(data)
# TODO
tag = data.get('tag_name', None)
return data
if not tag:
logger.warning(f"'tag_name' missing from GitHub response")
return
match = re.match(r"^.*(\d+)\.(\d+)\.(\d+).*$", tag)
def test(x):
print(f"Running at task! {x}")
if not len(match.groups()) == 3:
logger.warning(f"Version '{tag}' did not match expected pattern")
return
try:
latest_version = [int(x) for x in match.groups()]
except (ValueError):
logger.warning(f"Version '{tag}' not integer format")
return
if not len(latest_version) == 3:
logger.warning(f"Version '{tag}' is not correct format")
return
logger.info(f"Latest InvenTree version: '{tag}'")
# Save the version to the database
common.models.InvenTreeSetting.set_setting(
'INVENTREE_LATEST_VERSION',
tag,
None
)

View File

@ -7,6 +7,7 @@ from django.core.exceptions import ValidationError
from .validators import validate_overage, validate_part_name
from . import helpers
from . import version
from mptt.exceptions import InvalidMove
@ -269,3 +270,15 @@ class TestSerialNumberExtraction(TestCase):
with self.assertRaises(ValidationError):
e("10, a, 7-70j", 4)
class TestVersionNumber(TestCase):
def test_tuple(self):
v = version.inventreeVersionTuple()
self.assertEqual(len(v), 3)
s = '.'.join(v)
self.assertTrue(s in version.inventreeVersion())

View File

@ -4,9 +4,11 @@ Provides information on the current InvenTree version
import subprocess
import django
import re
import common.models
INVENTREE_SW_VERSION = "0.1.8 pre"
# Increment this number whenever there is a significant change to the API that any clients need to know about
@ -23,6 +25,27 @@ def inventreeVersion():
return INVENTREE_SW_VERSION
def inventreeVersionTuple():
""" Return the InvenTree version string as (maj, min, sub) tuple """
match = re.match(r"^.*(\d+)\.(\d+)\.(\d+).*$", INVENTREE_SW_VERSION)
return [int(g) for g in match.groups()]
def versionTupleToInt(version):
"""
Convert a version tuple (x, y, z) to an integer.
This simple integer can then be used for direct version comparison
"""
n = version[0] * 1000 * 1000
n += version[1] * 1000
n += version[2]
return n
def inventreeApiVersion():
return INVENTREE_API_VERSION

View File

@ -486,7 +486,7 @@ class InvenTreeSetting(models.Model):
create: If True, create a new setting if the specified key does not exist.
"""
if not user.is_staff:
if user is not None and not user.is_staff:
return
try: