in samcli/commands/_utils/options.py [0:0]
def resolve_s3_callback(ctx, param, provided_value, artifact, exc_set, exc_not_set):
"""
S3 Bucket is only required if there are artifacts that are all zip based.
:param ctx: Click Context
:param param: Param name
:param provided_value: Value provided by Click, it would be the value provided by the user.
:param artifact: artifact format that is to be compared against, eg: zip, image.
:param exc_set: Exception to be thrown if both `--resolve-s3` and `--s3-bucket` are set.
:param exc_not_set: Exception to be thrown if either `--resolve-s3` and `--s3-bucket` are not set
and are required because the template contains zip based artifacts.
:return: Actual value to be used in the CLI
"""
template_file = (
ctx.params.get("t", False) or ctx.params.get("template_file", False) or ctx.params.get("template", False)
)
required = any(
[
_template_artifact == artifact
for _template_artifact in get_template_artifacts_format(template_file=template_file)
]
)
# NOTE(sriram-mv): Explicit check for s3_bucket being explicitly passed in along with `--resolve-s3`.
# NOTE(sriram-mv): Both params and default_map need to be checked, as the option can be either be
# passed in directly or through configuration file.
# If passed in through configuration file, default_map is loaded with those values.
s3_bucket_provided = ctx.params.get("s3_bucket", False) or ctx.default_map.get("s3_bucket", False)
if provided_value and s3_bucket_provided:
raise exc_set()
if required and not provided_value and not s3_bucket_provided:
raise exc_not_set()
return provided_value