mirror of
				https://github.com/django/django.git
				synced 2025-10-31 01:25:32 +00:00 
			
		
		
		
	[1.7.x] Fixed #23975 -- Restored pre_migrate signal if all apps have migrations.
Thanks kmmbvnr for the report.
Backport of d2ff8a7241 from master
			
			
This commit is contained in:
		| @@ -128,6 +128,7 @@ class Command(BaseCommand): | |||||||
|             created_models = self.sync_apps(connection, executor.loader.unmigrated_apps) |             created_models = self.sync_apps(connection, executor.loader.unmigrated_apps) | ||||||
|         else: |         else: | ||||||
|             created_models = [] |             created_models = [] | ||||||
|  |             emit_pre_migrate_signal([], self.verbosity, self.interactive, connection.alias) | ||||||
|  |  | ||||||
|         # The test runner requires us to flush after a syncdb but before migrations, |         # The test runner requires us to flush after a syncdb but before migrations, | ||||||
|         # so do that here. |         # so do that here. | ||||||
|   | |||||||
| @@ -146,3 +146,6 @@ Bugfixes | |||||||
|  |  | ||||||
| * Fixed migration crash when adding ``order_with_respect_to`` to a table | * Fixed migration crash when adding ``order_with_respect_to`` to a table | ||||||
|   with existing rows (:ticket:`23983`). |   with existing rows (:ticket:`23983`). | ||||||
|  |  | ||||||
|  | * Restored the ``pre_migrate`` signal if all apps have migrations | ||||||
|  |   (:ticket:`23975`). | ||||||
|   | |||||||
							
								
								
									
										0
									
								
								tests/migrate_signals/custom_migrations/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								tests/migrate_signals/custom_migrations/__init__.py
									
									
									
									
									
										Normal file
									
								
							| @@ -1,7 +1,7 @@ | |||||||
| from django.apps import apps | from django.apps import apps | ||||||
| from django.core import management | from django.core import management | ||||||
| from django.db.models import signals | from django.db.models import signals | ||||||
| from django.test import TestCase | from django.test import override_settings, TestCase | ||||||
| from django.test.utils import override_system_checks | from django.test.utils import override_system_checks | ||||||
| from django.utils import six | from django.utils import six | ||||||
|  |  | ||||||
| @@ -79,3 +79,23 @@ class MigrateSignalTests(TestCase): | |||||||
|         self.assertEqual(args['verbosity'], MIGRATE_VERBOSITY) |         self.assertEqual(args['verbosity'], MIGRATE_VERBOSITY) | ||||||
|         self.assertEqual(args['interactive'], MIGRATE_INTERACTIVE) |         self.assertEqual(args['interactive'], MIGRATE_INTERACTIVE) | ||||||
|         self.assertEqual(args['using'], 'default') |         self.assertEqual(args['using'], 'default') | ||||||
|  |  | ||||||
|  |     @override_system_checks([]) | ||||||
|  |     @override_settings(MIGRATION_MODULES={'migrate_signals': 'migrate_signals.custom_migrations'}) | ||||||
|  |     def test_pre_migrate_migrations_only(self): | ||||||
|  |         """ | ||||||
|  |         If all apps have migrations, pre_migrate should be sent. | ||||||
|  |         """ | ||||||
|  |         r = PreMigrateReceiver() | ||||||
|  |         signals.pre_migrate.connect(r, sender=APP_CONFIG) | ||||||
|  |         stdout = six.StringIO() | ||||||
|  |         management.call_command('migrate', database=MIGRATE_DATABASE, | ||||||
|  |             verbosity=MIGRATE_VERBOSITY, interactive=MIGRATE_INTERACTIVE, | ||||||
|  |             load_initial_data=False, stdout=stdout) | ||||||
|  |         args = r.call_args | ||||||
|  |         self.assertEqual(r.call_counter, 1) | ||||||
|  |         self.assertEqual(set(args), set(PRE_MIGRATE_ARGS)) | ||||||
|  |         self.assertEqual(args['app_config'], APP_CONFIG) | ||||||
|  |         self.assertEqual(args['verbosity'], MIGRATE_VERBOSITY) | ||||||
|  |         self.assertEqual(args['interactive'], MIGRATE_INTERACTIVE) | ||||||
|  |         self.assertEqual(args['using'], 'default') | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user