mirror of
				https://github.com/inventree/InvenTree.git
				synced 2025-10-30 20:55:42 +00:00 
			
		
		
		
	Docker fixes again (#10145)
* Add helper function for debugging query counts * Adjust counts again * Add docs to contributing.md
This commit is contained in:
		| @@ -8,6 +8,7 @@ import re | ||||
| import time | ||||
| from contextlib import contextmanager | ||||
| from pathlib import Path | ||||
| from typing import Optional | ||||
| from unittest import mock | ||||
|  | ||||
| from django.contrib.auth import get_user_model | ||||
| @@ -25,6 +26,33 @@ from plugin import registry | ||||
| from plugin.models import PluginConfig | ||||
|  | ||||
|  | ||||
| @contextmanager | ||||
| def count_queries( | ||||
|     msg: Optional[str] = None, log_to_file: bool = False, using: str = 'default' | ||||
| ):  # pragma: no cover | ||||
|     """Helper function to count the number of queries executed. | ||||
|  | ||||
|     Arguments: | ||||
|         msg: Optional message to print after counting queries | ||||
|         log_to_file: If True, log the queries to a file (default = False) | ||||
|         using: The database connection to use (default = 'default') | ||||
|     """ | ||||
|     with CaptureQueriesContext(connections[using]) as context: | ||||
|         yield | ||||
|  | ||||
|     n = len(context.captured_queries) | ||||
|  | ||||
|     if log_to_file: | ||||
|         with open('queries.txt', 'w', encoding='utf-8') as f: | ||||
|             for q in context.captured_queries: | ||||
|                 f.write(str(q['sql']) + '\n\n') | ||||
|  | ||||
|     if msg: | ||||
|         print(f'{msg}: Executed {n} queries') | ||||
|     else: | ||||
|         print(f'Executed {n} queries') | ||||
|  | ||||
|  | ||||
| def addUserPermission(user: User, app_name: str, model_name: str, perm: str) -> None: | ||||
|     """Add a specific permission for the provided user. | ||||
|  | ||||
|   | ||||
| @@ -61,8 +61,6 @@ class PluginDetailAPITest(PluginMixin, InvenTreeAPITestCase): | ||||
|  | ||||
|     def test_plugin_install(self): | ||||
|         """Test the plugin install command.""" | ||||
|         from django.conf import settings | ||||
|  | ||||
|         url = reverse('api-plugin-install') | ||||
|  | ||||
|         # invalid package name | ||||
| @@ -87,23 +85,18 @@ class PluginDetailAPITest(PluginMixin, InvenTreeAPITestCase): | ||||
|             {'confirm': True, 'packagename': self.PKG_NAME}, | ||||
|             expected_code=201, | ||||
|             max_query_time=30, | ||||
|             max_query_count=400, | ||||
|             max_query_count=450, | ||||
|         ).data | ||||
|  | ||||
|         self.assertEqual(data['success'], 'Installed plugin successfully') | ||||
|  | ||||
|         # If we are running in docker mode, the plugin file is reinstalled too | ||||
|         # In that case, the expected query count is higher | ||||
|         query_count = 450 if settings.DOCKER else 350 | ||||
|         query_time = 60 if settings.DOCKER else 30 | ||||
|  | ||||
|         # valid - github url | ||||
|         data = self.post( | ||||
|             url, | ||||
|             {'confirm': True, 'url': self.PKG_URL}, | ||||
|             expected_code=201, | ||||
|             max_query_count=query_count, | ||||
|             max_query_time=query_time, | ||||
|             max_query_count=450, | ||||
|             max_query_time=60, | ||||
|         ).data | ||||
|  | ||||
|         self.assertEqual(data['success'], 'Installed plugin successfully') | ||||
| @@ -613,31 +606,25 @@ class PluginFullAPITest(PluginMixin, InvenTreeAPITestCase): | ||||
|     @override_settings(PLUGIN_TESTING_SETUP=True) | ||||
|     def test_full_process(self): | ||||
|         """Test the full plugin install/uninstall process via API.""" | ||||
|         from django.conf import settings | ||||
|  | ||||
|         install_slug = 'inventree-brother-plugin' | ||||
|         slug = 'brother' | ||||
|  | ||||
|         # Note that if testing in docker mode, the plugin file is reinstalled too | ||||
|         # In that case, the expected query count is higher | ||||
|         query_count = 450 if settings.DOCKER else 350 | ||||
|         query_time = 60 if settings.DOCKER else 30 | ||||
|  | ||||
|         # Install a plugin | ||||
|         data = self.post( | ||||
|             reverse('api-plugin-install'), | ||||
|             {'confirm': True, 'packagename': install_slug}, | ||||
|             expected_code=201, | ||||
|             max_query_time=query_time, | ||||
|             max_query_count=query_count, | ||||
|             max_query_time=30, | ||||
|             max_query_count=450, | ||||
|         ).data | ||||
|  | ||||
|         self.assertEqual(data['success'], 'Installed plugin successfully') | ||||
|  | ||||
|         # Activate the plugin | ||||
|         data = self.patch( | ||||
|             reverse('api-plugin-detail-activate', kwargs={'plugin': slug}), | ||||
|             data={'active': True}, | ||||
|             max_query_count=320, | ||||
|             max_query_count=450, | ||||
|         ).data | ||||
|         self.assertEqual(data['active'], True) | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user