mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +00:00 
			
		
		
		
	bpo-29298: Fix crash with required subparsers without dest (GH-3680)
Automerge-Triggered-By: GH:encukou
This commit is contained in:
		
							parent
							
								
									fe13f0b0f6
								
							
						
					
					
						commit
						17575f73ce
					
				
					 3 changed files with 28 additions and 0 deletions
				
			
		|  | @ -727,6 +727,8 @@ def _get_action_name(argument): | |||
|         return argument.metavar | ||||
|     elif argument.dest not in (None, SUPPRESS): | ||||
|         return argument.dest | ||||
|     elif argument.choices: | ||||
|         return '{' + ','.join(argument.choices) + '}' | ||||
|     else: | ||||
|         return None | ||||
| 
 | ||||
|  |  | |||
|  | @ -2060,6 +2060,30 @@ def test_required_subparsers_default(self): | |||
|         ret = parser.parse_args(()) | ||||
|         self.assertIsNone(ret.command) | ||||
| 
 | ||||
|     def test_required_subparsers_no_destination_error(self): | ||||
|         parser = ErrorRaisingArgumentParser() | ||||
|         subparsers = parser.add_subparsers(required=True) | ||||
|         subparsers.add_parser('foo') | ||||
|         subparsers.add_parser('bar') | ||||
|         with self.assertRaises(ArgumentParserError) as excinfo: | ||||
|             parser.parse_args(()) | ||||
|         self.assertRegex( | ||||
|             excinfo.exception.stderr, | ||||
|             'error: the following arguments are required: {foo,bar}\n$' | ||||
|         ) | ||||
| 
 | ||||
|     def test_wrong_argument_subparsers_no_destination_error(self): | ||||
|         parser = ErrorRaisingArgumentParser() | ||||
|         subparsers = parser.add_subparsers(required=True) | ||||
|         subparsers.add_parser('foo') | ||||
|         subparsers.add_parser('bar') | ||||
|         with self.assertRaises(ArgumentParserError) as excinfo: | ||||
|             parser.parse_args(('baz',)) | ||||
|         self.assertRegex( | ||||
|             excinfo.exception.stderr, | ||||
|             r"error: argument {foo,bar}: invalid choice: 'baz' \(choose from 'foo', 'bar'\)\n$" | ||||
|         ) | ||||
| 
 | ||||
|     def test_optional_subparsers(self): | ||||
|         parser = ErrorRaisingArgumentParser() | ||||
|         subparsers = parser.add_subparsers(dest='command', required=False) | ||||
|  |  | |||
|  | @ -0,0 +1,2 @@ | |||
| Fix ``TypeError`` when required subparsers without ``dest`` do not receive | ||||
| arguments. Patch by Anthony Sottile. | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Anthony Sottile
						Anthony Sottile