def IERS_A_in_cache(): """ Check if the IERS Bulletin A table is locally cached. """ url_key = iers.IERS_A_URL # The below code which accesses ``urlmapfn`` is stolen from # astropy.utils.data.download_file() try: dldir, urlmapfn = _get_download_cache_locs() except (IOError, OSError) as e: msg = 'Remote data cache could not be accessed due to ' estr = '' if len(e.args) < 1 else (': ' + str(e)) warnings.warn(CacheMissingWarning(msg + e.__class__.__name__ + estr)) return False with _open_shelve(urlmapfn, True) as url2hash: # TODO: try to figure out how to test this in the unicode case if str(url_key) in url2hash: return True return False
def save_fits(self, savepath, link_cache='hard'): """ Save a FITS file to savepath Parameters ---------- savepath : str The full path to a FITS filename, e.g. "file.fits", or "/path/to/file.fits". link_cache : 'hard', 'sym', or False Try to create a hard or symbolic link to the astropy cached file? If the system is unable to create a hardlink, the file will be copied to the target location. """ from warnings import warn self.get_fits() try: dldir, urlmapfn = aud._get_download_cache_locs() except (IOError, OSError) as e: msg = 'Remote data cache could not be accessed due to ' estr = '' if len(e.args) < 1 else (': ' + str(e)) warn(aud.CacheMissingWarning(msg + e.__class__.__name__ + estr)) with aud._open_shelve(urlmapfn, True) as url2hash: if str(self._target) in url2hash: target = url2hash[str(self._target)] else: raise IOError("Cached file not found / does not exist.") if link_cache == 'hard': try: os.link(target, savepath) except (IOError, OSError, AttributeError) as e: shutil.copy(target, savepath) elif link_cache == 'sym': try: os.symlink(target, savepath) except AttributeError: raise OSError('Creating symlinks is not possible on this OS.') else: shutil.copy(target, savepath)