mirror of
				https://github.com/django/django.git
				synced 2025-10-31 01:25:32 +00:00 
			
		
		
		
	Fixed #29392 -- Disallowed use of abbreviated forms of --settings and --pythonpath management command options.
This commit is contained in:
		| @@ -311,7 +311,7 @@ class ManagementUtility: | ||||
|         # Preprocess options to extract --settings and --pythonpath. | ||||
|         # These options could affect the commands that are available, so they | ||||
|         # must be processed early. | ||||
|         parser = CommandParser(usage='%(prog)s subcommand [options] [args]', add_help=False) | ||||
|         parser = CommandParser(usage='%(prog)s subcommand [options] [args]', add_help=False, allow_abbrev=False) | ||||
|         parser.add_argument('--settings') | ||||
|         parser.add_argument('--pythonpath') | ||||
|         parser.add_argument('args', nargs='*')  # catch-all | ||||
|   | ||||
| @@ -423,6 +423,9 @@ Miscellaneous | ||||
|   to insert untranslated content into the database), use the new | ||||
|   :ref:`@no_translations decorator <management-commands-and-locales>`. | ||||
|  | ||||
| * Management commands no longer allow the abbreviated forms of the | ||||
|   ``--settings`` and ``--pythonpath`` arguments. | ||||
|  | ||||
| .. _deprecated-features-2.1: | ||||
|  | ||||
| Features deprecated in 2.1 | ||||
|   | ||||
							
								
								
									
										10
									
								
								tests/user_commands/management/commands/set_option.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								tests/user_commands/management/commands/set_option.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| from django.core.management.base import BaseCommand | ||||
|  | ||||
|  | ||||
| class Command(BaseCommand): | ||||
|  | ||||
|     def add_arguments(self, parser): | ||||
|         parser.add_argument('--set') | ||||
|  | ||||
|     def handle(self, **options): | ||||
|         self.stdout.write('Set %s' % options['set']) | ||||
| @@ -232,6 +232,16 @@ class CommandRunTests(AdminScriptTestCase): | ||||
|         self.assertNoOutput(err) | ||||
|         self.assertEqual(out.strip(), '/PREFIX/some/url/') | ||||
|  | ||||
|     def test_disallowed_abbreviated_options(self): | ||||
|         """ | ||||
|         To avoid conflicts with custom options, commands don't allow | ||||
|         abbreviated forms of the --setting and --pythonpath options. | ||||
|         """ | ||||
|         self.write_settings('settings.py', apps=['user_commands']) | ||||
|         out, err = self.run_manage(['set_option', '--set', 'foo']) | ||||
|         self.assertNoOutput(err) | ||||
|         self.assertEqual(out.strip(), 'Set foo') | ||||
|  | ||||
|  | ||||
| class UtilsTests(SimpleTestCase): | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user