You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							146 lines
						
					
					
						
							4.5 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							146 lines
						
					
					
						
							4.5 KiB
						
					
					
				
								/**
							 | 
						|
								 * class Action
							 | 
						|
								 *
							 | 
						|
								 * Base class for all actions
							 | 
						|
								 * Do not call in your code, use this class only for inherits your own action
							 | 
						|
								 *
							 | 
						|
								 * Information about how to convert command line strings to Javascript objects.
							 | 
						|
								 * Action objects are used by an ArgumentParser to represent the information
							 | 
						|
								 * needed to parse a single argument from one or more strings from the command
							 | 
						|
								 * line. The keyword arguments to the Action constructor are also all attributes
							 | 
						|
								 * of Action instances.
							 | 
						|
								 *
							 | 
						|
								 * ##### Allowed keywords:
							 | 
						|
								 *
							 | 
						|
								 * - `store`
							 | 
						|
								 * - `storeConstant`
							 | 
						|
								 * - `storeTrue`
							 | 
						|
								 * - `storeFalse`
							 | 
						|
								 * - `append`
							 | 
						|
								 * - `appendConstant`
							 | 
						|
								 * - `count`
							 | 
						|
								 * - `help`
							 | 
						|
								 * - `version`
							 | 
						|
								 *
							 | 
						|
								 * Information about action options see [[Action.new]]
							 | 
						|
								 *
							 | 
						|
								 * See also [original guide](http://docs.python.org/dev/library/argparse.html#action)
							 | 
						|
								 *
							 | 
						|
								 **/
							 | 
						|
								
							 | 
						|
								'use strict';
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								// Constants
							 | 
						|
								var c = require('./const');
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								/**
							 | 
						|
								 * new Action(options)
							 | 
						|
								 *
							 | 
						|
								 * Base class for all actions. Used only for inherits
							 | 
						|
								 *
							 | 
						|
								 *
							 | 
						|
								 * ##### Options:
							 | 
						|
								 *
							 | 
						|
								 * - `optionStrings`  A list of command-line option strings for the action.
							 | 
						|
								 * - `dest`  Attribute to hold the created object(s)
							 | 
						|
								 * - `nargs`  The number of command-line arguments that should be consumed.
							 | 
						|
								 * By default, one argument will be consumed and a single value will be
							 | 
						|
								 * produced.
							 | 
						|
								 * - `constant`  Default value for an action with no value.
							 | 
						|
								 * - `defaultValue`  The value to be produced if the option is not specified.
							 | 
						|
								 * - `type`  Cast to 'string'|'int'|'float'|'complex'|function (string). If
							 | 
						|
								 * None, 'string'.
							 | 
						|
								 * - `choices`  The choices available.
							 | 
						|
								 * - `required`  True if the action must always be specified at the command
							 | 
						|
								 * line.
							 | 
						|
								 * - `help`  The help describing the argument.
							 | 
						|
								 * - `metavar`  The name to be used for the option's argument with the help
							 | 
						|
								 * string. If None, the 'dest' value will be used as the name.
							 | 
						|
								 *
							 | 
						|
								 * ##### nargs supported values:
							 | 
						|
								 *
							 | 
						|
								 * - `N` (an integer) consumes N arguments (and produces a list)
							 | 
						|
								 * - `?`  consumes zero or one arguments
							 | 
						|
								 * - `*` consumes zero or more arguments (and produces a list)
							 | 
						|
								 * - `+` consumes one or more arguments (and produces a list)
							 | 
						|
								 *
							 | 
						|
								 * Note: that the difference between the default and nargs=1 is that with the
							 | 
						|
								 * default, a single value will be produced, while with nargs=1, a list
							 | 
						|
								 * containing a single value will be produced.
							 | 
						|
								 **/
							 | 
						|
								var Action = module.exports = function Action(options) {
							 | 
						|
								  options = options || {};
							 | 
						|
								  this.optionStrings = options.optionStrings || [];
							 | 
						|
								  this.dest = options.dest;
							 | 
						|
								  this.nargs = typeof options.nargs !== 'undefined' ? options.nargs : null;
							 | 
						|
								  this.constant = typeof options.constant !== 'undefined' ? options.constant : null;
							 | 
						|
								  this.defaultValue = options.defaultValue;
							 | 
						|
								  this.type = typeof options.type !== 'undefined' ? options.type : null;
							 | 
						|
								  this.choices = typeof options.choices !== 'undefined' ? options.choices : null;
							 | 
						|
								  this.required = typeof options.required !== 'undefined' ? options.required : false;
							 | 
						|
								  this.help = typeof options.help !== 'undefined' ? options.help : null;
							 | 
						|
								  this.metavar = typeof options.metavar !== 'undefined' ? options.metavar : null;
							 | 
						|
								
							 | 
						|
								  if (!(this.optionStrings instanceof Array)) {
							 | 
						|
								    throw new Error('optionStrings should be an array');
							 | 
						|
								  }
							 | 
						|
								  if (typeof this.required !== 'undefined' && typeof this.required !== 'boolean') {
							 | 
						|
								    throw new Error('required should be a boolean');
							 | 
						|
								  }
							 | 
						|
								};
							 | 
						|
								
							 | 
						|
								/**
							 | 
						|
								 * Action#getName -> String
							 | 
						|
								 *
							 | 
						|
								 * Tells action name
							 | 
						|
								 **/
							 | 
						|
								Action.prototype.getName = function () {
							 | 
						|
								  if (this.optionStrings.length > 0) {
							 | 
						|
								    return this.optionStrings.join('/');
							 | 
						|
								  } else if (this.metavar !== null && this.metavar !== c.SUPPRESS) {
							 | 
						|
								    return this.metavar;
							 | 
						|
								  } else if (typeof this.dest !== 'undefined' && this.dest !== c.SUPPRESS) {
							 | 
						|
								    return this.dest;
							 | 
						|
								  }
							 | 
						|
								  return null;
							 | 
						|
								};
							 | 
						|
								
							 | 
						|
								/**
							 | 
						|
								 * Action#isOptional -> Boolean
							 | 
						|
								 *
							 | 
						|
								 * Return true if optional
							 | 
						|
								 **/
							 | 
						|
								Action.prototype.isOptional = function () {
							 | 
						|
								  return !this.isPositional();
							 | 
						|
								};
							 | 
						|
								
							 | 
						|
								/**
							 | 
						|
								 * Action#isPositional -> Boolean
							 | 
						|
								 *
							 | 
						|
								 * Return true if positional
							 | 
						|
								 **/
							 | 
						|
								Action.prototype.isPositional = function () {
							 | 
						|
								  return (this.optionStrings.length === 0);
							 | 
						|
								};
							 | 
						|
								
							 | 
						|
								/**
							 | 
						|
								 * Action#call(parser, namespace, values, optionString) -> Void
							 | 
						|
								 * - parser (ArgumentParser): current parser
							 | 
						|
								 * - namespace (Namespace): namespace for output data
							 | 
						|
								 * - values (Array): parsed values
							 | 
						|
								 * - optionString (Array): input option string(not parsed)
							 | 
						|
								 *
							 | 
						|
								 * Call the action. Should be implemented in inherited classes
							 | 
						|
								 *
							 | 
						|
								 * ##### Example
							 | 
						|
								 *
							 | 
						|
								 *      ActionCount.prototype.call = function (parser, namespace, values, optionString) {
							 | 
						|
								 *        namespace.set(this.dest, (namespace[this.dest] || 0) + 1);
							 | 
						|
								 *      };
							 | 
						|
								 *
							 | 
						|
								 **/
							 | 
						|
								Action.prototype.call = function () {
							 | 
						|
								  throw new Error('.call() not defined');// Not Implemented error
							 | 
						|
								};
							 | 
						|
								
							 |