[Python-checkins] r50555 - in sandbox/branches/setuptools-0.6: EasyInstall.txt setuptools/package_index.py

phillip.eby python-checkins at python.org
Tue Jul 11 01:03:21 CEST 2006


Author: phillip.eby
Date: Tue Jul 11 01:03:20 2006
New Revision: 50555

Modified:
   sandbox/branches/setuptools-0.6/EasyInstall.txt
   sandbox/branches/setuptools-0.6/setuptools/package_index.py
Log:
Allow ``file://`` URLs to be used as a package index.  URLs that refer to
directories will use an internally-generated directory listing if there is
no ``index.html`` file in the directory.
(backport from trunk)


Modified: sandbox/branches/setuptools-0.6/EasyInstall.txt
==============================================================================
--- sandbox/branches/setuptools-0.6/EasyInstall.txt	(original)
+++ sandbox/branches/setuptools-0.6/EasyInstall.txt	Tue Jul 11 01:03:20 2006
@@ -1106,6 +1106,10 @@
 
  * Fix not recognizing HTML 404 pages from package indexes.
 
+ * Allow ``file://`` URLs to be used as a package index.  URLs that refer to
+   directories will use an internally-generated directory listing if there is
+   no ``index.html`` file in the directory.
+
 0.6b3
  * Fix local ``--find-links`` eggs not being copied except with
    ``--always-copy``.

Modified: sandbox/branches/setuptools-0.6/setuptools/package_index.py
==============================================================================
--- sandbox/branches/setuptools-0.6/setuptools/package_index.py	(original)
+++ sandbox/branches/setuptools-0.6/setuptools/package_index.py	Tue Jul 11 01:03:20 2006
@@ -1,6 +1,6 @@
 """PyPI and direct package downloading"""
 
-import sys, os.path, re, urlparse, urllib2, shutil, random, socket
+import sys, os.path, re, urlparse, urllib2, shutil, random, socket, cStringIO
 from pkg_resources import *
 from distutils import log
 from distutils.errors import DistutilsError
@@ -573,6 +573,8 @@
 
 
     def open_url(self, url):
+        if url.startswith('file:'):
+            return local_open(url)
         try:
             return urllib2.urlopen(url)
         except urllib2.HTTPError, v:
@@ -610,6 +612,7 @@
             else:
                 return filename
 
+
     def scan_url(self, url):
         self.process_url(url, True)
 
@@ -643,17 +646,6 @@
     def warn(self, msg, *args):
         log.warn(msg, *args)
 
-
-
-
-
-
-
-
-
-
-
-
 def fix_sf_url(url):
     scheme, server, path, param, query, frag = urlparse.urlparse(url)
     if server!='prdownloads.sourceforge.net':
@@ -674,22 +666,30 @@
     return random.choice(_sf_mirrors)
 
 
+def local_open(url):
+    """Read a local path, with special support for directories"""
+    scheme, server, path, param, query, frag = urlparse.urlparse(url)
+    filename = urllib2.url2pathname(path)
+    if os.path.isfile(filename):
+        return urllib2.urlopen(url)
+    elif path.endswith('/') and os.path.isdir(filename):
+        files = []
+        for f in os.listdir(filename):
+            if f=='index.html':
+                body = open(os.path.join(filename,f),'rb').read()
+                break
+            elif os.path.isdir(os.path.join(filename,f)):
+                f+='/'
+            files.append("<a href=%r>%s</a>" % (f,f))
+        else:
+            body = ("<html><head><title>%s</title>" % url) + \
+                "</head><body>%s</body></html>" % '\n'.join(files)
+        status, message = 200, "OK"
+    else:
+        status, message, body = 404, "Path not found", "Not found"
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+    return urllib2.HTTPError(url, status, message,
+            {'content-type':'text/html'}, cStringIO.StringIO(body))
 
 
 


More information about the Python-checkins mailing list