Source code for idmtools_platform_comps.utils.download.download_ssmt
"""idmtools download workitem ssmt script.This script is meant to be ran remotely on SSMT, not locally.Copyright 2021, Bill & Melinda Gates Foundation. All rights reserved."""# flake8: noqa F405 F403importsysimportzipfilefromloggingimportgetLoggerimportosfromCOMPS.DataimportWorkItem# we have to support two ways to load the utils. The first is load from Assets# the fallback is the installed package# this allows us to move forward with changes to utils without need for new imagesfromidmtools_platform_comps.utils.ssmt_utils.file_filterimportparse_filter_args_common,filter_files_and_assetstry:fromfile_filterimport*fromcommonimport*except(FileNotFoundError,ImportError):fromidmtools_platform_comps.utils.ssmt_utils.file_filterimport*fromidmtools_platform_comps.utils.ssmt_utils.commonimport*logger=getLogger(__name__)user_logger=getLogger('user')
[docs]defcreate_archive_from_files(args:Namespace,files,files_from_ac,compress_type:str="lzma"):ifcompress_type=="lzma":compress_type=zipfile.ZIP_LZMAelifcompress_type=="deflate":compress_type=zipfile.ZIP_DEFLATEDelifcompress_type=="bz":compress_type=zipfile.ZIP_BZIP2withzipfile.ZipFile(args.zip_name,mode="w",compression=compress_type)aszo:forfintqdm(sorted(files,key=lambdax:x[1]),total=len(files),mininterval=5,maxinterval=15):logger.info(f"Adding {f[0].encode('ascii','ignore').decode('utf-8')} to {f[1].encode('ascii','ignore').decode('utf-8')}")zo.write(f[0],f[1].encode('ascii','ignore').decode('utf-8'))forfintqdm(files_from_ac,total=len(files_from_ac),mininterval=5,maxinterval=15):fn=PurePath(f.relative_path).joinpath(f.file_name)iff.relative_pathelsef.file_nameiflogger.isEnabledFor(DEBUG):logger.debug(f"Adding {f[0]} to {fn}")zo.write(f.uri,fn)
if__name__=="__main__":# pragma: no cover# build our argument parser and then parse the command lineparser=get_argument_parser()parser.add_argument("--compress-type",choices=["lzma","deflate","bz2"],default="lzma")args=parser.parse_args()# Set our JOB config global with config providedJOB_CONFIG=vars(args)# register our error handlersys.excepthook=get_error_handler_dump_config_and_error(JOB_CONFIG)# Parse the common arguments common to filter scriptsentity_filter_func,fn_format_func=parse_filter_args_common(args)# loginclient=login_to_env()# Load our work-itemwi=WorkItem.get(os.environ['COMPS_WORKITEM_GUID'])# Gather all our files in Experiments, Simulations, and Asset Collectionsfiles,files_from_ac=filter_files_and_assets(args,entity_filter_func,wi,fn_format_func)ensure_no_duplicates(files_from_ac,files)ifargs.dry_run:print_results(files_from_ac,files)else:create_archive_from_files(args,files,files_from_ac)