Commit 367a368e authored by Tarek Ziade's avatar Tarek Ziade

make sure the crawler can browse file-based indexes under win32

parent d92db889
...@@ -123,8 +123,14 @@ class Crawler(BaseClient): ...@@ -123,8 +123,14 @@ class Crawler(BaseClient):
self.follow_externals = follow_externals self.follow_externals = follow_externals
# mirroring attributes. # mirroring attributes.
if not index_url.endswith("/"): parsed = urllib.parse.urlparse(index_url)
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 no mirrors are defined, use the method described in PEP 381.
if mirrors is None: if mirrors is None:
mirrors = get_mirrors(mirrors_url) mirrors = get_mirrors(mirrors_url)
...@@ -376,7 +382,11 @@ class Crawler(BaseClient): ...@@ -376,7 +382,11 @@ class Crawler(BaseClient):
:param name: the name of the project to find the page :param name: the name of the project to find the page
""" """
# Browse and index the content of the given PyPI 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) self._process_url(url, name)
@socket_timeout() @socket_timeout()
...@@ -395,7 +405,7 @@ class Crawler(BaseClient): ...@@ -395,7 +405,7 @@ class Crawler(BaseClient):
# add index.html automatically for filesystem paths # add index.html automatically for filesystem paths
if scheme == 'file': if scheme == 'file':
if url.endswith('/'): if url.endswith(os.path.sep):
url += "index.html" url += "index.html"
# add authorization headers if auth is provided # add authorization headers if auth is provided
......
"""Tests for the packaging.pypi.simple module.""" """Tests for the packaging.pypi.simple module."""
import re
import os import os
import sys import sys
import http.client import http.client
...@@ -277,8 +277,16 @@ class SimpleCrawlerTestCase(TempdirManager, ...@@ -277,8 +277,16 @@ class SimpleCrawlerTestCase(TempdirManager,
def test_browse_local_files(self): def test_browse_local_files(self):
# Test that we can browse local files""" # Test that we can browse local files"""
index_path = os.sep.join(["file://" + PYPI_DEFAULT_STATIC_PATH, index_url = "file://" + PYPI_DEFAULT_STATIC_PATH
"test_found_links", "simple"]) 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) crawler = Crawler(index_path)
dists = crawler.get_releases("foobar") dists = crawler.get_releases("foobar")
self.assertEqual(4, len(dists)) self.assertEqual(4, len(dists))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment