Author: novalis
Date: 2007-01-08 14:32:46 -0700 (Mon, 08 Jan 2007)
New Revision: 2178
Modified:
SQLObject/trunk/sqlobject/main.py
SQLObject/trunk/sqlobject/versioning/__init__.py
SQLObject/trunk/sqlobject/versioning/test/test_version.py
Log:
now versioning works outside of tests
Modified: SQLObject/trunk/sqlobject/main.py
===================================================================
--- SQLObject/trunk/sqlobject/main.py 2007-01-08 19:22:26 UTC (rev 2177)
+++ SQLObject/trunk/sqlobject/main.py 2007-01-08 21:32:46 UTC (rev 2178)
@@ -787,10 +787,6 @@
if connection and not hasattr(cls, '_connection'):
cls.setConnection(connection)
- # Now the class is in an essentially OK-state, so we can
- # set up any magic attributes:
- declarative.setup_attributes(cls, new_attrs)
-
# We have to check if there are columns in the inherited
# _columns where the attribute has been set to None in this
# class. If so, then we need to remove that column from
@@ -806,6 +802,10 @@
for column in implicitColumns:
cls.sqlmeta.addColumn(column)
+ # Now the class is in an essentially OK-state, so we can
+ # set up any magic attributes:
+ declarative.setup_attributes(cls, new_attrs)
+
if cls.sqlmeta.fromDatabase:
cls.sqlmeta.addColumnsFromDatabase()
Modified: SQLObject/trunk/sqlobject/versioning/__init__.py
===================================================================
--- SQLObject/trunk/sqlobject/versioning/__init__.py 2007-01-08 19:22:26 UTC (rev 2177)
+++ SQLObject/trunk/sqlobject/versioning/__init__.py 2007-01-08 21:32:46 UTC (rev 2178)
@@ -27,6 +27,12 @@
return fields
+ @classmethod
+ def select(cls, clause=None, *args, **kw):
+ if not getattr(cls, '_connection', None):
+ cls._connection = cls.masterClass._connection
+ return super(Version, cls).select(clause, *args, **kw)
+
def getColumns(columns, cls):
for column, defi in cls.sqlmeta.columnDefinitions.items():
if column.endswith("ID") and isinstance(defi, ForeignKey):
@@ -45,27 +51,25 @@
def __addtoclass__(self, soClass, name):
self.name = name
self.soClass = soClass
- self.versionClass = None
- events.listen(self.createTable,
- soClass, events.CreateTableSignal)
- events.listen(self.rowUpdate, soClass,
- events.RowUpdateSignal)
- def createVersionTable(self, cls, conn):
attrs = {'dateArchived': DateTimeCol(default=datetime.now),
'master': ForeignKey(self.soClass.__name__),
'masterClass' : self.soClass,
- '_connection' : conn,
}
-
+
getColumns (attrs, self.soClass)
+
+ self.versionClass = type(self.soClass.__name__+'Versions',
+ (Version,),
+ attrs)
- if not self.versionClass:
- self.versionClass = type(self.soClass.__name__+'Versions',
- (Version,),
- attrs)
+ events.listen(self.createTable,
+ soClass, events.CreateTableSignal)
+ events.listen(self.rowUpdate, soClass,
+ events.RowUpdateSignal)
- self.versionClass.createTable(ifNotExists=True, connection=conn)
+ def createVersionTable(self, cls, conn):
+ self.versionClass.createTable(ifNotExists=True, connection=conn)
def createTable(self, soClass, connection, extra_sql, post_funcs):
assert soClass is self.soClass
Modified: SQLObject/trunk/sqlobject/versioning/test/test_version.py
===================================================================
--- SQLObject/trunk/sqlobject/versioning/test/test_version.py 2007-01-08 19:22:26 UTC (rev 2177)
+++ SQLObject/trunk/sqlobject/versioning/test/test_version.py 2007-01-08 21:32:46 UTC (rev 2178)
@@ -11,6 +11,7 @@
for cls in [MyClass, Base, Child, Government, Monarchy, VChild, HasForeign]:
setupClass(cls)
if hasattr(cls, 'versions'):
+ setupClass(cls.versions.versionClass)
for version in cls.versions.versionClass.select():
version.destroySelf()
|