summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTarek Ziade <tarek@ziade.org>2011-05-21 20:47:40 (GMT)
committerTarek Ziade <tarek@ziade.org>2011-05-21 20:47:40 (GMT)
commitcc243cc8085ffd7b184d52e9250b64d8ee3eb1a0 (patch)
tree70c4c24bbabc8e20ef22b86be989379faedd14f6
parent76ad4f0ec9be19ccd341bb0989d8de08671d29f5 (diff)
downloadcpython-cc243cc8085ffd7b184d52e9250b64d8ee3eb1a0.zip
cpython-cc243cc8085ffd7b184d52e9250b64d8ee3eb1a0.tar.gz
cpython-cc243cc8085ffd7b184d52e9250b64d8ee3eb1a0.tar.bz2
make sure the crawler can browse file-based indexes under win32
-rw-r--r--Lib/packaging/pypi/simple.py18
-rw-r--r--Lib/packaging/tests/test_pypi_simple.py14
2 files changed, 25 insertions, 7 deletions
diff --git a/Lib/packaging/pypi/simple.py b/Lib/packaging/pypi/simple.py
index 8585193..ee7a113 100644
--- a/Lib/packaging/pypi/simple.py
+++ b/Lib/packaging/pypi/simple.py
@@ -123,8 +123,14 @@ class Crawler(BaseClient):
self.follow_externals = follow_externals
# mirroring attributes.
- if not index_url.endswith("/"):
- index_url += "/"
+ parsed = urllib.parse.urlparse(index_url)
+ self.scheme = parsed[0]
+ if self.scheme == 'file':
+ ender = os.path.sep
+ else:
+ ender = '/'
+ if not index_url.endswith(ender):
+ index_url += ender
# if no mirrors are defined, use the method described in PEP 381.
if mirrors is None:
mirrors = get_mirrors(mirrors_url)
@@ -376,7 +382,11 @@ class Crawler(BaseClient):
:param name: the name of the project to find the page
"""
# Browse and index the content of the given PyPI page.
- url = self.index_url + name + "/"
+ if self.scheme == 'file':
+ ender = os.path.sep
+ else:
+ ender = '/'
+ url = self.index_url + name + ender
self._process_url(url, name)
@socket_timeout()
@@ -395,7 +405,7 @@ class Crawler(BaseClient):
# add index.html automatically for filesystem paths
if scheme == 'file':
- if url.endswith('/'):
+ if url.endswith(os.path.sep):
url += "index.html"
# add authorization headers if auth is provided
diff --git a/Lib/packaging/tests/test_pypi_simple.py b/Lib/packaging/tests/test_pypi_simple.py
index 6f0d8d9..d50e3f4 100644
--- a/Lib/packaging/tests/test_pypi_simple.py
+++ b/Lib/packaging/tests/test_pypi_simple.py
@@ -1,5 +1,5 @@
"""Tests for the packaging.pypi.simple module."""
-
+import re
import os
import sys
import http.client
@@ -277,8 +277,16 @@ class SimpleCrawlerTestCase(TempdirManager,
def test_browse_local_files(self):
# Test that we can browse local files"""
- index_path = os.sep.join(["file://" + PYPI_DEFAULT_STATIC_PATH,
- "test_found_links", "simple"])
+ index_url = "file://" + PYPI_DEFAULT_STATIC_PATH
+ if sys.platform == 'win32':
+ # under windows the correct syntax is:
+ # file:///C|\the\path\here
+ # instead of
+ # file://C:\the\path\here
+ fix = re.compile(r'^(file://)([A-Za-z])(:)')
+ index_url = fix.sub('\\1/\\2|', index_url)
+
+ index_path = os.sep.join([index_url, "test_found_links", "simple"])
crawler = Crawler(index_path)
dists = crawler.get_releases("foobar")
self.assertEqual(4, len(dists))