def _cutout_expnum(observation, sky_coord, radius):
    """
    Get a cutout from an exposure based on the RA/DEC location.
    @param observation: The Observation object that contains the expusre number information.
    @type observation: Observation
    @param sky_coord: which RA/DEC is needed,
    @type sky_coord:  SkyCoord
    @param radius:
    @type radius: Quantity
    @return: HDUList containing the cutout image.
    @rtype: list(HDUList)
    """

    uri = observation.get_image_uri()
    cutout_filehandle = tempfile.NamedTemporaryFile()
    disposition_filename = client.copy(uri + "({},{},{})".format(sky_coord.ra.to('degree').value,
                                                                 sky_coord.dec.to('degree').value,
                                                                 radius.to('degree').value),
                                       cutout_filehandle.name,
                                       disposition=True)
    cutouts = decompose_content_decomposition(disposition_filename)

    cutout_filehandle.seek(0)
    hdulist = fits.open(cutout_filehandle)
    hdulist.verify('silentfix+ignore')
    logger.debug("Initial Length of HDUList: {}".format(len(hdulist)))

    # Make sure here is a primaryHDU
    if len(hdulist) == 1:
        phdu = fits.PrimaryHDU()
        phdu.header['ORIGIN'] = "OSSOS"
        hdulist.insert(0, phdu)

    logger.debug("Final Length of HDUList: {}".format(len(hdulist)))

    if len(cutouts) != len(hdulist) - 1:
        raise ValueError("Wrong number of cutout structures found in Content-Disposition response.")

    for hdu in hdulist[1:]:
        cutout = cutouts.pop(0)
        if 'ASTLEVEL' not in hdu.header:
            print("WARNING: ******* NO ASTLEVEL KEYWORD ********** for {0} ********".format(observation.get_image_uri))
            hdu.header['ASTLEVEL'] = 0
        hdu.header['EXTNO'] = cutout[0]
        naxis1 = hdu.header['NAXIS1']
        naxis2 = hdu.header['NAXIS2']
        default_datasec = "[{}:{},{}:{}]".format(1, naxis1, 1, naxis2)
        datasec = hdu.header.get('DATASEC', default_datasec)
        datasec = datasec_to_list(datasec)
        corners = datasec
        for idx in range(len(corners)):
            try:
                corners[idx] = int(cutout[idx+1])
            except Exception:
                pass

        hdu.header['DATASEC'] = reset_datasec("[{}:{},{}:{}]".format(corners[0],
                                                                     corners[1],
                                                                     corners[2],
                                                                     corners[3]),
                                              hdu.header.get('DATASEC', default_datasec),
                                              hdu.header['NAXIS1'],
                                              hdu.header['NAXIS2'])
        hdu.header['XOFFSET'] = int(corners[0]) - 1
        hdu.header['YOFFSET'] = int(corners[2]) - 1
        hdu.converter = CoordinateConverter(hdu.header['XOFFSET'], hdu.header['YOFFSET'])
        try:
                hdu.wcs = WCS(hdu.header)
        except Exception as ex:
            logger.error("Failed trying to initialize the WCS for {}".format(uri))
            raise ex
    logger.debug("Sending back {}".format(hdulist))
    return hdulist
Get a cutout from an exposure based on the RA/DEC location.
    @param observation: The Observation object that contains the expusre number information.
    @type observation: Observation
    @param sky_coord: which RA/DEC is needed,
    @type sky_coord:  SkyCoord
    @param radius:
    @type radius: Quantity
    @return: HDUList containing the cutout image.
    @rtype: list(HDUList)