docs: 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