summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/ext/sqlsoup.py
diff options
context:
space:
mode:
authorJonathan Ellis <jbellis@gmail.com>2006-10-31 05:33:44 +0000
committerJonathan Ellis <jbellis@gmail.com>2006-10-31 05:33:44 +0000
commit0bcace02152a19255dc4603910261925474a52b1 (patch)
treecb99dc7c1bc59788d73ba6654f2fe79a9f4ad82c /lib/sqlalchemy/ext/sqlsoup.py
parent02c3130c45dc3b2499120a79e0ce0f404c374094 (diff)
downloadsqlalchemy-0bcace02152a19255dc4603910261925474a52b1.tar.gz
raise InvalidRequest when asked to perform DDL on non-Tables
Diffstat (limited to 'lib/sqlalchemy/ext/sqlsoup.py')
-rw-r--r--lib/sqlalchemy/ext/sqlsoup.py17
1 files changed, 15 insertions, 2 deletions
diff --git a/lib/sqlalchemy/ext/sqlsoup.py b/lib/sqlalchemy/ext/sqlsoup.py
index b723fccb2..06c3efd25 100644
--- a/lib/sqlalchemy/ext/sqlsoup.py
+++ b/lib/sqlalchemy/ext/sqlsoup.py
@@ -212,6 +212,11 @@ Boring tests here. Nothing of real expository value.
Traceback (most recent call last):
...
NoSuchTableError: nosuchtable
+
+ >>> years_with_count.insert(published_year='2007', n=1)
+ Traceback (most recent call last):
+ ...
+ InvalidRequestError: SQLSoup can only modify mapped Tables (found: Alias)
"""
from sqlalchemy import *
@@ -282,17 +287,25 @@ class PKNotFoundError(SQLAlchemyError): pass
# metaclass is necessary to expose class methods with getattr, e.g.
# we want to pass db.users.select through to users._mapper.select
+def _ddl_check(cls):
+ if not isinstance(cls._table, Table):
+ msg = 'SQLSoup can only modify mapped Tables (found: %s)' \
+ % cls._table.__class__.__name__
+ raise InvalidRequestError(msg)
class TableClassType(type):
def insert(cls, **kwargs):
+ _ddl_check(cls)
o = cls()
o.__dict__.update(kwargs)
return o
- def _selectable(cls):
- return cls._table
def delete(cls, *args, **kwargs):
+ _ddl_check(cls)
cls._table.delete(*args, **kwargs).execute()
def update(cls, whereclause=None, values=None, **kwargs):
+ _ddl_check(cls)
cls._table.update(whereclause, values).execute(**kwargs)
+ def _selectable(cls):
+ return cls._table
def __getattr__(cls, attr):
if attr == '_query':
# called during mapper init