[CalendarServer-changes] [1198] CalendarServer/branches/users/cdaboo/sqlprops-1126/twistedcaldav

source_changes at macosforge.org source_changes at macosforge.org
Fri Feb 16 13:53:21 PST 2007


Revision: 1198
          http://trac.macosforge.org/projects/calendarserver/changeset/1198
Author:   cdaboo at apple.com
Date:     2007-02-16 13:53:21 -0800 (Fri, 16 Feb 2007)

Log Message:
-----------
Use pickle to serialize properties to the database, which is much faster when reading them back in.
Note that this currently fails on unknown property elements as exposed by a test. A fix is needed.

Modified Paths:
--------------
    CalendarServer/branches/users/cdaboo/sqlprops-1126/twistedcaldav/sqlprops.py
    CalendarServer/branches/users/cdaboo/sqlprops-1126/twistedcaldav/test/test_sqlprops.py

Modified: CalendarServer/branches/users/cdaboo/sqlprops-1126/twistedcaldav/sqlprops.py
===================================================================
--- CalendarServer/branches/users/cdaboo/sqlprops-1126/twistedcaldav/sqlprops.py	2007-02-16 21:43:26 UTC (rev 1197)
+++ CalendarServer/branches/users/cdaboo/sqlprops-1126/twistedcaldav/sqlprops.py	2007-02-16 21:53:21 UTC (rev 1198)
@@ -21,8 +21,6 @@
 #
 # DRI: Wilfredo Sanchez, wsanchez at apple.com
 ##
-from twistedcaldav.root import RootResource
-from twisted.python import log
 
 """
 DAV Property store an sqlite database.
@@ -33,13 +31,14 @@
 
 __all__ = ["sqlPropertyStore"]
 
+import cPickle
 import os
-import urllib
 
+from twisted.python import log
 from twisted.web2 import responsecode
 from twisted.web2.http import HTTPError, StatusResponse
-from twisted.web2.dav import davxml
 
+from twistedcaldav.root import RootResource
 from twistedcaldav.sql import AbstractSQLDatabase
 
 class sqlPropertyStore (object):
@@ -93,10 +92,8 @@
                 "No such property: {%s}%s" % qname
             ))
             
-        doc = davxml.WebDAVDocument.fromString(value)
+        return cPickle.loads(value)
 
-        return doc.root_element
-
     def getAll(self, qnames):
         """
         Read properties from index.
@@ -117,8 +114,7 @@
         
         results = []
         for value in values.itervalues():
-            doc = davxml.WebDAVDocument.fromString(value)
-            results.append(doc.root_element)
+            results.append(cPickle.loads(value))
         return results
 
     def getAllResources(self, qnames):
@@ -143,8 +139,7 @@
         for key, value in values.iteritems():
             pvalues = []
             for pvalue in value.itervalues():
-                doc = davxml.WebDAVDocument.fromString(pvalue)
-                pvalues.append(doc.root_element)
+                pvalues.append(cPickle.loads(pvalue))
             results[key] = pvalues
         
         return results
@@ -157,7 +152,7 @@
         """
 
         if self.index:
-            self.index.setPropertyValue(self.rname, self._encode(property.qname()), property.toxml())
+            self.index.setPropertyValue(self.rname, self._encode(property.qname()), cPickle.dumps(property))
 
     def delete(self, qname):
         """
@@ -222,7 +217,7 @@
 
     def __init__(self, path):
         path = os.path.join(path, SQLPropertiesDatabase.dbFilename)
-        super(SQLPropertiesDatabase, self).__init__(path, SQLPropertiesDatabase.dbFormatVersion)
+        super(SQLPropertiesDatabase, self).__init__(path, SQLPropertiesDatabase.dbFormatVersion, utf8=True)
 
     def setPropertyValue(self, rname, pname, pvalue):
         """

Modified: CalendarServer/branches/users/cdaboo/sqlprops-1126/twistedcaldav/test/test_sqlprops.py
===================================================================
--- CalendarServer/branches/users/cdaboo/sqlprops-1126/twistedcaldav/test/test_sqlprops.py	2007-02-16 21:43:26 UTC (rev 1197)
+++ CalendarServer/branches/users/cdaboo/sqlprops-1126/twistedcaldav/test/test_sqlprops.py	2007-02-16 21:53:21 UTC (rev 1198)
@@ -15,6 +15,7 @@
 #
 # DRI: Wilfredo Sanchez, wsanchez at apple.com
 ##
+from twisted.web2.dav.element.base import WebDAVUnknownElement
 import time
 from twistedcaldav.root import RootResource
 from twistedcaldav import customxml
@@ -126,6 +127,10 @@
         for prop in SQLProps.props:
             self._setOnePropertyAndTest(prop)
 
+    def test_setunknownproperty(self):
+        doc = davxml.WebDAVDocument.fromString("""<?xml version="1.0" encoding="utf-8" ?><guess/>""")
+        self._setOnePropertyAndTest(doc.root_element)
+
     def test_setmultipleproperties(self):
         index = self._setUpIndex()
         for prop in SQLProps.props:

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20070216/b8ddf3e2/attachment.html


More information about the calendarserver-changes mailing list