aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.hgtags2
-rw-r--r--CHANGES.txt9
-rwxr-xr-xREADME.txt10
-rw-r--r--docs/conf.py4
-rw-r--r--ez_setup.py2
-rw-r--r--pkg_resources.py2
-rw-r--r--release.py31
-rwxr-xr-xsetup.py4
-rw-r--r--setuptools.egg-info/requires.txt3
-rw-r--r--setuptools/__init__.py2
-rwxr-xr-xsetuptools/command/alias.py4
-rw-r--r--setuptools/command/bdist_egg.py2
-rwxr-xr-xsetuptools/command/easy_install.py18
-rwxr-xr-xsetuptools/command/egg_info.py5
-rwxr-xr-xsetuptools/command/install_scripts.py2
-rwxr-xr-xsetuptools/command/saveopts.py3
-rw-r--r--setuptools/command/upload_docs.py4
-rw-r--r--setuptools/compat.py11
-rw-r--r--setuptools/depends.py2
-rwxr-xr-xsetuptools/package_index.py21
-rwxr-xr-xsetuptools/sandbox.py2
-rw-r--r--setuptools/ssl_support.py1
-rw-r--r--setuptools/tests/__init__.py1
-rw-r--r--setuptools/tests/server.py14
-rw-r--r--setuptools/tests/test_develop.py13
-rw-r--r--setuptools/tests/test_dist_info.py43
-rw-r--r--setuptools/tests/test_easy_install.py2
-rw-r--r--setuptools/tests/test_packageindex.py3
-rw-r--r--setuptools/tests/test_sdist.py6
-rw-r--r--setuptools/tests/test_test.py12
-rw-r--r--setuptools/tests/win_script_wrapper.txt66
-rw-r--r--tests/test_ez_setup.py9
32 files changed, 161 insertions, 152 deletions
diff --git a/.hgtags b/.hgtags
index e08a06c2..6e35338e 100644
--- a/.hgtags
+++ b/.hgtags
@@ -62,3 +62,5 @@ ddca71ae5ceb9b14512dc60ea83802c10e224cf0 0.6.45
7f2c08e9ca22023d1499c512fccc1513813b7dc4 0.7
024dd30ed702135f5328975042566e48cc479d7d 0.7.1
d04c05f035e3a5636006fc34f4be7e6c77035d17 0.7.2
+d212e48e0cef689acba57ed017289c027660b23c 0.7.3
+74c6c12268059986f9cc0b535399594f1d131201 0.8b1
diff --git a/CHANGES.txt b/CHANGES.txt
index 59e37ad6..00bef01b 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -2,12 +2,17 @@
CHANGES
=======
+---
+0.8
+---
+
+* Code base now runs on Python 2.4 - Python 3.3 without Python 2to3
+ conversion.
+
-----
0.7.3
-----
-* Rename DISTRIBUTE_DISABLE_VERSIONED_EASY_INSTALL_SCRIPT environment
- variable to SETUPTOOLS_DISABLE_VERSIONED_EASY_INSTALL_SCRIPT.
* Issue #1: Disable installation of Windows-specific files on non-Windows systems.
* Use new sysconfig module with Python 2.7 or >=3.2.
diff --git a/README.txt b/README.txt
index 23627e66..7fe2d64a 100755
--- a/README.txt
+++ b/README.txt
@@ -12,7 +12,7 @@ Installation Instructions
Upgrading from Distribute
=========================
-Currently, Distribute disallows installing Setuptools 0.7.3 over Distribute.
+Currently, Distribute disallows installing Setuptools 0.7+ over Distribute.
You must first uninstall any active version of Distribute first (see
`Uninstalling`_).
@@ -29,7 +29,7 @@ The recommended way to install setuptools on Windows is to download
`ez_setup.py`_ and run it. The script will download the appropriate .egg
file and install it for you.
-.. _ez_setup.py: https://bitbucket.org/pypa/setuptools/raw/0.7.3/ez_setup.py
+.. _ez_setup.py: https://bitbucket.org/pypa/setuptools/raw/0.8/ez_setup.py
For best results, uninstall previous versions FIRST (see `Uninstalling`_).
@@ -45,7 +45,7 @@ Unix-based Systems including Mac OS X
Download `ez_setup.py`_ and run it using the target Python version. The script
will download the appropriate version and install it for you::
- > wget https://bitbucket.org/pypa/setuptools/raw/0.7.3/ez_setup.py -O - | python
+ > wget https://bitbucket.org/pypa/setuptools/raw/0.8/ez_setup.py -O - | python
Note that you will may need to invoke the command with superuser privileges to
install to the system Python.
@@ -53,7 +53,7 @@ install to the system Python.
Alternatively, on Python 2.6 and later, Setuptools may be installed to a
user-local path::
- > wget https://bitbucket.org/pypa/setuptools/raw/0.7.3/ez_setup.py
+ > wget https://bitbucket.org/pypa/setuptools/raw/0.8/ez_setup.py
> python ez_setup.py --user
@@ -66,7 +66,7 @@ tarball from `Setuptools on PyPI <https://pypi.python.org/pypi/setuptools>`_
and run setup.py with any supported distutils and Setuptools options.
For example::
- setuptools-0.7.3$ python setup.py --prefix=/opt/setuptools
+ setuptools-0.8$ python setup.py --prefix=/opt/setuptools
Use ``--help`` to get a full options list, but we recommend consulting
the `EasyInstall manual`_ for detailed instructions, especially `the section
diff --git a/docs/conf.py b/docs/conf.py
index 44d8378a..3fccd87f 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -48,9 +48,9 @@ copyright = '2009-2013, The fellowship of the packaging'
# built documents.
#
# The short X.Y version.
-version = '0.7.3'
+version = '0.8'
# The full version, including alpha/beta/rc tags.
-release = '0.7.3'
+release = '0.8'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
diff --git a/ez_setup.py b/ez_setup.py
index ba0d781e..c225c6ae 100644
--- a/ez_setup.py
+++ b/ez_setup.py
@@ -28,7 +28,7 @@ try:
except ImportError:
USER_SITE = None
-DEFAULT_VERSION = "0.7.3"
+DEFAULT_VERSION = "0.8"
DEFAULT_URL = "https://pypi.python.org/packages/source/s/setuptools/"
def _python_cmd(*args):
diff --git a/pkg_resources.py b/pkg_resources.py
index 521a7e00..e03667e0 100644
--- a/pkg_resources.py
+++ b/pkg_resources.py
@@ -13,7 +13,7 @@ The package resource API is designed to work with normal filesystem packages,
method.
"""
-import sys, os, zipfile, zipimport, time, re, imp, types
+import sys, os, time, re, imp, types, zipfile, zipimport
try:
from urlparse import urlparse, urlunparse
except ImportError:
diff --git a/release.py b/release.py
index 2e35feb1..937fadfc 100644
--- a/release.py
+++ b/release.py
@@ -11,32 +11,32 @@ import subprocess
import shutil
import os
import sys
-import urllib2
import getpass
import collections
import itertools
import re
try:
- from urllib2 import urlopen, Request, HTTPError
- from itertools import izip_longest
+ import urllib.request as urllib_request
except ImportError:
- from urllib.request import urlopen, Request
- from urllib.error import HTTPError
- raw_input = input
- from itertools import zip_longest as izip_longest
+ import urllib2 as urllib_request
+
+try:
+ input = raw_input
+except NameError:
+ pass
try:
import keyring
except Exception:
pass
-VERSION = '0.7.3'
+VERSION = '0.8'
PACKAGE_INDEX = 'https://pypi.python.org/pypi'
def set_versions():
global VERSION
- version = raw_input("Release as version [%s]> " % VERSION) or VERSION
+ version = input("Release as version [%s]> " % VERSION) or VERSION
if version != VERSION:
VERSION = bump_versions(version)
@@ -108,11 +108,11 @@ def add_milestone_and_version(version):
for type in 'milestones', 'versions':
url = (base + '/1.0/repositories/{repo}/issues/{type}'
.format(repo = get_repo_name(), type=type))
- req = Request(url = url, headers = headers,
+ req = urllib_request.Request(url = url, headers = headers,
data='name='+version)
try:
- urlopen(req)
- except HTTPError as e:
+ urllib_request.urlopen(req)
+ except urllib_request.HTTPError as e:
print(e.fp.read())
def bump_versions(target_ver):
@@ -125,7 +125,10 @@ def bump_versions(target_ver):
def bump_version(filename, target_ver):
with open(filename, 'rb') as f:
- lines = [line.replace(VERSION, target_ver) for line in f]
+ lines = [
+ line.replace(VERSION.encode('ascii'), target_ver.encode('ascii'))
+ for line in f
+ ]
with open(filename, 'wb') as f:
f.writelines(lines)
@@ -234,7 +237,7 @@ def _linkified_text(rst_content):
anchors = []
linkified_parts = [_linkified_part(part, anchors)
for part in plain_text_parts]
- pairs = izip_longest(
+ pairs = itertools.izip_longest(
linkified_parts,
HREF_pattern.findall(rst_content),
fillvalue='',
diff --git a/setup.py b/setup.py
index 7ed396d0..8afdf235 100755
--- a/setup.py
+++ b/setup.py
@@ -47,7 +47,7 @@ exec(init_file.read(), d)
init_file.close()
SETUP_COMMANDS = d['__all__']
-VERSION = "0.7.3"
+VERSION = "0.8"
from setuptools import setup, find_packages
from setuptools.command.build_py import build_py as _build_py
@@ -56,7 +56,7 @@ from setuptools.command.test import test as _test
scripts = []
console_scripts = ["easy_install = setuptools.command.easy_install:main"]
-if os.environ.get("SETUPTOOLS_DISABLE_VERSIONED_EASY_INSTALL_SCRIPT") is None:
+if os.environ.get("DISTRIBUTE_DISABLE_VERSIONED_EASY_INSTALL_SCRIPT") is None:
console_scripts.append("easy_install-%s = setuptools.command.easy_install:main" % sys.version[:3])
# specific command that is used to generate windows .exe files
diff --git a/setuptools.egg-info/requires.txt b/setuptools.egg-info/requires.txt
index 5ff415da..77cddef2 100644
--- a/setuptools.egg-info/requires.txt
+++ b/setuptools.egg-info/requires.txt
@@ -1,5 +1,8 @@
+[ssl:sys_platform=='win32' and python_version=='2.4']
+ctypes==1.0.2
+
[ssl:sys_platform=='win32']
wincertstore==0.1
diff --git a/setuptools/__init__.py b/setuptools/__init__.py
index 0f29f575..a8e7617a 100644
--- a/setuptools/__init__.py
+++ b/setuptools/__init__.py
@@ -8,7 +8,7 @@ from distutils.util import convert_path
import os
import sys
-__version__ = '0.7.3'
+__version__ = '0.8'
__all__ = [
'setup', 'Distribution', 'Feature', 'Command', 'Extension', 'Require',
'find_packages'
diff --git a/setuptools/command/alias.py b/setuptools/command/alias.py
index 4c08c48d..52384e1a 100755
--- a/setuptools/command/alias.py
+++ b/setuptools/command/alias.py
@@ -9,7 +9,7 @@ def shquote(arg):
"""Quote an argument for later parsing by shlex.split()"""
for c in '"', "'", "\\", "#":
if c in arg: return repr(arg)
- if arg.split()!=[arg]:
+ if arg.split() != [arg]:
return repr(arg)
return arg
@@ -33,7 +33,7 @@ class alias(option_base):
def finalize_options(self):
option_base.finalize_options(self)
- if self.remove and len(self.args)!=1:
+ if self.remove and len(self.args) != 1:
raise DistutilsOptionError(
"Must specify exactly one argument (the alias name) when "
"using --remove"
diff --git a/setuptools/command/bdist_egg.py b/setuptools/command/bdist_egg.py
index de72ea04..c5776158 100644
--- a/setuptools/command/bdist_egg.py
+++ b/setuptools/command/bdist_egg.py
@@ -412,7 +412,7 @@ def write_safety_flag(egg_dir, safe):
for flag,fn in safety_flags.items():
fn = os.path.join(egg_dir, fn)
if os.path.exists(fn):
- if safe is None or bool(safe)!=flag:
+ if safe is None or bool(safe) != flag:
os.unlink(fn)
elif safe is not None and bool(safe)==flag:
f=open(fn,'wt'); f.write('\n'); f.close()
diff --git a/setuptools/command/easy_install.py b/setuptools/command/easy_install.py
index c53ca9f2..000fefa0 100755
--- a/setuptools/command/easy_install.py
+++ b/setuptools/command/easy_install.py
@@ -447,7 +447,7 @@ class easy_install(Command):
self.pth_file = None
PYTHONPATH = os.environ.get('PYTHONPATH','').split(os.pathsep)
- if instdir not in map(normalize_path, filter(None,PYTHONPATH)):
+ if instdir not in map(normalize_path, [_f for _f in PYTHONPATH if _f]):
# only PYTHONPATH dirs need a site.py, so pretend it's there
self.sitepy_installed = True
elif self.multi_version and not os.path.exists(pth_file):
@@ -802,7 +802,7 @@ Please make the appropriate changes for your system and try again.
f = open(target,"w"+mode)
f.write(contents)
f.close()
- chmod(target,0x1FF - mask) # 0777
+ chmod(target, 0x1FF-mask) # 0777
@@ -916,7 +916,7 @@ Please make the appropriate changes for your system and try again.
f = open(pkg_inf,'w')
f.write('Metadata-Version: 1.0\n')
for k,v in cfg.items('metadata'):
- if k!='target_version':
+ if k != 'target_version':
f.write('%s: %s\n' % (k.replace('_','-').title(), v))
f.close()
script_dir = os.path.join(egg_info,'scripts')
@@ -1156,7 +1156,7 @@ See the setuptools documentation for the "develop" command for more info.
'site_dirs', 'allow_hosts',
)
fetch_options = {}
- for key, val in iteritems(ei_opts):
+ for key, val in ei_opts.items():
if key not in fetch_directives: continue
fetch_options[key.replace('_', '-')] = val[1]
# create a settings dictionary suitable for `edit_config`
@@ -1390,7 +1390,8 @@ Please make the appropriate changes for your system and try again.""" % (
def get_site_dirs():
# return a list of 'site' dirs
- sitedirs = list(filter(None,os.environ.get('PYTHONPATH','').split(os.pathsep)))
+ sitedirs = [_f for _f in os.environ.get('PYTHONPATH',
+ '').split(os.pathsep) if _f]
prefixes = [sys.prefix]
if sys.exec_prefix != sys.prefix:
prefixes.append(sys.exec_prefix)
@@ -1509,7 +1510,7 @@ def extract_wininst_cfg(dist_filename):
# unicode for the RawConfigParser, so decode it. Is this the
# right encoding?
config = config.decode('ascii')
- cfg.readfp(StringIO.StringIO(config))
+ cfg.readfp(StringIO(config))
except ConfigParser.Error:
return None
if not cfg.has_section('metadata') or not cfg.has_section('Setup'):
@@ -1544,7 +1545,7 @@ def get_exe_prefixes(exe_filename):
if parts[1].endswith('.egg-info'):
prefixes.insert(0,('/'.join(parts[:2]), 'EGG-INFO/'))
break
- if len(parts)!=2 or not name.endswith('.pth'):
+ if len(parts) != 2 or not name.endswith('.pth'):
continue
if name.endswith('-nspkg.pth'):
continue
@@ -1577,7 +1578,8 @@ class PthDistributions(Environment):
dirty = False
def __init__(self, filename, sitedirs=()):
- self.filename = filename; self.sitedirs = list(map(normalize_path, sitedirs))
+ self.filename = filename
+ self.sitedirs = list(map(normalize_path, sitedirs))
self.basedir = normalize_path(os.path.dirname(self.filename))
self._load(); Environment.__init__(self, [], None, None)
for path in yield_lines(self.paths):
diff --git a/setuptools/command/egg_info.py b/setuptools/command/egg_info.py
index 1a61dfcb..6b0d2426 100755
--- a/setuptools/command/egg_info.py
+++ b/setuptools/command/egg_info.py
@@ -8,7 +8,7 @@ from setuptools import Command
from distutils.errors import *
from distutils import log
from setuptools.command.sdist import sdist
-from setuptools.compat import basestring, PY3
+from setuptools.compat import basestring
from distutils.util import convert_path
from distutils.filelist import FileList as _FileList
from pkg_resources import parse_requirements, safe_name, parse_version, \
@@ -416,7 +416,8 @@ def write_pkg_info(cmd, basename, filename):
metadata.name, metadata.version = oldname, oldver
safe = getattr(cmd.distribution,'zip_safe',None)
- from setuptools.command import bdist_egg; bdist_egg.write_safety_flag(cmd.egg_info, safe)
+ from setuptools.command import bdist_egg
+ bdist_egg.write_safety_flag(cmd.egg_info, safe)
def warn_depends_obsolete(cmd, basename, filename):
if os.path.exists(filename):
diff --git a/setuptools/command/install_scripts.py b/setuptools/command/install_scripts.py
index ad522f6c..105dabca 100755
--- a/setuptools/command/install_scripts.py
+++ b/setuptools/command/install_scripts.py
@@ -50,5 +50,5 @@ class install_scripts(_install_scripts):
f = open(target,"w"+mode)
f.write(contents)
f.close()
- chmod(target,0x1FF - mask) # 0777
+ chmod(target, 0x1FF-mask) # 0777
diff --git a/setuptools/command/saveopts.py b/setuptools/command/saveopts.py
index 1180a440..7209be4c 100755
--- a/setuptools/command/saveopts.py
+++ b/setuptools/command/saveopts.py
@@ -9,10 +9,9 @@ class saveopts(option_base):
def run(self):
dist = self.distribution
- commands = dist.command_options.keys()
settings = {}
- for cmd in commands:
+ for cmd in dist.command_options:
if cmd=='saveopts':
continue # don't save our own options!
diff --git a/setuptools/command/upload_docs.py b/setuptools/command/upload_docs.py
index e07b885d..12bc916b 100644
--- a/setuptools/command/upload_docs.py
+++ b/setuptools/command/upload_docs.py
@@ -25,7 +25,9 @@ except ImportError:
from setuptools.compat import httplib, urlparse, unicode, iteritems
-if sys.version_info >= (3,):
+_IS_PYTHON3 = sys.version > '3'
+
+if _IS_PYTHON3:
errors = 'surrogateescape'
else:
errors = 'strict'
diff --git a/setuptools/compat.py b/setuptools/compat.py
index 49438502..437fb710 100644
--- a/setuptools/compat.py
+++ b/setuptools/compat.py
@@ -1,4 +1,5 @@
import sys
+import itertools
if sys.version_info[0] < 3:
PY3 = False
@@ -14,8 +15,9 @@ if sys.version_info[0] < 3:
im_func = lambda o: o.im_func
from htmlentitydefs import name2codepoint
import httplib
- from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler
+ from BaseHTTPServer import HTTPServer
from SimpleHTTPServer import SimpleHTTPRequestHandler
+ from BaseHTTPServer import BaseHTTPRequestHandler
iteritems = lambda o: o.iteritems()
long_type = long
maxsize = sys.maxint
@@ -29,7 +31,7 @@ if sys.version_info[0] < 3:
from urllib2 import urlopen, HTTPError, URLError, unquote, splituser
from urlparse import urlparse, urlunparse, urljoin
xrange = xrange
- from itertools import ifilterfalse
+ filterfalse = itertools.ifilterfalse
def exec_(code, globs=None, locs=None):
if globs is None:
@@ -57,7 +59,8 @@ else:
im_func = lambda o: o.__func__
from html.entities import name2codepoint
import http.client as httplib
- from http.server import HTTPServer, SimpleHTTPRequestHandler, BaseHTTPRequestHandler
+ from http.server import HTTPServer, SimpleHTTPRequestHandler
+ from http.server import BaseHTTPRequestHandler
iteritems = lambda o: o.items()
long_type = int
maxsize = sys.maxsize
@@ -71,7 +74,7 @@ else:
from urllib.request import urlopen, url2pathname
from urllib.parse import urlparse, urlunparse, quote, unquote, splituser, urljoin
xrange = range
- from itertools import filterfalse as ifilterfalse
+ filterfalse = itertools.filterfalse
def execfile(fn, globs=None, locs=None):
if globs is None:
diff --git a/setuptools/depends.py b/setuptools/depends.py
index f1ef2736..8b9d1217 100644
--- a/setuptools/depends.py
+++ b/setuptools/depends.py
@@ -36,7 +36,7 @@ class Require:
def version_ok(self,version):
"""Is 'version' sufficiently up-to-date?"""
return self.attribute is None or self.format is None or \
- str(version)!="unknown" and version >= self.requested_version
+ str(version) != "unknown" and version >= self.requested_version
def get_version(self, paths=None, default="unknown"):
diff --git a/setuptools/package_index.py b/setuptools/package_index.py
index 25936b91..61a66c6d 100755
--- a/setuptools/package_index.py
+++ b/setuptools/package_index.py
@@ -1,14 +1,16 @@
"""PyPI and direct package downloading"""
import sys, os.path, re, shutil, random, socket
+import itertools
+import base64
+from setuptools import ssl_support
from pkg_resources import *
from distutils import log
from distutils.errors import DistutilsError
-
-from setuptools import ssl_support
from setuptools.compat import (urllib2, httplib, StringIO, HTTPError,
urlparse, urlunparse, unquote, splituser,
- url2pathname, name2codepoint, ifilterfalse,
+ url2pathname, name2codepoint,
unichr, urljoin)
+from setuptools.compat import filterfalse
try:
from hashlib import md5
except ImportError:
@@ -60,9 +62,9 @@ def parse_bdist_wininst(name):
def egg_info_for_url(url):
scheme, server, path, parameters, query, fragment = urlparse(url)
- base = urllib2.unquote(path.split('/')[-1])
+ base = unquote(path.split('/')[-1])
if server=='sourceforge.net' and base=='download': # XXX Yuck
- base = urllib2.unquote(path.split('/')[-2])
+ base = unquote(path.split('/')[-2])
if '#' in base: base, fragment = base.split('#',1)
return base,fragment
@@ -148,7 +150,7 @@ def unique_everseen(iterable, key=None):
seen = set()
seen_add = seen.add
if key is None:
- for element in ifilterfalse(seen.__contains__, iterable):
+ for element in filterfalse(seen.__contains__, iterable):
seen_add(element)
yield element
else:
@@ -292,7 +294,8 @@ class PackageIndex(Environment):
self.scan_egg_link(item, entry)
def scan_egg_link(self, path, entry):
- lines = list(filter(None, map(str.strip, open(os.path.join(path, entry)))))
+ lines = [_f for _f in map(str.strip,
+ open(os.path.join(path, entry))) if _f]
if len(lines)==2:
for dist in find_distributions(os.path.join(path, lines[0])):
dist.location = os.path.join(path, *lines)
@@ -387,7 +390,7 @@ class PackageIndex(Environment):
def check_md5(self, cs, info, filename, tfp):
if re.match('md5=[0-9a-f]{32}$', info):
self.debug("Validating md5 checksum for %s", filename)
- if cs.hexdigest()!=info[4:]:
+ if cs.hexdigest() != info[4:]:
tfp.close()
os.unlink(filename)
raise DistutilsError(
@@ -889,7 +892,7 @@ def _encode_auth(auth):
>>> _encode_auth('username%3Apassword')
u'dXNlcm5hbWU6cGFzc3dvcmQ='
"""
- auth_s = urllib2.unquote(auth)
+ auth_s = unquote(auth)
# convert to bytes
auth_bytes = auth_s.encode()
# use the legacy interface for Python 2.3 support
diff --git a/setuptools/sandbox.py b/setuptools/sandbox.py
index a5a01a46..91dfc519 100755
--- a/setuptools/sandbox.py
+++ b/setuptools/sandbox.py
@@ -12,6 +12,8 @@ from distutils.errors import DistutilsError
from setuptools.compat import builtins, execfile, reduce
from pkg_resources import working_set
+from setuptools.compat import builtins, execfile, reduce
+
__all__ = [
"AbstractSandbox", "DirectorySandbox", "SandboxViolation", "run_setup",
]
diff --git a/setuptools/ssl_support.py b/setuptools/ssl_support.py
index af718a4b..e749b312 100644
--- a/setuptools/ssl_support.py
+++ b/setuptools/ssl_support.py
@@ -1,6 +1,7 @@
import sys, os, socket, atexit, re
import pkg_resources
from pkg_resources import ResolutionError, ExtractionError
+from setuptools.compat import urllib2
try:
import urllib2
diff --git a/setuptools/tests/__init__.py b/setuptools/tests/__init__.py
index 1cd5df2b..b5328ce6 100644
--- a/setuptools/tests/__init__.py
+++ b/setuptools/tests/__init__.py
@@ -9,6 +9,7 @@ from distutils.errors import DistutilsOptionError, DistutilsPlatformError
from distutils.errors import DistutilsSetupError
from distutils.core import Extension
from distutils.version import LooseVersion
+from setuptools.compat import func_code
from setuptools.compat import func_code
import setuptools.dist
diff --git a/setuptools/tests/server.py b/setuptools/tests/server.py
index 5f5ed6bb..ae2381e3 100644
--- a/setuptools/tests/server.py
+++ b/setuptools/tests/server.py
@@ -2,10 +2,10 @@
"""
import sys
import time
-from threading import Thread
+import threading
+from setuptools.compat import BaseHTTPRequestHandler
from setuptools.compat import (urllib2, URLError, HTTPServer,
- SimpleHTTPRequestHandler,
- BaseHTTPRequestHandler)
+ SimpleHTTPRequestHandler)
class IndexServer(HTTPServer):
"""Basic single-threaded http server simulating a package index
@@ -28,7 +28,7 @@ class IndexServer(HTTPServer):
self.handle_request()
def start(self):
- self.thread = Thread(target=self.serve)
+ self.thread = threading.Thread(target=self.serve)
self.thread.start()
def stop(self):
@@ -47,7 +47,7 @@ class IndexServer(HTTPServer):
urllib2.urlopen(url, timeout=5)
else:
urllib2.urlopen(url)
- except urllib2.URLError:
+ except URLError:
# ignore any errors; all that's important is the request
pass
self.thread.join()
@@ -63,14 +63,14 @@ class RequestRecorder(BaseHTTPRequestHandler):
requests.append(self)
self.send_response(200, 'OK')
-class MockServer(HTTPServer, Thread):
+class MockServer(HTTPServer, threading.Thread):
"""
A simple HTTP Server that records the requests made to it.
"""
def __init__(self, server_address=('', 0),
RequestHandlerClass=RequestRecorder):
HTTPServer.__init__(self, server_address, RequestHandlerClass)
- Thread.__init__(self)
+ threading.Thread.__init__(self)
self.setDaemon(True)
self.requests = []
diff --git a/setuptools/tests/test_develop.py b/setuptools/tests/test_develop.py
index e2939fea..7b90161a 100644
--- a/setuptools/tests/test_develop.py
+++ b/setuptools/tests/test_develop.py
@@ -90,11 +90,15 @@ class TestDevelopTest(unittest.TestCase):
# Check that we are using the right code.
egg_link_file = open(os.path.join(site.USER_SITE, 'foo.egg-link'), 'rt')
- path = egg_link_file.read().split()[0].strip()
- egg_link_file.close()
+ try:
+ path = egg_link_file.read().split()[0].strip()
+ finally:
+ egg_link_file.close()
init_file = open(os.path.join(path, 'foo', '__init__.py'), 'rt')
- init = init_file.read().strip()
- init_file.close()
+ try:
+ init = init_file.read().strip()
+ finally:
+ init_file.close()
if sys.version < "3":
self.assertEqual(init, 'print "foo"')
else:
@@ -116,4 +120,3 @@ class TestDevelopTest(unittest.TestCase):
pass
finally:
os.chdir(old_dir)
-
diff --git a/setuptools/tests/test_dist_info.py b/setuptools/tests/test_dist_info.py
index fcb78c36..a8adb68c 100644
--- a/setuptools/tests/test_dist_info.py
+++ b/setuptools/tests/test_dist_info.py
@@ -51,30 +51,33 @@ class TestDistInfo(unittest.TestCase):
'VersionedDistribution-2.718.dist-info')
os.mkdir(versioned)
metadata_file = open(os.path.join(versioned, 'METADATA'), 'w+')
- metadata_file.write(DALS(
- """
- Metadata-Version: 1.2
- Name: VersionedDistribution
- Requires-Dist: splort (4)
- Provides-Extra: baz
- Requires-Dist: quux (>=1.1); extra == 'baz'
- """))
- metadata_file.close()
-
+ try:
+ metadata_file.write(DALS(
+ """
+ Metadata-Version: 1.2
+ Name: VersionedDistribution
+ Requires-Dist: splort (4)
+ Provides-Extra: baz
+ Requires-Dist: quux (>=1.1); extra == 'baz'
+ """))
+ finally:
+ metadata_file.close()
unversioned = os.path.join(self.tmpdir,
'UnversionedDistribution.dist-info')
os.mkdir(unversioned)
metadata_file = open(os.path.join(unversioned, 'METADATA'), 'w+')
- metadata_file.write(DALS(
- """
- Metadata-Version: 1.2
- Name: UnversionedDistribution
- Version: 0.3
- Requires-Dist: splort (==4)
- Provides-Extra: baz
- Requires-Dist: quux (>=1.1); extra == 'baz'
- """))
- metadata_file.close()
+ try:
+ metadata_file.write(DALS(
+ """
+ Metadata-Version: 1.2
+ Name: UnversionedDistribution
+ Version: 0.3
+ Requires-Dist: splort (==4)
+ Provides-Extra: baz
+ Requires-Dist: quux (>=1.1); extra == 'baz'
+ """))
+ finally:
+ metadata_file.close()
def tearDown(self):
shutil.rmtree(self.tmpdir)
diff --git a/setuptools/tests/test_easy_install.py b/setuptools/tests/test_easy_install.py
index 66d43b62..b0609eb1 100644
--- a/setuptools/tests/test_easy_install.py
+++ b/setuptools/tests/test_easy_install.py
@@ -6,6 +6,8 @@ import shutil
import tempfile
import unittest
import site
+from setuptools.compat import StringIO, BytesIO, next
+from setuptools.compat import urlparse
import textwrap
import tarfile
import distutils.core
diff --git a/setuptools/tests/test_packageindex.py b/setuptools/tests/test_packageindex.py
index c2ff0539..92d1e2e0 100644
--- a/setuptools/tests/test_packageindex.py
+++ b/setuptools/tests/test_packageindex.py
@@ -69,7 +69,8 @@ class TestPackageIndex(unittest.TestCase):
try:
index.open_url(url)
except distutils.errors.DistutilsError:
- msg = unicode(sys.exc_info()[1])
+ error = sys.exc_info()[1]
+ msg = unicode(error)
assert 'nonnumeric port' in msg or 'getaddrinfo failed' in msg or 'Name or service not known' in msg
return
raise RuntimeError("Did not raise")
diff --git a/setuptools/tests/test_sdist.py b/setuptools/tests/test_sdist.py
index c1e7864b..a58b749c 100644
--- a/setuptools/tests/test_sdist.py
+++ b/setuptools/tests/test_sdist.py
@@ -342,7 +342,7 @@ class TestSdistTest(unittest.TestCase):
if sys.version_info >= (3,):
fs_enc = sys.getfilesystemencoding()
- if sys.platform == 'win32':
+ if sys.platform == 'win32':
if fs_enc == 'cp1252':
# Python 3 mangles the UTF-8 filename
filename = filename.decode('cp1252')
@@ -377,14 +377,14 @@ class TestSdistTest(unittest.TestCase):
if sys.version_info >= (3,):
#not all windows systems have a default FS encoding of cp1252
if sys.platform == 'win32':
- # Latin-1 is similar to Windows-1252 however
+ # Latin-1 is similar to Windows-1252 however
# on mbcs filesys it is not in latin-1 encoding
fs_enc = sys.getfilesystemencoding()
if fs_enc == 'mbcs':
filename = filename.decode('mbcs')
else:
filename = filename.decode('latin-1')
-
+
self.assertTrue(filename in cmd.filelist.files)
else:
# The Latin-1 filename should have been skipped
diff --git a/setuptools/tests/test_test.py b/setuptools/tests/test_test.py
index d6e68590..7a06a403 100644
--- a/setuptools/tests/test_test.py
+++ b/setuptools/tests/test_test.py
@@ -1,4 +1,4 @@
-# -*- coding: UTF-8 -*-
+# -*- coding: UTF-8 -*-
"""develop tests
"""
@@ -23,7 +23,7 @@ setup(name='foo',
)
"""
-NS_INIT = """# -*- coding: Latin-1 -*-
+NS_INIT = """# -*- coding: Latin-1 -*-
# Söme Arbiträry Ünicode to test Issüé 310
try:
__import__('pkg_resources').declare_namespace(__name__)
@@ -77,7 +77,7 @@ class TestTestTest(unittest.TestCase):
f = open(init, 'wt')
f.write(TEST_PY)
f.close()
-
+
os.chdir(self.dir)
self.old_base = site.USER_BASE
site.USER_BASE = tempfile.mkdtemp()
@@ -87,7 +87,7 @@ class TestTestTest(unittest.TestCase):
def tearDown(self):
if sys.version < "2.6" or hasattr(sys, 'real_prefix'):
return
-
+
os.chdir(self.old_cwd)
shutil.rmtree(self.dir)
shutil.rmtree(site.USER_BASE)
@@ -98,7 +98,7 @@ class TestTestTest(unittest.TestCase):
def test_test(self):
if sys.version < "2.6" or hasattr(sys, 'real_prefix'):
return
-
+
dist = Distribution(dict(
name='foo',
packages=['name', 'name.space', 'name.space.tests'],
@@ -121,4 +121,4 @@ class TestTestTest(unittest.TestCase):
pass
finally:
sys.stdout = old_stdout
- \ No newline at end of file
+
diff --git a/setuptools/tests/win_script_wrapper.txt b/setuptools/tests/win_script_wrapper.txt
index db1daf6b..731243dd 100644
--- a/setuptools/tests/win_script_wrapper.txt
+++ b/setuptools/tests/win_script_wrapper.txt
@@ -49,37 +49,16 @@ GUI programs, the suffix '-script-pyw' is added.) This is why we
named out script the way we did. Now we can run out script by running
the wrapper:
- >>> from subprocess import Popen, PIPE, STDOUT
- >>> try:
- ... unicode=unicode
- ... except:
- ... unicode=str
- >>> def popen4(cmd, *args):
- ... if hasattr(os, 'popen4'):
- ... input, output = os.popen4(cmd + " ".join(args))
- ... return input, output
- ... else:
- ... #emulate popen4 in python 3
- ... if cmd[0] == '"' and cmd[-1] != '"':
- ... cmd = cmd[1:]
- ... cmd += " ".join(args)
- ... p = Popen(cmd, shell=True, bufsize=0,
- ... stdin=PIPE, stdout=PIPE, stderr=STDOUT)
- ... return p.stdin, p.stdout
-
- >>> input, output = popen4('"' + nt_quote_arg(os.path.join(sample_directory, 'foo.exe')),
- ... r' arg1', r'"arg 2"', r'"arg \"2\\\""', r'"arg 4\\"', r'"arg5 a\\b"')
- >>> bytes_written = input.write('hello\nworld\n'.encode('utf-8'))
- >>> input.close()
- >>> # This is needed for line ending differences between py2 and py3 on win32
- >>> msg = unicode(output.read(), encoding='utf-8').split("\n")
- >>> for line in msg:
- ... print(line.strip())
+ >>> import subprocess
+ >>> cmd = [os.path.join(sample_directory, 'foo.exe'), 'arg1', 'arg 2',
+ ... 'arg "2\\"', 'arg 4\\', 'arg5 a\\\\b']
+ >>> proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stdin=subprocess.PIPE)
+ >>> stdout, stderr = proc.communicate('hello\nworld\n'.encode('ascii'))
+ >>> bytes = sys.stdout.write(stdout.decode('ascii').replace('\r\n', '\n'))
\foo-script.py
['arg1', 'arg 2', 'arg "2\\"', 'arg 4\\', 'arg5 a\\\\b']
'hello\nworld\n'
non-optimized
- <BLANKLINE>
This example was a little pathological in that it exercised windows
(MS C runtime) quoting rules:
@@ -115,18 +94,14 @@ enter the interpreter after running the script, you could use -Oi:
... sys.ps1 = '---'
... """ % dict(python_exe=nt_quote_arg(sys.executable)))
>>> f.close()
-
- >>> input, output = popen4(nt_quote_arg(os.path.join(sample_directory, 'foo.exe')))
- >>> input.close()
- >>> # This is needed for line ending differences between py2 and py3 on win32
- >>> msg = unicode(output.read(), encoding='utf-8').split("\n")
- >>> for line in msg:
- ... print(line.strip())
+ >>> cmd = [os.path.join(sample_directory, 'foo.exe')]
+ >>> proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.STDOUT)
+ >>> stdout, stderr = proc.communicate()
+ >>> bytes = sys.stdout.write(stdout.decode('ascii').replace('\r\n', '\n'))
\foo-script.py
[]
''
---
- <BLANKLINE>
Testing the GUI Version
-----------------------
@@ -157,18 +132,19 @@ We'll also copy gui.exe to the sample-directory with the name bar.exe:
Finally, we'll run the script and check the result:
- >>> input, output = popen4('"'+nt_quote_arg(os.path.join(sample_directory, 'bar.exe')),
- ... r' "%s" "Test Argument"' % os.path.join(sample_directory, 'test_output.txt'))
- >>> input.close()
- >>> # This is needed for line ending differences between py2 and py3 on win32
- >>> msg = unicode(output.read(), encoding='utf-8').split("\n")
- >>> for line in msg:
- ... print(line.strip())
+ >>> cmd = [
+ ... os.path.join(sample_directory, 'bar.exe'),
+ ... os.path.join(sample_directory, 'test_output.txt'),
+ ... 'Test Argument',
+ ... ]
+ >>> proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.STDOUT)
+ >>> stdout, stderr = proc.communicate()
+ >>> print(stdout.decode('ascii'))
<BLANKLINE>
- >>> f = open(os.path.join(sample_directory, 'test_output.txt'), 'rb')
- >>> print(unicode(f.read(), encoding='utf-8'))
+ >>> f_out = open(os.path.join(sample_directory, 'test_output.txt'), 'rb')
+ >>> print(f_out.read().decode('ascii'))
'Test Argument'
- >>> f.close()
+ >>> f_out.close()
We're done with the sample_directory:
diff --git a/tests/test_ez_setup.py b/tests/test_ez_setup.py
index 6dd4c055..26881f52 100644
--- a/tests/test_ez_setup.py
+++ b/tests/test_ez_setup.py
@@ -16,7 +16,7 @@ import ez_setup
class TestSetup(unittest.TestCase):
def urlopen(self, url):
- return open(self.tarball)
+ return open(self.tarball, 'rb')
def setUp(self):
self.old_sys_path = copy.copy(sys.path)
@@ -27,10 +27,7 @@ class TestSetup(unittest.TestCase):
"--dist-dir", "%s" % self.tmpdir)
tarball = os.listdir(self.tmpdir)[0]
self.tarball = os.path.join(self.tmpdir, tarball)
- try:
- import urllib2
- except ImportError:
- import urllib.request as urllib2
+ from setuptools.compat import urllib2
urllib2.urlopen = self.urlopen
def tearDown(self):
@@ -40,7 +37,7 @@ class TestSetup(unittest.TestCase):
def test_build_egg(self):
# making it an egg
- egg = _build_egg(self.tarball, self.tmpdir)
+ egg = _build_egg('Egg to be built', self.tarball, self.tmpdir)
# now trying to import it
sys.path[0] = egg