[CalendarServer-changes] [9993] CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/ datastore/sql.py
source_changes at macosforge.org
source_changes at macosforge.org
Sat Oct 27 08:42:40 PDT 2012
Revision: 9993
http://trac.calendarserver.org//changeset/9993
Author: gaya at apple.com
Date: 2012-10-27 08:42:40 -0700 (Sat, 27 Oct 2012)
Log Message:
-----------
share addressbook/addressbook object insert
Modified Paths:
--------------
CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/sql.py
Modified: CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/sql.py
===================================================================
--- CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/sql.py 2012-10-27 01:55:12 UTC (rev 9992)
+++ CalendarServer/branches/users/gaya/sharedgroups/txdav/carddav/datastore/sql.py 2012-10-27 15:42:40 UTC (rev 9993)
@@ -36,7 +36,8 @@
from twisted.python import hashlib
from twistedcaldav import carddavxml, customxml
from twistedcaldav.memcacher import Memcacher
-from twistedcaldav.vcard import Component as VCard, InvalidVCardDataError
+from twistedcaldav.vcard import Component as VCard, InvalidVCardDataError, \
+ vCardProductID
from txdav.base.propertystore.base import PropertyName
from txdav.carddav.datastore.util import validateAddressBookComponent
@@ -51,7 +52,8 @@
ADDRESSBOOK_HOME_METADATA_TABLE, ADDRESSBOOK_AND_ADDRESSBOOK_BIND, \
ADDRESSBOOK_OBJECT_AND_BIND_TABLE, \
ADDRESSBOOK_OBJECT_REVISIONS_AND_BIND_TABLE, \
- _ABO_KIND_PERSON, _ABO_KIND_GROUP, _ABO_KIND_RESOURCE, _ABO_KIND_LOCATION, schema
+ _ABO_KIND_PERSON, _ABO_KIND_GROUP, _ABO_KIND_RESOURCE, _ABO_KIND_LOCATION, \
+ schema
from txdav.xml.rfc2518 import ResourceType
from uuid import uuid4
@@ -135,9 +137,30 @@
AddressBookHome._register(EADDRESSBOOKTYPE)
+class _AddressBookObjectCommon(object):
+ @classproperty
+ def _insertABObject(cls): #@NoSelf
+ """
+ DAL statement to create an addressbook object with all default values.
+ """
+ abo = schema.ADDRESSBOOK_OBJECT
+ assert schema.ADDRESSBOOK_OBJECT == schema.ADDRESSBOOK
+ return Insert(
+ {abo.RESOURCE_ID: schema.RESOURCE_ID_SEQ,
+ abo.ADDRESSBOOK_RESOURCE_ID: Parameter("addressbookResourceID"),
+ abo.RESOURCE_NAME: Parameter("name"),
+ abo.VCARD_TEXT: Parameter("text"),
+ abo.VCARD_UID: Parameter("uid"),
+ abo.KIND: Parameter("kind"),
+ abo.MD5: Parameter("md5"),
+ },
+ Return=(abo.RESOURCE_ID,
+ abo.CREATED,
+ abo.MODIFIED))
-class AddressBook(CommonHomeChild):
+
+class AddressBook(CommonHomeChild, _AddressBookObjectCommon):
"""
SQL-based implementation of L{IAddressBook}.
"""
@@ -209,20 +232,6 @@
"""
return super(AddressBook, self).unshare(EADDRESSBOOKTYPE)
- @classproperty
- def _insertHomeChild(cls): #@NoSelf
- """
- DAL statement to create a home child with all default values.
- """
- child = cls._homeChildSchema
- return Insert({child.RESOURCE_ID: schema.RESOURCE_ID_SEQ,
- child.RESOURCE_NAME: Parameter("name"),
- child.VCARD_TEXT: Parameter("text"),
- child.VCARD_UID: Parameter("uid"),
- child.KIND: _ABO_KIND_GROUP,
- child.MD5: Parameter("md5"),
- },
- Return=(child.RESOURCE_ID))
@classproperty
def _insertHomeChildMetaData(cls): #@NoSelf
@@ -238,39 +247,49 @@
@inlineCallbacks
def _createChild(cls, home, name):
# Create this object
+
+ # TODO: N, FN, set to resource name for now,
+ # but "may" have to change when shared
+ # and perhaps will need to reflect a per-user property
component = VCard.fromString(
"""BEGIN:VCARD
VERSION:3.0
-PRODID:-//Apple Inc.//AddressBook 6.1//EN
+PRODID:%s
UID:%s
FN:%s
N:%s;;;;
X-ADDRESSBOOKSERVER-KIND:group
END:VCARD
-""".replace("\n", "\r\n") % (uuid4(), name, name)
+""".replace("\n", "\r\n") % (vCardProductID, uuid4(), name, name)
)
componentText = str(component)
md5 = hashlib.md5(componentText).hexdigest()
- resourceID = (
- yield cls._insertHomeChild.on(home._txn,
- name=name,
- text=componentText,
- uid=component.resourceUID(),
- md5=md5,
- ))[0][0]
+ resourceID, created, modified = (
+ yield cls._insertABObject.on(
+ home._txn,
+ addressbookResourceID=None,
+ name=name,
+ text=componentText,
+ uid=component.resourceUID(),
+ md5=md5,
+ kind=_ABO_KIND_GROUP,
+ ))[0]
+ # TODO: remove metadata table
created, modified = (
- yield cls._insertHomeChildMetaData.on(home._txn,
- resourceID=resourceID))[0]
+ yield cls._insertHomeChildMetaData.on(
+ home._txn,
+ resourceID=resourceID,
+ ))[0]
returnValue((resourceID, created, modified))
-class AddressBookObject(CommonObjectResource):
+class AddressBookObject(CommonObjectResource, _AddressBookObjectCommon):
implements(IAddressBookObject)
@@ -420,17 +439,15 @@
if inserting:
self._resourceID, self._created, self._modified = (
- yield Insert(
- {abo.ADDRESSBOOK_RESOURCE_ID: self._addressbook._resourceID,
- abo.RESOURCE_NAME: self._name,
- abo.VCARD_TEXT: componentText,
- abo.VCARD_UID: self._uid,
- abo.KIND: self._kind,
- abo.MD5: self._md5},
- Return=(abo.RESOURCE_ID,
- abo.CREATED,
- abo.MODIFIED)
- ).on(self._txn))[0]
+ yield self._insertABObject.on(
+ self._txn,
+ addressbookResourceID=self._addressbook._resourceID,
+ name=self._name,
+ text=componentText,
+ uid=self._uid,
+ md5=self._md5,
+ kind=self._kind,
+ ))[0]
# update existing group member tables for this new object
# delete foreign members table row for this object
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20121027/0bd4f244/attachment.html>
More information about the calendarserver-changes
mailing list