From: Mike Bayer Date: Sat, 4 May 2013 20:23:27 +0000 (-0400) Subject: most of ORM passing... X-Git-Tag: rel_0_9_0b1~304^2~13^2~42 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=220fa91337aced11789b23065289203414f2063d;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git most of ORM passing... --- diff --git a/lib/sqlalchemy/event.py b/lib/sqlalchemy/event.py index 79d024f9ba..33626cf2ad 100644 --- a/lib/sqlalchemy/event.py +++ b/lib/sqlalchemy/event.py @@ -378,6 +378,8 @@ class _EmptyListener(object): def __bool__(self): return bool(self.parent_listeners) + __nonzero__ = __bool__ + class _CompoundListener(object): _exec_once = False @@ -415,6 +417,7 @@ class _CompoundListener(object): def __bool__(self): return bool(self.listeners or self.parent_listeners) + __nonzero__ = __bool__ class _ListenerCollection(_CompoundListener): """Instance-level attributes on instances of :class:`._Dispatch`. diff --git a/lib/sqlalchemy/ext/associationproxy.py b/lib/sqlalchemy/ext/associationproxy.py index ad09db831a..e0a867e5aa 100644 --- a/lib/sqlalchemy/ext/associationproxy.py +++ b/lib/sqlalchemy/ext/associationproxy.py @@ -478,6 +478,8 @@ class _AssociationCollection(object): def __bool__(self): return bool(self.col) + __nonzero__ = __bool__ + def __getstate__(self): return {'parent': self.parent, 'lazy_collection': self.lazy_collection} diff --git a/lib/sqlalchemy/orm/attributes.py b/lib/sqlalchemy/orm/attributes.py index 691904bb3b..0572470476 100644 --- a/lib/sqlalchemy/orm/attributes.py +++ b/lib/sqlalchemy/orm/attributes.py @@ -386,8 +386,8 @@ def create_proxied_attribute(descriptor): return getattr(self.comparator, attribute) except AttributeError: raise AttributeError( - 'Neither %r object nor %r object associated with %s ' - 'has an attribute %r' % ( + 'Neither %r object nor %r object associated with %s ' + 'has an attribute %r' % ( type(descriptor).__name__, type(self.comparator).__name__, self, @@ -1216,6 +1216,7 @@ class History(History): def __bool__(self): return self != HISTORY_BLANK + __nonzero__ = __bool__ def empty(self): """Return True if this :class:`.History` has no changes diff --git a/lib/sqlalchemy/orm/collections.py b/lib/sqlalchemy/orm/collections.py index c2a2c23f0d..bb7882ee9a 100644 --- a/lib/sqlalchemy/orm/collections.py +++ b/lib/sqlalchemy/orm/collections.py @@ -657,12 +657,10 @@ class CollectionAdapter(object): if getattr(obj, '_sa_adapter', None) is not None: return getattr(obj, '_sa_adapter') elif setting_type == dict: -# start Py3K - return list(obj.values()) -# end Py3K -# start Py2K -# return getattr(obj, 'itervalues', getattr(obj, 'values'))() -# end Py2K + if util.py3k: + return obj.values() + else: + return getattr(obj, 'itervalues', getattr(obj, 'values'))() else: return iter(obj) @@ -706,8 +704,6 @@ class CollectionAdapter(object): def __iter__(self): """Iterate over entities in the collection.""" -# start Py3K -# end Py3K return iter(getattr(self._data(), '_sa_iterator')()) def __len__(self): @@ -717,6 +713,8 @@ class CollectionAdapter(object): def __bool__(self): return True + __nonzero__ = __bool__ + def fire_append_event(self, item, initiator=None): """Notify that a entity has entered the collection. @@ -1130,24 +1128,23 @@ def _list_decorators(): _tidy(__delitem__) return __delitem__ -# start Py2K -# def __setslice__(fn): -# def __setslice__(self, start, end, values): -# for value in self[start:end]: -# __del(self, value) -# values = [__set(self, value) for value in values] -# fn(self, start, end, values) -# _tidy(__setslice__) -# return __setslice__ -# -# def __delslice__(fn): -# def __delslice__(self, start, end): -# for value in self[start:end]: -# __del(self, value) -# fn(self, start, end) -# _tidy(__delslice__) -# return __delslice__ -# end Py2K + if util.py2k: + def __setslice__(fn): + def __setslice__(self, start, end, values): + for value in self[start:end]: + __del(self, value) + values = [__set(self, value) for value in values] + fn(self, start, end, values) + _tidy(__setslice__) + return __setslice__ + + def __delslice__(fn): + def __delslice__(self, start, end): + for value in self[start:end]: + __del(self, value) + fn(self, start, end) + _tidy(__delslice__) + return __delslice__ def extend(fn): def extend(self, iterable): @@ -1465,12 +1462,8 @@ __interfaces = { ), # decorators are required for dicts and object collections. -# start Py3K - dict: ({'iterator': 'values'}, _dict_decorators()), -# end Py3K -# start Py2K -# dict: ({'iterator': 'itervalues'}, _dict_decorators()), -# end Py2K + dict: ({'iterator': 'values'}, _dict_decorators()) if util.py3k + else ({'iterator': 'itervalues'}, _dict_decorators()), } diff --git a/lib/sqlalchemy/orm/instrumentation.py b/lib/sqlalchemy/orm/instrumentation.py index ce12acf202..f2d0df43f1 100644 --- a/lib/sqlalchemy/orm/instrumentation.py +++ b/lib/sqlalchemy/orm/instrumentation.py @@ -329,6 +329,8 @@ class ClassManager(dict): """All ClassManagers are non-zero regardless of attribute state.""" return True + __nonzero__ = __bool__ + def __repr__(self): return '<%s of %r at %x>' % ( self.__class__.__name__, self.class_, id(self)) diff --git a/lib/sqlalchemy/orm/query.py b/lib/sqlalchemy/orm/query.py index 80441b976e..09f0bedd13 100644 --- a/lib/sqlalchemy/orm/query.py +++ b/lib/sqlalchemy/orm/query.py @@ -981,12 +981,7 @@ class Query(object): """Return a scalar result corresponding to the given column expression.""" try: -# start Py3K - return self.values(column).__next__()[0] -# end Py3K -# start Py2K -# return self.values(column).next()[0] -# end Py2K + return next(self.values(column))[0] except StopIteration: return None diff --git a/lib/sqlalchemy/orm/util.py b/lib/sqlalchemy/orm/util.py index 30a8a8084c..2a3124f4d8 100644 --- a/lib/sqlalchemy/orm/util.py +++ b/lib/sqlalchemy/orm/util.py @@ -413,6 +413,7 @@ class EntityRegistry(PathRegistry, dict): def __bool__(self): return True + __nonzero__ = __bool__ def __getitem__(self, entity): if isinstance(entity, (int, slice)): diff --git a/lib/sqlalchemy/sql/expression.py b/lib/sqlalchemy/sql/expression.py index 2c7b91fe60..f0bcd400ae 100644 --- a/lib/sqlalchemy/sql/expression.py +++ b/lib/sqlalchemy/sql/expression.py @@ -3769,6 +3769,7 @@ class BinaryExpression(ColumnElement): return self.operator(hash(self._orig[0]), hash(self._orig[1])) else: raise TypeError("Boolean value of this clause is not defined") + __nonzero__ = __bool__ @property diff --git a/lib/sqlalchemy/util/compat.py b/lib/sqlalchemy/util/compat.py index 06bcd30dd6..e8404c2df6 100644 --- a/lib/sqlalchemy/util/compat.py +++ b/lib/sqlalchemy/util/compat.py @@ -184,8 +184,11 @@ else: if py3k: exec_ = getattr(builtins, 'exec') else: - def exec_(func_text, globals_, lcl): - exec('exec func_text in globals_, lcl') + def exec_(func_text, globals_, lcl=None): + if lcl is None: + exec('exec func_text in globals_') + else: + exec('exec func_text in globals_, lcl') def with_metaclass(meta, *bases): diff --git a/lib/sqlalchemy/util/langhelpers.py b/lib/sqlalchemy/util/langhelpers.py index 8a6af3758e..4cb745c2ba 100644 --- a/lib/sqlalchemy/util/langhelpers.py +++ b/lib/sqlalchemy/util/langhelpers.py @@ -499,7 +499,7 @@ def monkeypatch_proxied_specials(into_cls, from_cls, skip=None, only=None, "return %(name)s.%(method)s%(d_args)s" % locals()) env = from_instance is not None and {name: from_instance} or {} - compat.exec_(py, env, {}) + compat.exec_(py, env) try: env[method].__defaults__ = fn.__defaults__ except AttributeError: @@ -510,12 +510,7 @@ def monkeypatch_proxied_specials(into_cls, from_cls, skip=None, only=None, def methods_equivalent(meth1, meth2): """Return True if the two methods are the same implementation.""" -# start Py3K return getattr(meth1, '__func__', meth1) is getattr(meth2, '__func__', meth2) -# end Py3K -# start Py2K -# return getattr(meth1, 'im_func', meth1) is getattr(meth2, 'im_func', meth2) -# end Py2K def as_interface(obj, cls=None, methods=None, required=None): diff --git a/test/orm/inheritance/test_concrete.py b/test/orm/inheritance/test_concrete.py index 5d6b82a15d..573913f740 100644 --- a/test/orm/inheritance/test_concrete.py +++ b/test/orm/inheritance/test_concrete.py @@ -711,12 +711,12 @@ class ColKeysTest(fixtures.MappedTest): refugees_table = Table('refugee', metadata, Column('refugee_fid' , Integer, primary_key=True, test_needs_autoincrement=True), - Column('refugee_name', Unicode(30), + Column('refugee_name', String(30), key='name')) offices_table = Table('office', metadata, Column('office_fid', Integer, primary_key=True, test_needs_autoincrement=True), - Column('office_name', Unicode(30), + Column('office_name', String(30), key='name')) @classmethod diff --git a/test/orm/test_assorted_eager.py b/test/orm/test_assorted_eager.py index e650a1beac..83fccbf7a0 100644 --- a/test/orm/test_assorted_eager.py +++ b/test/orm/test_assorted_eager.py @@ -723,13 +723,13 @@ class EagerTest8(fixtures.MappedTest): Table('prj', metadata, Column('id', Integer, primary_key=True, test_needs_autoincrement=True), Column('created', sa.DateTime ), - Column('title', sa.Unicode(100))) + Column('title', sa.String(100))) Table('task', metadata, Column('id', Integer, primary_key=True, test_needs_autoincrement=True), Column('status_id', Integer, ForeignKey('task_status.id'), nullable=False), - Column('title', sa.Unicode(100)), + Column('title', sa.String(100)), Column('task_type_id', Integer , ForeignKey('task_type.id'), nullable=False), Column('prj_id', Integer , ForeignKey('prj.id'), nullable=False)) @@ -748,8 +748,8 @@ class EagerTest8(fixtures.MappedTest): Table('msg_type', metadata, Column('id', Integer, primary_key=True, test_needs_autoincrement=True), - Column('name', sa.Unicode(20)), - Column('display_name', sa.Unicode(20))) + Column('name', sa.String(20)), + Column('display_name', sa.String(20))) @classmethod def fixtures(cls): diff --git a/test/orm/test_eager_relations.py b/test/orm/test_eager_relations.py index 20ee693f3f..41dd50e83f 100644 --- a/test/orm/test_eager_relations.py +++ b/test/orm/test_eager_relations.py @@ -2107,7 +2107,7 @@ class SelfReferentialM2MEagerTest(fixtures.MappedTest): def define_tables(cls, metadata): Table('widget', metadata, Column('id', Integer, primary_key=True, test_needs_autoincrement=True), - Column('name', sa.Unicode(40), nullable=False, unique=True), + Column('name', sa.String(40), nullable=False, unique=True), ) Table('widget_rel', metadata, diff --git a/test/orm/test_generative.py b/test/orm/test_generative.py index 84e60d8eac..52858cc265 100644 --- a/test/orm/test_generative.py +++ b/test/orm/test_generative.py @@ -78,14 +78,8 @@ class GenerativeQueryTest(fixtures.MappedTest): assert sess.query(func.min(foo.c.bar)).filter(foo.c.bar<30).one() == (0,) assert sess.query(func.max(foo.c.bar)).filter(foo.c.bar<30).one() == (29,) -# start Py3K - assert query.filter(foo.c.bar<30).values(sa.func.max(foo.c.bar)).__next__()[0] == 29 - assert query.filter(foo.c.bar<30).values(sa.func.max(foo.c.bar)).__next__()[0] == 29 -# end Py3K -# start Py2K -# assert query.filter(foo.c.bar<30).values(sa.func.max(foo.c.bar)).next()[0] == 29 -# assert query.filter(foo.c.bar<30).values(sa.func.max(foo.c.bar)).next()[0] == 29 -# end Py2K + assert next(query.filter(foo.c.bar<30).values(sa.func.max(foo.c.bar)))[0] == 29 + assert next(query.filter(foo.c.bar<30).values(sa.func.max(foo.c.bar)))[0] == 29 @testing.fails_if(lambda:testing.against('mysql+mysqldb') and testing.db.dialect.dbapi.version_info[:4] == (1, 2, 1, 'gamma'), @@ -112,20 +106,10 @@ class GenerativeQueryTest(fixtures.MappedTest): query = create_session().query(Foo) -# start Py3K - avg_f = query.filter(foo.c.bar<30).values(sa.func.avg(foo.c.bar)).__next__()[0] -# end Py3K -# start Py2K -# avg_f = query.filter(foo.c.bar<30).values(sa.func.avg(foo.c.bar)).next()[0] -# end Py2K + avg_f = next(query.filter(foo.c.bar<30).values(sa.func.avg(foo.c.bar)))[0] assert float(round(avg_f, 1)) == 14.5 -# start Py3K - avg_o = query.filter(foo.c.bar<30).values(sa.func.avg(foo.c.bar)).__next__()[0] -# end Py3K -# start Py2K -# avg_o = query.filter(foo.c.bar<30).values(sa.func.avg(foo.c.bar)).next()[0] -# end Py2K + avg_o = next(query.filter(foo.c.bar<30).values(sa.func.avg(foo.c.bar)))[0] assert float(round(avg_o, 1)) == 14.5 def test_filter(self): diff --git a/test/orm/test_naturalpks.py b/test/orm/test_naturalpks.py index 7a636a5a9f..173408b829 100644 --- a/test/orm/test_naturalpks.py +++ b/test/orm/test_naturalpks.py @@ -499,7 +499,7 @@ class ReversePKsTest(fixtures.MappedTest): 'user', metadata, Column('code', Integer, primary_key=True), Column('status', Integer, primary_key=True), - Column('username', Unicode(50), nullable=False), + Column('username', String(50), nullable=False), ) @classmethod