in src/aws_encryption_sdk_cli/__init__.py [0:0]
def _catch_bad_metadata_file_requests(metadata_output, source, destination):
# type: (MetadataWriter, str, str) -> None
"""Catches bad requests based on characteristics of source, destination, and metadata
output target.
:raises BadUserArgumentError: if output file and metadata file are both ``stdout``
:raises BadUserArgumentError: if metadata file would overwrite input file
:raises BadUserArgumentError: if metadata file would overwrite output file
:raises BadUserArgumentError: if metadata file is a directory
:raises BadUserArgumentError: if input is a directory and contains metadata file
:raises BadUserArgumentError: if output is a directory and contains metadata file
:raises BadUserArgumentError: if metadata file value is empty
"""
if metadata_output.suppress_output:
return
if not metadata_output.output_file:
raise BadUserArgumentError("Metadata output file name cannot be empty")
if metadata_output.output_file == "-":
if destination == "-":
raise BadUserArgumentError("Metadata output cannot be stdout when output is stdout")
return
real_source = os.path.realpath(source)
real_destination = os.path.realpath(destination)
real_metadata = os.path.realpath(metadata_output.output_file)
if os.path.isdir(real_metadata):
raise BadUserArgumentError("Metadata output cannot be a directory")
if real_metadata in (real_source, real_destination):
raise BadUserArgumentError("Metadata output file cannot be the input or output")
if os.path.isdir(real_destination) and real_metadata.startswith(real_destination):
raise BadUserArgumentError("Metadata output file cannot be in the output directory")
if os.path.isdir(real_source) and real_metadata.startswith(real_source):
raise BadUserArgumentError("Metadata output file cannot be in the input directory")