class TableSingleton(type):
def __call__(self, name, engine, *args, **kwargs):
try:
- return engine.tables[name]
- except:
+ table = engine.tables[name]
+ if len(args):
+ if kwargs.get('redefine', False):
+ table.reload_values(*args)
+ else:
+ raise "Table '%s' is already defined. specify 'redefine=True' to remap columns" % name
+ return table
+ except KeyError:
if kwargs.get('mustexist', False):
raise "Table '%s' not defined" % name
table = type.__call__(self, name, engine, *args, **kwargs)
return table
-
class Table(SchemaItem):
"""represents a relational database table."""
__metaclass__ = TableSingleton
self._impl = self.engine.tableimpl(self)
self._init_items(*args)
+ def reload_values(self, *args):
+ self.columns = OrderedProperties()
+ self.c = self.columns
+ self.foreign_keys = OrderedProperties()
+ self.primary_keys = []
+ self._impl = self.engine.tableimpl(self)
+ self._init_items(*args)
+
def append_item(self, item):
self._init_items(item)
else:
self._column = self._colspec
+ print "setting up key " + self._column.key + " onto table " + self.parent.table.name
self.parent.table.foreign_keys[self._column.key] = self
return self._column