mirror of
				https://github.com/django/django.git
				synced 2025-10-30 09:06:13 +00:00 
			
		
		
		
	[4.0.x] Fixed #33205 -- Made call_command() raise TypeError when dest with multiple arguments is passed.
Backport of c1e4111c74 from main
			
			
This commit is contained in:
		
				
					committed by
					
						 Mariusz Felisiak
						Mariusz Felisiak
					
				
			
			
				
	
			
			
			
						parent
						
							ac815f6ea8
						
					
				
				
					commit
					c9ebe4ca4e
				
			| @@ -0,0 +1,13 @@ | ||||
| from django.core.management.base import BaseCommand | ||||
|  | ||||
|  | ||||
| class Command(BaseCommand): | ||||
|     def add_arguments(self, parser): | ||||
|         group = parser.add_mutually_exclusive_group(required=True) | ||||
|         group.add_argument('--for', dest='until', action='store') | ||||
|         group.add_argument('--until', action='store') | ||||
|  | ||||
|     def handle(self, *args, **options): | ||||
|         for option, value in options.items(): | ||||
|             if value is not None: | ||||
|                 self.stdout.write('%s=%s' % (option, value)) | ||||
| @@ -275,6 +275,41 @@ class CommandTests(SimpleTestCase): | ||||
|                 ) | ||||
|                 self.assertIn(expected_output, out.getvalue()) | ||||
|  | ||||
|     def test_mutually_exclusive_group_required_with_same_dest_options(self): | ||||
|         tests = [ | ||||
|             {'until': '2'}, | ||||
|             {'for': '1', 'until': '2'}, | ||||
|         ] | ||||
|         msg = ( | ||||
|             "Cannot pass the dest 'until' that matches multiple arguments via " | ||||
|             "**options." | ||||
|         ) | ||||
|         for options in tests: | ||||
|             with self.subTest(options=options): | ||||
|                 with self.assertRaisesMessage(TypeError, msg): | ||||
|                     management.call_command( | ||||
|                         'mutually_exclusive_required_with_same_dest', | ||||
|                         **options, | ||||
|                     ) | ||||
|  | ||||
|     def test_mutually_exclusive_group_required_with_same_dest_args(self): | ||||
|         tests = [ | ||||
|             ('--until=1',), | ||||
|             ('--until', 1), | ||||
|             ('--for=1',), | ||||
|             ('--for', 1), | ||||
|         ] | ||||
|         for args in tests: | ||||
|             out = StringIO() | ||||
|             with self.subTest(options=args): | ||||
|                 management.call_command( | ||||
|                     'mutually_exclusive_required_with_same_dest', | ||||
|                     *args, | ||||
|                     stdout=out, | ||||
|                 ) | ||||
|                 output = out.getvalue() | ||||
|                 self.assertIn('until=1', output) | ||||
|  | ||||
|     def test_required_list_option(self): | ||||
|         tests = [ | ||||
|             (('--foo-list', [1, 2]), {}), | ||||
|   | ||||
		Reference in New Issue
	
	Block a user