diff --git a/InvenTree/InvenTree/apps.py b/InvenTree/InvenTree/apps.py index c515600247..e6c5c10c86 100644 --- a/InvenTree/InvenTree/apps.py +++ b/InvenTree/InvenTree/apps.py @@ -71,7 +71,10 @@ class InvenTreeConfig(AppConfig): return # Remove any existing obsolete tasks - Schedule.objects.filter(func__in=obsolete).delete() + try: + Schedule.objects.filter(func__in=obsolete).delete() + except Exception: + logger.error("Failed to remove obsolete tasks - database not ready") def start_background_tasks(self): """Start all background tests for InvenTree.""" diff --git a/InvenTree/common/models.py b/InvenTree/common/models.py index c871371e6d..d35bcf8827 100644 --- a/InvenTree/common/models.py +++ b/InvenTree/common/models.py @@ -31,7 +31,7 @@ from django.core.validators import (MaxValueValidator, MinValueValidator, URLValidator) from django.db import models, transaction from django.db.models.signals import post_delete, post_save -from django.db.utils import IntegrityError, OperationalError +from django.db.utils import IntegrityError, OperationalError, ProgrammingError from django.dispatch.dispatcher import receiver from django.urls import reverse from django.utils.timezone import now @@ -487,7 +487,7 @@ class BaseInvenTreeSetting(models.Model): setting = settings.filter(**filters).first() except (ValueError, cls.DoesNotExist): setting = None - except (IntegrityError, OperationalError): + except (IntegrityError, OperationalError, ProgrammingError): setting = None # Setting does not exist! (Try to create it) @@ -512,7 +512,7 @@ class BaseInvenTreeSetting(models.Model): # Wrap this statement in "atomic", so it can be rolled back if it fails with transaction.atomic(): setting.save(**kwargs) - except (IntegrityError, OperationalError): + except (IntegrityError, OperationalError, ProgrammingError): # It might be the case that the database isn't created yet pass except ValidationError: diff --git a/InvenTree/label/apps.py b/InvenTree/label/apps.py index 270de65b56..cdba5bfc0e 100644 --- a/InvenTree/label/apps.py +++ b/InvenTree/label/apps.py @@ -182,8 +182,11 @@ class LabelConfig(AppConfig): shutil.copyfile(src_file, dst_file) # Check if a label matching the template already exists - if model.objects.filter(label=filename).exists(): - return # pragma: no cover + try: + if model.objects.filter(label=filename).exists(): + return # pragma: no cover + except Exception: + logger.error(f"Failed to query label for '{filename}' - you should run 'invoke update' first!") logger.info(f"Creating entry for {model} '{label['name']}'") diff --git a/InvenTree/part/apps.py b/InvenTree/part/apps.py index 73cd429146..06deb7d60d 100644 --- a/InvenTree/part/apps.py +++ b/InvenTree/part/apps.py @@ -55,12 +55,15 @@ class PartConfig(AppConfig): if isImportingData(): return - items = PartPricing.objects.filter(scheduled_for_update=True) + try: + items = PartPricing.objects.filter(scheduled_for_update=True) - if items.count() > 0: - # Find any pricing objects which have the 'scheduled_for_update' flag set - print(f"Resetting update flags for {items.count()} pricing objects...") + if items.count() > 0: + # Find any pricing objects which have the 'scheduled_for_update' flag set + logger.info(f"Resetting update flags for {items.count()} pricing objects...") - for pricing in items: - pricing.scheduled_for_update = False - pricing.save() + for pricing in items: + pricing.scheduled_for_update = False + pricing.save() + except Exception: + logger.error("Failed to reset pricing flags - database not ready")