Author: luke
Date: 2007-04-20 07:47:52 -0600 (Fri, 20 Apr 2007)
New Revision: 2573
Modified:
SQLObject/branches/cache-deps-on-views/sqlobject/materialized/dependency.py
SQLObject/branches/cache-deps-on-views/sqlobject/materialized/materialized.py
SQLObject/branches/cache-deps-on-views/sqlobject/materialized/tests/test_materialized.py
Log:
Minor checkpoint
Modified: SQLObject/branches/cache-deps-on-views/sqlobject/materialized/dependency.py
===================================================================
--- SQLObject/branches/cache-deps-on-views/sqlobject/materialized/dependency.py 2007-04-20 13:43:34 UTC (rev 2572)
+++ SQLObject/branches/cache-deps-on-views/sqlobject/materialized/dependency.py 2007-04-20 13:47:52 UTC (rev 2573)
@@ -148,7 +148,6 @@
if _toProcess is None:
_toProcess = self.instancesToProcess(inst, attrs)
for (cls, attr), insts in _toProcess.iteritems():
- print insts
for inst in insts:
inst._SO_updateCacheObject([attr])
self.process(inst, [attr])
@@ -156,7 +155,9 @@
dep = SQLDependencyManager()
+dependentOn = dep.dependentOn
+
def _processDepsOnChange(inst, kwargs):
dep.process(inst, kwargs.keys())
@@ -168,5 +169,6 @@
toProcess = dep.instancesToProcess(inst, attrs)
def f(inst, toProcess=toProcess):
dep.process(inst, attrs, _toProcess=toProcess)
- post_funcs.append(f)
+ if toProcess:
+ post_funcs.append(f)
listen(_processDepsOnDelete, SQLObject, RowDestroySignal)
\ No newline at end of file
Modified: SQLObject/branches/cache-deps-on-views/sqlobject/materialized/materialized.py
===================================================================
--- SQLObject/branches/cache-deps-on-views/sqlobject/materialized/materialized.py 2007-04-20 13:43:34 UTC (rev 2572)
+++ SQLObject/branches/cache-deps-on-views/sqlobject/materialized/materialized.py 2007-04-20 13:47:52 UTC (rev 2573)
@@ -1,7 +1,8 @@
from sqlobject import SQLObject, SQLObjectNotFound, sqlmeta as _sqlmeta
from sqlobject import events, col
from sqlobject.main import makeProperties
-from dependency import *
+from dependency import dep
+from sqlobject.events import *
class materialized_sqlmeta(_sqlmeta):
cachedIn = None
@@ -16,6 +17,7 @@
cachedIn = cls.table + '_cache'
class cache_sqlmeta:
table = cachedIn
+ idType = cls.idType
cls.cacheClass = type(cls.soClass.__name__+'Cache', (SQLObject,), {'sqlmeta': cache_sqlmeta})
@@ -28,13 +30,11 @@
def _init(self, id, connection=None, **kw):
super(MaterializedSQLObject, self)._init(id, connection=connection, **kw)
try:
- self._SO_cacheObject = self.sqlmeta.cacheClass.get(self.id, connection=connection)
+ self._SO_cacheObject = self.sqlmeta.cacheClass.get(self.id, connection=self._connection)
except SQLObjectNotFound:
- self._SO_cacheObject = None
+ print self.sqlmeta.cacheClass._connection, connection
+ self._SO_cacheObject = self.sqlmeta.cacheClass(id=self.id, connection=self._connection)
- def _create(self, id, **kw):
- super(MaterializedSQLObject, self)._create(id, **kw)
- self._SO_cacheObject = self.sqlmeta.cacheClass(id=self.id)
def _SO_updateCacheObject(self, attrs):
for attr in attrs:
Modified: SQLObject/branches/cache-deps-on-views/sqlobject/materialized/tests/test_materialized.py
===================================================================
--- SQLObject/branches/cache-deps-on-views/sqlobject/materialized/tests/test_materialized.py 2007-04-20 13:43:34 UTC (rev 2572)
+++ SQLObject/branches/cache-deps-on-views/sqlobject/materialized/tests/test_materialized.py 2007-04-20 13:47:52 UTC (rev 2573)
@@ -2,7 +2,7 @@
from sqlobject import *
from sqlobject.tests.dbtest import *
from sqlobject.materialized import *
-from sqlobject.sqlbuilder import ImportProxy
+from sqlobject.sqlbuilder import ImportProxy, AND
MO = ImportProxy('MaterializedOne')
MT = ImportProxy('MaterializedTwo')
@@ -13,16 +13,31 @@
twos = SQLMultipleJoin('MaterializedTwo', joinColumn='oneID')
@cachedAs(IntCol)
- @dep.dependentOn('MaterializedOne', 'twos')
+ @dependentOn('MaterializedOne', 'twos')
def _get_twoCount(self):
print "getting twoCount", self.twos.count()
return self.twos.count()
@cachedAs(IntCol)
- @dep.dependentOn('MaterializedTwo', 'length', MO.q.twos)
+ @dependentOn('MaterializedTwo', 'length', MO.q.twos)
def _get_detailSize(self):
return self.twos.sum('length')
+ @cachedAs(IntCol)
+ @dependentOn('MaterializedTwo', 'id', AND(MO.q.twos, MT.q.length<=4))
+ def _get_smallTwoCount(self):
+ return self.twos.filter(MT.q.length<=4).count()
+
+ @dependentOn('MaterializedTwo', 'id', AND(MO.q.twos, MT.q.length<=4))
+ def _get_smallTwos(self):
+ print "getting small twos"
+ return self.twos.filter(MT.q.length<=4)
+
+ @cachedAs(IntCol)
+ @dependentOn('MaterializedOne', 'smallTwos')
+ def _get_smallTwoCount2(self):
+ return self.smallTwos.count()
+
class MaterializedTwo(MaterializedSQLObject):
class sqlmeta:
cachedIn = 'cache_materialized_two'
@@ -32,19 +47,19 @@
one = ForeignKey('MaterializedOne')
@cachedAs(StringCol)
- @dep.dependentOn('MaterializedOne', 'name', MT.q.one)
+ @dependentOn('MaterializedOne', 'name', MT.q.one)
def _get_name(self):
return self.one.name
@cachedAs(StringCol)
- @dep.dependentOn('MaterializedTwo', 'detail')
- @dep.dependentOn('MaterializedOne', 'name', MT.q.one)
+ @dependentOn('MaterializedTwo', 'detail')
+ @dependentOn('MaterializedOne', 'name', MT.q.one)
def _get_name2(self):
return self.one.name + self.detail
@cachedAs(StringCol)
- @dep.dependentOn('MaterializedTwo', 'detail')
- @dep.dependentOn('MaterializedTwo', 'name')
+ @dependentOn('MaterializedTwo', 'detail')
+ @dependentOn('MaterializedTwo', 'name')
def _get_name3(self):
''' dep on dep '''
return self.name + self.detail
@@ -74,8 +89,8 @@
def testSetupDepsForJoin():
deps = dep.get('MaterializedTwo', 'id')
- assert set((x,y) for x,y,z in deps) == set([('MaterializedOne', 'twos')])
- assert [z for x,y,z in deps][0] is not None
+ assert ('MaterializedOne', 'twos') in set((x,y) for x,y,z in deps)
+ assert None not in [z for x,y,z in deps]
def testProcessInstances():
@@ -113,6 +128,12 @@
assert obj._SO_cacheObject.name == 'G'
assert obj.name == 'G'
+def testChainedModificationSettingCacheObject():
+ obj = twos[2]
+ obj.one.name = 'G'
+ assert obj._SO_cacheObject.name3 == 'G'+obj.detail
+ assert obj.name3 == 'G'+obj.detail
+
def testJoinUpdateSettingCacheObject():
obj = ones[0]
prev = obj.detailSize
@@ -137,6 +158,21 @@
assert obj._SO_cacheObject.detailSize == prevS + new_two.length
assert obj._SO_cacheObject.twoCount == prevC + 1
new_two.destroySelf()
- assert obj.twos.count() == prevC
assert obj._SO_cacheObject.detailSize == prevS
- assert obj._SO_cacheObject.twoCount == prevC
\ No newline at end of file
+ assert obj._SO_cacheObject.twoCount == prevC
+
+def testRestrictedDependencyRoute():
+ assert twos[1].length <= 4
+ insts = dep.instancesToProcess(twos[1], ['id'])
+ assert insts[('MaterializedOne', 'smallTwoCount')] == [ones[0]]
+ assert twos[3].length > 4
+ insts = dep.instancesToProcess(twos[3], ['id'])
+ assert insts[('MaterializedOne', 'smallTwoCount')] == []
+
+def testRestrictedDependencyRoute2():
+ assert twos[1].length <= 4
+ insts = dep.instancesToProcess(twos[1], ['id'])
+ assert insts[('MaterializedOne', 'smallTwos')] == [ones[0]]
+ assert twos[3].length > 4
+ insts = dep.instancesToProcess(twos[3], ['id'])
+ assert insts[('MaterializedOne', 'smallTwos')] == []
\ No newline at end of file
|