def get_ipython_dir(): """Get the IPython directory for this platform and user. This uses the logic in `get_home_dir` to find the home directory and then adds .ipython to the end of the path. """ env = os.environ pjoin = os.path.join ipdir_def = ".ipython" home_dir = get_home_dir() xdg_dir = get_xdg_dir() # import pdb; pdb.set_trace() # dbg if "IPYTHON_DIR" in env: warn("The environment variable IPYTHON_DIR is deprecated. " "Please use IPYTHONDIR instead.") ipdir = env.get("IPYTHONDIR", env.get("IPYTHON_DIR", None)) if ipdir is None: # not set explicitly, use ~/.ipython ipdir = pjoin(home_dir, ipdir_def) if xdg_dir: # Several IPython versions (up to 1.x) defaulted to .config/ipython # on Linux. We have decided to go back to using .ipython everywhere xdg_ipdir = pjoin(xdg_dir, "ipython") if _writable_dir(xdg_ipdir): cu = compress_user if os.path.exists(ipdir): warn( ("Ignoring {0} in favour of {1}. Remove {0} to " "get rid of this message").format( cu(xdg_ipdir), cu(ipdir) ) ) elif os.path.islink(xdg_ipdir): warn( ("{0} is deprecated. Move link to {1} to " "get rid of this message").format( cu(xdg_ipdir), cu(ipdir) ) ) else: warn("Moving {0} to {1}".format(cu(xdg_ipdir), cu(ipdir))) shutil.move(xdg_ipdir, ipdir) ipdir = os.path.normpath(os.path.expanduser(ipdir)) if os.path.exists(ipdir) and not _writable_dir(ipdir): # ipdir exists, but is not writable warn("IPython dir '{0}' is not a writable location," " using a temp directory.".format(ipdir)) ipdir = tempfile.mkdtemp() elif not os.path.exists(ipdir): parent = os.path.dirname(ipdir) if not _writable_dir(parent): # ipdir does not exist and parent isn't writable warn("IPython parent '{0}' is not a writable location," " using a temp directory.".format(parent)) ipdir = tempfile.mkdtemp() return py3compat.cast_unicode(ipdir, fs_encoding)
def get_ipython_cache_dir(): """Get the cache directory it is created if it does not exist.""" xdgdir = get_xdg_cache_dir() if xdgdir is None: return get_ipython_dir() ipdir = os.path.join(xdgdir, "ipython") if not os.path.exists(ipdir) and _writable_dir(xdgdir): ensure_dir_exists(ipdir) elif not _writable_dir(xdgdir): return get_ipython_dir() return py3compat.cast_unicode(ipdir, fs_encoding)
def test_get_home_dir_4(): """get_home_dir() still works if $HOME is not set""" if 'HOME' in env: del env['HOME'] # this should still succeed, but we don't know what the answer should be home = path.get_home_dir(True) nt.assert_true(path._writable_dir(home))
def get_ipython_dir() -> str: """Get the IPython directory for this platform and user. This uses the logic in `get_home_dir` to find the home directory and then adds .ipython to the end of the path. """ env = os.environ pjoin = os.path.join ipdir_def = '.ipython' home_dir = get_home_dir() xdg_dir = get_xdg_dir() if 'IPYTHON_DIR' in env: warn( 'The environment variable IPYTHON_DIR is deprecated since IPython 3.0. ' 'Please use IPYTHONDIR instead.', DeprecationWarning) ipdir = env.get('IPYTHONDIR', env.get('IPYTHON_DIR', None)) if ipdir is None: # not set explicitly, use ~/.ipython ipdir = pjoin(home_dir, ipdir_def) if xdg_dir: # Several IPython versions (up to 1.x) defaulted to .config/ipython # on Linux. We have decided to go back to using .ipython everywhere xdg_ipdir = pjoin(xdg_dir, 'ipython') if _writable_dir(xdg_ipdir): cu = compress_user if os.path.exists(ipdir): warn(('Ignoring {0} in favour of {1}. Remove {0} to ' 'get rid of this message').format( cu(xdg_ipdir), cu(ipdir))) elif os.path.islink(xdg_ipdir): warn(('{0} is deprecated. Move link to {1} to ' 'get rid of this message').format( cu(xdg_ipdir), cu(ipdir))) else: ipdir = xdg_ipdir ipdir = os.path.normpath(os.path.expanduser(ipdir)) if os.path.exists(ipdir) and not _writable_dir(ipdir): # ipdir exists, but is not writable warn("IPython dir '{0}' is not a writable location," " using a temp directory.".format(ipdir)) ipdir = tempfile.mkdtemp() elif not os.path.exists(ipdir): parent = os.path.dirname(ipdir) if not _writable_dir(parent): # ipdir does not exist and parent isn't writable warn("IPython parent '{0}' is not a writable location," " using a temp directory.".format(parent)) ipdir = tempfile.mkdtemp() else: os.makedirs(ipdir, exist_ok=True) assert isinstance( ipdir, str), "all path manipulation should be str(unicode), but are not." return ipdir
def get_ipython_dir(): """Get the IPython directory for this platform and user. This uses the logic in `get_home_dir` to find the home directory and then adds .ipython to the end of the path. """ env = os.environ pjoin = os.path.join ipdir_def = ".ipython" home_dir = get_home_dir() xdg_dir = get_xdg_dir() # import pdb; pdb.set_trace() # dbg if "IPYTHON_DIR" in env: warn( "The environment variable IPYTHON_DIR is deprecated. " "Please use IPYTHONDIR instead." ) ipdir = env.get("IPYTHONDIR", env.get("IPYTHON_DIR", None)) if ipdir is None: # not set explicitly, use ~/.ipython ipdir = pjoin(home_dir, ipdir_def) if xdg_dir: # Several IPython versions (up to 1.x) defaulted to .config/ipython # on Linux. We have decided to go back to using .ipython everywhere xdg_ipdir = pjoin(xdg_dir, "ipython") if _writable_dir(xdg_ipdir): cu = compress_user if os.path.exists(ipdir): warn( ( "Ignoring {0} in favour of {1}. Remove {0} to " "get rid of this message" ).format(cu(xdg_ipdir), cu(ipdir)) ) elif os.path.islink(xdg_ipdir): warn( ( "{0} is deprecated. Move link to {1} to " "get rid of this message" ).format(cu(xdg_ipdir), cu(ipdir)) ) else: warn("Moving {0} to {1}".format(cu(xdg_ipdir), cu(ipdir))) shutil.move(xdg_ipdir, ipdir) ipdir = os.path.normpath(os.path.expanduser(ipdir)) if os.path.exists(ipdir) and not _writable_dir(ipdir): # ipdir exists, but is not writable warn( "IPython dir '{0}' is not a writable location," " using a temp directory.".format(ipdir) ) ipdir = tempfile.mkdtemp() elif not os.path.exists(ipdir): parent = os.path.dirname(ipdir) if not _writable_dir(parent): # ipdir does not exist and parent isn't writable warn( "IPython parent '{0}' is not a writable location," " using a temp directory.".format(parent) ) ipdir = tempfile.mkdtemp() return py3compat.cast_unicode(ipdir, fs_encoding)