Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-jupyter-core for
openSUSE:Factory checked in at 2021-02-04 20:23:30
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-jupyter-core (Old)
and /work/SRC/openSUSE:Factory/.python-jupyter-core.new.28504 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-jupyter-core"
Thu Feb 4 20:23:30 2021 rev:5 rq:868938 version:4.7.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-jupyter-core/python-jupyter-core.changes
2020-04-19 21:47:27.871839369 +0200
+++
/work/SRC/openSUSE:Factory/.python-jupyter-core.new.28504/python-jupyter-core.changes
2021-02-04 20:24:12.502838521 +0100
@@ -1,0 +2,30 @@
+Sun Jan 31 17:57:15 UTC 2021 - Ben Greiner <[email protected]>
+
+- Update to 4.7.1
+ * Allow creating user to delete secure file
+- Changelog for 4.7.0
+ * Add a new JUPYTER_PREFER_ENV_PATH variable, which can be set
+ to switch the order of the environment-level path and the
+ user-level path in the Jupyter path hierarchy (e.g., jupyter
+ --paths). It is considered set if it is a value that is not
+ one of 'no', 'n', 'off', 'false', '0', or '0.0' (case
+ insensitive). If you are running Jupyter in multiple virtual
+ environments as the same user, you will likely want to set
+ this environment variable.
+ * Drop Python 2.x and 3.5 support, as they have reached end of
+ life.
+ * jupyter --paths --debug now explains the environment
+ variables that affect the current path list.
+ * Add conda environment information in jupyter troubleshoot.
+ * Update _version.version_info and _version.__version__ to
+ follow Python conventions.
+- merge jupyter package as capability into the primary python
+ package
+- fix replacement of paths:
+ * fix noop introduced by overeager specfile-cleaner for system
+ paths, adjust use_rpm_paths.patch
+ * don't replace ENV_CONFIG_PATH or ENV_JUPYTER_PATH because that
+ would break virtual environments. See also
+ gh#jupyter/jupyter_core#208
+
+-------------------------------------------------------------------
Old:
----
jupyter_core-4.6.3.tar.gz
New:
----
jupyter_core-4.7.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-jupyter-core.spec ++++++
--- /var/tmp/diff_new_pack.Fv8ySp/_old 2021-02-04 20:24:13.174839543 +0100
+++ /var/tmp/diff_new_pack.Fv8ySp/_new 2021-02-04 20:24:13.178839550 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-jupyter-core
#
-# Copyright (c) 2020 SUSE LLC
+# Copyright (c) 2021 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -26,9 +26,9 @@
%endif
%bcond_without python2
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
-%define oldpython python
+%define skip_python2 1
Name: python-jupyter-core%{psuffix}
-Version: 4.6.3
+Version: 4.7.1
Release: 0
Summary: Base package on which Jupyter projects rely
License: BSD-3-Clause
@@ -36,30 +36,27 @@
Source0:
https://files.pythonhosted.org/packages/source/j/jupyter_core/jupyter_core-%{version}.tar.gz
# PATCH-FIX-OPENSUSE -- use_rpms_paths.patch -- change paths so they are easy
to replace at build time
Patch0: use_rpms_paths.patch
-BuildRequires: %{python_module ipython_genutils}
BuildRequires: %{python_module setuptools}
BuildRequires: %{python_module traitlets}
BuildRequires: fdupes
BuildRequires: jupyter-jupyter_core-filesystem
BuildRequires: python-rpm-macros
-Requires: jupyter-jupyter_core = %{version}
-Requires: python-ipython_genutils
Requires: python-traitlets
+Requires(post): update-alternatives
+Requires(postun): update-alternatives
Recommends: python-ipython
-Provides: python-jupyter_core = %{version}
-Obsoletes: python-jupyter_core < %{version}
-BuildArch: noarch
-%ifpython2
-Provides: %{oldpython}-jupyter_core = %{version}
-Obsoletes: %{oldpython}-jupyter_core < %{version}
+Provides: python-jupyter_core = %{version}-%{release}
+Obsoletes: python-jupyter_core < %{version}-%{release}
+%if "%{python_flavor}" == "python3" || "%{python_provides}" == "python3"
+Provides: jupyter-jupyter-core = %{version}-%{release}
+Obsoletes: jupyter-jupyter-core < %{version}-%{release}
+Provides: jupyter-jupyter_core = %{version}-%{release}
+Obsoletes: jupyter-jupyter_core < %{version}-%{release}
%endif
+BuildArch: noarch
%if %{with test}
BuildRequires: %{python_module jupyter-core}
-BuildRequires: %{python_module nose}
BuildRequires: %{python_module pytest}
-%if %{with python2}
-BuildRequires: python-mock
-%endif
%endif
%python_subpackages
@@ -72,36 +69,12 @@
There is no reason to install this package on its own. It will be pulled in
as a dependency by packages that require it.
-This package provides the python interface.
-
-%package -n jupyter-jupyter-core
-Summary: Base package on which Jupyter projects rely
-Requires: jupyter-notebook-filesystem
-Requires: python3-jupyter-core = %{version}
-Provides: jupyter-jupyter_core = %{version}
-Obsoletes: jupyter-jupyter_core < %{version}
-Provides: jupyter-jupyter-core-doc = %{version}
-Obsoletes: jupyter-jupyter-core-doc < %{version}
-
-%description -n jupyter-jupyter-core
-Core common functionality of Jupyter projects.
-
-This package contains base application classes and configuration inherited by
-other projects. It doesn't do much on its own.
-
-There is no reason to install this package on its own. It will be pulled in
-as a dependency by packages that require it.
-
-This package provides the jupyter components.
-
%prep
%setup -q -n jupyter_core-%{version}
%patch0 -p1
-# Set the appropriate paths dynamically
-sed -i "s|\"%{_datadir}/jupyter\"|\"%{_datadir}/jupyter\"|"
jupyter_core/paths.py
-sed -i "s|\"%{_sysconfdir}/jupyter\"|\"%{_sysconfdir}/jupyter\"|"
jupyter_core/paths.py
-sed -i "s|(sys\.prefix, 'share', 'jupyter')|('%{_datadir}', 'jupyter')|"
jupyter_core/paths.py
-sed -i "s|(sys\.prefix, 'etc', 'jupyter')|('%{_sysconfdir}', 'jupyter')|"
jupyter_core/paths.py
+# Set the appropriate hardcoded paths dynamically
+sed -i "s|\"_datadir_jupyter_\"|\"%{_datadir}/jupyter\"|" jupyter_core/paths.py
+sed -i "s|\"_sysconfdir_jupyter_\"|\"%{_sysconfdir}/jupyter\"|"
jupyter_core/paths.py
%build
%python_build
@@ -109,38 +82,40 @@
%install
%if !%{with test}
%python_install
-
+%python_clone -a %{buildroot}%{_bindir}/jupyter
+%python_clone -a %{buildroot}%{_bindir}/jupyter-migrate
+%python_clone -a %{buildroot}%{_bindir}/jupyter-troubleshoot
%{python_expand chmod a+x
%{buildroot}%{$python_sitelib}/jupyter_core/troubleshoot.py
sed -i "s|^#!%{_bindir}/env python$|#!%{__$python}|"
%{buildroot}%{$python_sitelib}/jupyter_core/troubleshoot.py
-$python -m compileall -d %{$python_sitelib}
%{buildroot}%{$python_sitelib}/jupyter_core/
-$python -O -m compileall -d %{$python_sitelib}
%{buildroot}%{$python_sitelib}/jupyter_core/
-%fdupes %{buildroot}%{$python_sitelib}
}
+%python_compileall
+%python_expand %fdupes %{buildroot}%{$python_sitelib}
%endif
%if %{with test}
%check
-# test_migrate requires files not found in the package
pushd jupyter_core/tests
-rm test_migrate.py
-%pytest
+# test_jupyter_path_prefer_env does not work outside venvs:
gh#jupyter/jupyter_core#208
+%pytest -k "not test_jupyter_path_prefer_env"
popd
%endif
+%post
+%python_install_alternative jupyter jupyter-migrate jupyter-troubleshoot
+
+%postun
+%python_uninstall_alternative jupyter
+
%if !%{with test}
%files %{python_files}
%license COPYING.md
+%python_alternative %{_bindir}/jupyter
+%python_alternative %{_bindir}/jupyter-migrate
+%python_alternative %{_bindir}/jupyter-troubleshoot
%{python_sitelib}/jupyter.py*
%pycache_only %{python_sitelib}/__pycache__/jupyter.*.py*
%{python_sitelib}/jupyter_core/
-%{python_sitelib}/jupyter_core-%{version}-*.egg-info
-
-%files -n jupyter-jupyter-core
-%license COPYING.md
-%doc CONTRIBUTING.md README.md
-%{_bindir}/jupyter
-%{_bindir}/jupyter-migrate
-%{_bindir}/jupyter-troubleshoot
+%{python_sitelib}/jupyter_core-%{version}*-info
%endif
%changelog
++++++ jupyter_core-4.6.3.tar.gz -> jupyter_core-4.7.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jupyter_core-4.6.3/PKG-INFO
new/jupyter_core-4.7.1/PKG-INFO
--- old/jupyter_core-4.6.3/PKG-INFO 2020-02-18 19:13:42.000000000 +0100
+++ new/jupyter_core-4.7.1/PKG-INFO 2021-01-31 19:30:07.000000000 +0100
@@ -1,6 +1,6 @@
-Metadata-Version: 1.2
+Metadata-Version: 2.1
Name: jupyter_core
-Version: 4.6.3
+Version: 4.7.1
Summary: Jupyter core package. A base package on which Jupyter projects rely.
Home-page: https://jupyter.org
Author: Jupyter Development Team
@@ -13,7 +13,6 @@
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: BSD License
Classifier: Programming Language :: Python
-Classifier: Programming Language :: Python :: 2
-Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
-Requires-Python: !=3.0,!=3.1,!=3.2,!=3.3,!=3.4,>=2.7
+Requires-Python: >=3.6
+Description-Content-Type: text/plain
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jupyter_core-4.6.3/dev-requirements.txt
new/jupyter_core-4.7.1/dev-requirements.txt
--- old/jupyter_core-4.6.3/dev-requirements.txt 2019-09-14 00:09:00.000000000
+0200
+++ new/jupyter_core-4.7.1/dev-requirements.txt 2020-11-02 16:52:35.000000000
+0100
@@ -1,3 +1,2 @@
pytest
-mock; python_version < '3.3'
ipykernel
Binary files old/jupyter_core-4.6.3/docs/.DS_Store and
new/jupyter_core-4.7.1/docs/.DS_Store differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jupyter_core-4.6.3/docs/changelog.rst
new/jupyter_core-4.7.1/docs/changelog.rst
--- old/jupyter_core-4.6.3/docs/changelog.rst 2020-02-18 19:12:27.000000000
+0100
+++ new/jupyter_core-4.7.1/docs/changelog.rst 2021-01-31 19:25:32.000000000
+0100
@@ -1,6 +1,36 @@
Changes in jupyter-core
=======================
+
+4.7
+---
+
+4.7.1
+~~~~~
+
+`on
+GitHub <https://github.com/jupyter/jupyter_core/releases/tag/4.7.1>`__
+
+- Allow creating user to delete secure file (:ghpull:`213`)
+
+4.7.0
+~~~~~
+
+`on
+GitHub <https://github.com/jupyter/jupyter_core/releases/tag/4.7>`__
+
+See the `jupyter_core
+4.7 <https://github.com/jupyter/jupyter_core/milestone/19?closed=1>`__
+milestone on GitHub for the full list of pull requests and issues closed.
+
+- Add a new ``JUPYTER_PREFER_ENV_PATH`` variable, which can be set to switch
the order of the environment-level path and the user-level path in the Jupyter
path hierarchy (e.g., ``jupyter --paths``). It is considered set if it is a
value that is not one of 'no', 'n', 'off', 'false', '0', or '0.0' (case
insensitive). If you are running Jupyter in multiple virtual environments as
the same user, you will likely want to set this environment variable.
+- Drop Python 2.x and 3.5 support, as they have reached end of life.
+- Add Python 3.9 builds to testing, and expand testing to cover Windows,
macOS, and Linux platforms.
+- ``jupyter --paths --debug`` now explains the environment variables that
affect the current path list.
+- Update the file hidden check on Windows to use new Python features rather
than ctypes directly.
+- Add conda environment information in ``jupyter troubleshoot``.
+- Update ``_version.version_info`` and ``_version.__version__`` to follow
Python conventions.
+
4.6
---
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jupyter_core-4.6.3/docs/conf.py
new/jupyter_core-4.7.1/docs/conf.py
--- old/jupyter_core-4.6.3/docs/conf.py 2019-09-14 00:09:00.000000000 +0200
+++ new/jupyter_core-4.7.1/docs/conf.py 2020-11-02 16:52:35.000000000 +0100
@@ -1,5 +1,4 @@
#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
#
# jupyter_core documentation build configuration file, created by
# sphinx-quickstart on Wed Jun 24 11:51:36 2015.
@@ -13,10 +12,6 @@
# All configuration values have a default; values that are commented out
# serve to show the default.
-import sys
-import os
-import shlex
-
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jupyter_core-4.6.3/jupyter_core/application.py
new/jupyter_core-4.7.1/jupyter_core/application.py
--- old/jupyter_core-4.6.3/jupyter_core/application.py 2020-02-11
07:37:47.000000000 +0100
+++ new/jupyter_core-4.7.1/jupyter_core/application.py 2020-11-02
16:52:35.000000000 +0100
@@ -1,4 +1,3 @@
-# encoding: utf-8
"""
A base Application class for Jupyter applications.
@@ -8,31 +7,17 @@
# Copyright (c) Jupyter Development Team.
# Distributed under the terms of the Modified BSD License.
-from __future__ import print_function
-
from copy import deepcopy
import logging
import os
+from shutil import which
import sys
-try:
- # py3
- from shutil import which
-except ImportError:
- from .utils.shutil_which import which
-
-try:
- raw_input
-except NameError:
- # py3
- raw_input = input
-
from traitlets.config.application import Application, catch_config_error
from traitlets.config.loader import ConfigFileNotFound
from traitlets import Unicode, Bool, List, observe
from .utils import ensure_dir_exists
-from ipython_genutils import py3compat
from .paths import (
jupyter_config_dir, jupyter_data_dir, jupyter_runtime_dir,
@@ -84,7 +69,7 @@
path = jupyter_config_path()
if self.config_dir not in path:
path.insert(0, self.config_dir)
- path.insert(0, py3compat.getcwd())
+ path.insert(0, os.getcwd())
return path
data_dir = Unicode()
@@ -114,7 +99,7 @@
def _config_file_name_default(self):
if not self.name:
return ''
- return self.name.replace('-','_') + u'_config'
+ return self.name.replace('-','_') + '_config'
config_file = Unicode(config=True,
help="""Full path of a config file.""",
@@ -136,7 +121,7 @@
def ask():
prompt = "Overwrite %s with default config? [y/N]" %
config_file
try:
- return raw_input(prompt).lower() or 'n'
+ return input(prompt).lower() or 'n'
except KeyboardInterrupt:
print('') # empty line
return 'n'
@@ -186,7 +171,6 @@
except ConfigFileNotFound:
# ignore errors loading parent
self.log.debug("Config file %s not found", base_config)
- pass
if self.config_file:
path, config_file_name = os.path.split(self.config_file)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jupyter_core-4.6.3/jupyter_core/command.py
new/jupyter_core-4.7.1/jupyter_core/command.py
--- old/jupyter_core-4.6.3/jupyter_core/command.py 2019-10-24
06:08:45.000000000 +0200
+++ new/jupyter_core-4.7.1/jupyter_core/command.py 2020-11-02
16:52:35.000000000 +0100
@@ -6,22 +6,15 @@
# Copyright (c) Jupyter Development Team.
# Distributed under the terms of the Modified BSD License.
-from __future__ import print_function
-
import argparse
import errno
import json
import os
+from shutil import which
import sys
import sysconfig
from subprocess import Popen
-try:
- # py3
- from shutil import which
-except ImportError:
- from .utils.shutil_which import which
-
from . import paths
from .version import __version__
@@ -60,6 +53,8 @@
help="show all Jupyter paths. Add --json for machine-readable format.")
parser.add_argument('--json', action='store_true',
help="output paths as machine-readable json")
+ parser.add_argument('--debug', action='store_true',
+ help="output debug information about paths")
return parser
@@ -102,10 +97,6 @@
if sys.platform.startswith('win'):
# PATH is ignored when shell=False,
# so rely on shutil.which
- try:
- from shutil import which
- except ImportError:
- from .utils.shutil_which import which
cmd_path = which(cmd)
if cmd_path is None:
raise OSError('%r not found' % cmd, errno.ENOENT)
@@ -184,12 +175,12 @@
def main():
+ parser = jupyter_parser()
if len(sys.argv) > 1 and not sys.argv[1].startswith('-'):
# Don't parse if a subcommand is given
# Avoids argparse gobbling up args passed to subcommand, such as `-h`.
subcommand = sys.argv[1]
else:
- parser = jupyter_parser()
args, opts = parser.parse_known_args()
subcommand = args.subcommand
if args.version:
@@ -216,6 +207,10 @@
return
if args.json and not args.paths:
sys.exit("--json is only used with --paths")
+ if args.debug and not args.paths:
+ sys.exit("--debug is only used with --paths")
+ if args.debug and args.json:
+ sys.exit("--debug cannot be used with --json")
if args.config_dir:
print(paths.jupyter_config_dir())
return
@@ -233,6 +228,49 @@
if args.json:
print(json.dumps(data))
else:
+ if args.debug:
+ env = os.environ
+
+ if paths.envset('JUPYTER_PREFER_ENV_PATH'):
+ print("JUPYTER_PREFER_ENV_PATH is set, making the
environment-level path preferred over the user-level path for data and config")
+ else:
+ print("JUPYTER_PREFER_ENV_PATH is not set, making the
user-level path preferred over the environment-level path for data and config")
+
+ # config path list
+ if env.get('JUPYTER_NO_CONFIG'):
+ print("JUPYTER_NO_CONFIG is set, making the config
path list only a single temporary directory")
+ else:
+ print("JUPYTER_NO_CONFIG is not set, so we use the
full path list for config")
+
+ if env.get('JUPYTER_CONFIG_PATH'):
+ print(f"JUPYTER_CONFIG_PATH is set to
'{env.get('JUPYTER_CONFIG_PATH')}', which is prepended to the config path list
(unless JUPYTER_NO_CONFIG is set)")
+ else:
+ print("JUPYTER_CONFIG_PATH is not set, so we do not
prepend anything to the config paths")
+
+ if env.get('JUPYTER_CONFIG_DIR'):
+ print(f"JUPYTER_CONFIG_DIR is set to
'{env.get('JUPYTER_CONFIG_DIR')}', overriding the default user-level config
directory")
+ else:
+ print("JUPYTER_CONFIG_DIR is not set, so we use the
default user-level config directory")
+
+ # data path list
+ if env.get('JUPYTER_PATH'):
+ print(f"JUPYTER_PATH is set to
'{env.get('JUPYTER_PATH')}', which is prepended to the data paths")
+ else:
+ print("JUPYTER_PATH is not set, so we do not prepend
anything to the data paths")
+
+ if env.get('JUPYTER_DATA_DIR'):
+ print(f"JUPYTER_DATA_DIR is set to
'{env.get('JUPYTER_DATA_DIR')}', overriding the default user-level data
directory")
+ else:
+ print("JUPYTER_DATA_DIR is not set, so we use the
default user-level data directory")
+
+ # runtime directory
+ if env.get('JUPYTER_RUNTIME_DIR'):
+ print(f"JUPYTER_RUNTIME_DIR is set to
'{env.get('JUPYTER_RUNTIME_DIR')}', overriding the default runtime directory")
+ else:
+ print("JUPYTER_RUNTIME_DIR is not set, so we use the
default runtime directory")
+
+ print()
+
for name in sorted(data):
path = data[name]
print('%s:' % name)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jupyter_core-4.6.3/jupyter_core/migrate.py
new/jupyter_core-4.7.1/jupyter_core/migrate.py
--- old/jupyter_core-4.6.3/jupyter_core/migrate.py 2019-09-14
00:09:00.000000000 +0200
+++ new/jupyter_core-4.7.1/jupyter_core/migrate.py 2020-10-30
15:38:29.000000000 +0100
@@ -1,5 +1,3 @@
-from __future__ import unicode_literals
-
"""Migrating IPython < 4.0 to Jupyter
This *copies* configuration and resources to their new locations in Jupyter
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jupyter_core-4.6.3/jupyter_core/paths.py
new/jupyter_core-4.7.1/jupyter_core/paths.py
--- old/jupyter_core-4.6.3/jupyter_core/paths.py 2020-02-18
19:10:10.000000000 +0100
+++ new/jupyter_core-4.7.1/jupyter_core/paths.py 2021-01-31
17:51:47.000000000 +0100
@@ -1,4 +1,3 @@
-# encoding: utf-8
"""Path utility functions."""
# Copyright (c) Jupyter Development Team.
@@ -15,11 +14,8 @@
import errno
import tempfile
import warnings
-from ipython_genutils import py3compat
from contextlib import contextmanager
-from distutils.util import strtobool
-from ipython_genutils import py3compat
pjoin = os.path.join
@@ -28,13 +24,20 @@
UF_HIDDEN = getattr(stat, 'UF_HIDDEN', 32768)
+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 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 = 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 = os.path.realpath(homedir)
- homedir = py3compat.str_to_unicode(homedir,
encoding=sys.getfilesystemencoding())
return homedir
_dtemps = {}
@@ -69,7 +72,7 @@
def jupyter_data_dir():
- """Get the config directory for Jupyter data files.
+ """Get the config directory for Jupyter data files for this platform and
user.
These are non-transient, non-configuration files.
@@ -134,6 +137,9 @@
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 ``*subdirs`` are given, that subdirectory will be added to each element.
Examples:
@@ -145,18 +151,25 @@
"""
paths = []
- # highest priority is env
+
+ # highest priority is explicit environment variable
if os.environ.get('JUPYTER_PATH'):
paths.extend(
p.rstrip(os.sep)
for p in os.environ['JUPYTER_PATH'].split(os.pathsep)
)
- # then user dir
- paths.append(jupyter_data_dir())
- # then sys.prefix
- for p in ENV_JUPYTER_PATH:
- if p not in SYSTEM_JUPYTER_PATH:
- paths.append(p)
+
+ # Next is environment or user, depending on the JUPYTER_PREFER_ENV_PATH
flag
+ user = jupyter_data_dir()
+ 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.append(user)
+ else:
+ paths.append(user)
+ paths.extend(env)
+
# finally, system
paths.extend(SYSTEM_JUPYTER_PATH)
@@ -182,22 +195,36 @@
def jupyter_config_path():
- """Return the search path for Jupyter config files as a list."""
- paths = [jupyter_config_dir()]
+ """Return the search path for Jupyter config files as a list.
+
+ If the JUPYTER_PREFER_ENV_PATH environment variable is set, the
environment-level
+ directories will have priority over user-level directories.
+ """
if os.environ.get('JUPYTER_NO_CONFIG'):
- return paths
+ # jupyter_config_dir makes a blank config when JUPYTER_NO_CONFIG is
set.
+ return [jupyter_config_dir()]
+
+ paths = []
- # highest priority is env
+ # highest priority is explicit environment variable
if os.environ.get('JUPYTER_CONFIG_PATH'):
paths.extend(
p.rstrip(os.sep)
for p in os.environ['JUPYTER_CONFIG_PATH'].split(os.pathsep)
)
- # then sys.prefix
- for p in ENV_CONFIG_PATH:
- if p not in SYSTEM_CONFIG_PATH:
- paths.append(p)
+ # Next is environment or user, depending on the JUPYTER_PREFER_ENV_PATH
flag
+ user = jupyter_config_dir()
+ env = [p for p in ENV_CONFIG_PATH if p not in SYSTEM_CONFIG_PATH]
+
+ if envset('JUPYTER_PREFER_ENV_PATH'):
+ paths.extend(env)
+ paths.append(user)
+ else:
+ paths.append(user)
+ paths.extend(env)
+
+ # Finally, system path
paths.extend(SYSTEM_CONFIG_PATH)
return paths
@@ -226,23 +253,22 @@
abs_path : unicode
The absolute path to check.
stat_res : os.stat_result, optional
- Ignored on Windows, exists for compatibility with POSIX version of the
- function.
+ The result of calling stat() on abs_path. If not passed, this function
+ will call stat() internally.
"""
if os.path.basename(abs_path).startswith('.'):
return True
- win32_FILE_ATTRIBUTE_HIDDEN = 0x02
- import ctypes
- try:
- attrs = ctypes.windll.kernel32.GetFileAttributesW(
- py3compat.cast_unicode(abs_path)
- )
- except AttributeError:
- pass
- else:
- if attrs > 0 and attrs & win32_FILE_ATTRIBUTE_HIDDEN:
- return True
+ if stat_res is None:
+ try:
+ stat_res = os.stat(abs_path)
+ except OSError as e:
+ if e.errno == errno.ENOENT:
+ return False
+ raise
+
+ if stat_res.st_file_attributes & stat.FILE_ATTRIBUTE_HIDDEN:
+ return True
return False
@@ -370,7 +396,7 @@
dacl = win32security.ACL()
# dacl.AddAccessAllowedAce(win32security.ACL_REVISION,
con.FILE_ALL_ACCESS, everyone)
- dacl.AddAccessAllowedAce(win32security.ACL_REVISION, con.FILE_GENERIC_READ
| con.FILE_GENERIC_WRITE, user)
+ dacl.AddAccessAllowedAce(win32security.ACL_REVISION, con.FILE_GENERIC_READ
| con.FILE_GENERIC_WRITE | con.DELETE, user)
dacl.AddAccessAllowedAce(win32security.ACL_REVISION, con.FILE_ALL_ACCESS,
admins)
sd.SetSecurityDescriptorDacl(1, dacl, 0)
@@ -394,7 +420,7 @@
return stat.S_IMODE(os.stat(fname).st_mode) & 0o6677 # Use 4 octal digits
since S_IMODE does the same
-allow_insecure_writes = strtobool(os.getenv('JUPYTER_ALLOW_INSECURE_WRITES',
'false'))
+allow_insecure_writes = os.getenv('JUPYTER_ALLOW_INSECURE_WRITES',
'false').lower() in ('true', '1')
@contextmanager
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jupyter_core-4.6.3/jupyter_core/tests/mocking.py
new/jupyter_core-4.7.1/jupyter_core/tests/mocking.py
--- old/jupyter_core-4.6.3/jupyter_core/tests/mocking.py 2019-09-14
00:09:00.000000000 +0200
+++ new/jupyter_core-4.7.1/jupyter_core/tests/mocking.py 2020-10-30
15:38:29.000000000 +0100
@@ -5,11 +5,7 @@
import os
import sys
-
-try:
- from unittest.mock import patch
-except ImportError:
- from mock import patch # py2
+from unittest.mock import patch
class MultiPatch(object):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/jupyter_core-4.6.3/jupyter_core/tests/test_application.py
new/jupyter_core-4.7.1/jupyter_core/tests/test_application.py
--- old/jupyter_core-4.6.3/jupyter_core/tests/test_application.py
2019-09-14 00:09:00.000000000 +0200
+++ new/jupyter_core-4.7.1/jupyter_core/tests/test_application.py
2020-11-02 16:52:35.000000000 +0100
@@ -1,13 +1,7 @@
import os
import shutil
from tempfile import mkdtemp
-from ipython_genutils import py3compat
-
-try:
- from unittest.mock import patch
-except ImportError:
- # py2
- from mock import patch
+from unittest.mock import patch
import pytest
from traitlets import Integer
@@ -18,13 +12,13 @@
def test_basic():
- app = JupyterApp()
+ JupyterApp()
def test_default_traits():
app = JupyterApp()
for trait_name in app.traits():
- value = getattr(app, trait_name)
+ getattr(app, trait_name)
class DummyApp(JupyterApp):
name = "dummy-app"
@@ -75,7 +69,7 @@
with open(pjoin(config_dir, 'dummy_app_config.py'), 'w') as f:
f.write('c.DummyApp.m = 1\n')
f.write('c.DummyApp.n = 1')
- with patch.object(py3compat, 'getcwd', lambda : wd):
+ with patch.object(os, 'getcwd', lambda : wd):
app = DummyApp(config_dir=config_dir)
app.initialize([])
@@ -84,7 +78,7 @@
with open(pjoin(wd, 'dummy_app_config.py'), 'w') as f:
f.write('c.DummyApp.n = 2')
- with patch.object(py3compat, 'getcwd', lambda : wd):
+ with patch.object(os, 'getcwd', lambda : wd):
app = DummyApp(config_dir=config_dir)
app.initialize([])
@@ -100,7 +94,7 @@
wd = mkdtemp()
with open(pjoin(config_dir, 'dummy_app_config.py'), 'w') as f:
f.write('c.DummyApp.m = "a\n') # Syntax error
- with patch.object(py3compat, 'getcwd', lambda : wd):
+ with patch.object(os, 'getcwd', lambda : wd):
with pytest.raises(SyntaxError):
app = DummyApp(config_dir=config_dir)
app.raise_config_file_errors=True
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/jupyter_core-4.6.3/jupyter_core/tests/test_command.py
new/jupyter_core-4.7.1/jupyter_core/tests/test_command.py
--- old/jupyter_core-4.6.3/jupyter_core/tests/test_command.py 2019-10-24
06:08:45.000000000 +0200
+++ new/jupyter_core-4.7.1/jupyter_core/tests/test_command.py 2020-11-02
16:52:35.000000000 +0100
@@ -5,13 +5,9 @@
import sys
import sysconfig
from subprocess import check_output, CalledProcessError
+from unittest.mock import patch
import pytest
-try:
- from unittest.mock import patch
-except ImportError:
- # py2
- from mock import patch
from jupyter_core import __version__
from jupyter_core.command import list_subcommands
@@ -83,6 +79,24 @@
for key, path in data.items():
assert isinstance(path, list)
+def test_paths_debug():
+ vars = [
+ 'JUPYTER_PREFER_ENV_PATH',
+ 'JUPYTER_NO_CONFIG',
+ 'JUPYTER_CONFIG_PATH',
+ 'JUPYTER_CONFIG_DIR',
+ 'JUPYTER_PATH',
+ 'JUPYTER_DATA_DIR',
+ 'JUPYTER_RUNTIME_DIR'
+ ]
+ output = get_jupyter_output(['--paths', '--debug'])
+ for v in vars:
+ assert f"{v} is not set" in output
+
+ with patch.dict('os.environ', [(v, 'y') for v in vars]):
+ output = get_jupyter_output(['--paths', '--debug'])
+ for v in vars:
+ assert f"{v} is set" in output
def test_subcommand_not_given():
with pytest.raises(CalledProcessError):
@@ -91,11 +105,12 @@
def test_help():
output = get_jupyter_output('-h')
+ assert '--help' in output
def test_subcommand_not_found():
with pytest.raises(CalledProcessError):
- output = get_jupyter_output('nonexistant-subcommand')
+ get_jupyter_output('nonexistant-subcommand')
@patch.object(sys, 'argv', [__file__] + sys.argv[1:])
def test_subcommand_list(tmpdir):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/jupyter_core-4.6.3/jupyter_core/tests/test_migrate.py
new/jupyter_core-4.7.1/jupyter_core/tests/test_migrate.py
--- old/jupyter_core-4.6.3/jupyter_core/tests/test_migrate.py 2019-09-14
00:09:00.000000000 +0200
+++ new/jupyter_core-4.7.1/jupyter_core/tests/test_migrate.py 2020-11-02
16:52:35.000000000 +0100
@@ -1,4 +1,3 @@
-# coding: utf-8
# Copyright (c) Jupyter Development Team.
# Distributed under the terms of the Modified BSD License.
"""Test config file migration"""
@@ -6,18 +5,13 @@
import os
import re
import shutil
-from subprocess import check_call
from tempfile import mkdtemp
-try:
- from unittest.mock import patch
-except ImportError:
- from mock import patch
+from unittest.mock import patch
import pytest
from jupyter_core.utils import ensure_dir_exists
-from jupyter_core.paths import jupyter_data_dir
from jupyter_core.migrate import (
migrate, migrate_one, migrate_config,
migrate_dir, migrate_file, migrate_static_custom,
@@ -33,7 +27,7 @@
@pytest.fixture
def td(request):
"""Fixture for a temporary directory"""
- td = mkdtemp(u'??n??c?????e')
+ td = mkdtemp('??n??c?????e')
request.addfinalizer(lambda : shutil.rmtree(td))
return td
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jupyter_core-4.6.3/jupyter_core/tests/test_paths.py
new/jupyter_core-4.7.1/jupyter_core/tests/test_paths.py
--- old/jupyter_core-4.6.3/jupyter_core/tests/test_paths.py 2019-10-24
06:11:56.000000000 +0200
+++ new/jupyter_core-4.7.1/jupyter_core/tests/test_paths.py 2021-01-31
17:51:47.000000000 +0100
@@ -8,21 +8,17 @@
import stat
import shutil
import tempfile
-
-try:
- from unittest.mock import patch
-except ImportError:
- from mock import patch # py2
+from unittest.mock import patch
+import pytest
+import sys
from jupyter_core import paths
from jupyter_core.paths import (
jupyter_config_dir, jupyter_data_dir, jupyter_runtime_dir,
- jupyter_path, ENV_JUPYTER_PATH,
+ jupyter_path, jupyter_config_path, ENV_JUPYTER_PATH,
secure_write, is_hidden, is_file_hidden
)
-from ipython_genutils.tempdir import TemporaryDirectory
-from ipython_genutils.py3compat import cast_unicode
-from ipython_genutils.testing.decorators import skip_if_not_win32, skip_win32
+
from .mocking import darwin, windows, linux
pjoin = os.path.join
@@ -59,6 +55,16 @@
home_jupyter = realpath('~/.jupyter')
+def test_envset():
+ true_values = ['', 'True', 'on', 'yes', 'Y', '1', 'anything']
+ false_values = ['n', 'No', 'N', 'fAlSE', '0', '0.0', 'Off']
+ with patch.dict('os.environ', ((f"FOO_{v}", v) for v in true_values +
false_values)):
+ for v in true_values:
+ assert paths.envset(f"FOO_{v}")
+ for v in false_values:
+ assert not paths.envset(f"FOO_{v}")
+ assert not paths.envset("THIS_VARIABLE_SHOULD_NOT_BE_SET")
+
def test_config_dir_darwin():
with darwin, no_config_env:
config = jupyter_config_dir()
@@ -174,6 +180,11 @@
assert path[0] == jupyter_data_dir()
assert path[-2:] == system_path
+def test_jupyter_path_prefer_env():
+ with patch.dict('os.environ', {'JUPYTER_PREFER_ENV_PATH': 'true'}):
+ path = jupyter_path()
+ assert path[0] == paths.ENV_JUPYTER_PATH[0]
+ assert path[1] == jupyter_data_dir()
def test_jupyter_path_env():
path_env = os.pathsep.join([
@@ -197,9 +208,29 @@
for p in path:
assert p.endswith(pjoin('', 'sub1', 'sub2'))
+def test_jupyter_config_path():
+ path = jupyter_config_path()
+ assert path[0] == jupyter_config_dir()
+ assert path[1] == paths.ENV_CONFIG_PATH[0]
+
+def test_jupyter_config_path_prefer_env():
+ with patch.dict('os.environ', {'JUPYTER_PREFER_ENV_PATH': 'true'}):
+ path = jupyter_config_path()
+ assert path[0] == paths.ENV_CONFIG_PATH[0]
+ assert path[1] == jupyter_config_dir()
+
+def test_jupyter_config_path_env():
+ path_env = os.pathsep.join([
+ pjoin('foo', 'bar'),
+ pjoin('bar', 'baz', ''), # trailing /
+ ])
+
+ with patch.dict('os.environ', {'JUPYTER_CONFIG_PATH': path_env}):
+ path = jupyter_config_path()
+ assert path[:2] == [pjoin('foo', 'bar'), pjoin('bar', 'baz')]
def test_is_hidden():
- with TemporaryDirectory() as root:
+ with tempfile.TemporaryDirectory() as root:
subdir1 = os.path.join(root, 'subdir')
os.makedirs(subdir1)
assert not is_hidden(subdir1, root)
@@ -225,12 +256,11 @@
assert not is_file_hidden(subdir56, os.stat(subdir56))
-@skip_if_not_win32
[email protected](sys.platform != "win32", reason="only run on windows")
def test_is_hidden_win32():
import ctypes
- with TemporaryDirectory() as root:
- root = cast_unicode(root)
- subdir1 = os.path.join(root, u'subdir')
+ with tempfile.TemporaryDirectory() as root:
+ subdir1 = os.path.join(root, 'subdir')
os.makedirs(subdir1)
assert not is_hidden(subdir1, root)
r = ctypes.windll.kernel32.SetFileAttributesW(subdir1, 0x02)
@@ -239,7 +269,7 @@
assert is_file_hidden(subdir1)
-@skip_if_not_win32
[email protected](sys.platform != "win32", reason="only runs on windows")
def test_secure_write_win32():
def fetch_win32_permissions(filename):
'''Extracts file permissions on windows using icacls'''
@@ -264,7 +294,7 @@
permissions = fetch_win32_permissions(fname)
print(permissions) # for easier debugging
assert username in permissions
- assert permissions[username] == set(['r', 'w'])
+ assert permissions[username] == set(['r', 'w', 'd'])
assert 'administrators' in permissions
assert permissions['administrators'] == set(['f'])
assert 'everyone' not in permissions
@@ -282,7 +312,7 @@
shutil.rmtree(directory)
-@skip_win32
[email protected](sys.platform == "win32", reason="does not run on windows")
def test_secure_write_unix():
directory = tempfile.mkdtemp()
fname = os.path.join(directory, 'check_perms')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jupyter_core-4.6.3/jupyter_core/troubleshoot.py
new/jupyter_core-4.7.1/jupyter_core/troubleshoot.py
--- old/jupyter_core-4.6.3/jupyter_core/troubleshoot.py 2019-09-14
00:09:00.000000000 +0200
+++ new/jupyter_core-4.7.1/jupyter_core/troubleshoot.py 2020-11-02
16:52:35.000000000 +0100
@@ -1,22 +1,14 @@
#!/usr/bin/env python
"""
-display environment information that isfrequently
+display environment information that is frequently
used to troubleshoot installations of Jupyter or IPython
"""
-# import argparse
import os
import platform
import subprocess
import sys
-
-# def get_args():
-# """
-# TODO: output in JSON or xml? maybe?
-# """
-# pass
-
def subs(cmd):
"""
get data from commands that we need to run outside of python
@@ -47,6 +39,7 @@
env['where'] = None
env['pip'] = subs([sys.executable, '-m', 'pip', 'list'])
env['conda'] = subs(['conda', 'list'])
+ env['conda-env'] = subs(['conda', 'env', 'export'])
return env
@@ -99,6 +92,10 @@
for package in environment_data['conda'].split('\n'):
print('\t' + package)
+ if environment_data['conda-env']:
+ print('\n' + 'conda env:')
+ for package in environment_data['conda-env'].split('\n'):
+ print('\t' + package)
if __name__ == '__main__':
main()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jupyter_core-4.6.3/jupyter_core/utils/__init__.py
new/jupyter_core-4.7.1/jupyter_core/utils/__init__.py
--- old/jupyter_core-4.6.3/jupyter_core/utils/__init__.py 2019-09-14
00:09:00.000000000 +0200
+++ new/jupyter_core-4.7.1/jupyter_core/utils/__init__.py 2020-10-30
15:38:29.000000000 +0100
@@ -3,10 +3,8 @@
def ensure_dir_exists(path, mode=0o777):
"""ensure that a directory exists
-
If it doesn't exist, try to create it, protecting against a race condition
if another process is doing the same.
-
The default permissions are determined by the current umask.
"""
try:
@@ -15,4 +13,4 @@
if e.errno != errno.EEXIST:
raise
if not os.path.isdir(path):
- raise IOError("%r exists but is not a directory" % path)
+ raise IOError("%r exists but is not a directory" % path)
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/jupyter_core-4.6.3/jupyter_core/utils/shutil_which.py
new/jupyter_core-4.7.1/jupyter_core/utils/shutil_which.py
--- old/jupyter_core-4.6.3/jupyter_core/utils/shutil_which.py 2019-09-14
00:09:00.000000000 +0200
+++ new/jupyter_core-4.7.1/jupyter_core/utils/shutil_which.py 1970-01-01
01:00:00.000000000 +0100
@@ -1,67 +0,0 @@
-# Verbatim copy of shutil.which from Python 3.4.3
-# License: PSF
-# Only used on Python < 3
-
-import os, sys
-
-def which(cmd, mode=os.F_OK | os.X_OK, path=None):
- """Given a command, mode, and a PATH string, return the path which
- conforms to the given mode on the PATH, or None if there is no such
- file.
-
- `mode` defaults to os.F_OK | os.X_OK. `path` defaults to the result
- of os.environ.get("PATH"), or can be overridden with a custom search
- path.
-
- """
- # Check that a given file can be accessed with the correct mode.
- # Additionally check that `file` is not a directory, as on Windows
- # directories pass the os.access check.
- def _access_check(fn, mode):
- return (os.path.exists(fn) and os.access(fn, mode)
- and not os.path.isdir(fn))
-
- # If we're given a path with a directory part, look it up directly rather
- # than referring to PATH directories. This includes checking relative to
the
- # current directory, e.g. ./script
- if os.path.dirname(cmd):
- if _access_check(cmd, mode):
- return cmd
- return None
-
- if path is None:
- path = os.environ.get("PATH", os.defpath)
- if not path:
- return None
- path = path.split(os.pathsep)
-
- if sys.platform == "win32":
- # The current directory takes precedence on Windows.
- if not os.curdir in path:
- path.insert(0, os.curdir)
-
- # PATHEXT is necessary to check on Windows.
- pathext = os.environ.get("PATHEXT", "").split(os.pathsep)
- # See if the given file matches any of the expected path extensions.
- # This will allow us to short circuit when given "python.exe".
- # If it does match, only test that one, otherwise we have to try
- # others.
- if any(cmd.lower().endswith(ext.lower()) for ext in pathext):
- files = [cmd]
- else:
- files = [cmd + ext for ext in pathext]
- else:
- # On other platforms you don't have things like PATHEXT to tell you
- # what file suffixes are executable, so just pass on cmd as-is.
- files = [cmd]
-
- seen = set()
- for dir in path:
- normdir = os.path.normcase(dir)
- if not normdir in seen:
- seen.add(normdir)
- for thefile in files:
- name = os.path.join(dir, thefile)
- if _access_check(name, mode):
- return name
- return None
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jupyter_core-4.6.3/jupyter_core/version.py
new/jupyter_core-4.7.1/jupyter_core/version.py
--- old/jupyter_core-4.6.3/jupyter_core/version.py 2020-02-18
19:10:53.000000000 +0100
+++ new/jupyter_core-4.7.1/jupyter_core/version.py 2021-01-31
19:28:26.000000000 +0100
@@ -1,6 +1,25 @@
# Copyright (c) Jupyter Development Team.
# Distributed under the terms of the Modified BSD License.
-version_info = (4, 6, 3)
+from collections import namedtuple
-__version__ = '.'.join(map(str, version_info))
+VersionInfo = namedtuple('VersionInfo', [
+ 'major',
+ 'minor',
+ 'micro',
+ 'releaselevel',
+ 'serial'
+])
+
+version_info = VersionInfo(4, 7, 1, 'final', 0)
+
+_specifier_ = {'alpha': 'a', 'beta': 'b', 'candidate': 'rc', 'final': '',
'dev': 'dev'}
+
+if version_info.releaselevel == 'final':
+ _suffix_ = ''
+elif version_info.releaselevel == 'dev':
+ _suffix_ = f'.dev{version_info.serial}'
+else:
+ _suffix_ = f'{_specifier_[version_info.releaselevel]}{version_info.serial}'
+
+__version__ =
f'{version_info.major}.{version_info.minor}.{version_info.micro}{_suffix_}'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jupyter_core-4.6.3/jupyter_core.egg-info/PKG-INFO
new/jupyter_core-4.7.1/jupyter_core.egg-info/PKG-INFO
--- old/jupyter_core-4.6.3/jupyter_core.egg-info/PKG-INFO 2020-02-18
19:13:42.000000000 +0100
+++ new/jupyter_core-4.7.1/jupyter_core.egg-info/PKG-INFO 2021-01-31
19:30:07.000000000 +0100
@@ -1,6 +1,6 @@
-Metadata-Version: 1.2
+Metadata-Version: 2.1
Name: jupyter-core
-Version: 4.6.3
+Version: 4.7.1
Summary: Jupyter core package. A base package on which Jupyter projects rely.
Home-page: https://jupyter.org
Author: Jupyter Development Team
@@ -13,7 +13,6 @@
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: BSD License
Classifier: Programming Language :: Python
-Classifier: Programming Language :: Python :: 2
-Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
-Requires-Python: !=3.0,!=3.1,!=3.2,!=3.3,!=3.4,>=2.7
+Requires-Python: >=3.6
+Description-Content-Type: text/plain
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jupyter_core-4.6.3/jupyter_core.egg-info/SOURCES.txt
new/jupyter_core-4.7.1/jupyter_core.egg-info/SOURCES.txt
--- old/jupyter_core-4.6.3/jupyter_core.egg-info/SOURCES.txt 2020-02-18
19:13:42.000000000 +0100
+++ new/jupyter_core-4.7.1/jupyter_core.egg-info/SOURCES.txt 2021-01-31
19:30:07.000000000 +0100
@@ -6,6 +6,7 @@
jupyter.py
setup.cfg
setup.py
+docs/.DS_Store
docs/Makefile
docs/changelog.rst
docs/conf.py
@@ -50,5 +51,4 @@
jupyter_core/tests/dotipython_empty/profile_default/ipython_notebook_config.py
jupyter_core/tests/dotipython_empty/profile_default/static/custom/custom.css
jupyter_core/tests/dotipython_empty/profile_default/static/custom/custom.js
-jupyter_core/utils/__init__.py
-jupyter_core/utils/shutil_which.py
\ No newline at end of file
+jupyter_core/utils/__init__.py
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jupyter_core-4.6.3/setup.cfg
new/jupyter_core-4.7.1/setup.cfg
--- old/jupyter_core-4.6.3/setup.cfg 2020-02-18 19:13:42.000000000 +0100
+++ new/jupyter_core-4.7.1/setup.cfg 2021-01-31 19:30:07.000000000 +0100
@@ -3,6 +3,7 @@
version = attr: jupyter_core.version.__version__
description = Jupyter core package. A base package on which Jupyter projects
rely.
long_description = There is no reason to install this package on its own.
+long_description_content_type = text/plain
author = Jupyter Development Team
author_email = [email protected]
url = https://jupyter.org
@@ -14,15 +15,13 @@
Intended Audience :: Science/Research
License :: OSI Approved :: BSD License
Programming Language :: Python
- Programming Language :: Python :: 2
- Programming Language :: Python :: 2.7
Programming Language :: Python :: 3
[options]
py_modules = jupyter
packages = jupyter_core, jupyter_core.utils, jupyter_core.tests
include_package_data = True
-python_requires = >=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4
+python_requires = >=3.6
install_requires =
traitlets
pywin32>=1.0 ; sys_platform == 'win32'
@@ -33,9 +32,6 @@
jupyter-migrate = jupyter_core.migrate:main
jupyter-troubleshoot = jupyter_core.troubleshoot:main
-[bdist_wheel]
-universal = 1
-
[egg_info]
tag_build =
tag_date = 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/jupyter_core-4.6.3/setup.py
new/jupyter_core-4.7.1/setup.py
--- old/jupyter_core-4.6.3/setup.py 2019-10-24 06:11:56.000000000 +0200
+++ new/jupyter_core-4.7.1/setup.py 2020-10-30 15:38:29.000000000 +0100
@@ -1,5 +1,4 @@
#!/usr/bin/env python
-# coding: utf-8
# Copyright (c) Jupyter Development Team.
# Distributed under the terms of the Modified BSD License.
++++++ use_rpms_paths.patch ++++++
--- /var/tmp/diff_new_pack.Fv8ySp/_old 2021-02-04 20:24:13.290839721 +0100
+++ /var/tmp/diff_new_pack.Fv8ySp/_new 2021-02-04 20:24:13.290839721 +0100
@@ -2,7 +2,7 @@
Date: 2017-09-20
Subject: Use rpm paths
-Use single-line paths. These should be replaced with the appropriate
+Use single-line paths. These must be replaced with the appropriate
system paths in the .spec file.
---
@@ -17,7 +17,7 @@
- "/usr/local/share/jupyter",
- "/usr/share/jupyter",
- ]
-+ SYSTEM_JUPYTER_PATH = ["/usr/share/jupyter"]
++ SYSTEM_JUPYTER_PATH = ["_datadir_jupyter_"]
ENV_JUPYTER_PATH = [os.path.join(sys.prefix, 'share', 'jupyter')]
@@ -29,7 +29,7 @@
- "/usr/local/etc/jupyter",
- "/etc/jupyter",
- ]
-+ SYSTEM_CONFIG_PATH = ["/etc/jupyter"]
++ SYSTEM_CONFIG_PATH = ["_sysconfdir_jupyter_"]
ENV_CONFIG_PATH = [os.path.join(sys.prefix, 'etc', 'jupyter')]