diff --git a/src/backend/InvenTree/InvenTree/backends.py b/src/backend/InvenTree/InvenTree/backends.py index 6ed68c75e2..75147cbcc9 100644 --- a/src/backend/InvenTree/InvenTree/backends.py +++ b/src/backend/InvenTree/InvenTree/backends.py @@ -1,14 +1,12 @@ -"""Custom backend implementations.""" +"""Custom backend implementation for maintenance-mode.""" import datetime import time -from django.db.utils import IntegrityError, OperationalError, ProgrammingError - import structlog from maintenance_mode.backends import AbstractStateBackend -import common.models +from common.settings import get_global_setting, set_global_setting logger = structlog.get_logger('inventree') @@ -28,15 +26,11 @@ class InvenTreeMaintenanceModeBackend(AbstractStateBackend): bool: True if maintenance mode is active, False otherwise. """ try: - setting = common.models.InvenTreeSetting.objects.get(key=self.SETTING_KEY) - value = str(setting.value).strip() - except common.models.InvenTreeSetting.DoesNotExist: - # Database is accessible, but setting is not available - assume False - return False - except (IntegrityError, OperationalError, ProgrammingError): + value = get_global_setting(self.SETTING_KEY) + except Exception: # Database is inaccessible - assume we are not in maintenance mode - logger.debug('Failed to read maintenance mode state - assuming True') - return True + logger.debug('Failed to read maintenance mode state - assuming False') + return False # Extract timestamp from string try: @@ -65,21 +59,24 @@ class InvenTreeMaintenanceModeBackend(AbstractStateBackend): # Blank timestamp means maintenance mode is not active timestamp = '' - while retries > 0: - try: - common.models.InvenTreeSetting.set_setting(self.SETTING_KEY, timestamp) + r = retries + while r > 0: + try: + set_global_setting(self.SETTING_KEY, timestamp) # Read the value back to confirm if self.get_value() == value: break - except (IntegrityError, OperationalError, ProgrammingError): + except Exception: # In the database is locked, then logger.debug( - 'Failed to set maintenance mode state (%s retries left)', retries + 'Failed to set maintenance mode state (%s retries left)', r ) time.sleep(0.1) - retries -= 1 + r -= 1 - if retries == 0: - logger.warning('Failed to set maintenance mode state') + if r == 0: + logger.warning( + 'Failed to set maintenance mode state after %s retries', retries + ) diff --git a/src/backend/InvenTree/order/test_api.py b/src/backend/InvenTree/order/test_api.py index 9057a24aa0..130b81e568 100644 --- a/src/backend/InvenTree/order/test_api.py +++ b/src/backend/InvenTree/order/test_api.py @@ -203,8 +203,8 @@ class PurchaseOrderTest(OrderTest): self.LIST_URL, data={'limit': limit}, expected_code=200 ) - # Total database queries must be below 15, independent of the number of results - self.assertLess(len(ctx), 15) + # Total database queries must be below 20, independent of the number of results + self.assertLess(len(ctx), 20) for result in response.data['results']: self.assertIn('total_price', result) @@ -1351,8 +1351,8 @@ class SalesOrderTest(OrderTest): self.LIST_URL, data={'limit': limit}, expected_code=200 ) - # Total database queries must be less than 15 - self.assertLess(len(ctx), 15) + # Total database queries must be less than 20 + self.assertLess(len(ctx), 20) n = len(response.data['results']) diff --git a/src/backend/InvenTree/part/test_api.py b/src/backend/InvenTree/part/test_api.py index 9130478044..4d8af05846 100644 --- a/src/backend/InvenTree/part/test_api.py +++ b/src/backend/InvenTree/part/test_api.py @@ -539,7 +539,7 @@ class PartCategoryAPITest(InvenTreeAPITestCase): PartCategory.objects.rebuild() - with self.assertNumQueriesLessThan(12): + with self.assertNumQueriesLessThan(15): response = self.get(reverse('api-part-category-tree'), expected_code=200) self.assertEqual(len(response.data), PartCategory.objects.count()) diff --git a/src/backend/InvenTree/stock/test_api.py b/src/backend/InvenTree/stock/test_api.py index 786d704cf2..459f33a022 100644 --- a/src/backend/InvenTree/stock/test_api.py +++ b/src/backend/InvenTree/stock/test_api.py @@ -452,7 +452,7 @@ class StockLocationTest(StockAPITestCase): StockLocation.objects.rebuild() - with self.assertNumQueriesLessThan(12): + with self.assertNumQueriesLessThan(15): response = self.get(reverse('api-location-tree'), expected_code=200) self.assertEqual(len(response.data), StockLocation.objects.count())