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)))