From 356b6cf15b0f8e8cfd4e7e105bda9c2cb4f689e7 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Mon, 3 Feb 2020 20:51:53 +1100 Subject: [PATCH] Load default settings on InvenTree launch --- InvenTree/common/apps.py | 38 +++++++++++++++++++ InvenTree/common/kvp.yaml | 13 +++++++ .../migrations/0006_auto_20200203_0951.py | 17 +++++++++ InvenTree/common/models.py | 4 ++ .../part/templatetags/inventree_extras.py | 7 ++++ 5 files changed, 79 insertions(+) create mode 100644 InvenTree/common/kvp.yaml create mode 100644 InvenTree/common/migrations/0006_auto_20200203_0951.py diff --git a/InvenTree/common/apps.py b/InvenTree/common/apps.py index 5f2f078473..9252d40d9e 100644 --- a/InvenTree/common/apps.py +++ b/InvenTree/common/apps.py @@ -1,5 +1,43 @@ from django.apps import AppConfig +from django.db.utils import OperationalError + +import yaml class CommonConfig(AppConfig): name = 'common' + + def ready(self): + """ Will be called when the Common app is first loaded """ + self.populate_default_settings() + + def populate_default_settings(self): + """ Populate the default values for InvenTree key:value pairs. + If a setting does not exist, it will be created. + """ + + from .models import InvenTreeSetting + + with open('./common/kvp.yaml') as kvp: + values = yaml.safe_load(kvp) + + for value in values: + key = value['key'] + default = value['default'] + description = value['description'] + + try: + # If a particular setting does not exist in the database, create it now + if not InvenTreeSetting.objects.filter(key=key).exists(): + setting = InvenTreeSetting( + key=key, + value=default, + description=description + ) + + setting.save() + + print("Creating new key: '{k}' = '{v}'".format(k=key, v=default)) + except OperationalError: + # Migrations have not yet been applied - table does not exist + break diff --git a/InvenTree/common/kvp.yaml b/InvenTree/common/kvp.yaml new file mode 100644 index 0000000000..9200b22c31 --- /dev/null +++ b/InvenTree/common/kvp.yaml @@ -0,0 +1,13 @@ +# This file contains the default values for the key:value settings available in InvenTree +# This file should not be edited locally. + +# Note: The description strings provided here will be translatable, +# so ensure that any translations are provided as appropriate. + +- key: 'part_ipn_regex' + default: '' + description: 'Format string for internal part number' + +- key: part_deep_copy + default: True + description: 'Parts are deep-copied by default' \ No newline at end of file diff --git a/InvenTree/common/migrations/0006_auto_20200203_0951.py b/InvenTree/common/migrations/0006_auto_20200203_0951.py new file mode 100644 index 0000000000..78460cfd62 --- /dev/null +++ b/InvenTree/common/migrations/0006_auto_20200203_0951.py @@ -0,0 +1,17 @@ +# Generated by Django 2.2.9 on 2020-02-03 09:51 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('common', '0005_auto_20190915_1256'), + ] + + operations = [ + migrations.AlterModelOptions( + name='inventreesetting', + options={'verbose_name': 'InvenTree Setting', 'verbose_name_plural': 'InvenTree Settings'}, + ), + ] diff --git a/InvenTree/common/models.py b/InvenTree/common/models.py index 0b8795484b..6a2f6d8fa3 100644 --- a/InvenTree/common/models.py +++ b/InvenTree/common/models.py @@ -21,6 +21,10 @@ class InvenTreeSetting(models.Model): even if that key does not exist. """ + class Meta: + verbose_name = "InvenTree Setting" + verbose_name_plural = "InvenTree Settings" + @classmethod def get_setting(cls, key, backup_value=None): """ diff --git a/InvenTree/part/templatetags/inventree_extras.py b/InvenTree/part/templatetags/inventree_extras.py index 323d65050e..0a111bfb0e 100644 --- a/InvenTree/part/templatetags/inventree_extras.py +++ b/InvenTree/part/templatetags/inventree_extras.py @@ -6,6 +6,8 @@ from django import template from InvenTree import version from InvenTree.helpers import decimal2string +from common.models import InvenTreeSetting + register = template.Library() @@ -69,3 +71,8 @@ def inventree_github_url(*args, **kwargs): def inventree_docs_url(*args, **kwargs): """ Return URL for InvenTree documenation site """ return "https://inventree.github.io" + + +@register.simple_tag() +def inventree_setting(key, *args, **kwargs): + return InvenTreeSetting.get_setting(key)