From 2f2b6a04b0a144f92a667b488564b91911298e8f Mon Sep 17 00:00:00 2001 From: Min RK Date: Mon, 14 Dec 2015 11:47:50 +0100 Subject: [PATCH 1/8] normalize version in setup.py avoids mismatch between wheel/sdist upload on PyPI due to setuptools normalization of prerelease tags. --- setup.py | 4 ++-- setupbase.py | 21 ++++++++++++++++++++- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/setup.py b/setup.py index cf3178637d..b659ffb3fd 100755 --- a/setup.py +++ b/setup.py @@ -49,7 +49,7 @@ # Our own imports from setupbase import ( - version, + pkg_version, find_packages, find_package_data, check_package_data_first, @@ -75,7 +75,7 @@ Read `the documentation `_ for more information. """, - version = version, + version = pkg_version, scripts = glob(pjoin('scripts', '*')), packages = find_packages(), package_data = find_package_data(), diff --git a/setupbase.py b/setupbase.py index 5c95ce32d4..c238c153f3 100644 --- a/setupbase.py +++ b/setupbase.py @@ -65,8 +65,27 @@ def execfile(fname, globs, locs=None): version_ns = {} execfile(pjoin(repo_root, name, '_version.py'), version_ns) -version = version_ns['__version__'] +def normalized_version(version_info): + """Normalize version string + + Avoids prerelease uploads getting different versions from sdist and bdist, + due to setuptools normalization. + """ + v = '.'.join(map(str, version_info[:3])) + if len(version_info) == 3: + return v + extra = version_info[3] + if extra.startswith(('a', 'b', 'rc')): + sep = '' + else: + sep = '.' + # pip ensures there's number on the end + if not extra[-1].isdigit(): + extra += '0' + return v + sep + extra +version = version_ns['__version__'] +pkg_version = normalized_version(version_ns['version_info']) #--------------------------------------------------------------------------- # Find packages From f873493f9f3861ccb353e3ad4bc36b0902584517 Mon Sep 17 00:00:00 2001 From: Matthias Bussonnier Date: Mon, 14 Dec 2015 08:50:16 +0100 Subject: [PATCH 2/8] Test for Pep440 non-Complaint version numbers test directly in the version number file, as the version number is likely to be committed before running tests, so we want **really quick failure**. --- notebook/_version.py | 28 +++++++++++++++++++++++++++- notebook/tests/test_notebookapp.py | 26 +++++++++++++++++++++++++- 2 files changed, 52 insertions(+), 2 deletions(-) diff --git a/notebook/_version.py b/notebook/_version.py index 5a634ac2b3..8e19908788 100644 --- a/notebook/_version.py +++ b/notebook/_version.py @@ -1,2 +1,28 @@ -version_info = (4, 1, 0, 'b1') +""" +store the current version info of the notebook. + +""" + +# Downstream maintainer, when running `python.setup.py jsversion`, +# the version string is propagated to the JavaScript files, do not forget to +# patch the JavaScript files in `.postN` release done by distributions. + +# Next beta/alpha/rc release: The version number for beta is X.Y.ZbN **without dots**. + +version_info = (4, 1, '0b1') __version__ = '.'.join(map(str, version_info)) + +import re + +pep440re = re.compile('^(\d+)\.(\d+)\.(\d+((a|b|rc)\d+)?)(\.post\d+)?(\.dev\d+)?$') + + + +def raise_on_bad_version(version): + if not pep440re.match(version): + raise ValueError("Versions String does apparently not match Pep 440 specification, " + "which might lead to sdist and wheel being seen as 2 different release. " + "E.g: do not use dots for beta/alpha/rc markers.") + + +raise_on_bad_version(__version__) diff --git a/notebook/tests/test_notebookapp.py b/notebook/tests/test_notebookapp.py index daf4c4654c..1fd461adb3 100644 --- a/notebook/tests/test_notebookapp.py +++ b/notebook/tests/test_notebookapp.py @@ -15,6 +15,8 @@ from notebook import notebookapp NotebookApp = notebookapp.NotebookApp +from notebook._version import raise_on_bad_version + def test_help_output(): """ipython notebook --help-all works""" @@ -74,4 +76,26 @@ def test_generate_config(): with nt.assert_raises(NoStart): app.start() assert os.path.exists(os.path.join(td, 'jupyter_notebook_config.py')) - + + + +def test_pep440_version(): + + for version in [ + '4.1.0.b1', + '4.1.b1', + '4.2', + 'X.y.z', + '1.2.3.dev1.post2', + ]: + def loc(): + with nt.assert_raises(ValueError): + raise_on_bad_version(version) + yield loc + + for version in [ + '4.1.1', + '4.2.1b3', + ]: + + yield (raise_on_bad_version, version) From f557c8c9b7353e07e67eddf865b961db52f0634c Mon Sep 17 00:00:00 2001 From: Pierre Gerold Date: Mon, 14 Dec 2015 15:47:22 +0100 Subject: [PATCH 3/8] Fusion between carreau & mink solution about version nb checking --- notebook/_version.py | 5 +---- notebook/tests/test_notebookapp.py | 7 +++++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/notebook/_version.py b/notebook/_version.py index 8e19908788..15824ee114 100644 --- a/notebook/_version.py +++ b/notebook/_version.py @@ -10,8 +10,7 @@ # Next beta/alpha/rc release: The version number for beta is X.Y.ZbN **without dots**. version_info = (4, 1, '0b1') -__version__ = '.'.join(map(str, version_info)) - +__version__ = '.'.join(map(str, version_info[:3])) + ''.join(version_info[3:]) import re pep440re = re.compile('^(\d+)\.(\d+)\.(\d+((a|b|rc)\d+)?)(\.post\d+)?(\.dev\d+)?$') @@ -24,5 +23,3 @@ def raise_on_bad_version(version): "which might lead to sdist and wheel being seen as 2 different release. " "E.g: do not use dots for beta/alpha/rc markers.") - -raise_on_bad_version(__version__) diff --git a/notebook/tests/test_notebookapp.py b/notebook/tests/test_notebookapp.py index 1fd461adb3..3e2554ca39 100644 --- a/notebook/tests/test_notebookapp.py +++ b/notebook/tests/test_notebookapp.py @@ -12,7 +12,7 @@ from jupyter_core.application import NoStart from ipython_genutils.tempdir import TemporaryDirectory from traitlets import TraitError -from notebook import notebookapp +from notebook import notebookapp, __version__ NotebookApp = notebookapp.NotebookApp from notebook._version import raise_on_bad_version @@ -78,7 +78,7 @@ def test_generate_config(): assert os.path.exists(os.path.join(td, 'jupyter_notebook_config.py')) - +#test if the version testin function works def test_pep440_version(): for version in [ @@ -99,3 +99,6 @@ def loc(): ]: yield (raise_on_bad_version, version) + +def test_current_version(): + raise_on_bad_verison(__version__) From bed0bd1ee21b683ca9c66cc4c102fa8483e58c73 Mon Sep 17 00:00:00 2001 From: Matthias Bussonnier Date: Mon, 14 Dec 2015 16:16:31 +0100 Subject: [PATCH 4/8] Typo: `verison` -> `version` (swap `s` and `i`) --- notebook/tests/test_notebookapp.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/notebook/tests/test_notebookapp.py b/notebook/tests/test_notebookapp.py index 3e2554ca39..86cf441882 100644 --- a/notebook/tests/test_notebookapp.py +++ b/notebook/tests/test_notebookapp.py @@ -101,4 +101,4 @@ def loc(): yield (raise_on_bad_version, version) def test_current_version(): - raise_on_bad_verison(__version__) + raise_on_bad_version(__version__) From 8c379f073d9bfbab5319aafde31e4f2af9368434 Mon Sep 17 00:00:00 2001 From: Pierre Gerold Date: Mon, 14 Dec 2015 16:49:33 +0100 Subject: [PATCH 5/8] minrk comments --- setupbase.py | 1 + 1 file changed, 1 insertion(+) diff --git a/setupbase.py b/setupbase.py index c238c153f3..59d042d284 100644 --- a/setupbase.py +++ b/setupbase.py @@ -65,6 +65,7 @@ def execfile(fname, globs, locs=None): version_ns = {} execfile(pjoin(repo_root, name, '_version.py'), version_ns) +-version = version_ns['__version__'] def normalized_version(version_info): """Normalize version string From 0b44f64e9d1e7428754c38711ab1b7d96919a7bc Mon Sep 17 00:00:00 2001 From: Pierre Gerold Date: Mon, 14 Dec 2015 16:41:06 +0100 Subject: [PATCH 6/8] Move test function to test file --- notebook/_version.py | 5 ++--- notebook/tests/test_notebookapp.py | 14 ++++++++++++-- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/notebook/_version.py b/notebook/_version.py index 15824ee114..c573fccf42 100644 --- a/notebook/_version.py +++ b/notebook/_version.py @@ -9,14 +9,13 @@ # Next beta/alpha/rc release: The version number for beta is X.Y.ZbN **without dots**. -version_info = (4, 1, '0b1') +version_info = (4, 1, 0, 'b1') __version__ = '.'.join(map(str, version_info[:3])) + ''.join(version_info[3:]) + import re pep440re = re.compile('^(\d+)\.(\d+)\.(\d+((a|b|rc)\d+)?)(\.post\d+)?(\.dev\d+)?$') - - def raise_on_bad_version(version): if not pep440re.match(version): raise ValueError("Versions String does apparently not match Pep 440 specification, " diff --git a/notebook/tests/test_notebookapp.py b/notebook/tests/test_notebookapp.py index 86cf441882..d74857d046 100644 --- a/notebook/tests/test_notebookapp.py +++ b/notebook/tests/test_notebookapp.py @@ -3,6 +3,7 @@ import logging import os +import re from tempfile import NamedTemporaryFile import nose.tools as nt @@ -15,8 +16,6 @@ from notebook import notebookapp, __version__ NotebookApp = notebookapp.NotebookApp -from notebook._version import raise_on_bad_version - def test_help_output(): """ipython notebook --help-all works""" @@ -100,5 +99,16 @@ def loc(): yield (raise_on_bad_version, version) + + +pep440re = re.compile('^(\d+)\.(\d+)\.(\d+((a|b|rc)\d+)?)(\.post\d+)?(\.dev\d+)?$') + +def raise_on_bad_version(version): + if not pep440re.match(version): + raise ValueError("Versions String does apparently not match Pep 440 specification, " + "which might lead to sdist and wheel being seen as 2 different release. " + "E.g: do not use dots for beta/alpha/rc markers.") + + def test_current_version(): raise_on_bad_version(__version__) From e2d3406fe1e90bf0fe7a3c4bf2aff384326e70b0 Mon Sep 17 00:00:00 2001 From: Matthias Bussonnier Date: Mon, 14 Dec 2015 16:57:43 +0100 Subject: [PATCH 7/8] Assume versions are normalised in setup.py --- setup.py | 4 ++-- setupbase.py | 22 +--------------------- 2 files changed, 3 insertions(+), 23 deletions(-) diff --git a/setup.py b/setup.py index b659ffb3fd..cf3178637d 100755 --- a/setup.py +++ b/setup.py @@ -49,7 +49,7 @@ # Our own imports from setupbase import ( - pkg_version, + version, find_packages, find_package_data, check_package_data_first, @@ -75,7 +75,7 @@ Read `the documentation `_ for more information. """, - version = pkg_version, + version = version, scripts = glob(pjoin('scripts', '*')), packages = find_packages(), package_data = find_package_data(), diff --git a/setupbase.py b/setupbase.py index 59d042d284..5c95ce32d4 100644 --- a/setupbase.py +++ b/setupbase.py @@ -65,28 +65,8 @@ def execfile(fname, globs, locs=None): version_ns = {} execfile(pjoin(repo_root, name, '_version.py'), version_ns) --version = version_ns['__version__'] -def normalized_version(version_info): - """Normalize version string - - Avoids prerelease uploads getting different versions from sdist and bdist, - due to setuptools normalization. - """ - v = '.'.join(map(str, version_info[:3])) - if len(version_info) == 3: - return v - extra = version_info[3] - if extra.startswith(('a', 'b', 'rc')): - sep = '' - else: - sep = '.' - # pip ensures there's number on the end - if not extra[-1].isdigit(): - extra += '0' - return v + sep + extra - version = version_ns['__version__'] -pkg_version = normalized_version(version_ns['version_info']) + #--------------------------------------------------------------------------- # Find packages From 51576872feaf4d9357acb48d57d5b76dff312ce5 Mon Sep 17 00:00:00 2001 From: Matthias Bussonnier Date: Tue, 15 Dec 2015 13:51:08 +0100 Subject: [PATCH 8/8] Remove dead code forgotten in previous commit. --- notebook/_version.py | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/notebook/_version.py b/notebook/_version.py index c573fccf42..d1022c0f75 100644 --- a/notebook/_version.py +++ b/notebook/_version.py @@ -11,14 +11,3 @@ version_info = (4, 1, 0, 'b1') __version__ = '.'.join(map(str, version_info[:3])) + ''.join(version_info[3:]) - -import re - -pep440re = re.compile('^(\d+)\.(\d+)\.(\d+((a|b|rc)\d+)?)(\.post\d+)?(\.dev\d+)?$') - -def raise_on_bad_version(version): - if not pep440re.match(version): - raise ValueError("Versions String does apparently not match Pep 440 specification, " - "which might lead to sdist and wheel being seen as 2 different release. " - "E.g: do not use dots for beta/alpha/rc markers.") -