diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2006-10-06 15:50:27 +0000 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2006-10-06 15:50:27 +0000 |
commit | 702348b48fc33a79a64bb56b9359f34c1aa15f1e (patch) | |
tree | 8413069d54fbd3f6fbe80942f36f3160eb808e3e /lib/sqlalchemy/schema.py | |
parent | 9400b4d6a28ddb7a152418af33add8307292b7de (diff) | |
download | sqlalchemy-702348b48fc33a79a64bb56b9359f34c1aa15f1e.tar.gz |
fix "no engine found" to raise explicit error, [ticket:326]
Diffstat (limited to 'lib/sqlalchemy/schema.py')
-rw-r--r-- | lib/sqlalchemy/schema.py | 37 |
1 files changed, 22 insertions, 15 deletions
diff --git a/lib/sqlalchemy/schema.py b/lib/sqlalchemy/schema.py index 0adfaa1c1..1d4209561 100644 --- a/lib/sqlalchemy/schema.py +++ b/lib/sqlalchemy/schema.py @@ -40,7 +40,15 @@ class SchemaItem(object): """return the the MetaData to which this item is bound""" return None def _get_engine(self): + """return the engine or None if no engine""" return self._derived_metadata().engine + def get_engine(self): + """return the engine or raise an error if no engine""" + e = self._get_engine() + if e is not None: + return e + else: + raise exceptions.InvalidRequestError("This SchemaItem is not connected to any Engine") def _set_casing_strategy(self, name, kwargs, keyname='case_sensitive'): """set the "case_sensitive" argument sent via keywords to the item's constructor. @@ -135,7 +143,7 @@ class TableSingleton(type): if autoload_with: autoload_with.reflecttable(table) else: - metadata.engine.reflecttable(table) + metadata.get_engine().reflecttable(table) except exceptions.NoSuchTableError: table.deregister() raise @@ -311,8 +319,8 @@ class Table(SchemaItem, sql.TableClause): del self.metadata.tables[key] def exists(self, engine=None): - if engine is None and self.metadata.is_bound(): - engine = self.engine + if engine is None: + engine = self.get_engine() def do(conn): e = conn.engine @@ -323,13 +331,13 @@ class Table(SchemaItem, sql.TableClause): if connectable is not None: connectable.create(self, checkfirst=checkfirst) else: - self.engine.create(self, checkfirst=checkfirst) + self.get_engine().create(self, checkfirst=checkfirst) return self def drop(self, connectable=None, checkfirst=False): if connectable is not None: connectable.drop(self, checkfirst=checkfirst) else: - self.engine.drop(self, checkfirst=checkfirst) + self.get_engine().drop(self, checkfirst=checkfirst) def tometadata(self, metadata, schema=None): """return a copy of this Table associated with a different MetaData.""" try: @@ -648,7 +656,7 @@ class DefaultGenerator(SchemaItem): else: self.column.default = self def execute(self, **kwargs): - return self.engine.execute_default(self, **kwargs) + return self.get_engine().execute_default(self, **kwargs) def __repr__(self): return "DefaultGenerator()" @@ -696,10 +704,10 @@ class Sequence(DefaultGenerator): super(Sequence, self)._set_parent(column) column.sequence = self def create(self): - self.engine.create(self) + self.get_engine().create(self) return self def drop(self): - self.engine.drop(self) + self.get_engine().drop(self) def accept_schema_visitor(self, visitor): """calls the visit_seauence method on the given visitor.""" return visitor.visit_sequence(self) @@ -839,13 +847,13 @@ class Index(SchemaItem): if connectable is not None: connectable.create(self) else: - self.engine.create(self) + self.get_engine().create(self) return self def drop(self, connectable=None): if connectable is not None: connectable.drop(self) else: - self.engine.drop(self) + self.get_engine().drop(self) def accept_schema_visitor(self, visitor): visitor.visit_index(self) def __str__(self): @@ -889,8 +897,8 @@ class MetaData(SchemaItem): if connectable is None: connectable = engine - if connectable is None and self.is_bound(): - connectable = self.engine + if connectable is None: + connectable = self.get_engine() def do(conn): e = conn.engine @@ -919,8 +927,8 @@ class MetaData(SchemaItem): if connectable is None: connectable = engine - if connectable is None and self.is_bound(): - connectable = self.engine + if connectable is None: + connectable = self.get_engine() def do(conn): e = conn.engine @@ -988,7 +996,6 @@ class DynamicMetaData(MetaData): return self.context._engine else: return None -# raise exceptions.InvalidRequestError("This DynamicMetaData is not connected to any engine") engine=property(_get_engine) class SchemaVisitor(sql.ClauseVisitor): |