largely interchangeable with "ensure" (so says the dictionary), so I'm not
completely illiterate, but its definitely sub-optimal to "ensure" which is
non-ambiguous.
+- invalid options sent to 'cascade' string will raise an exception [ticket:406]
0.3.3
- string-based FROM clauses fixed, i.e. select(..., from_obj=["sometext"])
# This module is part of SQLAlchemy and is released under
# the MIT License: http://www.opensource.org/licenses/mit-license.php
-from sqlalchemy import sql, util
+from sqlalchemy import sql, util, exceptions
+all_cascades = util.Set(["delete", "delete-orphan", "all", "merge", "expunge", "save-update", "refresh-expire"])
class CascadeOptions(object):
"""keeps track of the options sent to relation().cascade"""
def __init__(self, arg=""):
self.expunge = "expunge" in values or "all" in values
# refresh_expire not really implemented as of yet
#self.refresh_expire = "refresh-expire" in values or "all" in values
+
+ for x in values:
+ if x not in all_cascades:
+ raise exceptions.ArgumentError("Invalid cascade option '%s'" % x)
+
def __contains__(self, item):
return getattr(self, item.replace("-", "_"), False)
def __repr__(self):
except exceptions.ArgumentError:
pass
+ def testbadcascade(self):
+ mapper(Address, addresses)
+ try:
+ mapper(User, users, properties={'addresses':relation(Address, cascade="fake, all, delete-orphan")})
+ assert False
+ except exceptions.ArgumentError, e:
+ assert str(e) == "Invalid cascade option 'fake'"
+
def testcolumnprefix(self):
mapper(User, users, column_prefix='_')
s = create_session()