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')]
  

Reply via email to