[CalendarServer-changes] [6850] CalendarServer/trunk/txdav/base/propertystore
source_changes at macosforge.org
source_changes at macosforge.org
Wed Feb 2 11:07:05 PST 2011
Revision: 6850
http://trac.macosforge.org/projects/calendarserver/changeset/6850
Author: wsanchez at apple.com
Date: 2011-02-02 11:07:05 -0800 (Wed, 02 Feb 2011)
Log Message:
-----------
Add tests for none property store
Modified Paths:
--------------
CalendarServer/trunk/txdav/base/propertystore/base.py
CalendarServer/trunk/txdav/base/propertystore/none.py
CalendarServer/trunk/txdav/base/propertystore/test/base.py
CalendarServer/trunk/txdav/base/propertystore/test/test_xattr.py
CalendarServer/trunk/txdav/base/propertystore/xattr.py
Added Paths:
-----------
CalendarServer/trunk/txdav/base/propertystore/test/test_none.py
Modified: CalendarServer/trunk/txdav/base/propertystore/base.py
===================================================================
--- CalendarServer/trunk/txdav/base/propertystore/base.py 2011-02-02 19:02:35 UTC (rev 6849)
+++ CalendarServer/trunk/txdav/base/propertystore/base.py 2011-02-02 19:07:05 UTC (rev 6850)
@@ -98,8 +98,8 @@
"""
implements(IPropertyStore)
- _defaultShadowableKeys = set()
- _defaultGlobalKeys = set((
+ _defaultShadowableKeys = frozenset()
+ _defaultGlobalKeys = frozenset((
PropertyName.fromElement(davxml.ACL),
PropertyName.fromElement(davxml.ResourceID),
PropertyName.fromElement(davxml.ResourceType),
@@ -108,7 +108,7 @@
PropertyName.fromElement(TwistedQuotaRootProperty),
))
- def __init__(self, defaultuser):
+ def __init__(self, defaultUser):
"""
Instantiate the property store for a user. The default is the default user
(owner) property to read in the case of global or shadowable properties.
@@ -117,7 +117,7 @@
@type defaultuser: C{str}
"""
- self._peruser = self._defaultuser = defaultuser
+ self._perUser = self._defaultUser = defaultUser
self._shadowableKeys = set(AbstractPropertyStore._defaultShadowableKeys)
self._globalKeys = set(AbstractPropertyStore._defaultGlobalKeys)
@@ -126,7 +126,7 @@
return "<%s>" % (self.__class__.__name__)
def _setPerUserUID(self, uid):
- self._peruser = uid
+ self._perUser = uid
def setSpecialProperties(self, shadowableKeys, globalKeys):
self._shadowableKeys.update(shadowableKeys)
@@ -162,34 +162,34 @@
# Handle per-user behavior
if self.isShadowableProperty(key):
try:
- result = self._getitem_uid(key, self._peruser)
+ result = self._getitem_uid(key, self._perUser)
except KeyError:
- result = self._getitem_uid(key, self._defaultuser)
+ result = self._getitem_uid(key, self._defaultUser)
return result
elif self.isGlobalProperty(key):
- return self._getitem_uid(key, self._defaultuser)
+ return self._getitem_uid(key, self._defaultUser)
else:
- return self._getitem_uid(key, self._peruser)
+ return self._getitem_uid(key, self._perUser)
def __setitem__(self, key, value):
# Handle per-user behavior
if self.isGlobalProperty(key):
- return self._setitem_uid(key, value, self._defaultuser)
+ return self._setitem_uid(key, value, self._defaultUser)
else:
- return self._setitem_uid(key, value, self._peruser)
+ return self._setitem_uid(key, value, self._perUser)
def __delitem__(self, key):
# Handle per-user behavior
if self.isGlobalProperty(key):
- self._delitem_uid(key, self._defaultuser)
+ self._delitem_uid(key, self._defaultUser)
else:
- self._delitem_uid(key, self._peruser)
+ self._delitem_uid(key, self._perUser)
def keys(self):
- userkeys = list(self._keys_uid(self._peruser))
- if self._defaultuser != self._peruser:
- defaultkeys = self._keys_uid(self._defaultuser)
+ userkeys = list(self._keys_uid(self._perUser))
+ if self._defaultUser != self._perUser:
+ defaultkeys = self._keys_uid(self._defaultUser)
for key in defaultkeys:
if self.isShadowableProperty(key) and key not in userkeys:
userkeys.append(key)
Modified: CalendarServer/trunk/txdav/base/propertystore/none.py
===================================================================
--- CalendarServer/trunk/txdav/base/propertystore/none.py 2011-02-02 19:02:35 UTC (rev 6849)
+++ CalendarServer/trunk/txdav/base/propertystore/none.py 2011-02-02 19:07:05 UTC (rev 6850)
@@ -31,7 +31,6 @@
Always-empty property store.
Writing properties is not allowed.
"""
-
#
# We override the UserDict items directly here rather than the _uid methods
#
Modified: CalendarServer/trunk/txdav/base/propertystore/test/base.py
===================================================================
--- CalendarServer/trunk/txdav/base/propertystore/test/base.py 2011-02-02 19:02:35 UTC (rev 6849)
+++ CalendarServer/trunk/txdav/base/propertystore/test/base.py 2011-02-02 19:07:05 UTC (rev 6850)
@@ -36,14 +36,9 @@
from txdav.base.propertystore.base import PropertyName
-class PropertyStoreTest(unittest.TestCase):
+class NonePropertyStoreTest(unittest.TestCase):
# Subclass must define self.propertyStore in setUp().
- def _changed(self, store):
- store.flush()
- def _abort(self, store):
- store.abort()
-
def test_interface(self):
try:
verifyObject(IPropertyStore, self.propertyStore)
@@ -51,6 +46,38 @@
self.fail(e)
+ def test_delete_none(self):
+ def doDelete():
+ del self.propertyStore[propertyName("xyzzy")]
+
+ self.assertRaises(KeyError, doDelete)
+
+
+ def test_keyInPropertyName(self):
+ def doGet():
+ self.propertyStore["xyzzy"]
+ def doSet():
+ self.propertyStore["xyzzy"] = propertyValue("Hello, World!")
+ def doDelete():
+ del self.propertyStore["xyzzy"]
+ def doContains():
+ return "xyzzy" in self.propertyStore
+
+ self.assertRaises(TypeError, doGet)
+ self.assertRaises(TypeError, doSet)
+ self.assertRaises(TypeError, doDelete)
+ self.assertRaises(TypeError, doContains)
+
+
+class PropertyStoreTest(NonePropertyStoreTest):
+ # Subclass must define self.propertyStore in setUp().
+
+ def _changed(self, store):
+ store.flush()
+ def _abort(self, store):
+ store.abort()
+
+
@inlineCallbacks
def test_set_get_contains(self):
@@ -221,34 +248,6 @@
self.assertEquals(len(self.propertyStore), len(names))
- def test_delete_none(self):
-
- def doDelete():
- del self.propertyStore[propertyName("xyzzy")]
-
- self.assertRaises(KeyError, doDelete)
-
-
- def test_keyInPropertyName(self):
-
- def doGet():
- self.propertyStore["xyzzy"]
-
- def doSet():
- self.propertyStore["xyzzy"] = propertyValue("Hello, World!")
-
- def doDelete():
- del self.propertyStore["xyzzy"]
-
- def doContains():
- return "xyzzy" in self.propertyStore
-
- self.assertRaises(TypeError, doGet)
- self.assertRaises(TypeError, doSet)
- self.assertRaises(TypeError, doDelete)
- self.assertRaises(TypeError, doContains)
-
-
@inlineCallbacks
def test_flush(self):
@@ -306,6 +305,7 @@
self.failUnless(name in self.propertyStore2.keys())
+
def propertyName(name):
return PropertyName("http://calendarserver.org/ns/test/", name)
Added: CalendarServer/trunk/txdav/base/propertystore/test/test_none.py
===================================================================
--- CalendarServer/trunk/txdav/base/propertystore/test/test_none.py (rev 0)
+++ CalendarServer/trunk/txdav/base/propertystore/test/test_none.py 2011-02-02 19:07:05 UTC (rev 6850)
@@ -0,0 +1,54 @@
+##
+# Copyright (c) 2010 Apple Inc. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+##
+from twext.web2.dav.element.base import WebDAVTextElement
+
+"""
+Property store tests.
+"""
+
+from zope.interface.verify import verifyObject, BrokenMethodImplementation
+
+from txdav.idav import IPropertyStore, PropertyChangeNotAllowedError
+from txdav.base.propertystore.base import PropertyName
+from txdav.base.propertystore.none import PropertyStore
+from txdav.base.propertystore.test.base import propertyName, propertyValue
+
+from txdav.base.propertystore.test import base
+
+
+class PropertyStoreTest(base.NonePropertyStoreTest):
+ def setUp(self):
+ self.propertyStore = PropertyStore("user01")
+
+ def test_set(self):
+ def doSet():
+ self.propertyStore[propertyName("foo")] = propertyValue("bar")
+ self.assertRaises(PropertyChangeNotAllowedError, doSet)
+
+ def test_get(self):
+ self.assertRaises(KeyError, lambda: self.propertyStore[propertyName("foo")])
+
+ def test_len(self):
+ self.assertEquals(len(self.propertyStore), 0)
+
+ def test_keys(self):
+ self.assertEquals(self.propertyStore.keys(), ())
+
+ def test_flush(self):
+ self.propertyStore.flush()
+
+ def test_abort(self):
+ self.propertyStore.abort()
Modified: CalendarServer/trunk/txdav/base/propertystore/test/test_xattr.py
===================================================================
--- CalendarServer/trunk/txdav/base/propertystore/test/test_xattr.py 2011-02-02 19:02:35 UTC (rev 6849)
+++ CalendarServer/trunk/txdav/base/propertystore/test/test_xattr.py 2011-02-02 19:07:05 UTC (rev 6850)
@@ -20,9 +20,7 @@
"""
from twext.python.filepath import CachingFilePath as FilePath
-
from txdav.base.propertystore.base import PropertyName
-
from txdav.base.propertystore.test import base
try:
@@ -39,9 +37,8 @@
tempDir.makedirs()
tempFile = tempDir.child("test")
tempFile.touch()
- self.propertyStore = self.propertyStore1 = PropertyStore(
- "user01", lambda : tempFile
- )
+ self.propertyStore = PropertyStore("user01", lambda : tempFile)
+ self.propertyStore1 = self.propertyStore
self.propertyStore2 = PropertyStore("user01", lambda : tempFile)
self.propertyStore2._setPerUserUID("user02")
@@ -64,8 +61,8 @@
name = "dummy"
name = PropertyName.fromElement(DummyProperty)
- compressedKey = self.propertyStore._encodeKey((name, self.propertyStore._defaultuser))
- uncompressedKey = self.propertyStore._encodeKey((name, self.propertyStore._defaultuser), compressNamespace=False)
+ compressedKey = self.propertyStore._encodeKey((name, self.propertyStore._defaultUser))
+ uncompressedKey = self.propertyStore._encodeKey((name, self.propertyStore._defaultUser), compressNamespace=False)
self.propertyStore[name] = DummyProperty.fromString("data")
self.propertyStore.flush()
@@ -80,14 +77,10 @@
name = "dummy"
name = PropertyName.fromElement(DummyProperty)
- uncompressedKey = self.propertyStore._encodeKey((name, self.propertyStore._defaultuser), compressNamespace=False)
+ uncompressedKey = self.propertyStore._encodeKey((name, self.propertyStore._defaultUser), compressNamespace=False)
self.propertyStore.attrs[uncompressedKey] = DummyProperty.fromString("data").toxml()
self.assertEqual(self.propertyStore[name], DummyProperty.fromString("data"))
- self.assertRaises(KeyError, lambda:self.propertyStore.attrs[uncompressedKey])
+ self.assertRaises(KeyError, lambda: self.propertyStore.attrs[uncompressedKey])
if PropertyStore is None:
PropertyStoreTest.skip = importErrorMessage
-
-
-def propertyName(name):
- return PropertyName("http://calendarserver.org/ns/test/", name)
Modified: CalendarServer/trunk/txdav/base/propertystore/xattr.py
===================================================================
--- CalendarServer/trunk/txdav/base/propertystore/xattr.py 2011-02-02 19:02:35 UTC (rev 6849)
+++ CalendarServer/trunk/txdav/base/propertystore/xattr.py 2011-02-02 19:07:05 UTC (rev 6850)
@@ -114,7 +114,7 @@
qname, uid = effective
namespace = self._namespaceCompress.get(qname.namespace, qname.namespace) if compressNamespace else qname.namespace
result = urllib.quote("{%s}%s" % (namespace, qname.name), safe="{}:")
- if uid and uid != self._defaultuser:
+ if uid and uid != self._defaultUser:
result = uid + result
r = self.deadPropertyXattrPrefix + result
return r
@@ -129,7 +129,7 @@
if (index1 is - 1 or index2 is - 1 or not len(name) > index2):
raise ValueError("Invalid encoded name: %r" % (name,))
if index1 == 0:
- uid = self._defaultuser
+ uid = self._defaultUser
else:
uid = name[:index1]
propnamespace = name[index1 + 1:index2]
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20110202/2509a14f/attachment-0001.html>
More information about the calendarserver-changes
mailing list