From 52682884167e07053e0a72f88f1332a01f1a4b13 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Sun, 21 May 2023 22:49:24 +1000 Subject: [PATCH] Improve "hook" for loading custom unit database --- InvenTree/InvenTree/apps.py | 4 ++++ InvenTree/InvenTree/conversion.py | 19 ++++++++++++++++--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/InvenTree/InvenTree/apps.py b/InvenTree/InvenTree/apps.py index c61ccba725..27f212f038 100644 --- a/InvenTree/InvenTree/apps.py +++ b/InvenTree/InvenTree/apps.py @@ -11,6 +11,7 @@ from django.core.exceptions import AppRegistryNotReady from django.db import transaction from django.db.utils import IntegrityError +import InvenTree.conversion import InvenTree.tasks from InvenTree.config import get_setting from InvenTree.ready import canAppAccessDatabase, isInTestMode @@ -46,6 +47,9 @@ class InvenTreeConfig(AppConfig): self.collect_notification_methods() + # Ensure the unit registry is loaded + InvenTree.conversion.reload_unit_registry() + if canAppAccessDatabase() or settings.TESTING_ENV: self.add_user_on_startup() diff --git a/InvenTree/InvenTree/conversion.py b/InvenTree/InvenTree/conversion.py index 29d9816950..6067a4a071 100644 --- a/InvenTree/InvenTree/conversion.py +++ b/InvenTree/InvenTree/conversion.py @@ -15,13 +15,26 @@ def get_unit_registry(): # Cache the unit registry for speedier access if _unit_registry is None: - _unit_registry = pint.UnitRegistry() - - # TODO: Allow for custom units to be defined in the database + reload_unit_registry() return _unit_registry +def reload_unit_registry(): + """Reload the unit registry from the database. + + This function is called at startup, and whenever the database is updated. + """ + + global _unit_registry + + _unit_registry = pint.UnitRegistry() + + # TODO: Define some "standard" additional unitss + + # TODO: Allow for custom units to be defined in the database + + def convert_physical_value(value: str, unit: str = None): """Validate that the provided value is a valid physical quantity.