import os
import warnings
import astropy.config as astropyconfig
ROOTNAME = 'lightkurve'
class ConfigNamespace(astropyconfig.ConfigNamespace):
rootname = ROOTNAME
class ConfigItem(astropyconfig.ConfigItem):
rootname = ROOTNAME
[docs]def get_config_dir():
"""
Determines the package configuration directory name and creates the
directory if it doesn't exist.
This directory is typically ``$HOME/.lightkurve/config``, but if the
XDG_CONFIG_HOME environment variable is set and the
``$XDG_CONFIG_HOME/lightkurve`` directory exists, it will be that directory.
If neither exists, the former will be created and symlinked to the latter.
Returns
-------
configdir : str
The absolute path to the configuration directory.
"""
return astropyconfig.get_config_dir(ROOTNAME)
[docs]def get_cache_dir():
"""
Determines the default Lightkurve cache directory name and creates the
directory if it doesn't exist. If the directory cannot be access or created,
then it returns the current directory (``"."``).
This directory is typically ``$HOME/.lightkurve/cache``, but if the
XDG_CACHE_HOME environment variable is set and the
``$XDG_CACHE_HOME/lightkurve`` directory exists, it will be that directory.
If neither exists, the former will be created and symlinked to the latter.
The value can be also configured via ``cache_dir`` configuration parameter.
Returns
-------
cachedir : str
The absolute path to the cache directory.
Examples
--------
To configure "/my_research/data" as the `cache_dir`, users can set it:
1. in the user's ``lightkurve.cfg`` file::
[config]
cache_dir = /my_research/data
2. at run time::
import lightkurve as lk
lk.conf.cache_dir = '/my_research/data'
See :ref:`configuration <api.config>` for more information.
"""
from .. import conf
cache_dir = conf.cache_dir
if cache_dir is None or cache_dir == "":
cache_dir = astropyconfig.get_cache_dir(ROOTNAME)
cache_dir = _ensure_cache_dir_exists(cache_dir)
cache_dir = os.path.abspath(cache_dir)
return cache_dir
def _ensure_cache_dir_exists(cache_dir):
if os.path.isdir(cache_dir):
return cache_dir
else:
# if it doesn't exist, make a new cache directory
try:
os.mkdir(cache_dir)
# user current dir if OS error occurs
except OSError:
warnings.warn(
"Warning: unable to create {} as cache dir "
" (for downloading MAST files, etc.). Use the current "
"working directory instead.".format(cache_dir)
)
cache_dir = "."
return cache_dir
def warn_if_default_cache_dir_migration_needed():
from .. import conf
if not conf.warn_legacy_cache_dir:
return
cache_dir = conf.cache_dir
if not(cache_dir is None or cache_dir == ""):
# If an user has specified a custom cache dir, the check won't be performed.
# Not only is the check somewhat irrelevant, the behavior is also required
# to support the case that the user configures the legacy `~/.lightkurve-cache`
# as the cache dir (e.g., to support running other apps/packages that require
# older lightkurve, especially lightkurve v1.x.)
return
# migration check done only if default is used
old_cache_dir = os.path.join(os.path.expanduser("~"), ".lightkurve-cache")
new_cache_dir = os.path.join(os.path.expanduser("~"), ".lightkurve", "cache")
if os.path.isdir(old_cache_dir):
warnings.warn(
f"The default Lightkurve cache directory, used by download(), etc., has been moved to {new_cache_dir}. "
f"Please move all the files in the legacy directory {old_cache_dir} to the new location "
f"and remove the legacy directory. "
f"Refer to https://docs.lightkurve.org/reference/config.html#default-cache-directory-migration "
f"for more information."
)