def compress(aip_model_inst, compression_algorithm): """Use the Package model's compress_package method to compress the AIP being imported, update the Package model's ``size`` attribute, retrieve PREMIS agents and event for the compression (using the package model's ``create_premis_aip_compression_event`` method) and return a 3-tuple: (aip_model_inst, compression_event, compression_agents). """ if not compression_algorithm: return compressed_aip_path, compressed_aip_parent_path, details = aip_model_inst.compress_package( compression_algorithm, detailed_output=True) compressed_aip_fname = os.path.basename(compressed_aip_path) aip_current_dir = os.path.dirname(aip_model_inst.current_path) shutil.rmtree(aip_model_inst.full_path) new_current_path = os.path.join(aip_current_dir, compressed_aip_fname) new_full_path = os.path.join(aip_model_inst.current_location.full_path, new_current_path) shutil.move(compressed_aip_path, new_full_path) aip_model_inst.current_path = new_current_path shutil.rmtree(compressed_aip_parent_path) aip_model_inst.size = utils.recalculate_size(new_full_path) compression_agents = [premis.SS_AGENT] compression_event = premis.create_premis_aip_compression_event( details["event_detail"], details["event_outcome_detail_note"], agents=compression_agents, ) return aip_model_inst, compression_event, compression_agents
def import_aip( aip_path, aip_storage_location_uuid, decompress_source, compression_algorithm, adoptive_pipeline_uuid, unix_owner, force, tmp_dir, ): confirm_aip_exists(aip_path) temp_dir = tempfile.mkdtemp(dir=tmp_dir) aip_path = decompress(aip_path, decompress_source, temp_dir) validate(aip_path) aip_mets_path = get_aip_mets_path(aip_path) aip_uuid = get_aip_uuid(aip_mets_path) if not force: check_if_aip_already_exists(aip_uuid) local_as_location, final_as_location = get_aip_storage_locations( aip_storage_location_uuid) aip_model_inst = models.Package( uuid=aip_uuid, package_type="AIP", status="UPLOADED", size=utils.recalculate_size(aip_path), origin_pipeline=get_pipeline(adoptive_pipeline_uuid), current_location=local_as_location, current_path=os.path.basename(os.path.normpath(aip_path)), ) copy_aip_to_aip_storage_location(aip_model_inst, aip_path, local_as_location, unix_owner) premis_events = premis_agents = None if compression_algorithm: aip_model_inst, compression_event, premis_agents = compress( aip_model_inst, compression_algorithm) premis_events = [compression_event] aip_model_inst.current_location = final_as_location save_aip_model_instance(aip_model_inst) aip_model_inst.store_aip( origin_location=local_as_location, origin_path=aip_model_inst.current_path, premis_events=premis_events, premis_agents=premis_agents, ) shutil.rmtree(temp_dir) print( okgreen("Path: {}.".format( os.path.join( aip_model_inst.current_location.full_path, aip_model_inst.current_path, )))) print(okgreen("Successfully imported AIP {}.".format(aip_uuid)))