222 lines
7.1 KiB
Python
222 lines
7.1 KiB
Python
# Copyright (c) Microsoft Corporation. All rights reserved.
|
|
# Licensed under the MIT License.
|
|
|
|
# Source borrowed from site-packages/jupyter_core/paths.py
|
|
|
|
# ingore flake8 undefined variable errors since it doesn't like these temporary imports
|
|
# flake8: noqa: F821
|
|
|
|
|
|
def __vsc_print_nbextension_widgets():
|
|
import os as __vscode_os
|
|
import site as __vscode_site
|
|
import sys as __vscode_sys
|
|
import tempfile as __vscode_tempfile
|
|
from pathlib import Path as __vscode_Path
|
|
|
|
pjoin = __vscode_os.path.join
|
|
|
|
def envset(name):
|
|
"""Return True if the given environment variable is set
|
|
|
|
An environment variable is considered set if it is assigned to a value
|
|
other than 'no', 'n', 'false', 'off', '0', or '0.0' (case insensitive)
|
|
"""
|
|
return __vscode_os.environ.get(name, "no").lower() not in [
|
|
"no",
|
|
"n",
|
|
"false",
|
|
"off",
|
|
"0",
|
|
"0.0",
|
|
]
|
|
|
|
def get_home_dir():
|
|
"""Get the real path of the home directory"""
|
|
homedir = __vscode_os.path.expanduser("~")
|
|
# Next line will make things work even when /home/ is a symlink to
|
|
# /usr/home as it is on FreeBSD, for example
|
|
homedir = str(__vscode_Path(homedir).resolve())
|
|
return homedir
|
|
|
|
_dtemps: dict = {}
|
|
|
|
def _mkdtemp_once(name):
|
|
"""Make or reuse a temporary directory.
|
|
|
|
If this is called with the same name in the same process, it will return
|
|
the same directory.
|
|
"""
|
|
try:
|
|
return _dtemps[name]
|
|
except KeyError:
|
|
d = _dtemps[name] = __vscode_tempfile.mkdtemp(prefix=name + "-")
|
|
return d
|
|
|
|
def jupyter_config_dir():
|
|
"""Get the Jupyter config directory for this platform and user.
|
|
|
|
Returns JUPYTER_CONFIG_DIR if defined, else ~/.jupyter
|
|
"""
|
|
|
|
env = __vscode_os.environ
|
|
if env.get("JUPYTER_NO_CONFIG"):
|
|
return _mkdtemp_once("jupyter-clean-cfg")
|
|
|
|
if env.get("JUPYTER_CONFIG_DIR"):
|
|
return env["JUPYTER_CONFIG_DIR"]
|
|
|
|
home_dir = get_home_dir()
|
|
return pjoin(home_dir, ".jupyter")
|
|
|
|
def jupyter_data_dir():
|
|
"""Get the config directory for Jupyter data files for this platform and user.
|
|
|
|
These are non-transient, non-configuration files.
|
|
|
|
Returns JUPYTER_DATA_DIR if defined, else a platform-appropriate path.
|
|
"""
|
|
env = __vscode_os.environ
|
|
|
|
if env.get("JUPYTER_DATA_DIR"):
|
|
return env["JUPYTER_DATA_DIR"]
|
|
|
|
home = get_home_dir()
|
|
|
|
if __vscode_sys.platform == "darwin":
|
|
return __vscode_os.path.join(home, "Library", "Jupyter")
|
|
elif __vscode_os.name == "nt":
|
|
appdata = __vscode_os.environ.get("APPDATA", None)
|
|
if appdata:
|
|
return str(__vscode_Path(appdata, "jupyter").resolve())
|
|
else:
|
|
return pjoin(jupyter_config_dir(), "data")
|
|
else:
|
|
# Linux, non-OS X Unix, AIX, etc.
|
|
xdg = env.get("XDG_DATA_HOME", None)
|
|
if not xdg:
|
|
xdg = pjoin(home, ".local", "share")
|
|
return pjoin(xdg, "jupyter")
|
|
|
|
if __vscode_os.name == "nt":
|
|
programdata = __vscode_os.environ.get("PROGRAMDATA", None)
|
|
if programdata:
|
|
SYSTEM_JUPYTER_PATH = [pjoin(programdata, "jupyter")]
|
|
else: # PROGRAMDATA is not defined by default on XP.
|
|
SYSTEM_JUPYTER_PATH = [
|
|
__vscode_os.path.join(__vscode_sys.prefix, "share", "jupyter")
|
|
]
|
|
else:
|
|
SYSTEM_JUPYTER_PATH = [
|
|
"/usr/local/share/jupyter",
|
|
"/usr/share/jupyter",
|
|
]
|
|
|
|
ENV_JUPYTER_PATH = [__vscode_os.path.join(__vscode_sys.prefix, "share", "jupyter")]
|
|
|
|
def jupyter_path(*subdirs):
|
|
"""Return a list of directories to search for data files
|
|
|
|
JUPYTER_PATH environment variable has highest priority.
|
|
|
|
If the JUPYTER_PREFER_ENV_PATH environment variable is set, the environment-level
|
|
directories will have priority over user-level directories.
|
|
|
|
If the Python __vscode_site.ENABLE_USER_SITE variable is True, we also add the
|
|
appropriate Python user site subdirectory to the user-level directories.
|
|
|
|
|
|
If ``*subdirs`` are given, that subdirectory will be added to each element.
|
|
|
|
Examples:
|
|
|
|
>>> jupyter_path()
|
|
['~/.local/jupyter', '/usr/local/share/jupyter']
|
|
>>> jupyter_path('kernels')
|
|
['~/.local/jupyter/kernels', '/usr/local/share/jupyter/kernels']
|
|
"""
|
|
|
|
paths: list = []
|
|
|
|
# highest priority is explicit environment variable
|
|
if __vscode_os.environ.get("JUPYTER_PATH"):
|
|
paths.extend(
|
|
p.rstrip(__vscode_os.sep)
|
|
for p in __vscode_os.environ["JUPYTER_PATH"].split(__vscode_os.pathsep)
|
|
)
|
|
|
|
# Next is environment or user, depending on the JUPYTER_PREFER_ENV_PATH flag
|
|
user = [jupyter_data_dir()]
|
|
if __vscode_site.ENABLE_USER_SITE:
|
|
# Check if __vscode_site.getuserbase() exists to be compatible with virtualenv,
|
|
# which often does not have this method.
|
|
if hasattr(__vscode_site, "getuserbase"):
|
|
userbase = __vscode_site.getuserbase()
|
|
else:
|
|
userbase = __vscode_site.USER_BASE
|
|
|
|
if userbase:
|
|
userdir = __vscode_os.path.join(userbase, "share", "jupyter")
|
|
if userdir not in user:
|
|
user.append(userdir)
|
|
|
|
env = [p for p in ENV_JUPYTER_PATH if p not in SYSTEM_JUPYTER_PATH]
|
|
|
|
if envset("JUPYTER_PREFER_ENV_PATH"):
|
|
paths.extend(env)
|
|
paths.extend(user)
|
|
else:
|
|
paths.extend(user)
|
|
paths.extend(env)
|
|
|
|
# finally, system
|
|
paths.extend(SYSTEM_JUPYTER_PATH)
|
|
|
|
# add subdir, if requested
|
|
if subdirs:
|
|
paths = [pjoin(p, *subdirs) for p in paths]
|
|
return paths
|
|
|
|
__vsc_nbextension_widgets = []
|
|
__vsc_file = ""
|
|
__vsc_nbextension_Folder = ""
|
|
__vscode_widget_folder = ""
|
|
import glob as _VSCODE_glob
|
|
|
|
try:
|
|
for __vsc_nbextension_Folder in jupyter_path("nbextensions"):
|
|
for __vsc_file in _VSCODE_glob.glob(
|
|
__vsc_nbextension_Folder
|
|
+ __vscode_os.path.sep
|
|
+ "*"
|
|
+ __vscode_os.path.sep
|
|
+ "extension.js"
|
|
):
|
|
__vscode_widget_folder = __vsc_file.replace(
|
|
__vsc_nbextension_Folder, ""
|
|
)
|
|
if __vscode_widget_folder not in __vsc_nbextension_widgets:
|
|
__vsc_nbextension_widgets.append(__vscode_widget_folder)
|
|
|
|
print(__vsc_nbextension_widgets)
|
|
|
|
except Exception:
|
|
pass
|
|
|
|
# We need to ensure these variables don't interfere with the variable viewer, hence delete them after use.
|
|
del _VSCODE_glob
|
|
del __vsc_file
|
|
del __vsc_nbextension_Folder
|
|
del __vscode_widget_folder
|
|
del __vsc_nbextension_widgets
|
|
del __vscode_os
|
|
del __vscode_site
|
|
del __vscode_sys
|
|
del __vscode_tempfile
|
|
del __vscode_Path
|
|
|
|
|
|
__vsc_print_nbextension_widgets()
|
|
|
|
del __vsc_print_nbextension_widgets
|