[CalendarServer-changes] [1201]
CalendarServer/branches/users/cdaboo/sqlprops-1126/twistedcaldav
source_changes at macosforge.org
source_changes at macosforge.org
Fri Feb 16 19:29:46 PST 2007
Revision: 1201
http://trac.macosforge.org/projects/calendarserver/changeset/1201
Author: cdaboo at apple.com
Date: 2007-02-16 19:29:46 -0800 (Fri, 16 Feb 2007)
Log Message:
-----------
Move encoding/decoding into the DB class to avoid extra mapping later.
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 23:17:41 UTC (rev 1200)
+++ CalendarServer/branches/users/cdaboo/sqlprops-1126/twistedcaldav/sqlprops.py 2007-02-17 03:29:46 UTC (rev 1201)
@@ -46,20 +46,6 @@
A dead property store that uses an SQLite database backend.
"""
- def _encode(clazz, name):
- return "{%s}%s" % name
-
- def _decode(clazz, name):
- index = name.find("}")
-
- if (index is -1 or not len(name) > index or not name[0] == "{"):
- raise ValueError("Invalid encoded name: %r" % (name,))
-
- return (name[1:index], name[index+1:])
-
- _encode = classmethod(_encode)
- _decode = classmethod(_decode)
-
def __init__(self, resource):
self.resource = resource
if os.path.exists(os.path.dirname(resource.fp.path)):
@@ -85,14 +71,14 @@
"No such property: {%s}%s" % qname
))
- value = self.index.getPropertyValue(self.rname, self._encode(qname))
+ value = self.index.getPropertyValue(self.rname, qname)
if not value:
raise HTTPError(StatusResponse(
responsecode.NOT_FOUND,
"No such property: {%s}%s" % qname
))
- return cPickle.loads(value)
+ return value
def getAll(self, qnames):
"""
@@ -110,19 +96,14 @@
"No such property: {%s}%s" % qnames[0]
))
- values = self.index.getAllPropertyValues(self.rname, map(self._encode, qnames))
-
- results = []
- for value in values.itervalues():
- results.append(cPickle.loads(value))
- return results
+ return self.index.getAllPropertyValues(self.rname, qnames)
def getAllResources(self, qnames):
"""
Read properties for all child resources from index.
@param qnames: C{list} of C{tuple} of property namespace and name.
- @return: a C{dict} with resource name as keys and C{list} of property classes as values
+ @return: a C{dict} with resource name as keys and C{dict} of property name/classes as values
"""
if not qnames:
return None
@@ -133,16 +114,7 @@
"No such property: {%s}%s" % qnames[0]
))
- values = self.index.getAllResourcePropertyValues(map(self._encode, qnames))
- results = {}
-
- for key, value in values.iteritems():
- pvalues = []
- for pvalue in value.itervalues():
- pvalues.append(cPickle.loads(pvalue))
- results[key] = pvalues
-
- return results
+ return self.index.getAllResourcePropertyValues(qnames)
def set(self, property):
"""
@@ -152,7 +124,7 @@
"""
if self.index:
- self.index.setPropertyValue(self.rname, self._encode(property.qname()), cPickle.dumps(property))
+ self.index.setPropertyValue(self.rname, property.qname(), property)
def delete(self, qname):
"""
@@ -164,7 +136,7 @@
"""
if self.index:
- self.index.removeProperty(self.rname, self._encode(qname))
+ self.index.removeProperty(self.rname, qname)
def deleteAll(self):
"""
@@ -180,8 +152,8 @@
def contains(self, qname):
if self.index:
- value = self.index.getPropertyValue(self.rname, self._encode(qname))
- return value != None
+ value = self.index.getPropertyValue(self.rname, qname)
+ return value is not None
else:
return False
@@ -194,10 +166,9 @@
"""
if self.index:
- results = self.index.listProperties(self.rname)
- return map(self._decode, results)
+ return self.index.listProperties(self.rname)
else:
- return []
+ return ()
class SQLPropertiesDatabase(AbstractSQLDatabase):
"""
@@ -215,6 +186,20 @@
dbFilename = ".db.sqlproperties"
dbFormatVersion = "1"
+ def _encode(clazz, name):
+ return "{%s}%s" % name
+
+ def _decode(clazz, name):
+ index = name.find("}")
+
+ if (index is -1 or not len(name) > index or not name[0] == "{"):
+ raise ValueError("Invalid encoded name: %r" % (name,))
+
+ return (name[1:index], name[index+1:])
+
+ _encode = classmethod(_encode)
+ _decode = classmethod(_decode)
+
def __init__(self, path):
path = os.path.join(path, SQLPropertiesDatabase.dbFilename)
super(SQLPropertiesDatabase, self).__init__(path, SQLPropertiesDatabase.dbFormatVersion, utf8=True)
@@ -229,8 +214,8 @@
"""
# Remove what is there, then add it back.
- self._delete_from_db(rname, pname)
- self._add_to_db(rname, pname, pvalue)
+ self._delete_from_db(rname, self._encode(pname))
+ self._add_to_db(rname, self._encode(pname), cPickle.dumps(pvalue))
self._db_commit()
def getPropertyValue(self, rname, pname):
@@ -245,15 +230,15 @@
# Remove what is there, then add it back.
log.msg("getPropertyValue: %s \"%s\" \"%s\"" % (self.dbpath, rname, pname))
members = []
- for row in self._db_execute("select PROPERTYVALUE from PROPERTIES where RESOURCENAME = :1 and PROPERTYNAME = :2", rname, pname):
+ for row in self._db_execute("select PROPERTYVALUE from PROPERTIES where RESOURCENAME = :1 and PROPERTYNAME = :2", rname, self._encode(pname)):
members.append(row[0])
setlength = len(members)
if setlength == 0:
return None
elif setlength == 1:
- return members[0]
+ return cPickle.loads(members[0])
else:
- raise ValueError("Multiple properties of the same name %s stored for resource %s" % (pname, rname,))
+ raise ValueError("Multiple properties of the same name \"%s\" stored for resource \"%s\"" % (pname, rname,))
def getAllPropertyValues(self, rname, pnames):
"""
@@ -273,11 +258,11 @@
if i != 0:
statement += " or "
statement += "PROPERTYNAME=:%s" % (i + 2,)
- args.append(pname)
+ args.append(self._encode(pname))
statement += ")"
for row in self._db_execute(statement, *args):
- properties[row[0]] = row[1]
+ properties[self._decode(row[0])] = cPickle.loads(row[1])
return properties
@@ -298,10 +283,10 @@
if i != 0:
statement += " or "
statement += "PROPERTYNAME=:%s" % (i + 1,)
- args.append(pname)
+ args.append(self._encode(pname))
for row in self._db_execute(statement, *args):
- members.setdefault(row[0], {})[row[1]] = row[2]
+ members.setdefault(row[0], {})[self._decode(row[1])] = cPickle.loads(row[2])
return members
@@ -314,7 +299,7 @@
@return: a C{str} containing the property value.
"""
- self._delete_from_db(rname, pname)
+ self._delete_from_db(rname, self._encode(pname))
self._db_commit()
def removeResource(self, rname):
@@ -338,7 +323,7 @@
members = set()
for row in self._db_execute("select PROPERTYNAME from PROPERTIES where RESOURCENAME = :1", rname):
- members.add(row[0])
+ members.add(self._decode(row[0]))
return members
def _add_to_db(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 23:17:41 UTC (rev 1200)
+++ CalendarServer/branches/users/cdaboo/sqlprops-1126/twistedcaldav/test/test_sqlprops.py 2007-02-17 03:29:46 UTC (rev 1201)
@@ -71,9 +71,9 @@
self.assertTrue(len(proplist) == len(SQLProps.props),
msg="Number of properties returned %s not equal to number queried %s." % (len(proplist), len(SQLProps.props),))
for prop in SQLProps.props:
- for p in proplist:
- if prop == p:
- proplist.remove(p)
+ for k, v in proplist.iteritems():
+ if prop == v:
+ del proplist[k]
break
self.assertTrue(len(proplist) == 0,
msg="Incorrect properties returned %s." % proplist)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20070216/fe0bdbe0/attachment.html
More information about the calendarserver-changes
mailing list