* Update "isRunningMigrations" method

* Update other apps.py files
This commit is contained in:
Oliver 2024-01-11 00:35:25 +11:00 committed by GitHub
parent e1b670ba57
commit 445551e6f3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 46 additions and 26 deletions

View File

@ -12,10 +12,9 @@ from django.db import transaction
from django.db.utils import IntegrityError, OperationalError from django.db.utils import IntegrityError, OperationalError
import InvenTree.conversion import InvenTree.conversion
import InvenTree.ready
import InvenTree.tasks import InvenTree.tasks
from InvenTree.config import get_setting from InvenTree.config import get_setting
from InvenTree.ready import (canAppAccessDatabase, isInMainThread,
isInTestMode, isPluginRegistryLoaded)
logger = logging.getLogger("inventree") logger = logging.getLogger("inventree")
@ -37,17 +36,21 @@ class InvenTreeConfig(AppConfig):
- Adding users set in the current environment - Adding users set in the current environment
""" """
# skip loading if plugin registry is not loaded or we run in a background thread # skip loading if plugin registry is not loaded or we run in a background thread
if not isPluginRegistryLoaded() or not isInMainThread(): if not InvenTree.ready.isPluginRegistryLoaded() or not InvenTree.ready.isInMainThread():
return return
if canAppAccessDatabase() or settings.TESTING_ENV: # Skip if running migrations
if InvenTree.ready.isRunningMigrations():
return
if InvenTree.ready.canAppAccessDatabase() or settings.TESTING_ENV:
self.remove_obsolete_tasks() self.remove_obsolete_tasks()
self.collect_tasks() self.collect_tasks()
self.start_background_tasks() self.start_background_tasks()
if not isInTestMode(): # pragma: no cover if not InvenTree.ready.isInTestMode(): # pragma: no cover
self.update_exchange_rates() self.update_exchange_rates()
# Let the background worker check for migrations # Let the background worker check for migrations
InvenTree.tasks.offload_task(InvenTree.tasks.check_for_migrations) InvenTree.tasks.offload_task(InvenTree.tasks.check_for_migrations)
@ -58,7 +61,7 @@ class InvenTreeConfig(AppConfig):
# Ensure the unit registry is loaded # Ensure the unit registry is loaded
InvenTree.conversion.get_unit_registry() InvenTree.conversion.get_unit_registry()
if canAppAccessDatabase() or settings.TESTING_ENV: if InvenTree.ready.canAppAccessDatabase() or settings.TESTING_ENV:
self.add_user_on_startup() self.add_user_on_startup()
self.add_user_from_file() self.add_user_from_file()

View File

@ -16,7 +16,11 @@ def isImportingData():
def isRunningMigrations(): def isRunningMigrations():
"""Return True if the database is currently running migrations.""" """Return True if the database is currently running migrations."""
return 'migrate' in sys.argv or 'makemigrations' in sys.argv return any((x in sys.argv for x in [
'migrate',
'makemigrations',
'showmigrations'
]))
def isInMainThread(): def isInMainThread():

View File

@ -4,7 +4,7 @@ import logging
from django.apps import AppConfig from django.apps import AppConfig
from InvenTree.ready import isImportingData import InvenTree.ready
logger = logging.getLogger('inventree') logger = logging.getLogger('inventree')
@ -19,6 +19,10 @@ class CommonConfig(AppConfig):
def ready(self): def ready(self):
"""Initialize restart flag clearance on startup.""" """Initialize restart flag clearance on startup."""
if InvenTree.ready.isRunningMigrations():
return
self.clear_restart_flag() self.clear_restart_flag()
def clear_restart_flag(self): def clear_restart_flag(self):
@ -29,7 +33,7 @@ class CommonConfig(AppConfig):
if common.models.InvenTreeSetting.get_setting('SERVER_RESTART_REQUIRED', backup_value=False, create=False, cache=False): if common.models.InvenTreeSetting.get_setting('SERVER_RESTART_REQUIRED', backup_value=False, create=False, cache=False):
logger.info("Clearing SERVER_RESTART_REQUIRED flag") logger.info("Clearing SERVER_RESTART_REQUIRED flag")
if not isImportingData(): if not InvenTree.ready.isImportingData():
common.models.InvenTreeSetting.set_setting('SERVER_RESTART_REQUIRED', False, None) common.models.InvenTreeSetting.set_setting('SERVER_RESTART_REQUIRED', False, None)
except Exception: except Exception:
pass pass

View File

