From 4b70a6e4ca08fdd0ec1760fce9fd634acd9f3839 Mon Sep 17 00:00:00 2001 From: Oliver Date: Sat, 28 Jun 2025 10:25:24 +1000 Subject: [PATCH] Error tweaks (#9891) * Wrap model import in try/except * Fix circular imports * Adjust exception handling --- src/backend/InvenTree/InvenTree/exceptions.py | 12 +++++++++++- src/backend/InvenTree/part/stocktake.py | 9 +++++---- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/backend/InvenTree/InvenTree/exceptions.py b/src/backend/InvenTree/InvenTree/exceptions.py index 84ef893573..0775f9ac1f 100644 --- a/src/backend/InvenTree/InvenTree/exceptions.py +++ b/src/backend/InvenTree/InvenTree/exceptions.py @@ -38,7 +38,15 @@ def log_error( scope: The scope of the error (optional) plugin: The plugin name associated with this error (optional) """ - from error_report.models import Error + import InvenTree.ready + + if any([ + InvenTree.ready.isImportingData(), + InvenTree.ready.isRunningMigrations(), + InvenTree.ready.isRunningBackup(), + ]): + logger.exception('Exception occurred during import, migration, or backup') + return if not path: path = '' @@ -78,6 +86,8 @@ def log_error( kind = kind[:128] try: + from error_report.models import Error + Error.objects.create(kind=kind, info=info or '', data=data or '', path=path) except Exception: # Not much we can do if logging the error throws a db exception diff --git a/src/backend/InvenTree/part/stocktake.py b/src/backend/InvenTree/part/stocktake.py index 4878265f8f..1a37a2308e 100644 --- a/src/backend/InvenTree/part/stocktake.py +++ b/src/backend/InvenTree/part/stocktake.py @@ -15,15 +15,12 @@ from djmoney.money import Money import common.currency import common.models import InvenTree.helpers -import part.models import stock.models logger = structlog.get_logger('inventree') -def perform_stocktake( - target: part.models.Part, user: User, note: str = '', commit=True, **kwargs -): +def perform_stocktake(target, user: User, note: str = '', commit=True, **kwargs): """Perform stocktake action on a single part. Arguments: @@ -44,6 +41,8 @@ def perform_stocktake( In this case, the stocktake *report* will be limited to the specified location. """ + import part.models + # Determine which locations are "valid" for the generated report location = kwargs.get('location') locations = location.get_descendants(include_self=True) if location else [] @@ -162,6 +161,8 @@ def generate_stocktake_report(**kwargs): generate_report: If True, generate a stocktake report from the calculated data (default=True) update_parts: If True, save stocktake information against each filtered Part (default = True) """ + import part.models + # Determine if external locations should be excluded exclude_external = kwargs.get( 'exclude_exernal',