From 1018e3b1d634f082dfed76299117b99f994c77cf Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Sat, 11 Aug 2012 22:25:05 -0400 Subject: [PATCH] initial fixes to get tests to pass on py 3.3, [ticket:2542] --- distribute_setup.py | 56 ++++++++++++++++++++++++-------- test/dialect/test_mssql.py | 5 +-- test/ext/test_compiler.py | 2 +- test/ext/test_declarative.py | 4 +-- test/orm/test_eager_relations.py | 8 ++--- test/orm/test_query.py | 17 ---------- test/sql/test_metadata.py | 2 +- 7 files changed, 54 insertions(+), 40 deletions(-) diff --git a/distribute_setup.py b/distribute_setup.py index 37117b34eb..8f5b0637bf 100644 --- a/distribute_setup.py +++ b/distribute_setup.py @@ -46,7 +46,7 @@ except ImportError: args = [quote(arg) for arg in args] return os.spawnl(os.P_WAIT, sys.executable, *args) == 0 -DEFAULT_VERSION = "0.6.13" +DEFAULT_VERSION = "0.6.28" DEFAULT_URL = "http://pypi.python.org/packages/source/d/distribute/" SETUPTOOLS_FAKED_VERSION = "0.6c11" @@ -63,7 +63,7 @@ Description: xxx """ % SETUPTOOLS_FAKED_VERSION -def _install(tarball): +def _install(tarball, install_args=()): # extracting the tarball tmpdir = tempfile.mkdtemp() log.warn('Extracting in %s', tmpdir) @@ -81,7 +81,7 @@ def _install(tarball): # installing log.warn('Installing Distribute') - if not _python_cmd('setup.py', 'install'): + if not _python_cmd('setup.py', 'install', *install_args): log.warn('Something went wrong during the installation.') log.warn('See the error message above.') finally: @@ -144,7 +144,7 @@ def use_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL, except ImportError: return _do_download(version, download_base, to_dir, download_delay) try: - pkg_resources.require("distribute>="+version) + pkg_resources.require("distribute>=" + version) return except pkg_resources.VersionConflict: e = sys.exc_info()[1] @@ -167,6 +167,7 @@ def use_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL, if not no_fake: _create_fake_setuptools_pkg_info(to_dir) + def download_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir, delay=15): """Download distribute from a specified location and return its filename @@ -203,6 +204,7 @@ def download_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL, dst.close() return os.path.realpath(saveto) + def _no_sandbox(function): def __no_sandbox(*args, **kw): try: @@ -227,6 +229,7 @@ def _no_sandbox(function): return __no_sandbox + def _patch_file(path, content): """Will backup the file then patch it""" existing_content = open(path).read() @@ -245,15 +248,18 @@ def _patch_file(path, content): _patch_file = _no_sandbox(_patch_file) + def _same_content(path, content): return open(path).read() == content + def _rename_path(path): new_name = path + '.OLD.%s' % time.time() log.warn('Renaming %s into %s', path, new_name) os.rename(path, new_name) return new_name + def _remove_flat_installation(placeholder): if not os.path.isdir(placeholder): log.warn('Unkown installation at %s', placeholder) @@ -289,11 +295,13 @@ def _remove_flat_installation(placeholder): _remove_flat_installation = _no_sandbox(_remove_flat_installation) + def _after_install(dist): log.warn('After install bootstrap.') placeholder = dist.get_command_obj('install').install_purelib _create_fake_setuptools_pkg_info(placeholder) + def _create_fake_setuptools_pkg_info(placeholder): if not placeholder or not os.path.exists(placeholder): log.warn('Could not find the install location') @@ -306,6 +314,9 @@ def _create_fake_setuptools_pkg_info(placeholder): log.warn('%s already exists', pkg_info) return + if not os.access(pkg_info, os.W_OK): + log.warn("Don't have permissions to write %s, skipping", pkg_info) + log.warn('Creating %s', pkg_info) f = open(pkg_info, 'w') try: @@ -321,7 +332,10 @@ def _create_fake_setuptools_pkg_info(placeholder): finally: f.close() -_create_fake_setuptools_pkg_info = _no_sandbox(_create_fake_setuptools_pkg_info) +_create_fake_setuptools_pkg_info = _no_sandbox( + _create_fake_setuptools_pkg_info +) + def _patch_egg_dir(path): # let's check if it's already patched @@ -343,6 +357,7 @@ def _patch_egg_dir(path): _patch_egg_dir = _no_sandbox(_patch_egg_dir) + def _before_install(): log.warn('Before install bootstrap.') _fake_setuptools() @@ -351,7 +366,7 @@ def _before_install(): def _under_prefix(location): if 'install' not in sys.argv: return True - args = sys.argv[sys.argv.index('install')+1:] + args = sys.argv[sys.argv.index('install') + 1:] for index, arg in enumerate(args): for option in ('--root', '--prefix'): if arg.startswith('%s=' % option): @@ -359,7 +374,7 @@ def _under_prefix(location): return location.startswith(top_dir) elif arg == option: if len(args) > index: - top_dir = args[index+1] + top_dir = args[index + 1] return location.startswith(top_dir) if arg == '--user' and USER_SITE is not None: return location.startswith(USER_SITE) @@ -376,11 +391,14 @@ def _fake_setuptools(): return ws = pkg_resources.working_set try: - setuptools_dist = ws.find(pkg_resources.Requirement.parse('setuptools', - replacement=False)) + setuptools_dist = ws.find( + pkg_resources.Requirement.parse('setuptools', replacement=False) + ) except TypeError: # old distribute API - setuptools_dist = ws.find(pkg_resources.Requirement.parse('setuptools')) + setuptools_dist = ws.find( + pkg_resources.Requirement.parse('setuptools') + ) if setuptools_dist is None: log.warn('No setuptools distribution found') @@ -422,7 +440,8 @@ def _relaunch(): log.warn('Relaunching...') # we have to relaunch the process # pip marker to avoid a relaunch bug - if sys.argv[:3] == ['-c', 'install', '--single-version-externally-managed']: + _cmd = ['-c', 'install', '--single-version-externally-managed'] + if sys.argv[:3] == _cmd: sys.argv[0] = 'setup.py' args = [sys.executable] + sys.argv sys.exit(subprocess.call(args)) @@ -448,7 +467,7 @@ def _extractall(self, path=".", members=None): # Extract directories with a safe mode. directories.append(tarinfo) tarinfo = copy.copy(tarinfo) - tarinfo.mode = 448 # decimal for oct 0700 + tarinfo.mode = 448 # decimal for oct 0700 self.extract(tarinfo, path) # Reverse sort directories. @@ -475,10 +494,21 @@ def _extractall(self, path=".", members=None): self._dbg(1, "tarfile: %s" % e) +def _build_install_args(argv): + install_args = [] + user_install = '--user' in argv + if user_install and sys.version_info < (2, 6): + log.warn("--user requires Python 2.6 or later") + raise SystemExit(1) + if user_install: + install_args.append('--user') + return install_args + + def main(argv, version=DEFAULT_VERSION): """Install or upgrade setuptools and EasyInstall""" tarball = download_setuptools() - _install(tarball) + _install(tarball, _build_install_args(argv)) if __name__ == '__main__': diff --git a/test/dialect/test_mssql.py b/test/dialect/test_mssql.py index 6d156cca17..7bfe480c3b 100644 --- a/test/dialect/test_mssql.py +++ b/test/dialect/test_mssql.py @@ -1125,8 +1125,9 @@ class ParseConnectTest(fixtures.TestBase, AssertsCompiledSQL): url.make_url('mssql://username:password@mydsn/?LANGUAGE=us_' 'english&foo=bar') connection = dialect.create_connect_args(u) - eq_([['dsn=mydsn;UID=username;PWD=password;LANGUAGE=us_english;' - 'foo=bar'], {}], connection) + dsn_string = connection[0][0] + assert ";LANGUAGE=us_english" in dsn_string + assert ";foo=bar" in dsn_string def test_pyodbc_connect(self): u = url.make_url('mssql://username:password@hostspec/database') diff --git a/test/ext/test_compiler.py b/test/ext/test_compiler.py index 1098b5926f..1aebcdadd6 100644 --- a/test/ext/test_compiler.py +++ b/test/ext/test_compiler.py @@ -117,7 +117,7 @@ class UserDefinedTest(fixtures.TestBase, AssertsCompiledSQL): assert_raises_message( exc.CompileError, - " " + " " "construct has no default compilation handler.", str, MyThingy('x') ) diff --git a/test/ext/test_declarative.py b/test/ext/test_declarative.py index a6a1164b99..80dd6ff8a8 100644 --- a/test/ext/test_declarative.py +++ b/test/ext/test_declarative.py @@ -845,9 +845,9 @@ class DeclarativeTest(DeclarativeTestBase): sa.exc.SAWarning, r"Regular \(i.e. not __special__\) attribute 'MyBase.somecol' " "uses @declared_attr, but owning class " - " is " + " is " "mapped - not applying to subclass .", + "'test.ext..*test_declarative..*MyClass'>.", go ) diff --git a/test/orm/test_eager_relations.py b/test/orm/test_eager_relations.py index 8f0f109e90..deb985f696 100644 --- a/test/orm/test_eager_relations.py +++ b/test/orm/test_eager_relations.py @@ -798,10 +798,10 @@ class EagerTest(_fixtures.FixtureTest, testing.AssertsCompiledSQL): mapper(User, users, properties=odict( orders=relationship(Order, backref='user') )) - mapper(Order, orders, properties=odict( - items=relationship(Item, secondary=order_items, backref='orders'), - address=relationship(Address) - )) + mapper(Order, orders, properties=odict([ + ('items', relationship(Item, secondary=order_items, backref='orders')), + ('address', relationship(Address)) + ])) mapper(Address, addresses) mapper(Item, items) diff --git a/test/orm/test_query.py b/test/orm/test_query.py index 33bc1edb2f..c2af6b84b7 100644 --- a/test/orm/test_query.py +++ b/test/orm/test_query.py @@ -1236,23 +1236,6 @@ class FilterTest(QueryTest, AssertsCompiledSQL): create_session().query(User.id).filter_by(**{}).order_by(User.id).all() ) - def test_filter_conjunctions(self): - User = self.classes.User - s = create_session() - self.assert_compile( - s.query(User).filter(User.name=="ed", User.id>5), - "SELECT users.id AS users_id, users.name " - "AS users_name FROM users WHERE users.name = " - ":name_1 AND users.id > :id_1" - ) - - self.assert_compile( - s.query(User).filter_by(name='ed', id=5), - "SELECT users.id AS users_id, users.name " - "AS users_name FROM users WHERE users.name " - "= :name_1 AND users.id = :id_1" - ) - def test_text_coerce(self): User = self.classes.User s = create_session() diff --git a/test/sql/test_metadata.py b/test/sql/test_metadata.py index 3e9f87fe70..aaca06fb42 100644 --- a/test/sql/test_metadata.py +++ b/test/sql/test_metadata.py @@ -1198,7 +1198,7 @@ class ColumnDefinitionTest(AssertsCompiledSQL, fixtures.TestBase): assert_raises_message( TypeError, "Could not create a copy of this " + "'test.sql.test_metadata..*MyColumn'> " "object. Ensure the class includes a _constructor()", getattr, select([t1.select().alias()]), 'c' ) -- 2.47.2