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: 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() 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)
def test_get_xdg_dir_1(): """test_get_xdg_dir_1, check nonexistant xdg_dir""" reload(path) path.get_home_dir = lambda : HOME_TEST_DIR os.name = "posix" env.pop('IPYTHON_DIR', None) env.pop('XDG_CONFIG_HOME', None) nt.assert_equal(path.get_xdg_dir(), None)
def test_get_xdg_dir_1(): """test_get_xdg_dir_1, check xdg_dir""" reload(path) path.get_home_dir = lambda : 'somewhere' os.name = "posix" env.pop('IPYTHON_DIR', None) env.pop('XDG_CONFIG_HOME', None) nt.assert_equal(path.get_xdg_dir(), os.path.join('somewhere', '.config'))
def test_get_xdg_dir_1(): """test_get_xdg_dir_1, check nonexistant xdg_dir""" reload(path) path.get_home_dir = lambda: HOME_TEST_DIR os.name = "posix" env.pop('IPYTHON_DIR', None) env.pop('IPYTHONDIR', None) env.pop('XDG_CONFIG_HOME', None) nt.assert_equal(path.get_xdg_dir(), None)
def test_get_xdg_dir_1(): """test_get_xdg_dir_1, check xdg_dir""" reload(path) path.get_home_dir = lambda: 'somewhere' os.name = "posix" env.pop('IPYTHON_DIR', None) env.pop('IPYTHONDIR', None) env.pop('XDG_CONFIG_HOME', None) nt.assert_equal(path.get_xdg_dir(), os.path.join('somewhere', '.config'))
def test_get_xdg_dir_1(): """test_get_xdg_dir_1, check nonexistent xdg_dir""" reload(path) path.get_home_dir = lambda: HOME_TEST_DIR os.name = "posix" sys.platform = "linux2" env.pop("IPYTHON_DIR", None) env.pop("IPYTHONDIR", None) env.pop("XDG_CONFIG_HOME", None) nt.assert_equal(path.get_xdg_dir(), None)
def test_get_xdg_dir_1(): """test_get_xdg_dir_1, check nonexistent xdg_dir""" reload(path) path.get_home_dir = lambda: HOME_TEST_DIR os.name = "posix" sys.platform = "linux2" env.pop('IPYTHON_DIR', None) env.pop('IPYTHONDIR', None) env.pop('XDG_CONFIG_HOME', None) assert path.get_xdg_dir() is None
def test_get_xdg_dir_1(): """test_get_xdg_dir_1, check nonexistant xdg_dir""" reload(path) path.get_home_dir = lambda: HOME_TEST_DIR os.name = "posix" sys.platform = "linux2" env.pop("IPYTHON_DIR", None) env.pop("IPYTHONDIR", None) env.pop("XDG_CONFIG_HOME", None) nt.assert_equal(path.get_xdg_dir(), None)
def test_get_xdg_dir_2(): """test_get_xdg_dir_2, check xdg_dir default to ~/.config""" reload(path) path.get_home_dir = lambda : HOME_TEST_DIR os.name = "posix" env.pop('IPYTHON_DIR', None) env.pop('XDG_CONFIG_HOME', None) cfgdir=os.path.join(path.get_home_dir(), '.config') os.makedirs(cfgdir) nt.assert_equal(path.get_xdg_dir(), cfgdir)
def test_get_xdg_dir_0(): """test_get_xdg_dir_0, check xdg_dir""" reload(path) path._writable_dir = lambda path: True path.get_home_dir = lambda: 'somewhere' os.name = "posix" sys.platform = "linux2" env.pop('IPYTHON_DIR', None) env.pop('IPYTHONDIR', None) env.pop('XDG_CONFIG_HOME', None) nt.assert_equal(path.get_xdg_dir(), os.path.join('somewhere', '.config'))
def test_get_xdg_dir_0(): """test_get_xdg_dir_0, check xdg_dir""" reload(path) path._writable_dir = lambda path: True path.get_home_dir = lambda: "somewhere" os.name = "posix" sys.platform = "linux2" env.pop("IPYTHON_DIR", None) env.pop("IPYTHONDIR", None) env.pop("XDG_CONFIG_HOME", None) nt.assert_equal(path.get_xdg_dir(), os.path.join("somewhere", ".config"))
def test_get_xdg_dir_2(): """test_get_xdg_dir_2, check xdg_dir default to ~/.config""" reload(path) path.get_home_dir = lambda: HOME_TEST_DIR os.name = "posix" env.pop('IPYTHON_DIR', None) env.pop('IPYTHONDIR', None) env.pop('XDG_CONFIG_HOME', None) cfgdir = os.path.join(path.get_home_dir(), '.config') os.makedirs(cfgdir) nt.assert_equal(path.get_xdg_dir(), cfgdir)
def test_get_xdg_dir_0(): """test_get_xdg_dir_0, check xdg_dir""" reload(path) path._writable_dir = lambda path: True path.get_home_dir = lambda : 'somewhere' os.name = "posix" sys.platform = "linux2" env.pop('IPYTHON_DIR', None) env.pop('IPYTHONDIR', None) env.pop('XDG_CONFIG_HOME', None) nt.assert_equal(path.get_xdg_dir(), os.path.join('somewhere', '.config'))
def test_get_xdg_dir_3(): """test_get_xdg_dir_3, check xdg_dir not used on non-posix systems""" reload(path) path.get_home_dir = lambda: HOME_TEST_DIR os.name = "nt" sys.platform = "win32" env.pop('IPYTHON_DIR', None) env.pop('IPYTHONDIR', None) env.pop('XDG_CONFIG_HOME', None) cfgdir = os.path.join(path.get_home_dir(), '.config') os.makedirs(cfgdir, exist_ok=True) assert path.get_xdg_dir() is None
def test_get_xdg_dir_2(): """test_get_xdg_dir_2, check xdg_dir default to ~/.config""" reload(path) path.get_home_dir = lambda: HOME_TEST_DIR os.name = "posix" sys.platform = "linux2" env.pop("IPYTHON_DIR", None) env.pop("IPYTHONDIR", None) env.pop("XDG_CONFIG_HOME", None) cfgdir = os.path.join(path.get_home_dir(), ".config") if not os.path.exists(cfgdir): os.makedirs(cfgdir) nt.assert_equal(path.get_xdg_dir(), cfgdir)
def test_get_xdg_dir_3(): """test_get_xdg_dir_3, check xdg_dir not used on OS X""" reload(path) path.get_home_dir = lambda: HOME_TEST_DIR os.name = "posix" sys.platform = "darwin" env.pop('IPYTHON_DIR', None) env.pop('IPYTHONDIR', None) env.pop('XDG_CONFIG_HOME', None) cfgdir = os.path.join(path.get_home_dir(), '.config') if not os.path.exists(cfgdir): os.makedirs(cfgdir) nt.assert_equal(path.get_xdg_dir(), None)
def test_get_xdg_dir_3(): """test_get_xdg_dir_3, check xdg_dir not used on OS X""" reload(path) path.get_home_dir = lambda : HOME_TEST_DIR os.name = "posix" sys.platform = "darwin" env.pop('IPYTHON_DIR', None) env.pop('IPYTHONDIR', None) env.pop('XDG_CONFIG_HOME', None) cfgdir=os.path.join(path.get_home_dir(), '.config') if not os.path.exists(cfgdir): os.makedirs(cfgdir) nt.assert_equal(path.get_xdg_dir(), None)
def test_get_xdg_dir_2(): """test_get_xdg_dir_2, check xdg_dir default to ~/.config""" reload(path) path.get_home_dir = lambda: HOME_TEST_DIR os.name = "posix" sys.platform = "linux2" env.pop('IPYTHON_DIR', None) env.pop('IPYTHONDIR', None) env.pop('XDG_CONFIG_HOME', None) cfgdir = os.path.join(path.get_home_dir(), '.config') if not os.path.exists(cfgdir): os.makedirs(cfgdir) assert path.get_xdg_dir() == cfgdir
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)