瀏覽代碼

Clearer error messages for missing package names & versions

Closes gh-151
Thomas Kluyver 6 年之前
父節點
當前提交
cecd06687a
共有 2 個文件被更改,包括 28 次插入3 次删除
  1. 11 1
      nsist/pypi.py
  2. 17 2
      nsist/tests/test_pypi.py

+ 11 - 1
nsist/pypi.py

@@ -129,7 +129,17 @@ class WheelLocator(object):
         Downloads to the cache directory and returns the destination as a Path.
         Raises NoWheelError if no compatible wheel is found.
         """
-        release_list = yarg.get(self.name).release(self.version)
+        try:
+            pypi_pkg = yarg.get(self.name)
+        except yarg.HTTPError as e:
+            if e.status_code == 404:
+                raise NoWheelError("No package named {} found on PyPI".format(self.name))
+            raise
+
+        release_list = pypi_pkg.release(self.version)
+        if release_list is None:
+            raise NoWheelError("No release {0.version} for package {0.name}".format(self))
+
         preferred_release = self.pick_best_wheel(release_list)
         if preferred_release is None:
             raise NoWheelError('No compatible wheels found for {0.name} {0.version}'.format(self))

+ 17 - 2
nsist/tests/test_pypi.py

@@ -4,7 +4,9 @@ from pathlib import Path
 from testpath import assert_isfile, assert_isdir
 from testpath.tempdir import TemporaryDirectory
 
-from nsist.pypi import WheelLocator, extract_wheel, CachedRelease, merge_dir_to
+from nsist.pypi import (
+    WheelLocator, extract_wheel, CachedRelease, merge_dir_to, NoWheelError,
+)
 
 def test_download():
     wd = WheelLocator("astsearch==0.1.2", "3.5.1", 64)
@@ -15,8 +17,21 @@ def test_download():
         extract_wheel(wheel, target_dir=td)
         assert_isfile(pjoin(td, 'astsearch.py'))
 
-# To exclude this, run:  nosetests -a '!network'
+def test_bad_name():
+    # Packages can't be named after stdlib modules like os
+    wl = WheelLocator("os==1.0", "3.5.1", 64)
+    with assert_raises(NoWheelError):
+        wl.get_from_pypi()
+
+def test_bad_version():
+    wl = WheelLocator("pynsist==0.99.99", "3.5.1", 64)
+    with assert_raises(NoWheelError):
+        wl.get_from_pypi()
+
+# To exclude these, run:  nosetests -a '!network'
 test_download.network = 1
+test_bad_name.network = 1
+test_bad_version.network = 1
 
 def test_extra_sources():
     with TemporaryDirectory() as td: