[Python-checkins] r55711 - in sandbox/trunk/setuptools: EasyInstall.txt pkg_resources.py setuptools.txt setuptools/__init__.py setuptools/package_index.py
phillip.eby
python-checkins at python.org
Thu May 31 19:20:59 CEST 2007
Author: phillip.eby
Date: Thu May 31 19:20:56 2007
New Revision: 55711
Modified:
sandbox/trunk/setuptools/EasyInstall.txt
sandbox/trunk/setuptools/pkg_resources.py
sandbox/trunk/setuptools/setuptools.txt
sandbox/trunk/setuptools/setuptools/__init__.py
sandbox/trunk/setuptools/setuptools/package_index.py
Log:
Misc. fixes:
* Don't treat directories with a '.' in the name as packages
* Don't include ez_setup in find_packages()
* HTML-decode URLs scraped from web pages (d'oh!)
* Fix cache dir defaults on Windows when multiple env vars used
* Doc updates
Modified: sandbox/trunk/setuptools/EasyInstall.txt
==============================================================================
--- sandbox/trunk/setuptools/EasyInstall.txt (original)
+++ sandbox/trunk/setuptools/EasyInstall.txt Thu May 31 19:20:56 2007
@@ -442,6 +442,19 @@
below, and also the section on `Package Index "API"`_.
+Password-Protected Sites
+------------------------
+
+If a site you want to download from is password-protected using HTTP "Basic"
+authentication, you can specify your credentials in the URL, like so::
+
+ http://some_userid:some_password@some.example.com/some_path/
+
+You can do this with both index page URLs and direct download URLs. As long
+as any HTML pages read by easy_install use *relative* links to point to the
+downloads, the same user ID and password will be used to do the downloading.
+
+
Controlling Build Options
~~~~~~~~~~~~~~~~~~~~~~~~~
Modified: sandbox/trunk/setuptools/pkg_resources.py
==============================================================================
--- sandbox/trunk/setuptools/pkg_resources.py (original)
+++ sandbox/trunk/setuptools/pkg_resources.py Thu May 31 19:20:56 2007
@@ -1052,7 +1052,7 @@
dirname = ''
for key in keys:
if key in os.environ:
- dirname = os.path.join(os.environ[key])
+ dirname = os.path.join(dirname, os.environ[key])
else:
break
else:
Modified: sandbox/trunk/setuptools/setuptools.txt
==============================================================================
--- sandbox/trunk/setuptools/setuptools.txt (original)
+++ sandbox/trunk/setuptools/setuptools.txt Thu May 31 19:20:56 2007
@@ -1463,8 +1463,10 @@
you use any option at all.
(By the way, if you're using some other revision control system, you might
-consider submitting a patch to the ``setuptools.command.sdist`` module,
-so we can include support for your system.)
+consider creating and publishing a `revision control plugin for setuptools`_.)
+
+
+.. _revision control plugin for setuptools: `Adding Support for Other Revision Control Systems`_
Making your package available for EasyInstall
Modified: sandbox/trunk/setuptools/setuptools/__init__.py
==============================================================================
--- sandbox/trunk/setuptools/setuptools/__init__.py (original)
+++ sandbox/trunk/setuptools/setuptools/__init__.py Thu May 31 19:20:56 2007
@@ -30,11 +30,11 @@
where,prefix = stack.pop(0)
for name in os.listdir(where):
fn = os.path.join(where,name)
- if (os.path.isdir(fn) and
+ if ('.' not in name and os.path.isdir(fn) and
os.path.isfile(os.path.join(fn,'__init__.py'))
):
out.append(prefix+name); stack.append((fn,prefix+name+'.'))
- for pat in exclude:
+ for pat in list(exclude)+['ez_setup']:
from fnmatch import fnmatchcase
out = [item for item in out if not fnmatchcase(item,pat)]
return out
Modified: sandbox/trunk/setuptools/setuptools/package_index.py
==============================================================================
--- sandbox/trunk/setuptools/setuptools/package_index.py (original)
+++ sandbox/trunk/setuptools/setuptools/package_index.py Thu May 31 19:20:56 2007
@@ -132,14 +132,14 @@
rels = map(str.strip, rel.lower().split(','))
if 'homepage' in rels or 'download' in rels:
for match in HREF.finditer(tag):
- yield urlparse.urljoin(url, match.group(1))
+ yield urlparse.urljoin(url, htmldecode(match.group(1)))
for tag in ("<th>Home Page", "<th>Download URL"):
pos = page.find(tag)
if pos!=-1:
match = HREF.search(page,pos)
if match:
- yield urlparse.urljoin(url, match.group(1))
+ yield urlparse.urljoin(url, htmldecode(match.group(1)))
user_agent = "Python-urllib/%s setuptools/%s" % (
urllib2.__version__, require('setuptools')[0].version
@@ -200,7 +200,7 @@
if url.startswith(self.index_url) and getattr(f,'code',None)!=404:
page = self.process_index(url, page)
for match in HREF.finditer(page):
- link = urlparse.urljoin(base, match.group(1))
+ link = urlparse.urljoin(base, htmldecode(match.group(1)))
self.process_url(link)
def process_filename(self, fn, nested=False):
@@ -262,7 +262,7 @@
# process an index page into the package-page index
for match in HREF.finditer(page):
- scan( urlparse.urljoin(url, match.group(1)) )
+ scan( urlparse.urljoin(url, htmldecode(match.group(1))) )
pkg, ver = scan(url) # ensure this page is in the page index
if pkg:
@@ -611,6 +611,8 @@
self.url_ok(url, True) # raises error if not allowed
return self._attempt_download(url, filename)
+
+
def scan_url(self, url):
self.process_url(url, True)
@@ -652,6 +654,44 @@
def warn(self, msg, *args):
log.warn(msg, *args)
+# This pattern matches a character entity reference (a decimal numeric
+# references, a hexadecimal numeric reference, or a named reference).
+entity_sub = re.compile(r'&(#(\d+|x[\da-fA-F]+)|[\w.:-]+);?').sub
+
+def uchr(c):
+ if not isinstance(c, int):
+ return c
+ if c>255: return unichr(c)
+ return chr(c)
+
+def decode_entity(match):
+ what = match.group(1)
+ if what.startswith('#x'):
+ what = int(what[2:], 16)
+ elif what.startswith('#'):
+ what = int(what[1:])
+ else:
+ from htmlentitydefs import name2codepoint
+ what = name2codepoint.get(what, match.group(0))
+ return uchr(what)
+
+def htmldecode(text):
+ """Decode HTML entities in the given text."""
+ return entity_sub(decode_entity, text)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
More information about the Python-checkins
mailing list