2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-12-17 01:38:19 +00:00

Merge branch 'master' into generic-parameters

This commit is contained in:
Oliver
2025-11-24 15:44:41 +11:00
committed by GitHub
7 changed files with 62 additions and 30 deletions

View File

@@ -200,7 +200,9 @@ def load_config_data(set_cache: bool = False) -> map | None:
data = yaml.safe_load(cfg)
except yaml.parser.ParserError as error:
logger.error(
"Error reading InvenTree configuration file '%s': %s", cfg_file, error
"INVE-E13: Error reading InvenTree configuration file '%s': %s",
cfg_file,
error,
)
sys.exit(1)

View File

@@ -24,6 +24,22 @@ logger = structlog.get_logger('inventree')
logging.getLogger('pint').setLevel(logging.ERROR)
def can_cache_registry() -> bool:
"""Return True if it is appropriate to cache the unit registry.
Prevent caching under certain conditions (such as database migration)
to prevent database access.
"""
import InvenTree.ready
return not any([
InvenTree.ready.isImportingData(),
InvenTree.ready.isRunningBackup(),
InvenTree.ready.isRunningMigrations(),
InvenTree.ready.isInTestMode(),
])
def get_unit_registry_hash():
"""Return a hash representing the current state of the unit registry.
@@ -53,6 +69,9 @@ def set_unit_registry_hash(registry_hash: str):
global _unit_registry_hash
_unit_registry_hash = registry_hash
if not can_cache_registry():
return
# Save to both the global settings and the session cache
set_global_setting('_UNIT_REGISTRY_HASH', registry_hash)
set_session_cache(_UNIT_REG_CACHE_KEY, registry_hash)
@@ -68,7 +87,7 @@ def get_unit_registry():
return reload_unit_registry()
# Check if the unit registry has changed
if _unit_registry_hash != get_unit_registry_hash():
if can_cache_registry() and _unit_registry_hash != get_unit_registry_hash():
logger.info('Unit registry hash has changed, reloading unit registry')
return reload_unit_registry()
@@ -103,33 +122,32 @@ def reload_unit_registry():
reg.define('thousand = 1000')
# Allow for custom units to be defined in the database
# Calculate a hash of all custom units
hash_md5 = md5()
try:
from common.models import CustomUnit
# Calculate a hash of all custom units
hash_md5 = md5()
for cu in CustomUnit.objects.all():
try:
fmt = cu.fmt_string()
reg.define(fmt)
hash_md5.update(fmt.encode('utf-8'))
except Exception as e:
logger.exception(
'Failed to load custom unit: %s - %s', cu.fmt_string(), e
)
# Once custom units are loaded, save registry
_unit_registry = reg
# Update the unit registry hash
set_unit_registry_hash(hash_md5.hexdigest())
custom_units = list(CustomUnit.objects.all())
except Exception:
# Database is not ready, or CustomUnit model is not available
pass
# Database is likely not ready
custom_units = []
for cu in custom_units:
try:
fmt = cu.fmt_string()
reg.define(fmt)
hash_md5.update(fmt.encode('utf-8'))
except Exception as e:
logger.exception('Failed to load custom unit: %s - %s', cu.fmt_string(), e)
# Once custom units are loaded, save registry
_unit_registry = reg
# Update the unit registry hash
set_unit_registry_hash(hash_md5.hexdigest())
dt = time.time() - t_start
logger.debug('Loaded unit registry in %.3f s', dt)

View File

@@ -707,7 +707,7 @@ class BaseInvenTreeSetting(models.Model):
): # pragma: no cover
return
attempts = int(kwargs.get('attempts', 3))
attempts = int(kwargs.pop('attempts', 3))
filters = {
'key__iexact': key,

View File

@@ -13,7 +13,7 @@ def main():
from django.core.management import execute_from_command_line
except ImportError as exc: # pragma: no cover
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"INVE-E14: Could not import Django. Are you sure it's installed and "
'available on your PYTHONPATH environment variable? Did you '
'forget to activate a virtual environment?'
) from exc