From 071c317bae10155ff35c2c14d36d96984676b7b2 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Mon, 6 Apr 2020 19:28:08 +1000 Subject: [PATCH 1/6] Add 'InstanceName' setting - Will be auto-generated if it does not already exist --- InvenTree/common/apps.py | 30 +++++++++++++++++++++++++++++- InvenTree/common/kvp.yaml | 3 +++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/InvenTree/common/apps.py b/InvenTree/common/apps.py index d055aeba74..4b16fc5236 100644 --- a/InvenTree/common/apps.py +++ b/InvenTree/common/apps.py @@ -2,7 +2,7 @@ from django.apps import AppConfig from django.db.utils import OperationalError, ProgrammingError import os - +import uuid import yaml @@ -10,14 +10,19 @@ class CommonConfig(AppConfig): name = 'common' def ready(self): + """ Will be called when the Common app is first loaded """ self.populate_default_settings() + self.add_instance_name() def populate_default_settings(self): """ Populate the default values for InvenTree key:value pairs. If a setting does not exist, it will be created. """ + # Import this here, rather than at the global-level, + # otherwise it is called all the time, and we don't want that, + # as the InvenTreeSetting model may have not been instantiated yet. from .models import InvenTreeSetting here = os.path.dirname(os.path.abspath(__file__)) @@ -46,3 +51,26 @@ class CommonConfig(AppConfig): except (OperationalError, ProgrammingError): # Migrations have not yet been applied - table does not exist break + + def add_instance_name(self): + """ + Check if an InstanceName has been defined for this database. + If not, create a random one! + """ + + # See note above + from .models import InvenTreeSetting + + if not InvenTreeSetting.objects.filter(key='InstanceName').exists(): + + val = uuid.uuid4().hex + + print("No 'InstanceName' found - generating random name '{n}'".format(n=val)) + + name = InvenTreeSetting( + key="InstanceName", + value=val, + description="Instance name for this InvenTree database installation." + ) + + name.save() diff --git a/InvenTree/common/kvp.yaml b/InvenTree/common/kvp.yaml index 9200b22c31..d0f7249dff 100644 --- a/InvenTree/common/kvp.yaml +++ b/InvenTree/common/kvp.yaml @@ -4,6 +4,9 @@ # Note: The description strings provided here will be translatable, # so ensure that any translations are provided as appropriate. +# TODO: Update the formatting here to include logical separators e.g. double-underscore +# TODO: This is so when there are enough options, we will be able to display them as a tree + - key: 'part_ipn_regex' default: '' description: 'Format string for internal part number' From 751937e0c2f08ca5d54577862d445d6c0b0ad215 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Mon, 6 Apr 2020 20:11:36 +1000 Subject: [PATCH 2/6] Use InstanceName around the place - Report in /api/ endpoint - Display in About window - Include in any generated barcode --- InvenTree/InvenTree/helpers.py | 4 ++++ InvenTree/InvenTree/version.py | 6 +++++ InvenTree/InvenTree/views.py | 5 ++-- .../part/templatetags/inventree_extras.py | 6 +++++ InvenTree/templates/about.html | 24 ++++++++++++------- InvenTree/templates/base.html | 4 +++- 6 files changed, 37 insertions(+), 12 deletions(-) diff --git a/InvenTree/InvenTree/helpers.py b/InvenTree/InvenTree/helpers.py index 0abe5313ee..5492f13a05 100644 --- a/InvenTree/InvenTree/helpers.py +++ b/InvenTree/InvenTree/helpers.py @@ -13,6 +13,8 @@ from django.http import StreamingHttpResponse from django.core.exceptions import ValidationError from django.utils.translation import ugettext as _ +from .version import inventreeVersion, inventreeInstanceName + def TestIfImage(img): """ Test if an image file is indeed an image """ @@ -134,6 +136,8 @@ def MakeBarcode(object_type, object_id, object_url, data={}): data['id'] = object_id data['url'] = object_url data['tool'] = 'InvenTree' + data['instance'] = inventreeInstanceName() + data['version'] = inventreeVersion() return json.dumps(data, sort_keys=True) diff --git a/InvenTree/InvenTree/version.py b/InvenTree/InvenTree/version.py index be4e6c708e..182c8f58f7 100644 --- a/InvenTree/InvenTree/version.py +++ b/InvenTree/InvenTree/version.py @@ -3,9 +3,15 @@ Provides information on the current InvenTree version """ import subprocess +from common.models import InvenTreeSetting + INVENTREE_SW_VERSION = "0.0.10" +def inventreeInstanceName(): + """ Returns the InstanceName settings for the current database """ + return InvenTreeSetting.get_setting("InstanceName", "") + def inventreeVersion(): """ Returns the InvenTree version string """ diff --git a/InvenTree/InvenTree/views.py b/InvenTree/InvenTree/views.py index 5121b1bad9..9cdfecbd8a 100644 --- a/InvenTree/InvenTree/views.py +++ b/InvenTree/InvenTree/views.py @@ -22,7 +22,7 @@ from common.models import InvenTreeSetting from .forms import DeleteForm, EditUserForm, SetPasswordForm from .helpers import str2bool -from .version import inventreeVersion +from .version import inventreeVersion, inventreeInstanceName from rest_framework import views @@ -422,7 +422,8 @@ class InfoView(AjaxView): data = { 'server': 'InvenTree', - 'version': inventreeVersion() + 'version': inventreeVersion(), + 'instance': inventreeInstanceName(), } return JsonResponse(data) diff --git a/InvenTree/part/templatetags/inventree_extras.py b/InvenTree/part/templatetags/inventree_extras.py index d508452e80..e68e9c23dc 100644 --- a/InvenTree/part/templatetags/inventree_extras.py +++ b/InvenTree/part/templatetags/inventree_extras.py @@ -43,6 +43,12 @@ def part_allocation_count(build, part, *args, **kwargs): return decimal2string(build.getAllocatedQuantity(part)) +@register.simple_tag() +def inventree_instance_name(*args, **kwargs): + """ Return the InstanceName associated with the current database """ + return version.inventreeInstanceName() + + @register.simple_tag() def inventree_version(*args, **kwargs): """ Return InvenTree version string """ diff --git a/InvenTree/templates/about.html b/InvenTree/templates/about.html index 4f8d7e6d4e..412e7fc644 100644 --- a/InvenTree/templates/about.html +++ b/InvenTree/templates/about.html @@ -10,35 +10,41 @@ Inventree Logo +

{% trans "InvenTree Version Information" %}