summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2013-05-04 16:23:27 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2013-05-04 16:23:27 -0400
commit220fa91337aced11789b23065289203414f2063d (patch)
treece4fec18d671790bdcdab7dca707997229783d48 /lib
parent8be6831f8be70d7946fd8e3e41b18781a1743ea7 (diff)
downloadsqlalchemy-220fa91337aced11789b23065289203414f2063d.tar.gz
most of ORM passing...
Diffstat (limited to 'lib')
-rw-r--r--lib/sqlalchemy/event.py3
-rw-r--r--lib/sqlalchemy/ext/associationproxy.py2
-rw-r--r--lib/sqlalchemy/orm/attributes.py5
-rw-r--r--lib/sqlalchemy/orm/collections.py57
-rw-r--r--lib/sqlalchemy/orm/instrumentation.py2
-rw-r--r--lib/sqlalchemy/orm/query.py7
-rw-r--r--lib/sqlalchemy/orm/util.py1
-rw-r--r--lib/sqlalchemy/sql/expression.py1
-rw-r--r--lib/sqlalchemy/util/compat.py7
-rw-r--r--lib/sqlalchemy/util/langhelpers.py7
10 files changed, 44 insertions, 48 deletions
diff --git a/lib/sqlalchemy/event.py b/lib/sqlalchemy/event.py
index 79d024f9b..33626cf2a 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 ad09db831..e0a867e5a 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 691904bb3..057247047 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 c2a2c23f0..bb7882ee9 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 ce12acf20..f2d0df43f 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 80441b976..09f0bedd1 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 30a8a8084..2a3124f4d 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 2c7b91fe6..f0bcd400a 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 06bcd30dd..e8404c2df 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 8a6af3758..4cb745c2b 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):