@ -12,8 +12,7 @@ from django.conf import settings
from django.core.exceptions import AppRegistryNotReady from django.core.exceptions import AppRegistryNotReady
from django.db.utils import IntegrityError, OperationalError, ProgrammingError from django.db.utils import IntegrityError, OperationalError, ProgrammingError
from InvenTree.ready import (canAppAccessDatabase, isImportingData, import InvenTree.ready
isInMainThread, isPluginRegistryLoaded)
logger = logging.getLogger("inventree") logger = logging.getLogger("inventree")
@ -37,10 +36,13 @@ class LabelConfig(AppConfig):
def ready(self): def ready(self):
"""This function is called whenever the label app is loaded.""" """This function is called whenever the label app is loaded."""
# skip loading if plugin registry is not loaded or we run in a background thread # skip loading if plugin registry is not loaded or we run in a background thread
if not isPluginRegistryLoaded() or not isInMainThread(): if not InvenTree.ready.isPluginRegistryLoaded() or not InvenTree.ready.isInMainThread():
return return
if canAppAccessDatabase(allow_test=False) and not isImportingData(): if InvenTree.ready.isRunningMigrations():
return
if InvenTree.ready.canAppAccessDatabase(allow_test=False) and not InvenTree.ready.isImportingData():
try: try:
self.create_labels() # pragma: no cover self.create_labels() # pragma: no cover
except (AppRegistryNotReady, IntegrityError, OperationalError, ProgrammingError): except (AppRegistryNotReady, IntegrityError, OperationalError, ProgrammingError):

View File

@ -5,8 +5,7 @@ import logging
from django.apps import AppConfig from django.apps import AppConfig
from django.db.utils import OperationalError, ProgrammingError from django.db.utils import OperationalError, ProgrammingError
from InvenTree.ready import (canAppAccessDatabase, isImportingData, import InvenTree.ready
isInMainThread, isPluginRegistryLoaded)
logger = logging.getLogger("inventree") logger = logging.getLogger("inventree")
@ -18,10 +17,13 @@ class PartConfig(AppConfig):
def ready(self): def ready(self):
"""This function is called whenever the Part app is loaded.""" """This function is called whenever the Part app is loaded."""
# skip loading if plugin registry is not loaded or we run in a background thread # skip loading if plugin registry is not loaded or we run in a background thread
if not isPluginRegistryLoaded() or not isInMainThread(): if not InvenTree.ready.isPluginRegistryLoaded() or not InvenTree.ready.isInMainThread():
return return
if canAppAccessDatabase(): if InvenTree.ready.isRunningMigrations():
return
if InvenTree.ready.canAppAccessDatabase():
self.update_trackable_status() self.update_trackable_status()
self.reset_part_pricing_flags() self.reset_part_pricing_flags()
@ -51,7 +53,7 @@ class PartConfig(AppConfig):
""" """
from .models import PartPricing from .models import PartPricing
if isImportingData(): if InvenTree.ready.isImportingData():
return return
try: try:

View File

@ -20,11 +20,13 @@ class ReportConfig(AppConfig):
def ready(self): def ready(self):
"""This function is called whenever the report app is loaded.""" """This function is called whenever the report app is loaded."""
from InvenTree.ready import (canAppAccessDatabase, isImportingData, import InvenTree.ready
isInMainThread, isPluginRegistryLoaded)
# skip loading if plugin registry is not loaded or we run in a background thread # skip loading if plugin registry is not loaded or we run in a background thread
if not isPluginRegistryLoaded() or not isInMainThread(): if not InvenTree.ready.isPluginRegistryLoaded() or not InvenTree.ready.isInMainThread():
return
if InvenTree.ready.isRunningMigrations():
return return
# Configure logging for PDF generation (disable "info" messages) # Configure logging for PDF generation (disable "info" messages)
@ -32,7 +34,7 @@ class ReportConfig(AppConfig):
logging.getLogger('weasyprint').setLevel(logging.WARNING) logging.getLogger('weasyprint').setLevel(logging.WARNING)
# Create entries for default report templates # Create entries for default report templates
if canAppAccessDatabase(allow_test=False) and not isImportingData(): if InvenTree.ready.canAppAccessDatabase(allow_test=False) and not InvenTree.ready.isImportingData():
try: try:
self.create_default_test_reports() self.create_default_test_reports()

View File

@ -5,8 +5,7 @@ import logging
from django.apps import AppConfig from django.apps import AppConfig
from django.db.utils import OperationalError, ProgrammingError from django.db.utils import OperationalError, ProgrammingError
from InvenTree.ready import (canAppAccessDatabase, isInMainThread, import InvenTree.ready
isPluginRegistryLoaded)
logger = logging.getLogger('inventree') logger = logging.getLogger('inventree')
@ -19,10 +18,14 @@ class UsersConfig(AppConfig):
def ready(self): def ready(self):
"""Called when the 'users' app is loaded at runtime""" """Called when the 'users' app is loaded at runtime"""
# skip loading if plugin registry is not loaded or we run in a background thread # skip loading if plugin registry is not loaded or we run in a background thread
if not isPluginRegistryLoaded() or not isInMainThread(): if not InvenTree.ready.isPluginRegistryLoaded() or not InvenTree.ready.isInMainThread():
return return
if canAppAccessDatabase(allow_test=True): # Skip if running migrations
if InvenTree.ready.isRunningMigrations():
return
if InvenTree.ready.canAppAccessDatabase(allow_test=True):
try: try:
self.assign_permissions() self.assign_permissions()