[Commits] (vajda) - query test cases now run with ramdb
commits at osafoundation.org
commits at osafoundation.org
Thu Dec 16 16:07:57 PST 2004
Commit by: vajda
Modified files:
chandler/crypto/.cvsignore 1.1 1.2
chandler/repository/item/Item.py 1.177 1.178
chandler/repository/item/ItemHandler.py 1.57 1.58
chandler/repository/item/RefCollections.py 1.4 1.5
chandler/repository/item/Values.py 1.30 1.31
chandler/repository/persistence/DBContainer.py 1.27 1.28
chandler/repository/persistence/XMLRefs.py 1.4 1.5
chandler/repository/persistence/XMLRepositoryView.py 1.71 1.72
chandler/repository/query/tests/QueryTestCase.py 1.3 1.4
chandler/repository/schema/Kind.py 1.93 1.94
chandler/repository/util/LinkedMap.py 1.21 1.22
Log message:
- query test cases now run with ramdb
- fixed unloading-item-with-changed-references-to-it bug
ViewCVS links:
http://cvs.osafoundation.org/index.cgi/chandler/crypto/.cvsignore.diff?r1=text&tr1=1.1&r2=text&tr2=1.2
http://cvs.osafoundation.org/index.cgi/chandler/repository/item/Item.py.diff?r1=text&tr1=1.177&r2=text&tr2=1.178
http://cvs.osafoundation.org/index.cgi/chandler/repository/item/ItemHandler.py.diff?r1=text&tr1=1.57&r2=text&tr2=1.58
http://cvs.osafoundation.org/index.cgi/chandler/repository/item/RefCollections.py.diff?r1=text&tr1=1.4&r2=text&tr2=1.5
http://cvs.osafoundation.org/index.cgi/chandler/repository/item/Values.py.diff?r1=text&tr1=1.30&r2=text&tr2=1.31
http://cvs.osafoundation.org/index.cgi/chandler/repository/persistence/DBContainer.py.diff?r1=text&tr1=1.27&r2=text&tr2=1.28
http://cvs.osafoundation.org/index.cgi/chandler/repository/persistence/XMLRefs.py.diff?r1=text&tr1=1.4&r2=text&tr2=1.5
http://cvs.osafoundation.org/index.cgi/chandler/repository/persistence/XMLRepositoryView.py.diff?r1=text&tr1=1.71&r2=text&tr2=1.72
http://cvs.osafoundation.org/index.cgi/chandler/repository/query/tests/QueryTestCase.py.diff?r1=text&tr1=1.3&r2=text&tr2=1.4
http://cvs.osafoundation.org/index.cgi/chandler/repository/schema/Kind.py.diff?r1=text&tr1=1.93&r2=text&tr2=1.94
http://cvs.osafoundation.org/index.cgi/chandler/repository/util/LinkedMap.py.diff?r1=text&tr1=1.21&r2=text&tr2=1.22
Index: chandler/repository/persistence/DBContainer.py
diff -u chandler/repository/persistence/DBContainer.py:1.27 chandler/repository/persistence/DBContainer.py:1.28
--- chandler/repository/persistence/DBContainer.py:1.27 Mon Dec 13 16:31:06 2004
+++ chandler/repository/persistence/DBContainer.py Thu Dec 16 16:07:53 2004
@@ -1,6 +1,6 @@
-__revision__ = "$Revision: 1.27 $"
-__date__ = "$Date: 2004/12/14 00:31:06 $"
+__revision__ = "$Revision: 1.28 $"
+__date__ = "$Date: 2004/12/17 00:07:53 $"
__copyright__ = "Copyright (c) 2002 Open Source Applications Foundation"
__license__ = "http://osafoundation.org/Chandler_0.1_license_terms.htm"
@@ -1141,3 +1141,7 @@
name = name.encode('utf-8')
return super(HashTuple, self).__contains__(_uuid.hash(name))
+
+ def hash(self, name):
+
+ return _uuid.hash(name)
Index: chandler/crypto/.cvsignore
diff -u chandler/crypto/.cvsignore:1.1 chandler/crypto/.cvsignore:1.2
--- chandler/crypto/.cvsignore:1.1 Wed Jun 23 11:24:30 2004
+++ chandler/crypto/.cvsignore Thu Dec 16 16:07:52 2004
@@ -1,3 +1,4 @@
*.pyc
*.pyo
*.log
+randpool.dat
Index: chandler/repository/item/RefCollections.py
diff -u chandler/repository/item/RefCollections.py:1.4 chandler/repository/item/RefCollections.py:1.5
--- chandler/repository/item/RefCollections.py:1.4 Mon Dec 13 16:31:05 2004
+++ chandler/repository/item/RefCollections.py Thu Dec 16 16:07:52 2004
@@ -1,6 +1,6 @@
-__revision__ = "$Revision: 1.4 $"
-__date__ = "$Date: 2004/12/14 00:31:05 $"
+__revision__ = "$Revision: 1.5 $"
+__date__ = "$Date: 2004/12/17 00:07:52 $"
__copyright__ = "Copyright (c) 2003-2004 Open Source Applications Foundation"
__license__ = "http://osafoundation.org/Chandler_0.1_license_terms.htm"
@@ -84,7 +84,7 @@
for key in self.iterkeys():
link = self._get(key)
- copyOther = copyFn(copyItem, link._value, policy)
+ copyOther = copyFn(copyItem, link.getValue(self), policy)
if copyOther is not None and copyOther not in refList:
refList.append(copyOther, link._alias)
@@ -471,18 +471,6 @@
return False
- def _unloadRef(self, other):
-
- key = other._uuid
- if self.has_key(key, load=False):
- link = self._get(key, load=False)
- if link is not None:
- if link._alias is not None:
- del self._aliases[link._alias]
- self._remove(key)
- else:
- raise AssertionError, '%s: unloading non-loaded ref %s' %(self, other.itsPath)
-
def _unload(self):
references = self._item._references
@@ -490,7 +478,7 @@
otherName = self._otherName
for link in self._values():
- references._unloadValue(name, link._value, otherName)
+ references._unloadValue(name, link.getValue(self), otherName)
def linkChanged(self, link, key):
@@ -711,7 +699,7 @@
refs = self._item._references
for key in self.iterkeys():
link = self._get(key)
- refs._saveRef(key, link._value,
+ refs._saveRef(key, link.getValue(self),
generator, False, version, {}, mode,
previous=link._previousKey, next=link._nextKey,
alias=link._alias)
Index: chandler/repository/item/Values.py
diff -u chandler/repository/item/Values.py:1.30 chandler/repository/item/Values.py:1.31
--- chandler/repository/item/Values.py:1.30 Mon Dec 13 16:31:05 2004
+++ chandler/repository/item/Values.py Thu Dec 16 16:07:52 2004
@@ -1,6 +1,6 @@
-__revision__ = "$Revision: 1.30 $"
-__date__ = "$Date: 2004/12/14 00:31:05 $"
+__revision__ = "$Revision: 1.31 $"
+__date__ = "$Date: 2004/12/17 00:07:52 $"
__copyright__ = "Copyright (c) 2004 Open Source Applications Foundation"
__license__ = "http://osafoundation.org/Chandler_0.1_license_terms.htm"
@@ -195,7 +195,7 @@
except AttributeError:
pass
- def _mergeChanges(self, source):
+ def _copyChanges(self, source):
if '_flags' in source.__dict__:
for key, flags in source._flags.iteritems():
Index: chandler/repository/item/Item.py
diff -u chandler/repository/item/Item.py:1.177 chandler/repository/item/Item.py:1.178
--- chandler/repository/item/Item.py:1.177 Mon Dec 13 16:31:05 2004
+++ chandler/repository/item/Item.py Thu Dec 16 16:07:52 2004
@@ -1,6 +1,6 @@
-__revision__ = "$Revision: 1.177 $"
-__date__ = "$Date: 2004/12/14 00:31:05 $"
+__revision__ = "$Revision: 1.178 $"
+__date__ = "$Date: 2004/12/17 00:07:52 $"
__copyright__ = "Copyright (c) 2003-2004 Open Source Applications Foundation"
__license__ = "http://osafoundation.org/Chandler_0.1_license_terms.htm"
@@ -695,7 +695,7 @@
if not load:
if self._children is not None:
for link in self._children._itervalues():
- yield link._value
+ yield link.getValue(self._children)
elif self._children is not None:
for child in self._children:
@@ -2458,7 +2458,7 @@
assert item._uuid == self._item._uuid
for link in self._itervalues():
- link._value._parent = item
+ link.getValue(self)._parent = item
if item is not None and item._isItem():
item._status |= Item.CONTAINER
@@ -2475,10 +2475,7 @@
def _unloadChild(self, child):
- if child._uuid in self:
- self._remove(child._uuid)
- if child._name is not None:
- del self._aliases[child._name]
+ self._unloadRef(child)
def __repr__(self):
Index: chandler/repository/schema/Kind.py
diff -u chandler/repository/schema/Kind.py:1.93 chandler/repository/schema/Kind.py:1.94
--- chandler/repository/schema/Kind.py:1.93 Mon Dec 13 16:31:07 2004
+++ chandler/repository/schema/Kind.py Thu Dec 16 16:07:54 2004
@@ -1,6 +1,6 @@
-__revision__ = "$Revision: 1.93 $"
-__date__ = "$Date: 2004/12/14 00:31:07 $"
+__revision__ = "$Revision: 1.94 $"
+__date__ = "$Date: 2004/12/17 00:07:54 $"
__copyright__ = "Copyright (c) 2003-2004 Open Source Applications Foundation"
__license__ = "http://osafoundation.org/Chandler_0.1_license_terms.htm"
@@ -246,7 +246,7 @@
for uuid, link in inheritedAttributes._iteritems():
name = link._alias
if not self.resolve(name):
- attribute = link._value
+ attribute = link.getValue(self)
for kind in attribute.kinds:
if self.isKindOf(kind):
break
Index: chandler/repository/util/LinkedMap.py
diff -u chandler/repository/util/LinkedMap.py:1.21 chandler/repository/util/LinkedMap.py:1.22
--- chandler/repository/util/LinkedMap.py:1.21 Mon Dec 13 16:31:08 2004
+++ chandler/repository/util/LinkedMap.py Thu Dec 16 16:07:54 2004
@@ -1,6 +1,6 @@
-__revision__ = "$Revision: 1.21 $"
-__date__ = "$Date: 2004/12/14 00:31:08 $"
+__revision__ = "$Revision: 1.22 $"
+__date__ = "$Date: 2004/12/17 00:07:54 $"
__copyright__ = "Copyright (c) 2003-2004 Open Source Applications Foundation"
__license__ = "http://osafoundation.org/Chandler_0.1_license_terms.htm"
@@ -47,6 +47,14 @@
self._previousKey = previousKey
linkedMap.linkChanged(self, key)
+ def getValue(self, linkedMap):
+
+ return self._value
+
+ def setValue(self, linkedMap, value):
+
+ self._value = value
+
def __init__(self, new):
@@ -87,7 +95,7 @@
target._clear_()
for key, link in super(LinkedMap, self).iteritems():
- targetLink = target._makeLink(link._value)
+ targetLink = target._makeLink(link.getValue(self))
link._copy_(targetLink)
target._insert(key, targetLink)
@@ -132,7 +140,7 @@
def __getitem__(self, key, load=True):
- return self._get(key, load)._value
+ return self._get(key, load).getValue(self)
def __setitem__(self, key, value,
previousKey=None, nextKey=None, alias=None):
@@ -140,7 +148,7 @@
link = super(LinkedMap, self).get(key)
if link is not None:
- link._value = value
+ link.setValue(self, value)
self.linkChanged(link, key)
else:
@@ -239,7 +247,7 @@
return load and self._load(key)
- def _contains(self, key):
+ def _contains_(self, key):
return super(LinkedMap, self).__contains__(key)
@@ -258,7 +266,7 @@
link = super(LinkedMap, self).get(key, default)
if link is not default:
- return link._value
+ return link.getValue(self)
return default
Index: chandler/repository/item/ItemHandler.py
diff -u chandler/repository/item/ItemHandler.py:1.57 chandler/repository/item/ItemHandler.py:1.58
--- chandler/repository/item/ItemHandler.py:1.57 Mon Dec 13 16:31:05 2004
+++ chandler/repository/item/ItemHandler.py Thu Dec 16 16:07:52 2004
@@ -1,6 +1,6 @@
-__revision__ = "$Revision: 1.57 $"
-__date__ = "$Date: 2004/12/14 00:31:05 $"
+__revision__ = "$Revision: 1.58 $"
+__date__ = "$Date: 2004/12/17 00:07:52 $"
__copyright__ = "Copyright (c) 2003-2004 Open Source Applications Foundation"
__license__ = "http://osafoundation.org/Chandler_0.1_license_terms.htm"
@@ -456,6 +456,8 @@
self.afterLoadHooks = afterLoadHooks
self.item = None
self.new = new
+ self.values = None
+ self.references = None
def refStart(self, itemHandler, attrs):
@@ -502,8 +504,10 @@
super(ItemHandler, self).itemStart(itemHandler, attrs)
- self.values = Values(None)
- self.references = References(None)
+ if self.values is None:
+ self.values = Values(None)
+ if self.references is None:
+ self.references = References(None)
self.refs = []
self.name = None
@@ -811,19 +815,29 @@
def __init__(self, repository, origItem):
super(MergeHandler, self).__init__(repository, None, None, False)
+
self.origItem = origItem
+ if hasattr(origItem._values, '_original'):
+ self.values = origItem._values
+ else:
+ self.values = Values(None)
+ self.values._original = origItem._values
+
+ if hasattr(origItem._references, '_original'):
+ self.references = origItem._references
+ else:
+ self.references = References(None)
+ self.references._original = origItem._references
+
def itemEnd(self, itemHandler, attrs):
item = self.origItem
values = self.values
references = self.references
- values._original = item._values
- references._original = item._references
-
- values._mergeChanges(item._values)
- references._mergeChanges(item._references)
+ values._copyChanges(item._values)
+ references._copyChanges(item._references)
for key, value in item._references.iteritems():
if value is not None and value._isRefList():
Index: chandler/repository/persistence/XMLRefs.py
diff -u chandler/repository/persistence/XMLRefs.py:1.4 chandler/repository/persistence/XMLRefs.py:1.5
--- chandler/repository/persistence/XMLRefs.py:1.4 Tue Dec 14 15:30:24 2004
+++ chandler/repository/persistence/XMLRefs.py Thu Dec 16 16:07:53 2004
@@ -1,6 +1,6 @@
-__revision__ = "$Revision: 1.4 $"
-__date__ = "$Date: 2004/12/14 23:30:24 $"
+__revision__ = "$Revision: 1.5 $"
+__date__ = "$Date: 2004/12/17 00:07:53 $"
__copyright__ = "Copyright (c) 2004 Open Source Applications Foundation"
__license__ = "http://osafoundation.org/Chandler_0.1_license_terms.htm"
@@ -15,7 +15,17 @@
class PersistentRefs(object):
-
+
+ class link(LinkedMap.link):
+
+ def getValue(self, linkedMap):
+
+ value = self._value
+ if value is not None and value._isUUID():
+ self._value = value = linkedMap.view[value]
+
+ return value
+
def __init__(self, view):
super(PersistentRefs, self).__init__()
@@ -26,6 +36,10 @@
self._value = None
self._count = 0
+ def _makeLink(self, value):
+
+ return PersistentRefs.link(value)
+
def __len__(self):
return self._count
@@ -58,6 +72,21 @@
# changed element: key, maybe old alias: alias
self._changedRefs[key] = (0, alias)
+ def _unloadRef(self, item):
+
+ key = item._uuid
+ if self.has_key(key, load=False):
+ link = self._get(key, load=False)
+ if link is not None:
+ if link._alias is not None:
+ del self._aliases[link._alias]
+ if key in self._changedRefs:
+ link.setValue(self, key)
+ else:
+ self._remove(key)
+ else:
+ raise AssertionError, '%s: unloading non-loaded ref %s' %(self, item._repr_())
+
def _removeRef(self, key, link):
if not self.view.isLoading():
@@ -237,7 +266,8 @@
if not (self._flags & LinkedMap.NEW or
item.isAttributeDirty(self._name, item._references) or
len(self._changedRefs) == 0):
- raise AssertionError, '%s.%s not marked dirty' %(Item.__repr__(item), self._name)
+ raise AssertionError, '%s.%s not marked dirty' %(item._repr_(),
+ self._name)
self._writeRef(self.uuid, version,
self._firstKey, self._lastKey, self._count)
@@ -245,7 +275,7 @@
for key, (op, oldAlias) in self._changedRefs.iteritems():
if op == 0: # change
link = self._get(key, load=False)
- ref = link._value
+
previous = link._previousKey
next = link._nextKey
alias = link._alias
@@ -301,6 +331,18 @@
return super(XMLRefList, self)._createIndex(indexType, **kwds)
+ def _mergeChanges(self, oldVersion, toVersion):
+
+ raise MergeError, ('ref collections', self._item, 'merging ref collections is not yet implemented, overlapping attribute: %s' %(self._name), MergeError.BUG)
+
+# target = self.view._createRefList(self._item, self._name,
+# self._otherName, True, False, False,
+# self._uuid)
+# self._copy_(target)
+# self._item._references[self._name] = target
+#
+# PersistentRefs._mergeChanges(target, oldVersion, toVersion)
+
class XMLNumericIndex(NumericIndex):
@@ -464,7 +506,7 @@
if not self._isRemoved(key):
child = self.view.find(key)
if child is not None:
- if not self._contains(key):
+ if not self._contains_(key):
try:
loading = self.view._setLoading(True)
self.__setitem__(key, child, alias=child._name)
@@ -533,7 +575,7 @@
if alias is not None:
store.writeName(version, self.uuid, alias, key)
- if link._value is None:
+ if link.getValue(self) is None:
unloads.append((key, link._alias))
elif op == 1: # remove
Index: chandler/repository/persistence/XMLRepositoryView.py
diff -u chandler/repository/persistence/XMLRepositoryView.py:1.71 chandler/repository/persistence/XMLRepositoryView.py:1.72
--- chandler/repository/persistence/XMLRepositoryView.py:1.71 Mon Dec 13 16:31:06 2004
+++ chandler/repository/persistence/XMLRepositoryView.py Thu Dec 16 16:07:53 2004
@@ -1,6 +1,6 @@
-__revision__ = "$Revision: 1.71 $"
-__date__ = "$Date: 2004/12/14 00:31:06 $"
+__revision__ = "$Revision: 1.72 $"
+__date__ = "$Date: 2004/12/17 00:07:53 $"
__copyright__ = "Copyright (c) 2003-2004 Open Source Applications Foundation"
__license__ = "http://osafoundation.org/Chandler_0.1_license_terms.htm"
@@ -428,7 +428,7 @@
item._status |= Item.CMERGED
if newDirty & oldDirty & Item.RDIRTY:
- self._mergeRDIRTY(item, dirties)
+ self._mergeRDIRTY(item, dirties, oldVersion, toVersion)
oldDirty &= ~Item.RDIRTY
item._status |= Item.RMERGED
@@ -443,7 +443,7 @@
oldDirty &= ~Item.VDIRTY
item._status |= Item.VMERGED
if oldDirty & Item.RDIRTY:
- self._mergeRDIRTY(item, dirties)
+ self._mergeRDIRTY(item, dirties, oldVersion, toVersion)
oldDirty &= ~Item.RDIRTY
item._status |= Item.RMERGED
@@ -480,12 +480,17 @@
if name != item._name:
self._e_2_rename(item, name)
- def _mergeRDIRTY(self, item, dirties):
+ def _mergeRDIRTY(self, item, dirties, oldVersion, toVersion):
dirties = HashTuple(dirties)
+ merged = []
for name in item._references._getDirties():
if name in dirties:
- self._e_1_overlap(item, name)
+ item._references[name]._mergeChanges(oldVersion, toVersion)
+ merged.append(dirties.hash(name))
+ if merged:
+ dirties = HashTuple(filter(lambda hash: hash not in merged,
+ dirties))
item._references._dirties = dirties
def _mergeVDIRTY(self, item, toVersion, dirties, mergeFn):
@@ -517,10 +522,6 @@
raise MergeError, ('rename', item, 'item %s renamed to %s and %s' %(item._uuid, item._name, name), MergeError.RENAME)
- def _e_1_overlap(self, item, name):
-
- raise MergeError, ('ref collections', item, 'merging ref collections is not yet implemented, overlapping attribute: %s' %(name), MergeError.BUG)
-
def _e_2_overlap(self, item, name):
raise MergeError, ('values', item, 'merging values is not yet implemented, overlapping attribute: %s' %(name), MergeError.BUG)
Index: chandler/repository/query/tests/QueryTestCase.py
diff -u chandler/repository/query/tests/QueryTestCase.py:1.3 chandler/repository/query/tests/QueryTestCase.py:1.4
--- chandler/repository/query/tests/QueryTestCase.py:1.3 Fri Oct 1 15:42:44 2004
+++ chandler/repository/query/tests/QueryTestCase.py Thu Dec 16 16:07:53 2004
@@ -5,11 +5,11 @@
class QueryTestCase(RepositoryTestCase.RepositoryTestCase):
def setUp(self):
- RepositoryTestCase.RepositoryTestCase._setup(self, False)
+ RepositoryTestCase.RepositoryTestCase._setup(self, True)
self.testdir = os.path.join(self.rootdir, 'repository', \
'query', 'tests')
- RepositoryTestCase.RepositoryTestCase._openRepository(self, False)
+ RepositoryTestCase.RepositoryTestCase._openRepository(self, True)
def _compileQuery(self, queryString, args=None):
q = Query.Query(self.rep, queryString)
More information about the Commits
mailing list