Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
'type': 'object',
'properties': {
'Name': {
'type': 'string'
},
'Args': {
'type': 'array',
'items': {
'type': 'string'
}
}
}
}
}
argument_model = create_argument_model_from_schema(schema)
cli_argument = CustomArgument('foo', argument_model=argument_model)
expected = [
{"Name": "foo",
"Args": ["a", "k1=v1", "b"]},
{"Name": "bar",
"Args": ["baz"]},
{"Name": "single_kv",
"Args": ["key=value"]},
{"Name": "single_v",
"Args": ["value"]}
]
simplified = self.shorthand(cli_argument, [
"Name=foo,Args=[a,k1=v1,b]",
"Name=bar,Args=baz",
"Name=single_kv,Args=[key=value]",
def _build_arg_table(self):
arg_table = OrderedDict()
self._session.emit('building-arg-table.%s' % self.NAME,
arg_table=self.ARG_TABLE)
for arg_data in self.ARG_TABLE:
# If a custom schema was passed in, create the argument_model
# so that it can be validated and docs can be generated.
if 'schema' in arg_data:
argument_model = create_argument_model_from_schema(
arg_data.pop('schema'))
arg_data['argument_model'] = argument_model
custom_argument = CustomArgument(**arg_data)
arg_table[arg_data['name']] = custom_argument
return arg_table
def add_to_params(self, parameters, value):
if value is None:
return
if parameters.get('parameterValues', None) is not None:
raise Exception(
"Only parameter-values or parameter-values-uri is allowed"
)
parsed = json.loads(value)
parameter_values = translator.definition_to_parameter_values(parsed)
parameters['parameterValues'] = parameter_values
class ParameterValuesInlineArgument(CustomArgument):
def add_to_params(self, parameters, value):
if value is None:
return
if parameters.get('parameterValues', None) is not None:
raise Exception(
"Only parameter-values or parameter-values-uri is allowed"
)
parameter_object = {}
# break string into = point
for argument in value:
try:
argument_components = argument.split('=', 1)
key = argument_components[0]
def resolve_given_outfile_path(path):
"""Asserts that a path is writable and returns the expanded path"""
if path is None:
return
outfile = os.path.expanduser(os.path.expandvars(path))
if not os.access(os.path.dirname(os.path.abspath(outfile)), os.W_OK):
raise ValueError('Unable to write to file: %s' % outfile)
return outfile
def is_parsed_result_successful(parsed_result):
"""Returns True if a parsed result is successful"""
return parsed_result['ResponseMetadata']['HTTPStatusCode'] < 300
class OverrideRequiredArgsArgument(CustomArgument):
"""An argument that if specified makes all other arguments not required
By not required, it refers to not having an error thrown when the
parser does not find an argument that is required on the command line.
To obtain this argument's property of ignoring required arguments,
subclass from this class and fill out the ``ARG_DATA`` parameter as
described below. Note this class is really only useful for subclassing.
"""
# ``ARG_DATA`` follows the same format as a member of ``ARG_TABLE`` in
# ``BasicCommand`` class as specified in
# ``awscli/customizations/commands.py``.
#
# For example, an ``ARG_DATA`` variable would be filled out as:
#
# ARG_DATA =
if value:
value = [{'CidrIp': value}]
_build_ip_permissions(parameters, 'IpRanges', value)
class SourceGroupArgument(CustomArgument):
def add_to_params(self, parameters, value):
if value:
if value.startswith('sg-'):
_build_ip_permissions(parameters, 'GroupId', value)
else:
_build_ip_permissions(parameters, 'GroupName', value)
class GroupOwnerArgument(CustomArgument):
def add_to_params(self, parameters, value):
if value:
_build_ip_permissions(parameters, 'UserId', value)
return
parsed = json.loads(value)
api_objects = translator.definition_to_api_objects(parsed)
parameter_objects = translator.definition_to_api_parameters(parsed)
parameter_values = translator.definition_to_parameter_values(parsed)
parameters['pipelineObjects'] = api_objects
# Use Parameter objects and values from def if not already provided
if 'parameterObjects' not in parameters \
and parameter_objects is not None:
parameters['parameterObjects'] = parameter_objects
if 'parameterValues' not in parameters \
and parameter_values is not None:
parameters['parameterValues'] = parameter_values
class ParameterObjectsArgument(CustomArgument):
def add_to_params(self, parameters, value):
if value is None:
return
parsed = json.loads(value)
parameter_objects = translator.definition_to_api_parameters(parsed)
parameters['parameterObjects'] = parameter_objects
class ParameterValuesArgument(CustomArgument):
def add_to_params(self, parameters, value):
if value is None:
return
if parameters.get('parameterValues', None) is not None:
raise Exception(
class SecondaryPrivateIpAddressCountArgument(CustomArgument):
def add_to_parser(self, parser, cli_name=None):
parser.add_argument(self.cli_name, dest=self.py_name,
default=self._default, type=int)
def add_to_params(self, parameters, value):
if value:
_build_network_interfaces(parameters,
'SecondaryPrivateIpAddressCount',
value)
class AssociatePublicIpAddressArgument(CustomArgument):
def add_to_params(self, parameters, value):
if value is True:
_build_network_interfaces(parameters,
'AssociatePublicIpAddress',
value)
class NoAssociatePublicIpAddressArgument(CustomArgument):
def add_to_params(self, parameters, value):
if value is False:
_build_network_interfaces(parameters,
'AssociatePublicIpAddress',
value)
def _create_cli_argument(self, option_name, option_params):
return CustomArgument(
option_name, help_text=option_params.get('help', ''),
dest=option_params.get('dest'),
default=option_params.get('default'),
action=option_params.get('action'),
required=option_params.get('required'),
choices=option_params.get('choices'),
cli_type_name=option_params.get('type'))
EVENTS = [
('building-argument-table.ec2.bundle-instance', _add_params),
('operation-args-parsed.ec2.bundle-instance', _check_args),
('before-parameter-build.ec2.BundleInstance', _check_params),
]
def register_bundleinstance(event_handler):
# Register all of the events for customizing BundleInstance
for event, handler in EVENTS:
event_handler.register(event, handler)
class BundleArgument(CustomArgument):
def __init__(self, storage_param, *args, **kwargs):
super(BundleArgument, self).__init__(*args, **kwargs)
self._storage_param = storage_param
def _build_storage(self, params, value):
# Build up the Storage data structure
if 'Storage' not in params:
params['Storage'] = {'S3': {}}
params['Storage']['S3'][self._storage_param] = value
def add_to_params(self, parameters, value):
if value:
self._build_storage(parameters, value)
session=session,
**S3_LOCATION_ARG_DESCRIPTION
)
)
github_model = create_argument_model_from_schema(GITHUB_LOCATION_SCHEMA)
argument_table[GITHUB_LOCATION_ARG_DESCRIPTION['name']] = (
GitHubLocationArgument(
argument_model=github_model,
session=session,
**GITHUB_LOCATION_ARG_DESCRIPTION
)
)
argument_table['revision'].required = False
class CodeDeployCustomLocationArgument(CustomArgument):
def __init__(self, session, *args, **kwargs):
super(CodeDeployCustomLocationArgument, self).__init__(*args, **kwargs)
self._session = session
def add_to_params(self, parameters, value):
if value is None:
return
parsed = self._session.emit_first_non_none_response(
'process-cli-arg.codedeploy.%s' % self.name,
param=self.argument_model,
cli_argument=self,
value=value,
operation=None
)
if parsed is None:
parsed = unpack_cli_arg(self, value)