mirror of
https://github.com/inventree/InvenTree.git
synced 2025-11-30 01:10:00 +00:00
[bug] Migration test fix (#10899)
* Pop instead of get * Better error handling for unit registry * Prevent caching during database migrations * Remove debug msg * Revert changes
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -704,7 +704,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,
|
||||
|
||||
Reference in New Issue
Block a user