[Sqlalchemy-commits] [3686] sqlalchemy/trunk: - Removed unused util.hash()
Brought to you by:
zzzeek
From: <co...@sq...> - 2007-10-31 03:25:09
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head><meta http-equiv="content-type" content="text/html; charset=utf-8" /><style type="text/css"><!-- #msg dl { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; } #msg dt { float: left; width: 6em; font-weight: bold; } #msg dt:after { content:':';} #msg dl, #msg dt, #msg ul, #msg li, #header, #footer { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; } #msg dl a { font-weight: bold} #msg dl a:link { color:#fc3; } #msg dl a:active { color:#ff0; } #msg dl a:visited { color:#cc6; } h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; } #msg pre { overflow: auto; background: #ffc; border: 1px #fc0 solid; padding: 6px; } #msg ul, pre { overflow: auto; } #header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; } #patch { width: 100%; } #patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;} #patch .propset h4, #patch .binary h4 {margin:0;} #patch pre {padding:0;line-height:1.2em;margin:0;} #patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;} #patch .propset .diff, #patch .binary .diff {padding:10px 0;} #patch span {display:block;padding:0 10px;} #patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;} #patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;} #patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;} #patch .lines, .info {color:#888;background:#fff;} --></style> <title>[3686] sqlalchemy/trunk: - Removed unused util.hash()</title> </head> <body> <div id="msg"> <dl> <dt>Revision</dt> <dd>3686</dd> <dt>Author</dt> <dd>jek</dd> <dt>Date</dt> <dd>2007-10-30 23:25:04 -0400 (Tue, 30 Oct 2007)</dd> </dl> <h3>Log Message</h3> <pre>- Removed unused util.hash() - Fixed __hash__ for association proxy collections</pre> <h3>Modified Paths</h3> <ul> <li><a href="#sqlalchemytrunkCHANGES">sqlalchemy/trunk/CHANGES</a></li> <li><a href="#sqlalchemytrunklibsqlalchemyextassociationproxypy">sqlalchemy/trunk/lib/sqlalchemy/ext/associationproxy.py</a></li> <li><a href="#sqlalchemytrunklibsqlalchemyutilpy">sqlalchemy/trunk/lib/sqlalchemy/util.py</a></li> <li><a href="#sqlalchemytrunktestextassociationproxypy">sqlalchemy/trunk/test/ext/associationproxy.py</a></li> </ul> </div> <div id="patch"> <h3>Diff</h3> <a id="sqlalchemytrunkCHANGES"></a> <div class="modfile"><h4>Modified: sqlalchemy/trunk/CHANGES (3685 => 3686)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/trunk/CHANGES 2007-10-31 03:17:51 UTC (rev 3685) +++ sqlalchemy/trunk/CHANGES 2007-10-31 03:25:04 UTC (rev 3686) </span><span class="lines">@@ -17,14 +17,14 @@ </span><span class="cx"> </span><span class="cx"> - fixed expression translation of text() clauses; this repairs various </span><span class="cx"> ORM scenarios where literal text is used for SQL expressions </span><del>- </del><ins>+ </ins><span class="cx"> - sqlite will reflect "DECIMAL" as a numeric column. </span><span class="cx"> </span><span class="cx"> - fixed INSERT statements w.r.t. primary key columns that have SQL-expression </span><span class="cx"> based default generators on them; SQL expression executes inline as normal </span><span class="cx"> but will not trigger a "postfetch" condition for the column, for those DB's </span><span class="cx"> who provide it via cursor.lastrowid </span><del>- </del><ins>+ </ins><span class="cx"> - Renamed the Dialect attribute 'preexecute_sequences' to </span><span class="cx"> 'preexecute_pk_sequences'. An attribute proxy is in place for out-of-tree </span><span class="cx"> dialects using the old name. </span><span class="lines">@@ -43,14 +43,19 @@ </span><span class="cx"> </span><span class="cx"> - it's an error to session.save() an object which is already persistent </span><span class="cx"> [ticket:840] </span><del>- </del><ins>+ </ins><span class="cx"> - behavior of query.options() is now fully based on paths, i.e. an option </span><span class="cx"> such as eagerload_all('x.y.z.y.x') will apply eagerloading to only </span><span class="cx"> those paths, i.e. and not 'x.y.x'; eagerload('children.children') applies </span><span class="cx"> only to exactly two-levels deep, etc. [ticket:777] </span><span class="cx"> </span><del>-- Made access dao dection more reliable [ticket:828] </del><ins>+- Made access dao detection more reliable [ticket:828] </ins><span class="cx"> </span><ins>+- Removed unused util.hash(). + +- Fixed __hash__ for association proxy- these collections are unhashable, + just like their mutable Python counterparts. + </ins><span class="cx"> 0.4.0 </span><span class="cx"> ----- </span><span class="cx"> </span></span></pre></div> <a id="sqlalchemytrunklibsqlalchemyextassociationproxypy"></a> <div class="modfile"><h4>Modified: sqlalchemy/trunk/lib/sqlalchemy/ext/associationproxy.py (3685 => 3686)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/trunk/lib/sqlalchemy/ext/associationproxy.py 2007-10-31 03:17:51 UTC (rev 3685) +++ sqlalchemy/trunk/lib/sqlalchemy/ext/associationproxy.py 2007-10-31 03:25:04 UTC (rev 3686) </span><span class="lines">@@ -106,7 +106,7 @@ </span><span class="cx"> Optional, use with proxy_factory. See the _set() method for </span><span class="cx"> details. </span><span class="cx"> """ </span><del>- </del><ins>+ </ins><span class="cx"> self.target_collection = targetcollection # backwards compat name... </span><span class="cx"> self.value_attr = attr </span><span class="cx"> self.creator = creator </span><span class="lines">@@ -141,7 +141,7 @@ </span><span class="cx"> "scope") </span><span class="cx"> return getattr(obj, target) </span><span class="cx"> return lazy_collection </span><del>- </del><ins>+ </ins><span class="cx"> def __get__(self, obj, class_): </span><span class="cx"> if obj is None: </span><span class="cx"> self.owning_class = class_ </span><span class="lines">@@ -204,12 +204,12 @@ </span><span class="cx"> </span><span class="cx"> if self.proxy_factory: </span><span class="cx"> return self.proxy_factory(lazy_collection, creator, self.value_attr) </span><del>- </del><ins>+ </ins><span class="cx"> if self.getset_factory: </span><span class="cx"> getter, setter = self.getset_factory(self.collection_class, self) </span><span class="cx"> else: </span><span class="cx"> getter, setter = self._default_getset(self.collection_class) </span><del>- </del><ins>+ </ins><span class="cx"> if self.collection_class is list: </span><span class="cx"> return _AssociationList(lazy_collection, creator, getter, setter) </span><span class="cx"> elif self.collection_class is dict: </span><span class="lines">@@ -247,7 +247,7 @@ </span><span class="cx"> lazy_collection </span><span class="cx"> A callable returning a list-based collection of entities (usually </span><span class="cx"> an object attribute managed by a SQLAlchemy relation()) </span><del>- </del><ins>+ </ins><span class="cx"> creator </span><span class="cx"> A function that creates new target entities. Given one parameter: </span><span class="cx"> value. The assertion is assumed: </span><span class="lines">@@ -291,7 +291,7 @@ </span><span class="cx"> </span><span class="cx"> def __getitem__(self, index): </span><span class="cx"> return self._get(self.col[index]) </span><del>- </del><ins>+ </ins><span class="cx"> def __setitem__(self, index, value): </span><span class="cx"> if not isinstance(index, slice): </span><span class="cx"> self._set(self.col[index], value) </span><span class="lines">@@ -406,7 +406,7 @@ </span><span class="cx"> def __repr__(self): </span><span class="cx"> return repr(list(self)) </span><span class="cx"> </span><del>- def hash(self): </del><ins>+ def __hash__(self): </ins><span class="cx"> raise TypeError("%s objects are unhashable" % type(self).__name__) </span><span class="cx"> </span><span class="cx"> _NotProvided = object() </span><span class="lines">@@ -420,7 +420,7 @@ </span><span class="cx"> lazy_collection </span><span class="cx"> A callable returning a dict-based collection of entities (usually </span><span class="cx"> an object attribute managed by a SQLAlchemy relation()) </span><del>- </del><ins>+ </ins><span class="cx"> creator </span><span class="cx"> A function that creates new target entities. Given two parameters: </span><span class="cx"> key and value. The assertion is assumed: </span><span class="lines">@@ -462,7 +462,7 @@ </span><span class="cx"> </span><span class="cx"> def __getitem__(self, key): </span><span class="cx"> return self._get(self.col[key]) </span><del>- </del><ins>+ </ins><span class="cx"> def __setitem__(self, key, value): </span><span class="cx"> if key in self.col: </span><span class="cx"> self._set(self.col[key], key, value) </span><span class="lines">@@ -535,7 +535,7 @@ </span><span class="cx"> def popitem(self): </span><span class="cx"> item = self.col.popitem() </span><span class="cx"> return (item[0], self._get(item[1])) </span><del>- </del><ins>+ </ins><span class="cx"> def update(self, *a, **kw): </span><span class="cx"> if len(a) > 1: </span><span class="cx"> raise TypeError('update expected at most 1 arguments, got %i' % </span><span class="lines">@@ -554,7 +554,7 @@ </span><span class="cx"> def copy(self): </span><span class="cx"> return dict(self.items()) </span><span class="cx"> </span><del>- def hash(self): </del><ins>+ def __hash__(self): </ins><span class="cx"> raise TypeError("%s objects are unhashable" % type(self).__name__) </span><span class="cx"> </span><span class="cx"> class _AssociationSet(object): </span><span class="lines">@@ -567,7 +567,7 @@ </span><span class="cx"> collection </span><span class="cx"> A callable returning a set-based collection of entities (usually an </span><span class="cx"> object attribute managed by a SQLAlchemy relation()) </span><del>- </del><ins>+ </ins><span class="cx"> creator </span><span class="cx"> A function that creates new target entities. Given one parameter: </span><span class="cx"> value. The assertion is assumed: </span><span class="lines">@@ -707,10 +707,10 @@ </span><span class="cx"> </span><span class="cx"> def issubset(self, other): </span><span class="cx"> return util.Set(self).issubset(other) </span><del>- </del><ins>+ </ins><span class="cx"> def issuperset(self, other): </span><span class="cx"> return util.Set(self).issuperset(other) </span><del>- </del><ins>+ </ins><span class="cx"> def clear(self): </span><span class="cx"> self.col.clear() </span><span class="cx"> </span><span class="lines">@@ -727,5 +727,5 @@ </span><span class="cx"> def __repr__(self): </span><span class="cx"> return repr(util.Set(self)) </span><span class="cx"> </span><del>- def hash(self): </del><ins>+ def __hash__(self): </ins><span class="cx"> raise TypeError("%s objects are unhashable" % type(self).__name__) </span></span></pre></div> <a id="sqlalchemytrunklibsqlalchemyutilpy"></a> <div class="modfile"><h4>Modified: sqlalchemy/trunk/lib/sqlalchemy/util.py (3685 => 3686)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/trunk/lib/sqlalchemy/util.py 2007-10-31 03:17:51 UTC (rev 3685) +++ sqlalchemy/trunk/lib/sqlalchemy/util.py 2007-10-31 03:25:04 UTC (rev 3686) </span><span class="lines">@@ -112,13 +112,6 @@ </span><span class="cx"> else: </span><span class="cx"> yield elem </span><span class="cx"> </span><del>-def hash(string): - """return an md5 hash of the given string.""" - h = md5.new() - h.update(string) - return h.hexdigest() - - </del><span class="cx"> class ArgSingleton(type): </span><span class="cx"> instances = {} </span><span class="cx"> </span><span class="lines">@@ -530,6 +523,7 @@ </span><span class="cx"> </span><span class="cx"> __isub__ = difference_update </span><span class="cx"> </span><ins>+ </ins><span class="cx"> class UniqueAppender(object): </span><span class="cx"> """appends items to a collection such that only unique items </span><span class="cx"> are added.""" </span></span></pre></div> <a id="sqlalchemytrunktestextassociationproxypy"></a> <div class="modfile"><h4>Modified: sqlalchemy/trunk/test/ext/associationproxy.py (3685 => 3686)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/trunk/test/ext/associationproxy.py 2007-10-31 03:17:51 UTC (rev 3685) +++ sqlalchemy/trunk/test/ext/associationproxy.py 2007-10-31 03:25:04 UTC (rev 3686) </span><span class="lines">@@ -38,7 +38,7 @@ </span><span class="cx"> collection_class = self.collection_class </span><span class="cx"> </span><span class="cx"> metadata = MetaData(testbase.db) </span><del>- </del><ins>+ </ins><span class="cx"> parents_table = Table('Parent', metadata, </span><span class="cx"> Column('id', Integer, primary_key=True), </span><span class="cx"> Column('name', String)) </span><span class="lines">@@ -51,7 +51,7 @@ </span><span class="cx"> </span><span class="cx"> class Parent(object): </span><span class="cx"> children = association_proxy('_children', 'name') </span><del>- </del><ins>+ </ins><span class="cx"> def __init__(self, name): </span><span class="cx"> self.name = name </span><span class="cx"> </span><span class="lines">@@ -88,7 +88,7 @@ </span><span class="cx"> </span><span class="cx"> def _test_sequence_ops(self): </span><span class="cx"> Parent, Child = self.Parent, self.Child </span><del>- </del><ins>+ </ins><span class="cx"> p1 = Parent('P1') </span><span class="cx"> </span><span class="cx"> self.assert_(not p1._children) </span><span class="lines">@@ -114,7 +114,7 @@ </span><span class="cx"> </span><span class="cx"> self.assert_(p1._children[0].name == 'regular') </span><span class="cx"> self.assert_(p1._children[1].name == 'proxied') </span><del>- </del><ins>+ </ins><span class="cx"> del p1._children[1] </span><span class="cx"> </span><span class="cx"> self.assert_(len(p1._children) == 1) </span><span class="lines">@@ -125,7 +125,7 @@ </span><span class="cx"> </span><span class="cx"> self.assert_(len(p1._children) == 0) </span><span class="cx"> self.assert_(len(p1.children) == 0) </span><del>- </del><ins>+ </ins><span class="cx"> p1.children = ['a','b','c'] </span><span class="cx"> self.assert_(len(p1._children) == 3) </span><span class="cx"> self.assert_(len(p1.children) == 3) </span><span class="lines">@@ -152,7 +152,7 @@ </span><span class="cx"> </span><span class="cx"> p1.children.append('changed-in-place') </span><span class="cx"> self.assert_(p1.children.count('changed-in-place') == 2) </span><del>- </del><ins>+ </ins><span class="cx"> p1.children.remove('changed-in-place') </span><span class="cx"> self.assert_(p1.children.count('changed-in-place') == 1) </span><span class="cx"> </span><span class="lines">@@ -187,7 +187,9 @@ </span><span class="cx"> self.assert_(p1.children == after) </span><span class="cx"> self.assert_([c.name for c in p1._children] == after) </span><span class="cx"> </span><del>- </del><ins>+ self.assertRaises(TypeError, set, [p1.children]) + + </ins><span class="cx"> class DefaultTest(_CollectionOperations): </span><span class="cx"> def __init__(self, *args, **kw): </span><span class="cx"> super(DefaultTest, self).__init__(*args, **kw) </span><span class="lines">@@ -196,6 +198,7 @@ </span><span class="cx"> def test_sequence_ops(self): </span><span class="cx"> self._test_sequence_ops() </span><span class="cx"> </span><ins>+ </ins><span class="cx"> class ListTest(_CollectionOperations): </span><span class="cx"> def __init__(self, *args, **kw): </span><span class="cx"> super(ListTest, self).__init__(*args, **kw) </span><span class="lines">@@ -249,7 +252,7 @@ </span><span class="cx"> </span><span class="cx"> self.assert_(p1._children['a'].name == 'regular') </span><span class="cx"> self.assert_(p1._children['b'].name == 'proxied') </span><del>- </del><ins>+ </ins><span class="cx"> del p1._children['b'] </span><span class="cx"> </span><span class="cx"> self.assert_(len(p1._children) == 1) </span><span class="lines">@@ -281,7 +284,7 @@ </span><span class="cx"> </span><span class="cx"> p1._children = {} </span><span class="cx"> self.assert_(len(p1.children) == 0) </span><del>- </del><ins>+ </ins><span class="cx"> try: </span><span class="cx"> p1._children = [] </span><span class="cx"> self.assert_(False) </span><span class="lines">@@ -294,6 +297,9 @@ </span><span class="cx"> except exceptions.ArgumentError: </span><span class="cx"> self.assert_(True) </span><span class="cx"> </span><ins>+ self.assertRaises(TypeError, set, [p1.children]) + + </ins><span class="cx"> class SetTest(_CollectionOperations): </span><span class="cx"> def __init__(self, *args, **kw): </span><span class="cx"> super(SetTest, self).__init__(*args, **kw) </span><span class="lines">@@ -344,7 +350,7 @@ </span><span class="cx"> </span><span class="cx"> self.assert_(len(p1._children) == 0) </span><span class="cx"> self.assert_(len(p1.children) == 0) </span><del>- </del><ins>+ </ins><span class="cx"> p1.children = ['a','b','c'] </span><span class="cx"> self.assert_(len(p1._children) == 3) </span><span class="cx"> self.assert_(len(p1.children) == 3) </span><span class="lines">@@ -379,11 +385,11 @@ </span><span class="cx"> p1 = self.roundtrip(p1) </span><span class="cx"> self.assert_(len(p1.children) == 2) </span><span class="cx"> self.assert_(popped not in p1.children) </span><del>- </del><ins>+ </ins><span class="cx"> p1.children = ['a','b','c'] </span><span class="cx"> p1 = self.roundtrip(p1) </span><span class="cx"> self.assert_(p1.children == set(['a','b','c'])) </span><del>- </del><ins>+ </ins><span class="cx"> p1.children.discard('b') </span><span class="cx"> p1 = self.roundtrip(p1) </span><span class="cx"> self.assert_(p1.children == set(['a', 'c'])) </span><span class="lines">@@ -407,7 +413,9 @@ </span><span class="cx"> except exceptions.ArgumentError: </span><span class="cx"> self.assert_(True) </span><span class="cx"> </span><ins>+ self.assertRaises(TypeError, set, [p1.children]) </ins><span class="cx"> </span><ins>+ </ins><span class="cx"> def test_set_comparisons(self): </span><span class="cx"> Parent, Child = self.Parent, self.Child </span><span class="cx"> </span><span class="lines">@@ -434,7 +442,7 @@ </span><span class="cx"> control.issubset(other)) </span><span class="cx"> self.assertEqual(p1.children.issuperset(other), </span><span class="cx"> control.issuperset(other)) </span><del>- </del><ins>+ </ins><span class="cx"> self.assert_((p1.children == other) == (control == other)) </span><span class="cx"> self.assert_((p1.children != other) == (control != other)) </span><span class="cx"> self.assert_((p1.children < other) == (control < other)) </span><span class="lines">@@ -511,7 +519,7 @@ </span><span class="cx"> class ScalarTest(PersistTest): </span><span class="cx"> def test_scalar_proxy(self): </span><span class="cx"> metadata = MetaData(testbase.db) </span><del>- </del><ins>+ </ins><span class="cx"> parents_table = Table('Parent', metadata, </span><span class="cx"> Column('id', Integer, primary_key=True), </span><span class="cx"> Column('name', String)) </span><span class="lines">@@ -529,7 +537,7 @@ </span><span class="cx"> creator=lambda v: Child(bar=v)) </span><span class="cx"> baz = association_proxy('child', 'baz', </span><span class="cx"> creator=lambda v: Child(baz=v)) </span><del>- </del><ins>+ </ins><span class="cx"> def __init__(self, name): </span><span class="cx"> self.name = name </span><span class="cx"> </span><span class="lines">@@ -553,7 +561,7 @@ </span><span class="cx"> id, type_ = obj.id, type(obj) </span><span class="cx"> session.clear() </span><span class="cx"> return session.query(type_).get(id) </span><del>- </del><ins>+ </ins><span class="cx"> p = Parent('p') </span><span class="cx"> </span><span class="cx"> # No child </span><span class="lines">@@ -573,7 +581,7 @@ </span><span class="cx"> self.assert_(p.foo == 'a') </span><span class="cx"> self.assert_(p.bar == 'x') </span><span class="cx"> self.assert_(p.baz == 'c') </span><del>- </del><ins>+ </ins><span class="cx"> p = roundtrip(p) </span><span class="cx"> </span><span class="cx"> self.assert_(p.foo == 'a') </span><span class="lines">@@ -623,12 +631,12 @@ </span><span class="cx"> # Ensure an immediate __set__ works. </span><span class="cx"> p2 = Parent('p2') </span><span class="cx"> p2.bar = 'quux' </span><del>- </del><span class="cx"> </span><ins>+ </ins><span class="cx"> class LazyLoadTest(PersistTest): </span><span class="cx"> def setUp(self): </span><span class="cx"> metadata = MetaData(testbase.db) </span><del>- </del><ins>+ </ins><span class="cx"> parents_table = Table('Parent', metadata, </span><span class="cx"> Column('id', Integer, primary_key=True), </span><span class="cx"> Column('name', String)) </span><span class="lines">@@ -641,7 +649,7 @@ </span><span class="cx"> </span><span class="cx"> class Parent(object): </span><span class="cx"> children = association_proxy('_children', 'name') </span><del>- </del><ins>+ </ins><span class="cx"> def __init__(self, name): </span><span class="cx"> self.name = name </span><span class="cx"> </span><span class="lines">@@ -730,7 +738,7 @@ </span><span class="cx"> </span><span class="cx"> self.assert_('_children' in p.__dict__) </span><span class="cx"> self.assert_(p._children is not None) </span><del>- </del><span class="cx"> </span><ins>+ </ins><span class="cx"> if __name__ == "__main__": </span><del>- testbase.main() </del><ins>+ testbase.main() </ins></span></pre> </div> </div> </body> </html> |