<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[13809] CalendarServer/trunk/txdav</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.calendarserver.org//changeset/13809">13809</a></dd>
<dt>Author</dt> <dd>cdaboo@apple.com</dd>
<dt>Date</dt> <dd>2014-07-31 13:15:15 -0700 (Thu, 31 Jul 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>Whitespace.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#CalendarServertrunktxdavcarddavdatastoreindex_filepy">CalendarServer/trunk/txdav/carddav/datastore/index_file.py</a></li>
<li><a href="#CalendarServertrunktxdavcarddavdatastorequerytesttest_filterpy">CalendarServer/trunk/txdav/carddav/datastore/query/test/test_filter.py</a></li>
<li><a href="#CalendarServertrunktxdavcarddavdatastoresqlpy">CalendarServer/trunk/txdav/carddav/datastore/sql.py</a></li>
<li><a href="#CalendarServertrunktxdavcarddavdatastoretestcommonpy">CalendarServer/trunk/txdav/carddav/datastore/test/common.py</a></li>
<li><a href="#CalendarServertrunktxdavcarddavdatastoretesttest_filepy">CalendarServer/trunk/txdav/carddav/datastore/test/test_file.py</a></li>
<li><a href="#CalendarServertrunktxdavcarddavdatastoretesttest_sqlpy">CalendarServer/trunk/txdav/carddav/datastore/test/test_sql.py</a></li>
<li><a href="#CalendarServertrunktxdavcarddavdatastoretesttest_sql_sharingpy">CalendarServer/trunk/txdav/carddav/datastore/test/test_sql_sharing.py</a></li>
<li><a href="#CalendarServertrunktxdavcarddavdatastoreutilpy">CalendarServer/trunk/txdav/carddav/datastore/util.py</a></li>
<li><a href="#CalendarServertrunktxdavcommondatastorefilepy">CalendarServer/trunk/txdav/common/datastore/file.py</a></li>
<li><a href="#CalendarServertrunktxdavcommondatastorepoddingtesttest_conduitpy">CalendarServer/trunk/txdav/common/datastore/podding/test/test_conduit.py</a></li>
<li><a href="#CalendarServertrunktxdavcommondatastorepoddingtesttest_resourcepy">CalendarServer/trunk/txdav/common/datastore/podding/test/test_resource.py</a></li>
<li><a href="#CalendarServertrunktxdavcommondatastoresqlpy">CalendarServer/trunk/txdav/common/datastore/sql.py</a></li>
<li><a href="#CalendarServertrunktxdavcommondatastoresql_tablespy">CalendarServer/trunk/txdav/common/datastore/sql_tables.py</a></li>
<li><a href="#CalendarServertrunktxdavcommondatastoretesttest_sqlpy">CalendarServer/trunk/txdav/common/datastore/test/test_sql.py</a></li>
<li><a href="#CalendarServertrunktxdavcommondatastoretesttest_sql_schema_filespy">CalendarServer/trunk/txdav/common/datastore/test/test_sql_schema_files.py</a></li>
<li><a href="#CalendarServertrunktxdavcommondatastoretesttest_sql_tablespy">CalendarServer/trunk/txdav/common/datastore/test/test_sql_tables.py</a></li>
<li><a href="#CalendarServertrunktxdavcommondatastoretestutilpy">CalendarServer/trunk/txdav/common/datastore/test/util.py</a></li>
<li><a href="#CalendarServertrunktxdavcommondatastoreupgrademigratepy">CalendarServer/trunk/txdav/common/datastore/upgrade/migrate.py</a></li>
<li><a href="#CalendarServertrunktxdavcommondatastoreupgradesqltesttest_upgradepy">CalendarServer/trunk/txdav/common/datastore/upgrade/sql/test/test_upgrade.py</a></li>
<li><a href="#CalendarServertrunktxdavcommondatastoreupgradesqlupgradesaddressbook_upgrade_from_1_to_2py">CalendarServer/trunk/txdav/common/datastore/upgrade/sql/upgrades/addressbook_upgrade_from_1_to_2.py</a></li>
<li><a href="#CalendarServertrunktxdavcommondatastoreupgradetesttest_migratepy">CalendarServer/trunk/txdav/common/datastore/upgrade/test/test_migrate.py</a></li>
<li><a href="#CalendarServertrunktxdavcommondatastoreworkrevision_cleanuppy">CalendarServer/trunk/txdav/common/datastore/work/revision_cleanup.py</a></li>
<li><a href="#CalendarServertrunktxdavcommondatastoreworktesttest_inbox_cleanuppy">CalendarServer/trunk/txdav/common/datastore/work/test/test_inbox_cleanup.py</a></li>
<li><a href="#CalendarServertrunktxdavcommondatastoreworktesttest_revision_cleanuppy">CalendarServer/trunk/txdav/common/datastore/work/test/test_revision_cleanup.py</a></li>
<li><a href="#CalendarServertrunktxdavdpsclientpy">CalendarServer/trunk/txdav/dps/client.py</a></li>
<li><a href="#CalendarServertrunktxdavdpsserverpy">CalendarServer/trunk/txdav/dps/server.py</a></li>
<li><a href="#CalendarServertrunktxdavdpstesttest_clientpy">CalendarServer/trunk/txdav/dps/test/test_client.py</a></li>
<li><a href="#CalendarServertrunktxdavwhoaugmentpy">CalendarServer/trunk/txdav/who/augment.py</a></li>
<li><a href="#CalendarServertrunktxdavwhodirectorypy">CalendarServer/trunk/txdav/who/directory.py</a></li>
<li><a href="#CalendarServertrunktxdavwhotestsupportpy">CalendarServer/trunk/txdav/who/test/support.py</a></li>
<li><a href="#CalendarServertrunktxdavwhotesttest_group_attendeespy">CalendarServer/trunk/txdav/who/test/test_group_attendees.py</a></li>
<li><a href="#CalendarServertrunktxdavwhotesttest_group_shareespy">CalendarServer/trunk/txdav/who/test/test_group_sharees.py</a></li>
<li><a href="#CalendarServertrunktxdavwhovcardpy">CalendarServer/trunk/txdav/who/vcard.py</a></li>
<li><a href="#CalendarServertrunktxdavxmlbasepy">CalendarServer/trunk/txdav/xml/base.py</a></li>
<li><a href="#CalendarServertrunktxdavxmlparser_saxpy">CalendarServer/trunk/txdav/xml/parser_sax.py</a></li>
<li><a href="#CalendarServertrunktxdavxmlrfc2518py">CalendarServer/trunk/txdav/xml/rfc2518.py</a></li>
<li><a href="#CalendarServertrunktxdavxmlrfc5842py">CalendarServer/trunk/txdav/xml/rfc5842.py</a></li>
<li><a href="#CalendarServertrunktxdavxmltesttest_xmlpy">CalendarServer/trunk/txdav/xml/test/test_xml.py</a></li>
<li><a href="#CalendarServertrunktxdavxmlxmlextpy">CalendarServer/trunk/txdav/xml/xmlext.py</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="CalendarServertrunktxdavcarddavdatastoreindex_filepy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/carddav/datastore/index_file.py (13808 => 13809)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/carddav/datastore/index_file.py        2014-07-31 19:21:33 UTC (rev 13808)
+++ CalendarServer/trunk/txdav/carddav/datastore/index_file.py        2014-07-31 20:15:15 UTC (rev 13809)
</span><span class="lines">@@ -81,15 +81,16 @@
</span><span class="cx">     def reserveUID(self, uid):
</span><span class="cx">         uid = uid.encode('utf-8')
</span><span class="cx">         self.log.debug(&quot;Reserving UID %r @ %r&quot; % (
</span><del>-                uid,
-                self.index.resource.fp.path))
</del><ins>+            uid,
+            self.index.resource.fp.path
+        ))
</ins><span class="cx"> 
</span><span class="cx">         def _handleFalse(result):
</span><span class="cx">             if result is False:
</span><span class="cx">                 raise ReservationError(
</span><span class="cx">                     &quot;UID %s already reserved for address book collection %s.&quot;
</span><span class="cx">                     % (uid, self.index.resource)
</span><del>-                    )
</del><ins>+                )
</ins><span class="cx"> 
</span><span class="cx">         d = self.getCachePool().add(self._key(uid),
</span><span class="cx">                                     'reserved',
</span><span class="lines">@@ -101,15 +102,16 @@
</span><span class="cx">     def unreserveUID(self, uid):
</span><span class="cx">         uid = uid.encode('utf-8')
</span><span class="cx">         self.log.debug(&quot;Unreserving UID %r @ %r&quot; % (
</span><del>-                uid,
-                self.index.resource.fp.path))
</del><ins>+            uid,
+            self.index.resource.fp.path
+        ))
</ins><span class="cx"> 
</span><span class="cx">         def _handleFalse(result):
</span><span class="cx">             if result is False:
</span><span class="cx">                 raise ReservationError(
</span><span class="cx">                     &quot;UID %s is not reserved for address book collection %s.&quot;
</span><span class="cx">                     % (uid, self.index.resource)
</span><del>-                    )
</del><ins>+                )
</ins><span class="cx"> 
</span><span class="cx">         d = self.getCachePool().delete(self._key(uid))
</span><span class="cx">         d.addCallback(_handleFalse)
</span><span class="lines">@@ -119,8 +121,9 @@
</span><span class="cx">     def isReservedUID(self, uid):
</span><span class="cx">         uid = uid.encode('utf-8')
</span><span class="cx">         self.log.debug(&quot;Is reserved UID %r @ %r&quot; % (
</span><del>-                uid,
-                self.index.resource.fp.path))
</del><ins>+            uid,
+            self.index.resource.fp.path
+        ))
</ins><span class="cx"> 
</span><span class="cx">         def _checkValue((flags, value)):
</span><span class="cx">             if value is None:
</span><span class="lines">@@ -174,7 +177,7 @@
</span><span class="cx">                 raise ReservationError(
</span><span class="cx">                     &quot;UID %s is not reserved for address book collection %s.&quot;
</span><span class="cx">                     % (uid, self.index.resource)
</span><del>-                    )
</del><ins>+                )
</ins><span class="cx">             else:
</span><span class="cx">                 try:
</span><span class="cx">                     self.index._db_execute(
</span><span class="lines">@@ -647,7 +650,7 @@
</span><span class="cx">                 except ValueError:
</span><span class="cx">                     log.error(&quot;Non-addressbook resource: %s&quot; % (name,))
</span><span class="cx">                 else:
</span><del>-                    #log.info(&quot;Indexing resource: %s&quot; % (name,))
</del><ins>+                    # log.info(&quot;Indexing resource: %s&quot; % (name,))
</ins><span class="cx">                     self.addResource(name, vcard, True)
</span><span class="cx">             finally:
</span><span class="cx">                 stream.close()
</span></span></pre></div>
<a id="CalendarServertrunktxdavcarddavdatastorequerytesttest_filterpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/carddav/datastore/query/test/test_filter.py (13808 => 13809)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/carddav/datastore/query/test/test_filter.py        2014-07-31 19:21:33 UTC (rev 13808)
+++ CalendarServer/trunk/txdav/carddav/datastore/query/test/test_filter.py        2014-07-31 20:15:15 UTC (rev 13809)
</span><span class="lines">@@ -42,7 +42,7 @@
</span><span class="cx">         filter = carddavxml.Filter(
</span><span class="cx">             *[carddavxml.PropertyFilter(
</span><span class="cx">                 carddavxml.TextMatch.fromString(&quot;Example&quot;),
</span><del>-                **{&quot;name&quot;:&quot;UID&quot;}
</del><ins>+                **{&quot;name&quot;: &quot;UID&quot;}
</ins><span class="cx">             )]
</span><span class="cx">         )
</span><span class="cx">         filter = Filter(filter)
</span><span class="lines">@@ -64,7 +64,7 @@
</span><span class="cx">         filter = carddavxml.Filter(
</span><span class="cx">             *[carddavxml.PropertyFilter(
</span><span class="cx">                 carddavxml.TextMatch.fromString(&quot;Example&quot;),
</span><del>-                **{&quot;name&quot;:&quot;UID&quot;}
</del><ins>+                **{&quot;name&quot;: &quot;UID&quot;}
</ins><span class="cx">             )]
</span><span class="cx">         )
</span><span class="cx">         filter = Filter(filter)
</span><span class="lines">@@ -85,7 +85,7 @@
</span><span class="cx">         filter = carddavxml.Filter(
</span><span class="cx">             *[carddavxml.PropertyFilter(
</span><span class="cx">                 carddavxml.TextMatch.fromString(&quot;Example&quot;),
</span><del>-                **{&quot;name&quot;:&quot;UID&quot;}
</del><ins>+                **{&quot;name&quot;: &quot;UID&quot;}
</ins><span class="cx">             )]
</span><span class="cx">         )
</span><span class="cx">         filter = Filter(filter)
</span></span></pre></div>
<a id="CalendarServertrunktxdavcarddavdatastoresqlpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/carddav/datastore/sql.py (13808 => 13809)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/carddav/datastore/sql.py        2014-07-31 19:21:33 UTC (rev 13808)
+++ CalendarServer/trunk/txdav/carddav/datastore/sql.py        2014-07-31 20:15:15 UTC (rev 13809)
</span><span class="lines">@@ -576,12 +576,18 @@
</span><span class="cx">     @classproperty
</span><span class="cx">     def _deleteBumpTokenQuery(cls): #@NoSelf
</span><span class="cx">         rev = cls._revisionsSchema
</span><del>-        return Update({rev.REVISION: schema.REVISION_SEQ,
-                       rev.OBJECT_RESOURCE_ID: Parameter(&quot;id&quot;),
-                       rev.DELETED: True},
-                      Where=(rev.RESOURCE_ID == Parameter(&quot;resourceID&quot;)).And(
-                           rev.RESOURCE_NAME == Parameter(&quot;name&quot;)),
-                      Return=rev.REVISION)
</del><ins>+        return Update(
+            {
+                rev.REVISION: schema.REVISION_SEQ,
+                rev.OBJECT_RESOURCE_ID: Parameter(&quot;id&quot;),
+                rev.DELETED: True
+            },
+            Where=(
+                rev.RESOURCE_ID == Parameter(&quot;resourceID&quot;)).And(
+                rev.RESOURCE_NAME == Parameter(&quot;name&quot;)
+            ),
+            Return=rev.REVISION
+        )
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @inlineCallbacks
</span><span class="lines">@@ -694,7 +700,7 @@
</span><span class="cx">         bindRevisions = [self._bindRevision] if self.fullyShared() else []
</span><span class="cx"> 
</span><span class="cx">         groupBindRows = yield AddressBookObject._acceptedBindForHomeIDAndAddressBookID.on(
</span><del>-                self._txn, homeID=self._home._resourceID, addressbookID=self._resourceID
</del><ins>+            self._txn, homeID=self._home._resourceID, addressbookID=self._resourceID
</ins><span class="cx">         )
</span><span class="cx">         if groupBindRows:
</span><span class="cx">             bindRevisions += [groupBindRow[self.bindColumns().index(self._bindSchema.BIND_REVISION)] for groupBindRow in groupBindRows]
</span><span class="lines">@@ -731,17 +737,17 @@
</span><span class="cx">             # get revision table changes
</span><span class="cx">             rev = self._revisionsSchema
</span><span class="cx">             results = [(
</span><del>-                    name,
-                    id,
-                    wasdeleted,
-                ) for name, id, wasdeleted in (
-                    yield Select(
-                        [rev.RESOURCE_NAME, rev.OBJECT_RESOURCE_ID, rev.DELETED],
-                        From=rev,
-                        Where=(rev.REVISION &gt; revision).And(
</del><ins>+                name,
+                id,
+                wasdeleted,
+            ) for name, id, wasdeleted in (
+                yield Select(
+                    [rev.RESOURCE_NAME, rev.OBJECT_RESOURCE_ID, rev.DELETED],
+                    From=rev,
+                    Where=(rev.REVISION &gt; revision).And(
</ins><span class="cx">                         rev.RESOURCE_ID == self._resourceID)
</span><del>-                    ).on(self._txn)
-                ) if name
</del><ins>+                ).on(self._txn)
+            ) if name
</ins><span class="cx">             ]
</span><span class="cx"> 
</span><span class="cx">         # get deleted object names if any
</span><span class="lines">@@ -874,7 +880,7 @@
</span><span class="cx">         self._objects.pop(child.uid(), None)
</span><span class="cx">         if self._objectNames and child.name() in self._objectNames:
</span><span class="cx">             self._objectNames.remove(child.name())
</span><del>-        #yield self._deleteRevision(child.name())
</del><ins>+        # yield self._deleteRevision(child.name())
</ins><span class="cx">         yield self.notifyChanged()
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="lines">@@ -1016,11 +1022,12 @@
</span><span class="cx"> X-ADDRESSBOOKSERVER-KIND:group
</span><span class="cx"> END:VCARD
</span><span class="cx"> &quot;&quot;&quot;.replace(&quot;\n&quot;, &quot;\r\n&quot;).format(
</span><del>-            prodid=vCardProductID,
-            uid=uid,
-            fn=fn,
-            n=n,
-        ))
</del><ins>+                prodid=vCardProductID,
+                uid=uid,
+                fn=fn,
+                n=n,
+            )
+        )
</ins><span class="cx"> 
</span><span class="cx">         # then get member UIDs
</span><span class="cx">         abo = schema.ADDRESSBOOK_OBJECT
</span><span class="lines">@@ -1282,10 +1289,11 @@
</span><span class="cx">         DAL query to find members and revisions
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         aboMembers = schema.ABO_MEMBERS
</span><del>-        return Select([aboMembers.MEMBER_ID, aboMembers.REMOVED, aboMembers.REVISION],
-                      From=aboMembers,
-                      Where=aboMembers.GROUP_ID.In(Parameter(&quot;groupIDs&quot;, len(groupIDs))),
-                     )
</del><ins>+        return Select(
+            [aboMembers.MEMBER_ID, aboMembers.REMOVED, aboMembers.REVISION],
+            From=aboMembers,
+            Where=aboMembers.GROUP_ID.In(Parameter(&quot;groupIDs&quot;, len(groupIDs))),
+        )
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @classmethod
</span><span class="lines">@@ -1294,11 +1302,12 @@
</span><span class="cx">         DAL query to find members and revisions
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         aboMembers = schema.ABO_MEMBERS
</span><del>-        return Select([aboMembers.MEMBER_ID, aboMembers.REMOVED, aboMembers.REVISION],
-                      From=aboMembers,
-                      Where=aboMembers.GROUP_ID.In(Parameter(&quot;groupIDs&quot;, len(groupIDs)))
-                            .And(aboMembers.REVISION &lt;= Parameter(&quot;revision&quot;)),
-                     )
</del><ins>+        return Select(
+            [aboMembers.MEMBER_ID, aboMembers.REMOVED, aboMembers.REVISION],
+            From=aboMembers,
+            Where=aboMembers.GROUP_ID.In(Parameter(&quot;groupIDs&quot;, len(groupIDs))).And(
+                aboMembers.REVISION &lt;= Parameter(&quot;revision&quot;)),
+        )
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @classmethod
</span><span class="lines">@@ -1761,7 +1770,7 @@
</span><span class="cx"> 
</span><span class="cx">             acceptedBindCount = 1 if addressbookAsShared.fullyShared() else 0
</span><span class="cx">             groupBindRows = yield AddressBookObject._acceptedBindForHomeIDAndAddressBookID.on(
</span><del>-                    self._txn, homeID=shareeHome._resourceID, addressbookID=addressbookAsShared._resourceID
</del><ins>+                self._txn, homeID=shareeHome._resourceID, addressbookID=addressbookAsShared._resourceID
</ins><span class="cx">             )
</span><span class="cx">             acceptedBindCount += len(groupBindRows)
</span><span class="cx">             if acceptedBindCount == 1:
</span><span class="lines">@@ -1770,7 +1779,7 @@
</span><span class="cx">                 shareeHome._children.pop(addressbookAsShared._resourceID, None)
</span><span class="cx">             else:
</span><span class="cx">                 yield addressbookAsShared.notifyPropertyChanged()
</span><del>-                #update revision in all remaining bind table rows for this address book
</del><ins>+                # update revision in all remaining bind table rows for this address book
</ins><span class="cx">                 for groupBindRow in groupBindRows:
</span><span class="cx">                     groupObject = yield addressbookAsShared.objectResourceWithID(
</span><span class="cx">                         groupBindRow[self.bindColumns().index(self._bindSchema.RESOURCE_ID)]
</span><span class="lines">@@ -1784,7 +1793,8 @@
</span><span class="cx">             yield shareeHome.notifyChanged()
</span><span class="cx"> 
</span><span class="cx">         # delete bind table rows for this share
</span><del>-        yield self._deleteBindForResourceIDAndHomeID.on(self._txn,
</del><ins>+        yield self._deleteBindForResourceIDAndHomeID.on(
+            self._txn,
</ins><span class="cx">             resourceID=self._resourceID, homeID=shareeHome._resourceID
</span><span class="cx">         )
</span><span class="cx"> 
</span><span class="lines">@@ -2044,8 +2054,10 @@
</span><span class="cx">         if partiallyShared:
</span><span class="cx">             readWriteGroupIDs = yield self.addressbook().readWriteGroupIDs()
</span><span class="cx">             readWriteObjectIDs = (
</span><del>-                set((yield self.addressbook().expandGroupIDs(self._txn, readWriteGroupIDs)))
-                    if readWriteGroupIDs else set()
</del><ins>+                set(
+                    (yield self.addressbook().expandGroupIDs(self._txn, readWriteGroupIDs))
+                )
+                if readWriteGroupIDs else set()
</ins><span class="cx">             )
</span><span class="cx">             # can't delete item in read-only shared group, even if user has addressbook unbind
</span><span class="cx">             if self._resourceID not in readWriteObjectIDs:
</span><span class="lines">@@ -2056,7 +2068,8 @@
</span><span class="cx"> 
</span><span class="cx">         # get groups where this object was once a member and version info
</span><span class="cx">         aboMembers = schema.ABO_MEMBERS
</span><del>-        groupRows = yield Select([aboMembers.GROUP_ID, aboMembers.MEMBER_ID, aboMembers.REMOVED, aboMembers.REVISION],
</del><ins>+        groupRows = yield Select(
+            [aboMembers.GROUP_ID, aboMembers.MEMBER_ID, aboMembers.REMOVED, aboMembers.REVISION],
</ins><span class="cx">             From=aboMembers,
</span><span class="cx">             Where=aboMembers.MEMBER_ID == self._resourceID,
</span><span class="cx">         ).on(self._txn)
</span><span class="lines">@@ -2071,7 +2084,7 @@
</span><span class="cx">         # see if this object is in current version
</span><span class="cx">         groupIDs = set([
</span><span class="cx">             groupID for groupID, memberRows in groupIDToMemberRowMap.iteritems()
</span><del>-                if self._resourceID in AddressBook._currentMemberIDsFromMemberIDRemovedRevisionRows(memberRows)
</del><ins>+            if self._resourceID in AddressBook._currentMemberIDsFromMemberIDRemovedRevisionRows(memberRows)
</ins><span class="cx">         ])
</span><span class="cx"> 
</span><span class="cx">         if partiallyShared:
</span><span class="lines">@@ -2082,7 +2095,8 @@
</span><span class="cx"> 
</span><span class="cx">         # add to member table rows marked removed
</span><span class="cx">         for groupIDToRemoveFrom in groupIDsToRemoveFrom:
</span><del>-            yield self._insertMemberIDQuery.on(self._txn,
</del><ins>+            yield self._insertMemberIDQuery.on(
+                self._txn,
</ins><span class="cx">                 groupID=groupIDToRemoveFrom,
</span><span class="cx">                 addressbookID=self._ownerAddressBookResourceID,
</span><span class="cx">                 memberID=self._resourceID,
</span><span class="lines">@@ -2252,7 +2266,7 @@
</span><span class="cx">             &quot;_created&quot;,
</span><span class="cx">             &quot;_modified&quot;,
</span><span class="cx">             &quot;_dataversion&quot;,
</span><del>-         )
</del><ins>+        )
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @classmethod
</span><span class="lines">@@ -2431,12 +2445,12 @@
</span><span class="cx">     @classmethod
</span><span class="cx">     def _resourceIDAndUIDForUIDsAndAddressBookResourceIDQuery(cls, uids):
</span><span class="cx">         abo = schema.ADDRESSBOOK_OBJECT
</span><del>-        return Select([abo.RESOURCE_ID, abo.VCARD_UID],
-                      From=abo,
-                      Where=((abo.ADDRESSBOOK_HOME_RESOURCE_ID == Parameter(&quot;addressbookResourceID&quot;)
-                              ).And(
-                                    abo.VCARD_UID.In(Parameter(&quot;uids&quot;, len(uids))))),
-                      )
</del><ins>+        return Select(
+            [abo.RESOURCE_ID, abo.VCARD_UID],
+            From=abo,
+            Where=((abo.ADDRESSBOOK_HOME_RESOURCE_ID == Parameter(&quot;addressbookResourceID&quot;)).And(
+                abo.VCARD_UID.In(Parameter(&quot;uids&quot;, len(uids))))),
+        )
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @classmethod
</span><span class="lines">@@ -2445,7 +2459,8 @@
</span><span class="cx">         return Delete(
</span><span class="cx">             aboForeignMembers,
</span><span class="cx">             Where=(aboForeignMembers.GROUP_ID == groupID).And(
</span><del>-                    aboForeignMembers.MEMBER_ADDRESS.In(Parameter(&quot;memberAddrs&quot;, len(memberAddrs)))))
</del><ins>+                aboForeignMembers.MEMBER_ADDRESS.In(Parameter(&quot;memberAddrs&quot;, len(memberAddrs))))
+        )
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @classproperty
</span><span class="lines">@@ -2469,7 +2484,8 @@
</span><span class="cx">                 abo.RESOURCE_ID,
</span><span class="cx">                 abo.CREATED,
</span><span class="cx">                 abo.MODIFIED
</span><del>-        ))
</del><ins>+            )
+        )
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @classproperty
</span><span class="lines">@@ -2610,7 +2626,8 @@
</span><span class="cx"> 
</span><span class="cx">             # add to member table rows
</span><span class="cx">             for groupID in groupIDs:
</span><del>-                yield self._insertMemberIDQuery.on(self._txn,
</del><ins>+                yield self._insertMemberIDQuery.on(
+                    self._txn,
</ins><span class="cx">                     groupID=groupID,
</span><span class="cx">                     addressbookID=self._ownerAddressBookResourceID,
</span><span class="cx">                     memberID=self._resourceID,
</span><span class="lines">@@ -2653,8 +2670,8 @@
</span><span class="cx">             # get current foreign members
</span><span class="cx">             currentForeignMemberRows = yield Select(
</span><span class="cx">                 [aboForeignMembers.MEMBER_ADDRESS],
</span><del>-                 From=aboForeignMembers,
-                 Where=aboForeignMembers.GROUP_ID == self._resourceID,
</del><ins>+                From=aboForeignMembers,
+                Where=aboForeignMembers.GROUP_ID == self._resourceID,
</ins><span class="cx">             ).on(self._txn)
</span><span class="cx">             currentForeignMemberAddrs = [currentForeignMemberRow[0] for currentForeignMemberRow in currentForeignMemberRows]
</span><span class="cx"> 
</span><span class="lines">@@ -2731,9 +2748,9 @@
</span><span class="cx">                     # get foreign members
</span><span class="cx">                     aboForeignMembers = schema.ABO_FOREIGN_MEMBERS
</span><span class="cx">                     foreignMemberRows = yield Select(
</span><del>-                         [aboForeignMembers.MEMBER_ADDRESS],
-                         From=aboForeignMembers,
-                         Where=aboForeignMembers.GROUP_ID == self._resourceID,
</del><ins>+                        [aboForeignMembers.MEMBER_ADDRESS],
+                        From=aboForeignMembers,
+                        Where=aboForeignMembers.GROUP_ID == self._resourceID,
</ins><span class="cx">                     ).on(self._txn)
</span><span class="cx">                     foreignMembers = [foreignMemberRow[0] for foreignMemberRow in foreignMemberRows]
</span><span class="cx"> 
</span><span class="lines">@@ -2788,12 +2805,14 @@
</span><span class="cx">         bind = cls._bindSchema
</span><span class="cx">         child = cls._objectSchema
</span><span class="cx">         columns = cls.bindColumns() + cls.additionalBindColumns() + cls.metadataColumns()
</span><del>-        return Select(columns,
-                     From=child.join(
-                         bind, child.RESOURCE_ID == bind.RESOURCE_ID,
-                         'left outer'),
-                     Where=(bind.HOME_RESOURCE_ID == Parameter(&quot;homeID&quot;)
-                           ).And(bind.BIND_STATUS == _BIND_STATUS_ACCEPTED))
</del><ins>+        return Select(
+            columns,
+            From=child.join(
+                bind, child.RESOURCE_ID == bind.RESOURCE_ID,
+                'left outer'),
+            Where=(bind.HOME_RESOURCE_ID == Parameter(&quot;homeID&quot;)).And(
+                bind.BIND_STATUS == _BIND_STATUS_ACCEPTED)
+        )
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     def notifyPropertyChanged(self):
</span><span class="lines">@@ -2806,10 +2825,11 @@
</span><span class="cx">     @classproperty
</span><span class="cx">     def _addressbookIDForResourceID(cls): #@NoSelf
</span><span class="cx">         obj = cls._objectSchema
</span><del>-        return Select([obj.PARENT_RESOURCE_ID],
-                      From=obj,
-                      Where=obj.RESOURCE_ID == Parameter(&quot;resourceID&quot;)
-                    )
</del><ins>+        return Select(
+            [obj.PARENT_RESOURCE_ID],
+            From=obj,
+            Where=obj.RESOURCE_ID == Parameter(&quot;resourceID&quot;)
+        )
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @classmethod
</span><span class="lines">@@ -2824,12 +2844,12 @@
</span><span class="cx">         bind = cls._bindSchema
</span><span class="cx">         abo = cls._objectSchema
</span><span class="cx">         return Select(
</span><del>-                  cls.bindColumns() + cls.additionalBindColumns(),
-                  From=bind.join(abo),
-                  Where=(bind.BIND_STATUS == _BIND_STATUS_ACCEPTED)
-                        .And(bind.RESOURCE_ID == abo.RESOURCE_ID)
-                        .And(bind.HOME_RESOURCE_ID == Parameter(&quot;homeID&quot;))
-                        .And(abo.ADDRESSBOOK_HOME_RESOURCE_ID == Parameter(&quot;addressbookID&quot;))
</del><ins>+            cls.bindColumns() + cls.additionalBindColumns(),
+            From=bind.join(abo),
+            Where=(bind.BIND_STATUS == _BIND_STATUS_ACCEPTED).And(
+                bind.RESOURCE_ID == abo.RESOURCE_ID).And(
+                    bind.HOME_RESOURCE_ID == Parameter(&quot;homeID&quot;)).And(
+                        abo.ADDRESSBOOK_HOME_RESOURCE_ID == Parameter(&quot;addressbookID&quot;))
</ins><span class="cx">         )
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="lines">@@ -2838,12 +2858,12 @@
</span><span class="cx">         bind = cls._bindSchema
</span><span class="cx">         abo = cls._objectSchema
</span><span class="cx">         return Select(
</span><del>-                  cls.bindColumns() + cls.additionalBindColumns(),
-                  From=bind.join(abo),
-                  Where=(bind.BIND_STATUS != _BIND_STATUS_ACCEPTED)
-                        .And(bind.RESOURCE_ID == abo.RESOURCE_ID)
-                        .And(bind.HOME_RESOURCE_ID == Parameter(&quot;homeID&quot;))
-                        .And(abo.ADDRESSBOOK_HOME_RESOURCE_ID == Parameter(&quot;addressbookID&quot;))
</del><ins>+            cls.bindColumns() + cls.additionalBindColumns(),
+            From=bind.join(abo),
+            Where=(bind.BIND_STATUS != _BIND_STATUS_ACCEPTED).And(
+                bind.RESOURCE_ID == abo.RESOURCE_ID).And(
+                    bind.HOME_RESOURCE_ID == Parameter(&quot;homeID&quot;)).And(
+                        abo.ADDRESSBOOK_HOME_RESOURCE_ID == Parameter(&quot;addressbookID&quot;))
</ins><span class="cx">         )
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="lines">@@ -2852,11 +2872,11 @@
</span><span class="cx">         bind = cls._bindSchema
</span><span class="cx">         abo = cls._objectSchema
</span><span class="cx">         return Select(
</span><del>-                  cls.bindColumns() + cls.additionalBindColumns(),
-                  From=bind.join(abo),
-                  Where=(bind.RESOURCE_ID == abo.RESOURCE_ID)
-                        .And(bind.HOME_RESOURCE_ID == Parameter(&quot;homeID&quot;))
-                        .And(abo.ADDRESSBOOK_HOME_RESOURCE_ID == Parameter(&quot;addressbookID&quot;))
</del><ins>+            cls.bindColumns() + cls.additionalBindColumns(),
+            From=bind.join(abo),
+            Where=(bind.RESOURCE_ID == abo.RESOURCE_ID).And(
+                bind.HOME_RESOURCE_ID == Parameter(&quot;homeID&quot;)).And(
+                    abo.ADDRESSBOOK_HOME_RESOURCE_ID == Parameter(&quot;addressbookID&quot;))
</ins><span class="cx">         )
</span><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="CalendarServertrunktxdavcarddavdatastoretestcommonpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/carddav/datastore/test/common.py (13808 => 13809)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/carddav/datastore/test/common.py        2014-07-31 19:21:33 UTC (rev 13808)
+++ CalendarServer/trunk/txdav/carddav/datastore/test/common.py        2014-07-31 20:15:15 UTC (rev 13809)
</span><span class="lines">@@ -109,7 +109,7 @@
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> vcard4notCardDAV_text = (# Missing UID, N and FN
</span><del>-&quot;&quot;&quot;BEGIN:VCARD
</del><ins>+    &quot;&quot;&quot;BEGIN:VCARD
</ins><span class="cx"> VERSION:3.0
</span><span class="cx"> EMAIL;type=INTERNET;type=WORK;type=pref:lthompson@example.com
</span><span class="cx"> TEL;type=WORK;type=pref:1-555-555-5555
</span><span class="lines">@@ -208,8 +208,8 @@
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         return (
</span><span class="cx">             txn.addressbookHomeWithUID(name if name else &quot;home1&quot;)
</span><del>-                if txn
-                else self.transactionUnderTest().addressbookHomeWithUID(name if name else &quot;home1&quot;)
</del><ins>+            if txn
+            else self.transactionUnderTest().addressbookHomeWithUID(name if name else &quot;home1&quot;)
</ins><span class="cx">         )
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="lines">@@ -218,8 +218,10 @@
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         Get the addressbook detailed by C{requirements['home1']['addressbook']}.
</span><span class="cx">         &quot;&quot;&quot;
</span><del>-        returnValue((yield (yield self.homeUnderTest(txn=txn, name=home))
-            .addressbookWithName(name if name else &quot;addressbook&quot;)))
</del><ins>+        returnValue((
+            yield (yield self.homeUnderTest(txn=txn, name=home))
+            .addressbookWithName(name if name else &quot;addressbook&quot;)
+        ))
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @inlineCallbacks
</span><span class="lines">@@ -294,8 +296,10 @@
</span><span class="cx">         provides L{IAddressBookHome} and has a C{uid()} method that returns the
</span><span class="cx">         same value that was passed in.
</span><span class="cx">         &quot;&quot;&quot;
</span><del>-        addressbookHome = (yield self.transactionUnderTest()
-                            .addressbookHomeWithUID(&quot;home1&quot;))
</del><ins>+        addressbookHome = (
+            yield self.transactionUnderTest()
+            .addressbookHomeWithUID(&quot;home1&quot;)
+        )
</ins><span class="cx">         self.assertEquals(addressbookHome.uid(), &quot;home1&quot;)
</span><span class="cx">         self.assertProvides(IAddressBookHome, addressbookHome)
</span><span class="cx"> 
</span><span class="lines">@@ -357,7 +361,7 @@
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         home = yield self.homeUnderTest()
</span><span class="cx">         name = &quot;addressbook&quot;
</span><del>-        #self.assertIdentical((yield home.addressbookWithName(name)), None)
</del><ins>+        # self.assertIdentical((yield home.addressbookWithName(name)), None)
</ins><span class="cx">         yield home.removeAddressBookWithName(name)
</span><span class="cx">         self.assertNotIdentical((yield home.addressbookWithName(name)), None)
</span><span class="cx">         # notify is called prior to commit
</span><span class="lines">@@ -713,9 +717,11 @@
</span><span class="cx">         text.
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         yield self.failUnlessFailure(
</span><del>-            maybeDeferred((yield self.addressbookUnderTest())
</del><ins>+            maybeDeferred(
+                (yield self.addressbookUnderTest())
</ins><span class="cx">                 .createAddressBookObjectWithName,
</span><del>-                &quot;new&quot;, VComponent.fromString(vcard4notCardDAV_text)),
</del><ins>+                &quot;new&quot;, VComponent.fromString(vcard4notCardDAV_text)
+            ),
</ins><span class="cx">             InvalidObjectResourceError
</span><span class="cx">         )
</span><span class="cx"> 
</span><span class="lines">@@ -728,8 +734,10 @@
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         addressbookObject = (yield self.addressbookObjectUnderTest())
</span><span class="cx">         yield self.failUnlessFailure(
</span><del>-            maybeDeferred(addressbookObject.setComponent,
-                VComponent.fromString(vcard4notCardDAV_text)),
</del><ins>+            maybeDeferred(
+                addressbookObject.setComponent,
+                VComponent.fromString(vcard4notCardDAV_text)
+            ),
</ins><span class="cx">             InvalidObjectResourceError
</span><span class="cx">         )
</span><span class="cx"> 
</span></span></pre></div>
<a id="CalendarServertrunktxdavcarddavdatastoretesttest_filepy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/carddav/datastore/test/test_file.py (13808 => 13809)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/carddav/datastore/test/test_file.py        2014-07-31 19:21:33 UTC (rev 13808)
+++ CalendarServer/trunk/txdav/carddav/datastore/test/test_file.py        2014-07-31 20:15:15 UTC (rev 13809)
</span><span class="lines">@@ -99,9 +99,10 @@
</span><span class="cx">         Filenames starting with &quot;.&quot; are reserved by this
</span><span class="cx">         implementation, so no UIDs may start with &quot;.&quot;.
</span><span class="cx">         &quot;&quot;&quot;
</span><del>-        self.assertEquals(
-            (yield self.addressbookStore.newTransaction(self.id()
-                ).addressbookHomeWithUID(&quot;.xyzzy&quot;)),
</del><ins>+        self.assertEquals((
+            yield self.addressbookStore.newTransaction(
+                self.id())
+            .addressbookHomeWithUID(&quot;.xyzzy&quot;)),
</ins><span class="cx">             None
</span><span class="cx">         )
</span><span class="cx"> 
</span><span class="lines">@@ -235,8 +236,7 @@
</span><span class="cx">         )
</span><span class="cx">         self.assertEquals(
</span><span class="cx">             addressbookObject.component(),
</span><del>-            (yield self.addressbook1.addressbookObjectWithName(&quot;1.vcf&quot;)
-                ).component()
</del><ins>+            (yield self.addressbook1.addressbookObjectWithName(&quot;1.vcf&quot;)).component()
</ins><span class="cx">         )
</span><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="CalendarServertrunktxdavcarddavdatastoretesttest_sqlpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/carddav/datastore/test/test_sql.py (13808 => 13809)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/carddav/datastore/test/test_sql.py        2014-07-31 19:21:33 UTC (rev 13808)
+++ CalendarServer/trunk/txdav/carddav/datastore/test/test_sql.py        2014-07-31 20:15:15 UTC (rev 13809)
</span><span class="lines">@@ -40,7 +40,7 @@
</span><span class="cx"> 
</span><span class="cx"> from txdav.common.icommondatastore import NoSuchObjectResourceError
</span><span class="cx"> from txdav.common.datastore.sql import EADDRESSBOOKTYPE, CommonObjectResource
</span><del>-from txdav.common.datastore.sql_tables import  _ABO_KIND_PERSON, _ABO_KIND_GROUP, schema
</del><ins>+from txdav.common.datastore.sql_tables import _ABO_KIND_PERSON, _ABO_KIND_GROUP, schema
</ins><span class="cx"> from txdav.common.datastore.test.util import cleanStore
</span><span class="cx"> from txdav.carddav.datastore.sql import AddressBook
</span><span class="cx"> 
</span><span class="lines">@@ -160,8 +160,8 @@
</span><span class="cx">         toHome = yield self.transactionUnderTest().addressbookHomeWithUID(
</span><span class="cx">             &quot;new-home&quot;, create=True)
</span><span class="cx">         toAddressbook = yield toHome.addressbookWithName(&quot;addressbook&quot;)
</span><del>-        ok, bad = (yield _migrateAddressbook(fromAddressbook, toAddressbook,
-                                  lambda x: x.component()))
</del><ins>+        ok, bad = (yield _migrateAddressbook(
+            fromAddressbook, toAddressbook, lambda x: x.component()))
</ins><span class="cx">         self.assertEqual(ok, 1)
</span><span class="cx">         self.assertEqual(bad, 1)
</span><span class="cx"> 
</span><span class="lines">@@ -362,7 +362,7 @@
</span><span class="cx">         txn2 = addressbookStore.newTransaction()
</span><span class="cx"> 
</span><span class="cx">         notification_uid1_1 = yield txn1.notificationsWithUID(
</span><del>-           &quot;uid1&quot;,
</del><ins>+            &quot;uid1&quot;,
</ins><span class="cx">         )
</span><span class="cx"> 
</span><span class="cx">         @inlineCallbacks
</span><span class="lines">@@ -415,7 +415,7 @@
</span><span class="cx"> UID:uid1
</span><span class="cx"> END:VCARD
</span><span class="cx"> &quot;&quot;&quot;.replace(&quot;\n&quot;, &quot;\r\n&quot;)
</span><del>-            )
</del><ins>+        )
</ins><span class="cx">         self.assertEqual(person.resourceUID(), &quot;uid1&quot;)
</span><span class="cx">         abObject = yield adbk.createAddressBookObjectWithName(&quot;1.vcf&quot;, person)
</span><span class="cx">         self.assertEqual(abObject.uid(), &quot;uid1&quot;)
</span><span class="lines">@@ -461,7 +461,7 @@
</span><span class="cx"> UID:uid1
</span><span class="cx"> END:VCARD
</span><span class="cx"> &quot;&quot;&quot;.replace(&quot;\n&quot;, &quot;\r\n&quot;)
</span><del>-            )
</del><ins>+        )
</ins><span class="cx">         self.assertEqual(person.resourceKind(), None)
</span><span class="cx">         abObject = yield adbk.createAddressBookObjectWithName(&quot;p.vcf&quot;, person)
</span><span class="cx">         self.assertEqual(abObject.kind(), _ABO_KIND_PERSON)
</span><span class="lines">@@ -478,7 +478,7 @@
</span><span class="cx"> X-ADDRESSBOOKSERVER-MEMBER:urn:uuid:uid1
</span><span class="cx"> END:VCARD
</span><span class="cx"> &quot;&quot;&quot;.replace(&quot;\n&quot;, &quot;\r\n&quot;)
</span><del>-            )
</del><ins>+        )
</ins><span class="cx">         abObject = self.assertEqual(group.resourceKind(), &quot;group&quot;)
</span><span class="cx">         abObject = yield adbk.createAddressBookObjectWithName(&quot;g.vcf&quot;, group)
</span><span class="cx">         self.assertEqual(abObject.kind(), _ABO_KIND_GROUP)
</span><span class="lines">@@ -495,7 +495,7 @@
</span><span class="cx"> X-ADDRESSBOOKSERVER-MEMBER:urn:uuid:uid1
</span><span class="cx"> END:VCARD
</span><span class="cx"> &quot;&quot;&quot;.replace(&quot;\n&quot;, &quot;\r\n&quot;)
</span><del>-            )
</del><ins>+        )
</ins><span class="cx">         abObject = self.assertEqual(badgroup.resourceKind(), &quot;badgroup&quot;)
</span><span class="cx">         abObject = yield adbk.createAddressBookObjectWithName(&quot;bg.vcf&quot;, badgroup)
</span><span class="cx">         self.assertEqual(abObject.kind(), _ABO_KIND_PERSON)
</span><span class="lines">@@ -553,7 +553,7 @@
</span><span class="cx"> UID:uid1
</span><span class="cx"> END:VCARD
</span><span class="cx"> &quot;&quot;&quot;.replace(&quot;\n&quot;, &quot;\r\n&quot;)
</span><del>-            )
</del><ins>+        )
</ins><span class="cx">         self.assertEqual(person.resourceKind(), None)
</span><span class="cx">         personObject = yield adbk.createAddressBookObjectWithName(&quot;p.vcf&quot;, person)
</span><span class="cx"> 
</span><span class="lines">@@ -569,7 +569,7 @@
</span><span class="cx"> X-ADDRESSBOOKSERVER-MEMBER:urn:uuid:uid3
</span><span class="cx"> END:VCARD
</span><span class="cx"> &quot;&quot;&quot;.replace(&quot;\n&quot;, &quot;\r\n&quot;)
</span><del>-            )
</del><ins>+        )
</ins><span class="cx">         groupObject = yield adbk.createAddressBookObjectWithName(&quot;g.vcf&quot;, group)
</span><span class="cx"> 
</span><span class="cx">         aboMembers = schema.ABO_MEMBERS
</span><span class="lines">@@ -592,14 +592,14 @@
</span><span class="cx"> X-ADDRESSBOOKSERVER-MEMBER:urn:uuid:uid1
</span><span class="cx"> END:VCARD
</span><span class="cx"> &quot;&quot;&quot;.replace(&quot;\n&quot;, &quot;\r\n&quot;)
</span><del>-            )
</del><ins>+        )
</ins><span class="cx">         subgroupObject = yield adbk.createAddressBookObjectWithName(&quot;sg.vcf&quot;, subgroup)
</span><span class="cx"> 
</span><span class="cx">         memberRows = yield Select([aboMembers.GROUP_ID, aboMembers.MEMBER_ID], From=aboMembers, Where=aboMembers.REMOVED == False).on(txn)
</span><span class="cx">         self.assertEqual(sorted(memberRows), sorted([
</span><del>-                                                     [groupObject._resourceID, subgroupObject._resourceID],
-                                                     [subgroupObject._resourceID, personObject._resourceID],
-                                                    ]))
</del><ins>+            [groupObject._resourceID, subgroupObject._resourceID],
+            [subgroupObject._resourceID, personObject._resourceID],
+        ]))
</ins><span class="cx"> 
</span><span class="cx">         foreignMemberRows = yield Select([aboForeignMembers.GROUP_ID, aboForeignMembers.MEMBER_ADDRESS], From=aboForeignMembers).on(txn)
</span><span class="cx">         self.assertEqual(foreignMemberRows, [])
</span><span class="lines">@@ -617,7 +617,7 @@
</span><span class="cx">         # see if this object is in current version
</span><span class="cx">         groupIDs = set([
</span><span class="cx">             groupID for groupID, memberIDRemovedRevisionRows in groupIDToMemberRowMap.iteritems()
</span><del>-                if AddressBook._currentMemberIDsFromMemberIDRemovedRevisionRows(memberIDRemovedRevisionRows)
</del><ins>+            if AddressBook._currentMemberIDsFromMemberIDRemovedRevisionRows(memberIDRemovedRevisionRows)
</ins><span class="cx">         ])
</span><span class="cx"> 
</span><span class="cx">         self.assertEqual(len(groupIDs), 0)
</span><span class="lines">@@ -639,9 +639,11 @@
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx"> 
</span><span class="cx">         prop = schema.RESOURCE_PROPERTY
</span><del>-        _allWithID = Select([prop.NAME, prop.VIEWER_UID, prop.VALUE],
-                        From=prop,
-                        Where=prop.RESOURCE_ID == Parameter(&quot;resourceID&quot;))
</del><ins>+        _allWithID = Select(
+            [prop.NAME, prop.VIEWER_UID, prop.VALUE],
+            From=prop,
+            Where=prop.RESOURCE_ID == Parameter(&quot;resourceID&quot;)
+        )
</ins><span class="cx"> 
</span><span class="cx">         # Create address book and add a property
</span><span class="cx">         home = yield self.homeUnderTest()
</span><span class="lines">@@ -691,9 +693,11 @@
</span><span class="cx">         resourceID = addressobject._resourceID
</span><span class="cx"> 
</span><span class="cx">         prop = schema.RESOURCE_PROPERTY
</span><del>-        _allWithID = Select([prop.NAME, prop.VIEWER_UID, prop.VALUE],
-                        From=prop,
-                        Where=prop.RESOURCE_ID == Parameter(&quot;resourceID&quot;))
</del><ins>+        _allWithID = Select(
+            [prop.NAME, prop.VIEWER_UID, prop.VALUE],
+            From=prop,
+            Where=prop.RESOURCE_ID == Parameter(&quot;resourceID&quot;)
+        )
</ins><span class="cx"> 
</span><span class="cx">         # No properties on existing address book object
</span><span class="cx">         rows = yield _allWithID.on(self.transactionUnderTest(), resourceID=resourceID)
</span></span></pre></div>
<a id="CalendarServertrunktxdavcarddavdatastoretesttest_sql_sharingpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/carddav/datastore/test/test_sql_sharing.py (13808 => 13809)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/carddav/datastore/test/test_sql_sharing.py        2014-07-31 19:21:33 UTC (rev 13808)
+++ CalendarServer/trunk/txdav/carddav/datastore/test/test_sql_sharing.py        2014-07-31 20:15:15 UTC (rev 13809)
</span><span class="lines">@@ -111,24 +111,24 @@
</span><span class="cx">     @classproperty(cache=False)
</span><span class="cx">     def requirements(cls): #@NoSelf
</span><span class="cx">         return {
</span><del>-        &quot;user01&quot;: {
-            &quot;addressbook&quot;: {
-                &quot;card1.vcf&quot;: cls.card1,
-                &quot;card2.vcf&quot;: cls.card2,
-                &quot;card3.vcf&quot;: cls.card3,
-                &quot;group1.vcf&quot;: cls.group1,
-                &quot;group2.vcf&quot;: cls.group2,
</del><ins>+            &quot;user01&quot;: {
+                &quot;addressbook&quot;: {
+                    &quot;card1.vcf&quot;: cls.card1,
+                    &quot;card2.vcf&quot;: cls.card2,
+                    &quot;card3.vcf&quot;: cls.card3,
+                    &quot;group1.vcf&quot;: cls.group1,
+                    &quot;group2.vcf&quot;: cls.group2,
+                },
</ins><span class="cx">             },
</span><del>-        },
-        &quot;user02&quot;: {
-            &quot;addressbook&quot;: {
</del><ins>+            &quot;user02&quot;: {
+                &quot;addressbook&quot;: {
+                },
</ins><span class="cx">             },
</span><del>-        },
-        &quot;user03&quot;: {
-            &quot;addressbook&quot;: {
</del><ins>+            &quot;user03&quot;: {
+                &quot;addressbook&quot;: {
+                },
</ins><span class="cx">             },
</span><del>-        },
-    }
</del><ins>+        }
</ins><span class="cx"> 
</span><span class="cx">     fully_shared_children = [&quot;addressbook.vcf&quot;, &quot;group1.vcf&quot;, &quot;group2.vcf&quot;, &quot;card1.vcf&quot;, &quot;card2.vcf&quot;, &quot;card3.vcf&quot;, ]
</span><span class="cx">     all_children = [&quot;group1.vcf&quot;, &quot;group2.vcf&quot;, &quot;card1.vcf&quot;, &quot;card2.vcf&quot;, &quot;card3.vcf&quot;, ]
</span><span class="lines">@@ -1174,15 +1174,15 @@
</span><span class="cx">         self.assertEqual(len(invalid), 0)
</span><span class="cx"> 
</span><span class="cx">         for depth, result in (
</span><del>-            (&quot;1&quot;, ['addressbook/',
-                   'user01/', ]
-            ),
-            (&quot;infinity&quot;, ['addressbook/',
-                             'user01/',
-                             'user01/card1.vcf',
-                             'user01/card2.vcf',
-                             'user01/group1.vcf']
-             )):
</del><ins>+            (&quot;1&quot;, ['addressbook/', 'user01/', ]),
+            (&quot;infinity&quot;, [
+                'addressbook/',
+                'user01/',
+                'user01/card1.vcf',
+                'user01/card2.vcf',
+                'user01/group1.vcf'
+            ])
+        ):
</ins><span class="cx">             changed, deleted, invalid = yield otherAB.viewerHome().resourceNamesSinceRevision(0, depth)
</span><span class="cx">             self.assertEqual(set(changed), set(result))
</span><span class="cx">             self.assertEqual(len(deleted), 0)
</span></span></pre></div>
<a id="CalendarServertrunktxdavcarddavdatastoreutilpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/carddav/datastore/util.py (13808 => 13809)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/carddav/datastore/util.py        2014-07-31 19:21:33 UTC (rev 13808)
+++ CalendarServer/trunk/txdav/carddav/datastore/util.py        2014-07-31 20:15:15 UTC (rev 13809)
</span><span class="lines">@@ -52,7 +52,7 @@
</span><span class="cx">             raise InvalidObjectResourceError(
</span><span class="cx">                 &quot;UID may not change (%s != %s)&quot; % (
</span><span class="cx">                     component.resourceUID(), addressbookObject.uid()
</span><del>-                 )
</del><ins>+                )
</ins><span class="cx">             )
</span><span class="cx">     except NoSuchObjectResourceError:
</span><span class="cx">         pass
</span></span></pre></div>
<a id="CalendarServertrunktxdavcommondatastorefilepy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/common/datastore/file.py (13808 => 13809)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/common/datastore/file.py        2014-07-31 19:21:33 UTC (rev 13808)
+++ CalendarServer/trunk/txdav/common/datastore/file.py        2014-07-31 20:15:15 UTC (rev 13809)
</span><span class="lines">@@ -63,7 +63,6 @@
</span><span class="cx"> import uuid
</span><span class="cx"> from twistedcaldav.sql import AbstractSQLDatabase, db_prefix
</span><span class="cx"> import os
</span><del>-import types
</del><span class="cx"> 
</span><span class="cx"> ECALENDARTYPE = 0
</span><span class="cx"> EADDRESSBOOKTYPE = 1
</span><span class="lines">@@ -520,7 +519,8 @@
</span><span class="cx"> 
</span><span class="cx">     def addOrUpdateRecord(self, record):
</span><span class="cx"> 
</span><del>-        self._db_execute(&quot;&quot;&quot;insert or replace into SHARES (SHAREUID, SHARETYPE, HOSTURL, LOCALNAME, SUMMARY)
</del><ins>+        self._db_execute(
+            &quot;&quot;&quot;insert or replace into SHARES (SHAREUID, SHARETYPE, HOSTURL, LOCALNAME, SUMMARY)
</ins><span class="cx">             values (:1, :2, :3, :4, :5)
</span><span class="cx">             &quot;&quot;&quot;, record.shareuid, record.sharetype, record.hosturl, record.localname, record.summary,
</span><span class="cx">         )
</span><span class="lines">@@ -613,7 +613,7 @@
</span><span class="cx"> 
</span><span class="cx">     def _makeRecord(self, row):
</span><span class="cx"> 
</span><del>-        return SharedCollectionRecord(*[str(item) if type(item) == types.UnicodeType else item for item in row])
</del><ins>+        return SharedCollectionRecord(*[str(item) if isinstance(item, unicode) else item for item in row])
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="lines">@@ -758,7 +758,7 @@
</span><span class="cx">             self.childWithName(name)
</span><span class="cx">             for name in self._path.listdir()
</span><span class="cx">             if not name.startswith(&quot;.&quot;) and
</span><del>-                name not in self._removedChildren
</del><ins>+            name not in self._removedChildren
</ins><span class="cx">         )
</span><span class="cx"> 
</span><span class="cx">     # For file store there is no efficient &quot;bulk&quot; load of all children so just
</span><span class="lines">@@ -776,8 +776,8 @@
</span><span class="cx">             name
</span><span class="cx">             for name in self._path.listdir()
</span><span class="cx">             if not name.startswith(&quot;.&quot;) and
</span><del>-                self._path.child(name).isdir() and
-                name not in self._removedChildren
</del><ins>+            self._path.child(name).isdir() and
+            name not in self._removedChildren
</ins><span class="cx">         ))
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="lines">@@ -1535,8 +1535,7 @@
</span><span class="cx">             # Return undo
</span><span class="cx">             return lambda: home._path.child(collectionName).remove()
</span><span class="cx"> 
</span><del>-        txn.addOperation(do, &quot;create notification child %r&quot; %
-                          (collectionName,))
</del><ins>+        txn.addOperation(do, &quot;create notification child %r&quot; % (collectionName,))
</ins><span class="cx">         return c
</span><span class="cx"> 
</span><span class="cx">     notificationObjects = CommonHomeChild.objectResources
</span></span></pre></div>
<a id="CalendarServertrunktxdavcommondatastorepoddingtesttest_conduitpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/common/datastore/podding/test/test_conduit.py (13808 => 13809)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/common/datastore/podding/test/test_conduit.py        2014-07-31 19:21:33 UTC (rev 13808)
+++ CalendarServer/trunk/txdav/common/datastore/podding/test/test_conduit.py        2014-07-31 20:15:15 UTC (rev 13809)
</span><span class="lines">@@ -82,25 +82,25 @@
</span><span class="cx">     @classproperty(cache=False)
</span><span class="cx">     def requirements(cls): #@NoSelf
</span><span class="cx">         return {
</span><del>-        &quot;user01&quot;: {
-            &quot;calendar_1&quot;: {
</del><ins>+            &quot;user01&quot;: {
+                &quot;calendar_1&quot;: {
+                },
+                &quot;inbox&quot;: {
+                },
</ins><span class="cx">             },
</span><del>-            &quot;inbox&quot;: {
</del><ins>+            &quot;user02&quot;: {
+                &quot;calendar_1&quot;: {
+                },
+                &quot;inbox&quot;: {
+                },
</ins><span class="cx">             },
</span><del>-        },
-        &quot;user02&quot;: {
-            &quot;calendar_1&quot;: {
</del><ins>+            &quot;user03&quot;: {
+                &quot;calendar_1&quot;: {
+                },
+                &quot;inbox&quot;: {
+                },
</ins><span class="cx">             },
</span><del>-            &quot;inbox&quot;: {
-            },
-        },
-        &quot;user03&quot;: {
-            &quot;calendar_1&quot;: {
-            },
-            &quot;inbox&quot;: {
-            },
-        },
-    }
</del><ins>+        }
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @inlineCallbacks
</span><span class="lines">@@ -274,7 +274,7 @@
</span><span class="cx">         yield self.createShare(&quot;user01&quot;, &quot;puser01&quot;)
</span><span class="cx"> 
</span><span class="cx">         calendar1 = yield self.calendarUnderTest(home=&quot;user01&quot;, name=&quot;calendar&quot;)
</span><del>-        shared = yield  calendar1.shareeView(&quot;puser01&quot;)
</del><ins>+        shared = yield calendar1.shareeView(&quot;puser01&quot;)
</ins><span class="cx">         self.assertEqual(shared.shareStatus(), _BIND_STATUS_ACCEPTED)
</span><span class="cx">         yield self.commit()
</span><span class="cx"> 
</span><span class="lines">@@ -306,7 +306,7 @@
</span><span class="cx">         yield self.otherCommit()
</span><span class="cx"> 
</span><span class="cx">         calendar1 = yield self.calendarUnderTest(home=&quot;user01&quot;, name=&quot;calendar&quot;)
</span><del>-        yield  calendar1.createCalendarObjectWithName(&quot;1.ics&quot;, Component.fromString(self.caldata1))
</del><ins>+        yield calendar1.createCalendarObjectWithName(&quot;1.ics&quot;, Component.fromString(self.caldata1))
</ins><span class="cx">         count = yield calendar1.countObjectResources()
</span><span class="cx">         self.assertEqual(count, 1)
</span><span class="cx">         yield self.commit()
</span><span class="lines">@@ -318,7 +318,7 @@
</span><span class="cx"> 
</span><span class="cx">         calendar1 = yield self.calendarUnderTest(home=&quot;user01&quot;, name=&quot;calendar&quot;)
</span><span class="cx">         object1 = yield self.calendarObjectUnderTest(home=&quot;user01&quot;, calendar_name=&quot;calendar&quot;, name=&quot;1.ics&quot;)
</span><del>-        yield  object1.remove()
</del><ins>+        yield object1.remove()
</ins><span class="cx">         count = yield calendar1.countObjectResources()
</span><span class="cx">         self.assertEqual(count, 0)
</span><span class="cx">         yield self.commit()
</span><span class="lines">@@ -343,8 +343,8 @@
</span><span class="cx">         yield self.otherCommit()
</span><span class="cx"> 
</span><span class="cx">         calendar1 = yield self.calendarUnderTest(home=&quot;user01&quot;, name=&quot;calendar&quot;)
</span><del>-        yield  calendar1.createCalendarObjectWithName(&quot;1.ics&quot;, Component.fromString(self.caldata1))
-        yield  calendar1.createCalendarObjectWithName(&quot;2.ics&quot;, Component.fromString(self.caldata2))
</del><ins>+        yield calendar1.createCalendarObjectWithName(&quot;1.ics&quot;, Component.fromString(self.caldata1))
+        yield calendar1.createCalendarObjectWithName(&quot;2.ics&quot;, Component.fromString(self.caldata2))
</ins><span class="cx">         objects = yield calendar1.listObjectResources()
</span><span class="cx">         self.assertEqual(set(objects), set((&quot;1.ics&quot;, &quot;2.ics&quot;,)))
</span><span class="cx">         yield self.commit()
</span><span class="lines">@@ -356,7 +356,7 @@
</span><span class="cx"> 
</span><span class="cx">         calendar1 = yield self.calendarUnderTest(home=&quot;user01&quot;, name=&quot;calendar&quot;)
</span><span class="cx">         object1 = yield self.calendarObjectUnderTest(home=&quot;user01&quot;, calendar_name=&quot;calendar&quot;, name=&quot;1.ics&quot;)
</span><del>-        yield  object1.remove()
</del><ins>+        yield object1.remove()
</ins><span class="cx">         objects = yield calendar1.listObjectResources()
</span><span class="cx">         self.assertEqual(set(objects), set((&quot;2.ics&quot;,)))
</span><span class="cx">         yield self.commit()
</span><span class="lines">@@ -386,7 +386,7 @@
</span><span class="cx">         self.assertEqual(token1_1, token2_1)
</span><span class="cx"> 
</span><span class="cx">         calendar1 = yield self.calendarUnderTest(home=&quot;user01&quot;, name=&quot;calendar&quot;)
</span><del>-        yield  calendar1.createCalendarObjectWithName(&quot;1.ics&quot;, Component.fromString(self.caldata1))
</del><ins>+        yield calendar1.createCalendarObjectWithName(&quot;1.ics&quot;, Component.fromString(self.caldata1))
</ins><span class="cx">         yield self.commit()
</span><span class="cx"> 
</span><span class="cx">         calendar1 = yield self.calendarUnderTest(home=&quot;user01&quot;, name=&quot;calendar&quot;)
</span><span class="lines">@@ -402,7 +402,7 @@
</span><span class="cx"> 
</span><span class="cx">         calendar1 = yield self.calendarUnderTest(home=&quot;user01&quot;, name=&quot;calendar&quot;)
</span><span class="cx">         object1 = yield self.calendarObjectUnderTest(home=&quot;user01&quot;, calendar_name=&quot;calendar&quot;, name=&quot;1.ics&quot;)
</span><del>-        yield  object1.remove()
</del><ins>+        yield object1.remove()
</ins><span class="cx">         count = yield calendar1.countObjectResources()
</span><span class="cx">         self.assertEqual(count, 0)
</span><span class="cx">         yield self.commit()
</span><span class="lines">@@ -437,7 +437,7 @@
</span><span class="cx">         yield self.otherCommit()
</span><span class="cx"> 
</span><span class="cx">         calendar1 = yield self.calendarUnderTest(home=&quot;user01&quot;, name=&quot;calendar&quot;)
</span><del>-        yield  calendar1.createCalendarObjectWithName(&quot;1.ics&quot;, Component.fromString(self.caldata1))
</del><ins>+        yield calendar1.createCalendarObjectWithName(&quot;1.ics&quot;, Component.fromString(self.caldata1))
</ins><span class="cx">         yield self.commit()
</span><span class="cx"> 
</span><span class="cx">         calendar1 = yield self.calendarUnderTest(home=&quot;user01&quot;, name=&quot;calendar&quot;)
</span><span class="lines">@@ -454,7 +454,7 @@
</span><span class="cx"> 
</span><span class="cx">         calendar1 = yield self.calendarUnderTest(home=&quot;user01&quot;, name=&quot;calendar&quot;)
</span><span class="cx">         object1 = yield self.calendarObjectUnderTest(home=&quot;user01&quot;, calendar_name=&quot;calendar&quot;, name=&quot;1.ics&quot;)
</span><del>-        yield  object1.remove()
</del><ins>+        yield object1.remove()
</ins><span class="cx">         count = yield calendar1.countObjectResources()
</span><span class="cx">         self.assertEqual(count, 0)
</span><span class="cx">         yield self.commit()
</span><span class="lines">@@ -491,7 +491,7 @@
</span><span class="cx">         yield self.createShare(&quot;user01&quot;, &quot;puser01&quot;)
</span><span class="cx"> 
</span><span class="cx">         calendar1 = yield self.calendarUnderTest(home=&quot;user01&quot;, name=&quot;calendar&quot;)
</span><del>-        yield  calendar1.createCalendarObjectWithName(&quot;1.ics&quot;, Component.fromString(self.caldata1))
</del><ins>+        yield calendar1.createCalendarObjectWithName(&quot;1.ics&quot;, Component.fromString(self.caldata1))
</ins><span class="cx">         yield self.commit()
</span><span class="cx"> 
</span><span class="cx">         calendar1 = yield self.calendarUnderTest(home=&quot;user01&quot;, name=&quot;calendar&quot;)
</span><span class="lines">@@ -518,7 +518,7 @@
</span><span class="cx">         yield self.createShare(&quot;user01&quot;, &quot;puser01&quot;)
</span><span class="cx"> 
</span><span class="cx">         calendar1 = yield self.calendarUnderTest(home=&quot;user01&quot;, name=&quot;calendar&quot;)
</span><del>-        yield  calendar1.createCalendarObjectWithName(&quot;1.ics&quot;, Component.fromString(self.caldata1))
</del><ins>+        yield calendar1.createCalendarObjectWithName(&quot;1.ics&quot;, Component.fromString(self.caldata1))
</ins><span class="cx">         yield self.commit()
</span><span class="cx"> 
</span><span class="cx">         calendar1 = yield self.calendarUnderTest(home=&quot;user01&quot;, name=&quot;calendar&quot;)
</span><span class="lines">@@ -545,13 +545,13 @@
</span><span class="cx">         yield self.createShare(&quot;user01&quot;, &quot;puser01&quot;)
</span><span class="cx"> 
</span><span class="cx">         calendar1 = yield self.calendarUnderTest(home=&quot;user01&quot;, name=&quot;calendar&quot;)
</span><del>-        yield  calendar1.createCalendarObjectWithName(&quot;1.ics&quot;, Component.fromString(self.caldata1))
</del><ins>+        yield calendar1.createCalendarObjectWithName(&quot;1.ics&quot;, Component.fromString(self.caldata1))
</ins><span class="cx">         yield self.commit()
</span><span class="cx"> 
</span><span class="cx">         filter = caldavxml.Filter(
</span><span class="cx">             caldavxml.ComponentFilter(
</span><span class="cx">                 *[caldavxml.ComponentFilter(
</span><del>-                    **{&quot;name&quot;:(&quot;VEVENT&quot;, &quot;VFREEBUSY&quot;, &quot;VAVAILABILITY&quot;)}
</del><ins>+                    **{&quot;name&quot;: (&quot;VEVENT&quot;, &quot;VFREEBUSY&quot;, &quot;VAVAILABILITY&quot;)}
</ins><span class="cx">                 )],
</span><span class="cx">                 **{&quot;name&quot;: &quot;VCALENDAR&quot;}
</span><span class="cx">             )
</span><span class="lines">@@ -578,9 +578,9 @@
</span><span class="cx">         yield self.createShare(&quot;user01&quot;, &quot;puser01&quot;)
</span><span class="cx"> 
</span><span class="cx">         calendar1 = yield self.calendarUnderTest(home=&quot;user01&quot;, name=&quot;calendar&quot;)
</span><del>-        resource1 = yield  calendar1.createCalendarObjectWithName(&quot;1.ics&quot;, Component.fromString(self.caldata1))
</del><ins>+        resource1 = yield calendar1.createCalendarObjectWithName(&quot;1.ics&quot;, Component.fromString(self.caldata1))
</ins><span class="cx">         resource_id1 = resource1.id()
</span><del>-        resource2 = yield  calendar1.createCalendarObjectWithName(&quot;2.ics&quot;, Component.fromString(self.caldata2))
</del><ins>+        resource2 = yield calendar1.createCalendarObjectWithName(&quot;2.ics&quot;, Component.fromString(self.caldata2))
</ins><span class="cx">         resource_id2 = resource2.id()
</span><span class="cx">         yield self.commit()
</span><span class="cx"> 
</span><span class="lines">@@ -614,7 +614,7 @@
</span><span class="cx"> 
</span><span class="cx">         calendar1 = yield self.calendarUnderTest(home=&quot;user01&quot;, name=&quot;calendar&quot;)
</span><span class="cx">         object1 = yield self.calendarObjectUnderTest(home=&quot;user01&quot;, calendar_name=&quot;calendar&quot;, name=&quot;1.ics&quot;)
</span><del>-        yield  object1.remove()
</del><ins>+        yield object1.remove()
</ins><span class="cx">         yield self.commit()
</span><span class="cx"> 
</span><span class="cx">         shared = yield self.calendarUnderTest(txn=self.newOtherTransaction(), home=&quot;puser01&quot;, name=&quot;shared-calendar&quot;)
</span><span class="lines">@@ -655,10 +655,10 @@
</span><span class="cx">         yield self.createShare(&quot;user01&quot;, &quot;puser01&quot;)
</span><span class="cx"> 
</span><span class="cx">         calendar1 = yield self.calendarUnderTest(home=&quot;user01&quot;, name=&quot;calendar&quot;)
</span><del>-        resource1 = yield  calendar1.createCalendarObjectWithName(&quot;1.ics&quot;, Component.fromString(self.caldata1))
</del><ins>+        resource1 = yield calendar1.createCalendarObjectWithName(&quot;1.ics&quot;, Component.fromString(self.caldata1))
</ins><span class="cx">         resource_id1 = resource1.id()
</span><del>-        yield  calendar1.createCalendarObjectWithName(&quot;2.ics&quot;, Component.fromString(self.caldata2))
-        resource3 = yield  calendar1.createCalendarObjectWithName(&quot;3.ics&quot;, Component.fromString(self.caldata3))
</del><ins>+        yield calendar1.createCalendarObjectWithName(&quot;2.ics&quot;, Component.fromString(self.caldata2))
+        resource3 = yield calendar1.createCalendarObjectWithName(&quot;3.ics&quot;, Component.fromString(self.caldata3))
</ins><span class="cx">         resource_id3 = resource3.id()
</span><span class="cx">         yield self.commit()
</span><span class="cx"> 
</span><span class="lines">@@ -697,7 +697,7 @@
</span><span class="cx"> 
</span><span class="cx">         calendar1 = yield self.calendarUnderTest(home=&quot;user01&quot;, name=&quot;calendar&quot;)
</span><span class="cx">         object1 = yield self.calendarObjectUnderTest(home=&quot;user01&quot;, calendar_name=&quot;calendar&quot;, name=&quot;1.ics&quot;)
</span><del>-        yield  object1.remove()
</del><ins>+        yield object1.remove()
</ins><span class="cx">         yield self.commit()
</span><span class="cx"> 
</span><span class="cx">         shared = yield self.calendarUnderTest(txn=self.newOtherTransaction(), home=&quot;puser01&quot;, name=&quot;shared-calendar&quot;)
</span><span class="lines">@@ -738,7 +738,7 @@
</span><span class="cx">         yield self.createShare(&quot;user01&quot;, &quot;puser01&quot;)
</span><span class="cx"> 
</span><span class="cx">         calendar1 = yield self.calendarUnderTest(home=&quot;user01&quot;, name=&quot;calendar&quot;)
</span><del>-        resource = yield  calendar1.createCalendarObjectWithName(&quot;1.ics&quot;, Component.fromString(self.caldata1))
</del><ins>+        resource = yield calendar1.createCalendarObjectWithName(&quot;1.ics&quot;, Component.fromString(self.caldata1))
</ins><span class="cx">         resource_id = resource.id()
</span><span class="cx">         yield self.commit()
</span><span class="cx"> 
</span><span class="lines">@@ -777,7 +777,7 @@
</span><span class="cx"> 
</span><span class="cx">         calendar1 = yield self.calendarUnderTest(home=&quot;user01&quot;, name=&quot;calendar&quot;)
</span><span class="cx">         object1 = yield self.calendarObjectUnderTest(home=&quot;user01&quot;, calendar_name=&quot;calendar&quot;, name=&quot;1.ics&quot;)
</span><del>-        yield  object1.remove()
</del><ins>+        yield object1.remove()
</ins><span class="cx">         yield self.commit()
</span><span class="cx"> 
</span><span class="cx">         shared = yield self.calendarUnderTest(txn=self.newOtherTransaction(), home=&quot;puser01&quot;, name=&quot;shared-calendar&quot;)
</span><span class="lines">@@ -838,7 +838,7 @@
</span><span class="cx">         yield self.createShare(&quot;user01&quot;, &quot;puser01&quot;)
</span><span class="cx"> 
</span><span class="cx">         calendar1 = yield self.calendarUnderTest(home=&quot;user01&quot;, name=&quot;calendar&quot;)
</span><del>-        yield  calendar1.createCalendarObjectWithName(&quot;1.ics&quot;, Component.fromString(self.caldata1))
</del><ins>+        yield calendar1.createCalendarObjectWithName(&quot;1.ics&quot;, Component.fromString(self.caldata1))
</ins><span class="cx">         yield self.commit()
</span><span class="cx"> 
</span><span class="cx">         shared = yield self.calendarUnderTest(txn=self.newOtherTransaction(), home=&quot;puser01&quot;, name=&quot;shared-calendar&quot;)
</span><span class="lines">@@ -859,7 +859,7 @@
</span><span class="cx">         yield self.createShare(&quot;user01&quot;, &quot;puser01&quot;)
</span><span class="cx"> 
</span><span class="cx">         calendar1 = yield self.calendarUnderTest(home=&quot;user01&quot;, name=&quot;calendar&quot;)
</span><del>-        yield  calendar1.createCalendarObjectWithName(&quot;1.ics&quot;, Component.fromString(self.caldata1))
</del><ins>+        yield calendar1.createCalendarObjectWithName(&quot;1.ics&quot;, Component.fromString(self.caldata1))
</ins><span class="cx">         yield self.commit()
</span><span class="cx"> 
</span><span class="cx">         shared_object = yield self.calendarObjectUnderTest(txn=self.newOtherTransaction(), home=&quot;puser01&quot;, calendar_name=&quot;shared-calendar&quot;, name=&quot;1.ics&quot;)
</span><span class="lines">@@ -892,7 +892,7 @@
</span><span class="cx">         yield self.createShare(&quot;user01&quot;, &quot;puser01&quot;)
</span><span class="cx"> 
</span><span class="cx">         calendar1 = yield self.calendarUnderTest(home=&quot;user01&quot;, name=&quot;calendar&quot;)
</span><del>-        yield  calendar1.createCalendarObjectWithName(&quot;1.ics&quot;, Component.fromString(self.caldata1))
</del><ins>+        yield calendar1.createCalendarObjectWithName(&quot;1.ics&quot;, Component.fromString(self.caldata1))
</ins><span class="cx">         yield self.commit()
</span><span class="cx"> 
</span><span class="cx">         shared_object = yield self.calendarObjectUnderTest(txn=self.newOtherTransaction(), home=&quot;puser01&quot;, calendar_name=&quot;shared-calendar&quot;, name=&quot;1.ics&quot;)
</span><span class="lines">@@ -911,7 +911,7 @@
</span><span class="cx">         yield self.createShare(&quot;user01&quot;, &quot;puser01&quot;)
</span><span class="cx"> 
</span><span class="cx">         calendar1 = yield self.calendarUnderTest(home=&quot;user01&quot;, name=&quot;calendar&quot;)
</span><del>-        yield  calendar1.createCalendarObjectWithName(&quot;1.ics&quot;, Component.fromString(self.caldata1))
</del><ins>+        yield calendar1.createCalendarObjectWithName(&quot;1.ics&quot;, Component.fromString(self.caldata1))
</ins><span class="cx">         yield self.commit()
</span><span class="cx"> 
</span><span class="cx">         shared_object = yield self.calendarObjectUnderTest(txn=self.newOtherTransaction(), home=&quot;puser01&quot;, calendar_name=&quot;shared-calendar&quot;, name=&quot;1.ics&quot;)
</span><span class="lines">@@ -936,7 +936,7 @@
</span><span class="cx">         yield self.createShare(&quot;user01&quot;, &quot;puser01&quot;)
</span><span class="cx"> 
</span><span class="cx">         calendar1 = yield self.calendarUnderTest(home=&quot;user01&quot;, name=&quot;calendar&quot;)
</span><del>-        yield  calendar1.createCalendarObjectWithName(&quot;1.ics&quot;, Component.fromString(self.caldata1))
</del><ins>+        yield calendar1.createCalendarObjectWithName(&quot;1.ics&quot;, Component.fromString(self.caldata1))
</ins><span class="cx">         yield self.commit()
</span><span class="cx"> 
</span><span class="cx">         fbstart = &quot;{now:04d}0102T000000Z&quot;.format(**self.nowYear)
</span><span class="lines">@@ -990,7 +990,7 @@
</span><span class="cx">         yield self.createShare(&quot;user01&quot;, &quot;puser01&quot;)
</span><span class="cx"> 
</span><span class="cx">         calendar1 = yield self.calendarUnderTest(home=&quot;user01&quot;, name=&quot;calendar&quot;)
</span><del>-        object1 = yield  calendar1.createCalendarObjectWithName(&quot;1.ics&quot;, Component.fromString(self.caldata1))
</del><ins>+        object1 = yield calendar1.createCalendarObjectWithName(&quot;1.ics&quot;, Component.fromString(self.caldata1))
</ins><span class="cx">         resourceID = object1.id()
</span><span class="cx">         yield self.commit()
</span><span class="cx"> 
</span><span class="lines">@@ -1020,7 +1020,7 @@
</span><span class="cx">         yield self.createShare(&quot;user01&quot;, &quot;puser01&quot;)
</span><span class="cx"> 
</span><span class="cx">         calendar1 = yield self.calendarUnderTest(home=&quot;user01&quot;, name=&quot;calendar&quot;)
</span><del>-        yield  calendar1.createCalendarObjectWithName(&quot;1.ics&quot;, Component.fromString(self.caldata1))
</del><ins>+        yield calendar1.createCalendarObjectWithName(&quot;1.ics&quot;, Component.fromString(self.caldata1))
</ins><span class="cx">         yield self.commit()
</span><span class="cx"> 
</span><span class="cx">         object1 = yield self.calendarObjectUnderTest(home=&quot;user01&quot;, calendar_name=&quot;calendar&quot;, name=&quot;1.ics&quot;)
</span><span class="lines">@@ -1055,7 +1055,7 @@
</span><span class="cx">         yield self.createShare(&quot;user01&quot;, &quot;puser01&quot;)
</span><span class="cx"> 
</span><span class="cx">         calendar1 = yield self.calendarUnderTest(home=&quot;user01&quot;, name=&quot;calendar&quot;)
</span><del>-        yield  calendar1.createCalendarObjectWithName(&quot;1.ics&quot;, Component.fromString(self.caldata1))
</del><ins>+        yield calendar1.createCalendarObjectWithName(&quot;1.ics&quot;, Component.fromString(self.caldata1))
</ins><span class="cx">         yield self.commit()
</span><span class="cx"> 
</span><span class="cx">         object1 = yield self.calendarObjectUnderTest(home=&quot;user01&quot;, calendar_name=&quot;calendar&quot;, name=&quot;1.ics&quot;)
</span></span></pre></div>
<a id="CalendarServertrunktxdavcommondatastorepoddingtesttest_resourcepy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/common/datastore/podding/test/test_resource.py (13808 => 13809)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/common/datastore/podding/test/test_resource.py        2014-07-31 19:21:33 UTC (rev 13808)
+++ CalendarServer/trunk/txdav/common/datastore/podding/test/test_resource.py        2014-07-31 20:15:15 UTC (rev 13809)
</span><span class="lines">@@ -66,25 +66,25 @@
</span><span class="cx">     @classproperty(cache=False)
</span><span class="cx">     def requirements(cls): #@NoSelf
</span><span class="cx">         return {
</span><del>-        &quot;user01&quot;: {
-            &quot;calendar_1&quot;: {
</del><ins>+            &quot;user01&quot;: {
+                &quot;calendar_1&quot;: {
+                },
+                &quot;inbox&quot;: {
+                },
</ins><span class="cx">             },
</span><del>-            &quot;inbox&quot;: {
</del><ins>+            &quot;user02&quot;: {
+                &quot;calendar_1&quot;: {
+                },
+                &quot;inbox&quot;: {
+                },
</ins><span class="cx">             },
</span><del>-        },
-        &quot;user02&quot;: {
-            &quot;calendar_1&quot;: {
</del><ins>+            &quot;user03&quot;: {
+                &quot;calendar_1&quot;: {
+                },
+                &quot;inbox&quot;: {
+                },
</ins><span class="cx">             },
</span><del>-            &quot;inbox&quot;: {
-            },
-        },
-        &quot;user03&quot;: {
-            &quot;calendar_1&quot;: {
-            },
-            &quot;inbox&quot;: {
-            },
-        },
-    }
</del><ins>+        }
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @inlineCallbacks
</span></span></pre></div>
<a id="CalendarServertrunktxdavcommondatastoresqlpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/common/datastore/sql.py (13808 => 13809)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/common/datastore/sql.py        2014-07-31 19:21:33 UTC (rev 13808)
+++ CalendarServer/trunk/txdav/common/datastore/sql.py        2014-07-31 20:15:15 UTC (rev 13809)
</span><span class="lines">@@ -783,39 +783,48 @@
</span><span class="cx">     @classproperty
</span><span class="cx">     def _insertAPNSubscriptionQuery(cls):
</span><span class="cx">         apn = schema.APN_SUBSCRIPTIONS
</span><del>-        return Insert({apn.TOKEN: Parameter(&quot;token&quot;),
-                       apn.RESOURCE_KEY: Parameter(&quot;resourceKey&quot;),
-                       apn.MODIFIED: Parameter(&quot;modified&quot;),
-                       apn.SUBSCRIBER_GUID: Parameter(&quot;subscriber&quot;),
-                       apn.USER_AGENT: Parameter(&quot;userAgent&quot;),
-                       apn.IP_ADDR: Parameter(&quot;ipAddr&quot;)})
</del><ins>+        return Insert({
+            apn.TOKEN: Parameter(&quot;token&quot;),
+            apn.RESOURCE_KEY: Parameter(&quot;resourceKey&quot;),
+            apn.MODIFIED: Parameter(&quot;modified&quot;),
+            apn.SUBSCRIBER_GUID: Parameter(&quot;subscriber&quot;),
+            apn.USER_AGENT: Parameter(&quot;userAgent&quot;),
+            apn.IP_ADDR: Parameter(&quot;ipAddr&quot;)
+        })
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @classproperty
</span><span class="cx">     def _updateAPNSubscriptionQuery(cls):
</span><span class="cx">         apn = schema.APN_SUBSCRIPTIONS
</span><del>-        return Update({apn.MODIFIED: Parameter(&quot;modified&quot;),
-                       apn.SUBSCRIBER_GUID: Parameter(&quot;subscriber&quot;),
-                       apn.USER_AGENT: Parameter(&quot;userAgent&quot;),
-                       apn.IP_ADDR: Parameter(&quot;ipAddr&quot;)},
-                      Where=(apn.TOKEN == Parameter(&quot;token&quot;)).And(
-                             apn.RESOURCE_KEY == Parameter(&quot;resourceKey&quot;)))
</del><ins>+        return Update(
+            {
+                apn.MODIFIED: Parameter(&quot;modified&quot;),
+                apn.SUBSCRIBER_GUID: Parameter(&quot;subscriber&quot;),
+                apn.USER_AGENT: Parameter(&quot;userAgent&quot;),
+                apn.IP_ADDR: Parameter(&quot;ipAddr&quot;)
+            },
+            Where=(apn.TOKEN == Parameter(&quot;token&quot;)).And(
+                apn.RESOURCE_KEY == Parameter(&quot;resourceKey&quot;))
+        )
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @classproperty
</span><span class="cx">     def _selectAPNSubscriptionQuery(cls):
</span><span class="cx">         apn = schema.APN_SUBSCRIPTIONS
</span><del>-        return Select([apn.MODIFIED, apn.SUBSCRIBER_GUID], From=apn,
-                Where=(
-                    apn.TOKEN == Parameter(&quot;token&quot;)).And(
-                    apn.RESOURCE_KEY == Parameter(&quot;resourceKey&quot;)
-                )
</del><ins>+        return Select(
+            [apn.MODIFIED, apn.SUBSCRIBER_GUID],
+            From=apn,
+            Where=(apn.TOKEN == Parameter(&quot;token&quot;)).And(
+                apn.RESOURCE_KEY == Parameter(&quot;resourceKey&quot;)
</ins><span class="cx">             )
</span><ins>+        )
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @inlineCallbacks
</span><del>-    def addAPNSubscription(self, token, key, timestamp, subscriber,
-        userAgent, ipAddr):
</del><ins>+    def addAPNSubscription(
+        self, token, key, timestamp, subscriber,
+        userAgent, ipAddr
+    ):
</ins><span class="cx">         if not (token and key and timestamp and subscriber):
</span><span class="cx">             raise InvalidSubscriptionValues()
</span><span class="cx"> 
</span><span class="lines">@@ -823,11 +832,14 @@
</span><span class="cx">         userAgent = userAgent[:255]
</span><span class="cx">         ipAddr = ipAddr[:255]
</span><span class="cx"> 
</span><del>-        row = yield self._selectAPNSubscriptionQuery.on(self,
-            token=token, resourceKey=key)
</del><ins>+        row = yield self._selectAPNSubscriptionQuery.on(
+            self,
+            token=token, resourceKey=key
+        )
</ins><span class="cx">         if not row:  # Subscription does not yet exist
</span><span class="cx">             try:
</span><del>-                yield self._insertAPNSubscriptionQuery.on(self,
</del><ins>+                yield self._insertAPNSubscriptionQuery.on(
+                    self,
</ins><span class="cx">                     token=token, resourceKey=key, modified=timestamp,
</span><span class="cx">                     subscriber=subscriber, userAgent=userAgent,
</span><span class="cx">                     ipAddr=ipAddr)
</span><span class="lines">@@ -837,7 +849,8 @@
</span><span class="cx"> 
</span><span class="cx">         else:  # Subscription exists, so update with new timestamp and subscriber
</span><span class="cx">             try:
</span><del>-                yield self._updateAPNSubscriptionQuery.on(self,
</del><ins>+                yield self._updateAPNSubscriptionQuery.on(
+                    self,
</ins><span class="cx">                     token=token, resourceKey=key, modified=timestamp,
</span><span class="cx">                     subscriber=subscriber, userAgent=userAgent,
</span><span class="cx">                     ipAddr=ipAddr)
</span><span class="lines">@@ -855,7 +868,8 @@
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     def removeAPNSubscription(self, token, key):
</span><del>-        return self._removeAPNSubscriptionQuery.on(self,
</del><ins>+        return self._removeAPNSubscriptionQuery.on(
+            self,
</ins><span class="cx">             token=token, resourceKey=key)
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="lines">@@ -867,7 +881,8 @@
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     def purgeOldAPNSubscriptions(self, olderThan):
</span><del>-        return self._purgeOldAPNSubscriptionQuery.on(self,
</del><ins>+        return self._purgeOldAPNSubscriptionQuery.on(
+            self,
</ins><span class="cx">             olderThan=olderThan)
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="lines">@@ -909,11 +924,12 @@
</span><span class="cx">     @classproperty
</span><span class="cx">     def _insertIMIPTokenQuery(cls):
</span><span class="cx">         imip = schema.IMIP_TOKENS
</span><del>-        return Insert({imip.TOKEN: Parameter(&quot;token&quot;),
-                       imip.ORGANIZER: Parameter(&quot;organizer&quot;),
-                       imip.ATTENDEE: Parameter(&quot;attendee&quot;),
-                       imip.ICALUID: Parameter(&quot;icaluid&quot;),
-                      })
</del><ins>+        return Insert({
+            imip.TOKEN: Parameter(&quot;token&quot;),
+            imip.ORGANIZER: Parameter(&quot;organizer&quot;),
+            imip.ATTENDEE: Parameter(&quot;attendee&quot;),
+            imip.ICALUID: Parameter(&quot;icaluid&quot;),
+        })
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @inlineCallbacks
</span><span class="lines">@@ -925,7 +941,8 @@
</span><span class="cx">             token = str(uuid4())
</span><span class="cx"> 
</span><span class="cx">         try:
</span><del>-            yield self._insertIMIPTokenQuery.on(self,
</del><ins>+            yield self._insertIMIPTokenQuery.on(
+                self,
</ins><span class="cx">                 token=token, organizer=organizer, attendee=attendee,
</span><span class="cx">                 icaluid=icaluid)
</span><span class="cx">         except Exception:
</span><span class="lines">@@ -952,29 +969,36 @@
</span><span class="cx">     @classproperty
</span><span class="cx">     def _selectIMIPTokenQuery(cls):
</span><span class="cx">         imip = schema.IMIP_TOKENS
</span><del>-        return Select([imip.TOKEN], From=imip,
-                      Where=(imip.ORGANIZER == Parameter(&quot;organizer&quot;)).And(
-                             imip.ATTENDEE == Parameter(&quot;attendee&quot;)).And(
-                             imip.ICALUID == Parameter(&quot;icaluid&quot;)))
</del><ins>+        return Select(
+            [imip.TOKEN],
+            From=imip,
+            Where=(imip.ORGANIZER == Parameter(&quot;organizer&quot;)).And(
+                imip.ATTENDEE == Parameter(&quot;attendee&quot;)).And(
+                imip.ICALUID == Parameter(&quot;icaluid&quot;))
+        )
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @classproperty
</span><span class="cx">     def _updateIMIPTokenQuery(cls):
</span><span class="cx">         imip = schema.IMIP_TOKENS
</span><del>-        return Update({imip.ACCESSED: utcNowSQL, },
-                      Where=(imip.ORGANIZER == Parameter(&quot;organizer&quot;)).And(
-                             imip.ATTENDEE == Parameter(&quot;attendee&quot;)).And(
-                             imip.ICALUID == Parameter(&quot;icaluid&quot;)))
</del><ins>+        return Update(
+            {imip.ACCESSED: utcNowSQL, },
+            Where=(imip.ORGANIZER == Parameter(&quot;organizer&quot;)).And(
+                imip.ATTENDEE == Parameter(&quot;attendee&quot;)).And(
+                    imip.ICALUID == Parameter(&quot;icaluid&quot;))
+        )
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @inlineCallbacks
</span><span class="cx">     def imipGetToken(self, organizer, attendee, icaluid):
</span><del>-        row = (yield self._selectIMIPTokenQuery.on(self, organizer=organizer,
</del><ins>+        row = (yield self._selectIMIPTokenQuery.on(
+            self, organizer=organizer,
</ins><span class="cx">             attendee=attendee, icaluid=icaluid))
</span><span class="cx">         if row:
</span><span class="cx">             token = row[0][0]
</span><span class="cx">             # update the timestamp
</span><del>-            yield self._updateIMIPTokenQuery.on(self, organizer=organizer,
</del><ins>+            yield self._updateIMIPTokenQuery.on(
+                self, organizer=organizer,
</ins><span class="cx">                 attendee=attendee, icaluid=icaluid)
</span><span class="cx">         else:
</span><span class="cx">             token = None
</span><span class="lines">@@ -2661,8 +2685,8 @@
</span><span class="cx">                         aboMembers,
</span><span class="cx">                         Where=(aboMembers.GROUP_ID == groupID).And(
</span><span class="cx">                             aboMembers.MEMBER_ID == memberID).And(
</span><del>-                                aboMembers.REVISION.In(Parameter(&quot;revisionsToRemove&quot;, len(revisionsToRemove)))
-                            )
</del><ins>+                            aboMembers.REVISION.In(Parameter(&quot;revisionsToRemove&quot;, len(revisionsToRemove)))
+                        )
</ins><span class="cx">                     ).on(self, revisionsToRemove=revisionsToRemove)
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="lines">@@ -3588,9 +3612,10 @@
</span><span class="cx">             Do the changes query.
</span><span class="cx">             Subclasses may override.
</span><span class="cx">         &quot;&quot;&quot;
</span><del>-        result = yield self._changesQuery.on(self._txn,
-                                         resourceID=self._resourceID,
-                                         revision=revision)
</del><ins>+        result = yield self._changesQuery.on(
+            self._txn,
+            resourceID=self._resourceID,
+            revision=revision)
</ins><span class="cx">         returnValue(result)
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="lines">@@ -3616,8 +3641,8 @@
</span><span class="cx">         Now that we are truncating the revision table, we need to handle the full sync (revision == 0)
</span><span class="cx">         case a little differently as the revision table will not contain data for resources that exist,
</span><span class="cx">         but were last modified before the revision cut-off. Instead for revision == 0 we need to list
</span><del>-        all existing child resources.  
-  
</del><ins>+        all existing child resources.
+
</ins><span class="cx">         We need to handle shared collection a little differently from owned ones. When a shared collection
</span><span class="cx">         is bound into a home we record a revision for it using the sharee home id and sharee collection name.
</span><span class="cx">         That revision is the &quot;starting point&quot; for changes: so if sync occurs with a revision earlier than
</span><span class="lines">@@ -3700,8 +3725,6 @@
</span><span class="cx">         returnValue((changed, deleted, invalid,))
</span><span class="cx"> 
</span><span class="cx"> 
</span><del>-
-
</del><span class="cx">     @inlineCallbacks
</span><span class="cx">     def resourceNamesSinceRevisionZero(self, depth):
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="lines">@@ -4139,10 +4162,10 @@
</span><span class="cx">                 raise SyncTokenValidException
</span><span class="cx"> 
</span><span class="cx">             results = [
</span><del>-                (name if name else &quot;&quot;, removed) for name, removed in
-                    (yield self._objectNamesSinceRevisionQuery().on(
</del><ins>+                (name if name else &quot;&quot;, removed) for name, removed in (
+                    yield self._objectNamesSinceRevisionQuery().on(
</ins><span class="cx">                         self._txn, revision=revision, resourceID=self._resourceID)
</span><del>-                    )
</del><ins>+                )
</ins><span class="cx">             ]
</span><span class="cx">             results.sort(key=lambda x: x[1])
</span><span class="cx"> 
</span><span class="lines">@@ -4169,14 +4192,18 @@
</span><span class="cx">     @classproperty
</span><span class="cx">     def _addNewRevision(cls):
</span><span class="cx">         rev = cls._revisionsSchema
</span><del>-        return Insert({rev.HOME_RESOURCE_ID: Parameter(&quot;homeID&quot;),
-                       rev.RESOURCE_ID: Parameter(&quot;resourceID&quot;),
-                       rev.COLLECTION_NAME: Parameter(&quot;collectionName&quot;),
-                       rev.RESOURCE_NAME: None,
-                       # Always starts false; may be updated to be a tombstone
-                       # later.
-                       rev.DELETED: False},
-                     Return=[rev.REVISION])
</del><ins>+        return Insert(
+            {
+                rev.HOME_RESOURCE_ID: Parameter(&quot;homeID&quot;),
+                rev.RESOURCE_ID: Parameter(&quot;resourceID&quot;),
+                rev.COLLECTION_NAME: Parameter(&quot;collectionName&quot;),
+                rev.RESOURCE_NAME: None,
+                # Always starts false; may be updated to be a tombstone
+                # later.
+                rev.DELETED: False
+            },
+            Return=[rev.REVISION]
+        )
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @inlineCallbacks
</span><span class="lines">@@ -4263,13 +4290,16 @@
</span><span class="cx">         DAL query to indicate a shared collection has been deleted.
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         rev = cls._revisionsSchema
</span><del>-        return Update({rev.RESOURCE_ID: None,
-                       rev.REVISION: schema.REVISION_SEQ,
-                       rev.DELETED: True},
-                      Where=(rev.HOME_RESOURCE_ID == Parameter(&quot;homeID&quot;)).And(
-                          rev.RESOURCE_ID == Parameter(&quot;resourceID&quot;)).And(
-                              rev.RESOURCE_NAME == None)
-                     )
</del><ins>+        return Update(
+            {
+                rev.RESOURCE_ID: None,
+                rev.REVISION: schema.REVISION_SEQ,
+                rev.DELETED: True
+            },
+            Where=(rev.HOME_RESOURCE_ID == Parameter(&quot;homeID&quot;)).And(
+                rev.RESOURCE_ID == Parameter(&quot;resourceID&quot;)).And(
+                rev.RESOURCE_NAME == None)
+        )
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @classproperty
</span><span class="lines">@@ -4278,12 +4308,15 @@
</span><span class="cx">         DAL query to indicate an owned collection has been deleted.
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         rev = cls._revisionsSchema
</span><del>-        return Update({rev.RESOURCE_ID: None,
-                       rev.REVISION: schema.REVISION_SEQ,
-                       rev.DELETED: True},
-                      Where=(rev.RESOURCE_ID == Parameter(&quot;resourceID&quot;)).And(
-                          rev.RESOURCE_NAME == None),
-                     )
</del><ins>+        return Update(
+            {
+                rev.RESOURCE_ID: None,
+                rev.REVISION: schema.REVISION_SEQ,
+                rev.DELETED: True
+            },
+            Where=(rev.RESOURCE_ID == Parameter(&quot;resourceID&quot;)).And(
+                rev.RESOURCE_NAME == None),
+        )
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @inlineCallbacks
</span><span class="lines">@@ -4330,49 +4363,60 @@
</span><span class="cx">     @classproperty
</span><span class="cx">     def _deleteBumpTokenQuery(cls):
</span><span class="cx">         rev = cls._revisionsSchema
</span><del>-        return Update({rev.REVISION: schema.REVISION_SEQ,
-                       rev.DELETED: True},
-                      Where=(rev.RESOURCE_ID == Parameter(&quot;resourceID&quot;)).And(
-                           rev.RESOURCE_NAME == Parameter(&quot;name&quot;)),
-                      Return=rev.REVISION)
</del><ins>+        return Update(
+            {rev.REVISION: schema.REVISION_SEQ, rev.DELETED: True},
+            Where=(rev.RESOURCE_ID == Parameter(&quot;resourceID&quot;)).And(
+                rev.RESOURCE_NAME == Parameter(&quot;name&quot;)),
+            Return=rev.REVISION
+        )
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @classproperty
</span><span class="cx">     def _updateBumpTokenQuery(cls):
</span><span class="cx">         rev = cls._revisionsSchema
</span><del>-        return Update({rev.REVISION: schema.REVISION_SEQ},
-                      Where=(rev.RESOURCE_ID == Parameter(&quot;resourceID&quot;)).And(
-                           rev.RESOURCE_NAME == Parameter(&quot;name&quot;)),
-                      Return=rev.REVISION)
</del><ins>+        return Update(
+            {rev.REVISION: schema.REVISION_SEQ},
+            Where=(rev.RESOURCE_ID == Parameter(&quot;resourceID&quot;)).And(
+                rev.RESOURCE_NAME == Parameter(&quot;name&quot;)),
+            Return=rev.REVISION
+        )
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @classproperty
</span><span class="cx">     def _insertFindPreviouslyNamedQuery(cls):
</span><span class="cx">         rev = cls._revisionsSchema
</span><del>-        return Select([rev.RESOURCE_ID], From=rev,
-                      Where=(rev.RESOURCE_ID == Parameter(&quot;resourceID&quot;)).And(
-                           rev.RESOURCE_NAME == Parameter(&quot;name&quot;)))
</del><ins>+        return Select(
+            [rev.RESOURCE_ID],
+            From=rev,
+            Where=(rev.RESOURCE_ID == Parameter(&quot;resourceID&quot;)).And(
+                rev.RESOURCE_NAME == Parameter(&quot;name&quot;))
+        )
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @classproperty
</span><span class="cx">     def _updatePreviouslyNamedQuery(cls):
</span><span class="cx">         rev = cls._revisionsSchema
</span><del>-        return Update({rev.REVISION: schema.REVISION_SEQ,
-                       rev.DELETED: False},
-                      Where=(rev.RESOURCE_ID == Parameter(&quot;resourceID&quot;)).And(
-                           rev.RESOURCE_NAME == Parameter(&quot;name&quot;)),
-                      Return=rev.REVISION)
</del><ins>+        return Update(
+            {rev.REVISION: schema.REVISION_SEQ, rev.DELETED: False},
+            Where=(rev.RESOURCE_ID == Parameter(&quot;resourceID&quot;)).And(
+                rev.RESOURCE_NAME == Parameter(&quot;name&quot;)),
+            Return=rev.REVISION
+        )
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @classproperty
</span><span class="cx">     def _completelyNewRevisionQuery(cls):
</span><span class="cx">         rev = cls._revisionsSchema
</span><del>-        return Insert({rev.HOME_RESOURCE_ID: Parameter(&quot;homeID&quot;),
-                       rev.RESOURCE_ID: Parameter(&quot;resourceID&quot;),
-                       rev.RESOURCE_NAME: Parameter(&quot;name&quot;),
-                       rev.REVISION: schema.REVISION_SEQ,
-                       rev.DELETED: False},
-                      Return=rev.REVISION)
</del><ins>+        return Insert(
+            {
+                rev.HOME_RESOURCE_ID: Parameter(&quot;homeID&quot;),
+                rev.RESOURCE_ID: Parameter(&quot;resourceID&quot;),
+                rev.RESOURCE_NAME: Parameter(&quot;name&quot;),
+                rev.REVISION: schema.REVISION_SEQ,
+                rev.DELETED: False
+            },
+            Return=rev.REVISION
+        )
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @inlineCallbacks
</span><span class="lines">@@ -4463,8 +4507,8 @@
</span><span class="cx">         bind = cls._bindSchema
</span><span class="cx">         return Update(
</span><span class="cx">             columnMap,
</span><del>-            Where=(bind.RESOURCE_ID == Parameter(&quot;resourceID&quot;))
-                   .And(bind.HOME_RESOURCE_ID == Parameter(&quot;homeID&quot;)),
</del><ins>+            Where=(bind.RESOURCE_ID == Parameter(&quot;resourceID&quot;)).And(
+                bind.HOME_RESOURCE_ID == Parameter(&quot;homeID&quot;)),
</ins><span class="cx">         )
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="lines">@@ -4473,8 +4517,8 @@
</span><span class="cx">         bind = cls._bindSchema
</span><span class="cx">         return Delete(
</span><span class="cx">             From=bind,
</span><del>-            Where=(bind.RESOURCE_ID == Parameter(&quot;resourceID&quot;))
-                  .And(bind.HOME_RESOURCE_ID == Parameter(&quot;homeID&quot;)),
</del><ins>+            Where=(bind.RESOURCE_ID == Parameter(&quot;resourceID&quot;)).And(
+                bind.HOME_RESOURCE_ID == Parameter(&quot;homeID&quot;)),
</ins><span class="cx">         )
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="lines">@@ -5023,7 +5067,7 @@
</span><span class="cx">         # TODO: raise a nice exception if shareeView is not, in fact, a shared
</span><span class="cx">         # version of this same L{CommonHomeChild}
</span><span class="cx"> 
</span><del>-        #remove None parameters, and substitute None for empty string
</del><ins>+        # remove None parameters, and substitute None for empty string
</ins><span class="cx">         bind = self._bindSchema
</span><span class="cx">         columnMap = {}
</span><span class="cx">         if mode != None and mode != self._bindMode:
</span><span class="lines">@@ -5235,8 +5279,8 @@
</span><span class="cx">         bind = self._bindSchema
</span><span class="cx">         yield Update(
</span><span class="cx">             {bind.MESSAGE: self._bindMessage},
</span><del>-            Where=(bind.RESOURCE_ID == Parameter(&quot;resourceID&quot;))
-                  .And(bind.HOME_RESOURCE_ID == Parameter(&quot;homeID&quot;)),
</del><ins>+            Where=(bind.RESOURCE_ID == Parameter(&quot;resourceID&quot;)).And(
+                bind.HOME_RESOURCE_ID == Parameter(&quot;homeID&quot;)),
</ins><span class="cx">         ).on(self._txn, resourceID=self._resourceID, homeID=self.viewerHome()._resourceID)
</span><span class="cx"> 
</span><span class="cx">         yield self.invalidateQueryCache()
</span><span class="lines">@@ -5416,14 +5460,16 @@
</span><span class="cx">         childMetaData = cls._homeChildMetaDataSchema
</span><span class="cx"> 
</span><span class="cx">         columns = cls.bindColumns() + cls.additionalBindColumns() + cls.metadataColumns()
</span><del>-        return Select(columns,
-                     From=child.join(
-                         bind, child.RESOURCE_ID == bind.RESOURCE_ID,
-                         'left outer').join(
-                         childMetaData, childMetaData.RESOURCE_ID == bind.RESOURCE_ID,
-                         'left outer'),
-                     Where=(bind.HOME_RESOURCE_ID == Parameter(&quot;homeID&quot;)
-                           ).And(bind.BIND_STATUS == _BIND_STATUS_ACCEPTED))
</del><ins>+        return Select(
+            columns,
+            From=child.join(
+                bind, child.RESOURCE_ID == bind.RESOURCE_ID,
+                'left outer').join(
+                    childMetaData, childMetaData.RESOURCE_ID == bind.RESOURCE_ID,
+                    'left outer'),
+            Where=(bind.HOME_RESOURCE_ID == Parameter(&quot;homeID&quot;)).And(
+                bind.BIND_STATUS == _BIND_STATUS_ACCEPTED)
+        )
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @classmethod
</span><span class="lines">@@ -5432,8 +5478,8 @@
</span><span class="cx">         return Select(
</span><span class="cx">             [rev.RESOURCE_ID, Max(rev.REVISION)],
</span><span class="cx">             From=rev,
</span><del>-            Where=rev.RESOURCE_ID.In(Parameter(&quot;resourceIDs&quot;, len(resourceIDs))).
-                    And((rev.RESOURCE_NAME != None).Or(rev.DELETED == False)),
</del><ins>+            Where=rev.RESOURCE_ID.In(Parameter(&quot;resourceIDs&quot;, len(resourceIDs))).And(
+                (rev.RESOURCE_NAME != None).Or(rev.DELETED == False)),
</ins><span class="cx">             GroupBy=rev.RESOURCE_ID
</span><span class="cx">         )
</span><span class="cx"> 
</span><span class="lines">@@ -6095,8 +6141,8 @@
</span><span class="cx">         obj = cls._objectSchema
</span><span class="cx">         return Select(
</span><span class="cx">             [obj.RESOURCE_NAME], From=obj,
</span><del>-            Where=(obj.UID == Parameter(&quot;uid&quot;)
-                  ).And(obj.PARENT_RESOURCE_ID == Parameter(&quot;resourceID&quot;)))
</del><ins>+            Where=(obj.UID == Parameter(&quot;uid&quot;)).And(
+                obj.PARENT_RESOURCE_ID == Parameter(&quot;resourceID&quot;)))
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @inlineCallbacks
</span><span class="lines">@@ -6124,8 +6170,9 @@
</span><span class="cx">         obj = cls._objectSchema
</span><span class="cx">         return Select(
</span><span class="cx">             [obj.UID], From=obj,
</span><del>-            Where=(obj.RESOURCE_NAME == Parameter(&quot;name&quot;)
-                  ).And(obj.PARENT_RESOURCE_ID == Parameter(&quot;resourceID&quot;)))
</del><ins>+            Where=(obj.RESOURCE_NAME == Parameter(&quot;name&quot;)).And(
+                obj.PARENT_RESOURCE_ID == Parameter(&quot;resourceID&quot;))
+        )
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @inlineCallbacks
</span><span class="lines">@@ -6437,7 +6484,7 @@
</span><span class="cx">                     [rev.RESOURCE_NAME, rev.DELETED],
</span><span class="cx">                     From=rev,
</span><span class="cx">                     Where=(rev.REVISION &gt; revision).And(
</span><del>-                    rev.RESOURCE_ID == self._resourceID)
</del><ins>+                        rev.RESOURCE_ID == self._resourceID)
</ins><span class="cx">                 ).on(self._txn))
</span><span class="cx">                 if name
</span><span class="cx">             ]
</span><span class="lines">@@ -8028,7 +8075,7 @@
</span><span class="cx">             From=schema.NOTIFICATION_HOME.join(
</span><span class="cx">                 schema.NOTIFICATION,
</span><span class="cx">                 on=schema.NOTIFICATION_HOME.RESOURCE_ID ==
</span><del>-                    schema.NOTIFICATION.NOTIFICATION_HOME_RESOURCE_ID),
</del><ins>+                schema.NOTIFICATION.NOTIFICATION_HOME_RESOURCE_ID),
</ins><span class="cx">             Where=schema.NOTIFICATION_HOME.OWNER_UID == uid
</span><span class="cx">         )
</span><span class="cx">     homeTypeName = {ECALENDARTYPE: &quot;CALENDAR&quot;,
</span><span class="lines">@@ -8039,9 +8086,9 @@
</span><span class="cx">     obj = getattr(schema, homeTypeName + &quot;_OBJECT&quot;)
</span><span class="cx">     return Select(
</span><span class="cx">         [Max(obj.MODIFIED)],
</span><del>-        From=home.join(bind, on=bind.HOME_RESOURCE_ID == home.RESOURCE_ID)
-           .join(child, on=child.RESOURCE_ID == bind.RESOURCE_ID)
-           .join(obj, on=obj.PARENT_RESOURCE_ID == child.RESOURCE_ID),
</del><ins>+        From=home.join(bind, on=bind.HOME_RESOURCE_ID == home.RESOURCE_ID).join(
+            child, on=child.RESOURCE_ID == bind.RESOURCE_ID).join(
+            obj, on=obj.PARENT_RESOURCE_ID == child.RESOURCE_ID),
</ins><span class="cx">         Where=(bind.BIND_MODE == 0).And(home.OWNER_UID == uid)
</span><span class="cx">     )
</span><span class="cx"> 
</span></span></pre></div>
<a id="CalendarServertrunktxdavcommondatastoresql_tablespy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/common/datastore/sql_tables.py (13808 => 13809)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/common/datastore/sql_tables.py        2014-07-31 19:21:33 UTC (rev 13808)
+++ CalendarServer/trunk/txdav/common/datastore/sql_tables.py        2014-07-31 20:15:15 UTC (rev 13809)
</span><span class="lines">@@ -365,12 +365,13 @@
</span><span class="cx">                         elif default is False:
</span><span class="cx">                             default = 0
</span><span class="cx">                         out.write(&quot; &quot; + repr(default))
</span><del>-            if ((not column.model.canBeNull())
-                 # Oracle treats empty strings as NULLs, so we have to accept
-                 # NULL values in columns of a string type.  Other types should
-                 # be okay though.
-                 and typeName not in ('varchar', 'nclob', 'char', 'nchar',
-                                      'nvarchar', 'nvarchar2')):
</del><ins>+            if (
+                (not column.model.canBeNull())
+                # Oracle treats empty strings as NULLs, so we have to accept
+                # NULL values in columns of a string type.  Other types should
+                # be okay though.
+                and typeName not in ('varchar', 'nclob', 'char', 'nchar', 'nvarchar', 'nvarchar2')
+            ):
</ins><span class="cx">                 out.write(' not null')
</span><span class="cx">             if [column.model] in list(table.model.uniques()):
</span><span class="cx">                 out.write(' unique')
</span><span class="lines">@@ -461,7 +462,7 @@
</span><span class="cx">             aggregated += agg
</span><span class="cx">             continue
</span><span class="cx">         if inPlSQL is None:
</span><del>-            #if 'begin'.lower() in str(stmt).split()[0].lower():
</del><ins>+            # if 'begin'.lower() in str(stmt).split()[0].lower():
</ins><span class="cx">             if str(stmt).lower().strip().startswith('begin'):
</span><span class="cx">                 inPlSQL = True
</span><span class="cx">                 aggregated += str(stmt)
</span></span></pre></div>
<a id="CalendarServertrunktxdavcommondatastoretesttest_sqlpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/common/datastore/test/test_sql.py (13808 => 13809)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/common/datastore/test/test_sql.py        2014-07-31 19:21:33 UTC (rev 13808)
+++ CalendarServer/trunk/txdav/common/datastore/test/test_sql.py        2014-07-31 20:15:15 UTC (rev 13809)
</span><span class="lines">@@ -71,10 +71,10 @@
</span><span class="cx">         txn = self.transactionUnderTest()
</span><span class="cx">         cs = schema.CALENDARSERVER
</span><span class="cx">         version = (yield Select(
</span><del>-                [cs.VALUE, ],
-                From=cs,
-                Where=cs.NAME == 'VERSION',
-            ).on(txn))
</del><ins>+            [cs.VALUE, ],
+            From=cs,
+            Where=cs.NAME == 'VERSION',
+        ).on(txn))
</ins><span class="cx">         self.assertNotEqual(version, None)
</span><span class="cx">         self.assertEqual(len(version), 1)
</span><span class="cx">         self.assertEqual(len(version[0]), 1)
</span><span class="lines">@@ -350,23 +350,27 @@
</span><span class="cx">         rp = schema.RESOURCE_PROPERTY
</span><span class="cx">         txn = self.transactionUnderTest()
</span><span class="cx">         # setup
</span><del>-        yield Insert({rp.RESOURCE_ID: 1,
-                      rp.NAME: &quot;asdf&quot;,
-                      rp.VALUE: &quot;property-value&quot;,
-                      rp.VIEWER_UID: &quot;not-a-uuid&quot;}).on(txn)
-        yield Insert({rp.RESOURCE_ID: 2,
-                      rp.NAME: &quot;fdsa&quot;,
-                      rp.VALUE: &quot;another-value&quot;,
-                      rp.VIEWER_UID: &quot;aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa&quot;}
-                    ).on(txn)
</del><ins>+        yield Insert({
+            rp.RESOURCE_ID: 1,
+            rp.NAME: &quot;asdf&quot;,
+            rp.VALUE: &quot;property-value&quot;,
+            rp.VIEWER_UID: &quot;not-a-uuid&quot;}).on(txn)
+        yield Insert({
+            rp.RESOURCE_ID: 2,
+            rp.NAME: &quot;fdsa&quot;,
+            rp.VALUE: &quot;another-value&quot;,
+            rp.VIEWER_UID: &quot;aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa&quot;}
+        ).on(txn)
</ins><span class="cx">         # test
</span><span class="cx">         from txdav.common.datastore.sql import _normalizeColumnUUIDs
</span><span class="cx">         yield _normalizeColumnUUIDs(txn, rp.VIEWER_UID)
</span><span class="cx">         self.assertEqual(
</span><del>-            (yield Select([rp.RESOURCE_ID, rp.NAME,
-                           rp.VALUE, rp.VIEWER_UID], From=rp,
-                           OrderBy=rp.RESOURCE_ID, Ascending=True,
-                           ).on(txn)),
</del><ins>+            (yield Select(
+                [rp.RESOURCE_ID, rp.NAME,
+                    rp.VALUE, rp.VIEWER_UID],
+                From=rp,
+                OrderBy=rp.RESOURCE_ID, Ascending=True,
+            ).on(txn)),
</ins><span class="cx">             [[1, &quot;asdf&quot;, &quot;property-value&quot;, &quot;not-a-uuid&quot;],
</span><span class="cx">              [2, &quot;fdsa&quot;, &quot;another-value&quot;,
</span><span class="cx">               &quot;AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA&quot;]]
</span></span></pre></div>
<a id="CalendarServertrunktxdavcommondatastoretesttest_sql_schema_filespy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/common/datastore/test/test_sql_schema_files.py (13808 => 13809)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/common/datastore/test/test_sql_schema_files.py        2014-07-31 19:21:33 UTC (rev 13808)
+++ CalendarServer/trunk/txdav/common/datastore/test/test_sql_schema_files.py        2014-07-31 20:15:15 UTC (rev 13809)
</span><span class="lines">@@ -134,7 +134,7 @@
</span><span class="cx">         indexed_columns = set()
</span><span class="cx">         for index in schema.pseudoIndexes():
</span><span class="cx">             indexed_columns.add(&quot;%s.%s&quot; % (index.table.name, index.columns[0].name,))
</span><del>-        #print indexed_columns
</del><ins>+        # print indexed_columns
</ins><span class="cx"> 
</span><span class="cx">         # Look at each table
</span><span class="cx">         failures = []
</span></span></pre></div>
<a id="CalendarServertrunktxdavcommondatastoretesttest_sql_tablespy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/common/datastore/test/test_sql_tables.py (13808 => 13809)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/common/datastore/test/test_sql_tables.py        2014-07-31 19:21:33 UTC (rev 13808)
+++ CalendarServer/trunk/txdav/common/datastore/test/test_sql_tables.py        2014-07-31 20:15:15 UTC (rev 13809)
</span><span class="lines">@@ -221,10 +221,10 @@
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         self.assertSortaEquals(
</span><span class="cx">             self.translated(SchemaSyntax(self.schemaFromString(
</span><del>-                            &quot;create table alpha ( &quot;
-                            'beta integer, check (beta &gt; 3)'
-                            &quot; );&quot;
-                        ))),
</del><ins>+                &quot;create table alpha ( &quot;
+                'beta integer, check (beta &gt; 3)'
+                &quot; );&quot;
+            ))),
</ins><span class="cx">             &quot;create table alpha ( &quot;
</span><span class="cx">             '&quot;beta&quot; integer, check (&quot;beta&quot; &gt; 3)'
</span><span class="cx">             &quot; );&quot;
</span><span class="lines">@@ -238,10 +238,10 @@
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         self.assertSortaEquals(
</span><span class="cx">             self.translated(SchemaSyntax(self.schemaFromString(
</span><del>-                            &quot;create table alpha ( &quot;
-                            'beta integer, constraint beta_lt_3 check (beta &gt; 3)'
-                            &quot; );&quot;
-                        ))),
</del><ins>+                &quot;create table alpha ( &quot;
+                'beta integer, constraint beta_lt_3 check (beta &gt; 3)'
+                &quot; );&quot;
+            ))),
</ins><span class="cx">             &quot;create table alpha ( &quot;
</span><span class="cx">             '&quot;beta&quot; integer, constraint &quot;beta_lt_3&quot; check (&quot;beta&quot; &gt; 3)'
</span><span class="cx">             &quot; );&quot;
</span><span class="lines">@@ -303,26 +303,26 @@
</span><span class="cx">         One complex sql statement yields a single string
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         bigSQL = dedent(
</span><del>-        '''SELECT
-              CL.CODE,
-              CL.CATEGORY,
-           FROM
-              CLIENTS_SUPPLIERS CL
-              INVOICES I
-           WHERE
-              CL.CODE = I.CODE AND
-              CL.CATEGORY = I.CATEGORY AND
-              CL.UP_DATE =
-                (SELECT
-                   MAX(CL2.UP_DATE)
-                 FROM
-                   CLIENTS_SUPPLIERS CL2
-                 WHERE
-                   CL2.CODE = I.CODE AND
-                   CL2.CATEGORY = I.CATEGORY AND
-                   CL2.UP_DATE &lt;= I.EMISSION
-                ) AND
-                I.EMISSION BETWEEN DATE1 AND DATE2;''')
</del><ins>+            '''SELECT
+                  CL.CODE,
+                  CL.CATEGORY,
+               FROM
+                  CLIENTS_SUPPLIERS CL
+                  INVOICES I
+               WHERE
+                  CL.CODE = I.CODE AND
+                  CL.CATEGORY = I.CATEGORY AND
+                  CL.UP_DATE =
+                    (SELECT
+                       MAX(CL2.UP_DATE)
+                     FROM
+                       CLIENTS_SUPPLIERS CL2
+                     WHERE
+                       CL2.CODE = I.CODE AND
+                       CL2.CATEGORY = I.CATEGORY AND
+                       CL2.UP_DATE &lt;= I.EMISSION
+                    ) AND
+                    I.EMISSION BETWEEN DATE1 AND DATE2;''')
</ins><span class="cx">         result = splitSQLString(bigSQL)
</span><span class="cx">         r1 = result.next()
</span><span class="cx">         self.assertEquals(r1, bigSQL.rstrip(&quot;;&quot;))
</span><span class="lines">@@ -334,13 +334,13 @@
</span><span class="cx">         One pl/sql block yields a single string
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         plsql = dedent(
</span><del>-        '''BEGIN
-           LOOP
-               INSERT INTO T1 VALUES(i,i);
-               i := i+1;
-               EXIT WHEN i&gt;100;
-           END LOOP;
-           END;''')
</del><ins>+            '''BEGIN
+               LOOP
+                   INSERT INTO T1 VALUES(i,i);
+                   i := i+1;
+                   EXIT WHEN i&gt;100;
+               END LOOP;
+               END;''')
</ins><span class="cx">         s1 = 'BEGIN\nLOOP\nINSERT INTO T1 VALUES(i,i);i := i+1;EXIT WHEN i&gt;100;END LOOP;END;'
</span><span class="cx">         result = splitSQLString(plsql)
</span><span class="cx">         r1 = result.next()
</span><span class="lines">@@ -353,23 +353,23 @@
</span><span class="cx">         One sql statement and one pl/sql statement yields two separate strings
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         sql = dedent(
</span><del>-        '''SELECT EGM.Name, BioEntity.BioEntityId INTO AUX
-            FROM EGM
-            INNER JOIN BioEntity
-                ON EGM.name LIKE BioEntity.Name AND EGM.TypeId = BioEntity.TypeId
-            OPTION (MERGE JOIN);''')
</del><ins>+            '''SELECT EGM.Name, BioEntity.BioEntityId INTO AUX
+                FROM EGM
+                INNER JOIN BioEntity
+                    ON EGM.name LIKE BioEntity.Name AND EGM.TypeId = BioEntity.TypeId
+                OPTION (MERGE JOIN);''')
</ins><span class="cx">         plsql = dedent(
</span><del>-        '''BEGIN
-           FOR i IN 1..10 LOOP
-               IF MOD(i,2) = 0 THEN
-                   INSERT INTO temp VALUES (i, x, 'i is even');
-               ELSE
-                   INSERT INTO temp VALUES (i, x, 'i is odd');
-               END IF;
-               x := x + 100;
-           END LOOP;
-           COMMIT;
-           END;''')
</del><ins>+            '''BEGIN
+               FOR i IN 1..10 LOOP
+                   IF MOD(i,2) = 0 THEN
+                       INSERT INTO temp VALUES (i, x, 'i is even');
+                   ELSE
+                       INSERT INTO temp VALUES (i, x, 'i is odd');
+                   END IF;
+                   x := x + 100;
+               END LOOP;
+               COMMIT;
+               END;''')
</ins><span class="cx">         s2 = &quot;BEGIN\nFOR i IN 1..10 LOOP\nIF MOD(i,2) = 0 THEN\nINSERT INTO temp VALUES (i, x, 'i is even');ELSE\nINSERT INTO temp VALUES (i, x, 'i is odd');END IF;x := x + 100;END LOOP;COMMIT;END;&quot;
</span><span class="cx">         result = splitSQLString(sql + plsql)
</span><span class="cx">         r1 = result.next()
</span><span class="lines">@@ -384,32 +384,32 @@
</span><span class="cx">         One sql statement and one pl/sql statement yields two separate strings
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         sql = dedent(
</span><del>-        '''SELECT EGM.Name, BioEntity.BioEntityId INTO AUX
-            FROM EGM
-            INNER JOIN BioEntity
-                ON EGM.name LIKE BioEntity.Name AND EGM.TypeId = BioEntity.TypeId
-            OPTION (MERGE JOIN);''')
</del><ins>+            '''SELECT EGM.Name, BioEntity.BioEntityId INTO AUX
+                FROM EGM
+                INNER JOIN BioEntity
+                    ON EGM.name LIKE BioEntity.Name AND EGM.TypeId = BioEntity.TypeId
+                OPTION (MERGE JOIN);''')
</ins><span class="cx">         sqlfn = dedent(
</span><del>-        '''CREATE or REPLACE FUNCTION foobar() RETURNS integer as $$
-           DECLARE
-             result integer;
-           BEGIN
-            SELECT ID into result from JOB;
-            RETURN result;
-           END
-           $$ LANGUAGE plpgsql;''')
</del><ins>+            '''CREATE or REPLACE FUNCTION foobar() RETURNS integer as $$
+               DECLARE
+                 result integer;
+               BEGIN
+                SELECT ID into result from JOB;
+                RETURN result;
+               END
+               $$ LANGUAGE plpgsql;''')
</ins><span class="cx">         plsql = dedent(
</span><del>-        '''BEGIN
-           FOR i IN 1..10 LOOP
-               IF MOD(i,2) = 0 THEN
-                   INSERT INTO temp VALUES (i, x, 'i is even');
-               ELSE
-                   INSERT INTO temp VALUES (i, x, 'i is odd');
-               END IF;
-               x := x + 100;
-           END LOOP;
-           COMMIT;
-           END;''')
</del><ins>+            '''BEGIN
+               FOR i IN 1..10 LOOP
+                   IF MOD(i,2) = 0 THEN
+                       INSERT INTO temp VALUES (i, x, 'i is even');
+                   ELSE
+                       INSERT INTO temp VALUES (i, x, 'i is odd');
+                   END IF;
+                   x := x + 100;
+               END LOOP;
+               COMMIT;
+               END;''')
</ins><span class="cx">         s3 = &quot;BEGIN\nFOR i IN 1..10 LOOP\nIF MOD(i,2) = 0 THEN\nINSERT INTO temp VALUES (i, x, 'i is even');ELSE\nINSERT INTO temp VALUES (i, x, 'i is odd');END IF;x := x + 100;END LOOP;COMMIT;END;&quot;
</span><span class="cx">         result = splitSQLString(sql + sqlfn + plsql)
</span><span class="cx">         r1 = result.next()
</span><span class="lines">@@ -427,50 +427,50 @@
</span><span class="cx">         ignoring comments
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         realsql = dedent(
</span><del>-        '''
-        ----
-        -- Copyright (c) 2011-2014 Apple Inc. All rights reserved.
-        --
-        -- Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);
-        -- 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 &quot;AS IS&quot; 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.
-        ----
</del><ins>+            '''
+            ----
+            -- Copyright (c) 2011-2014 Apple Inc. All rights reserved.
+            --
+            -- Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);
+            -- 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 &quot;AS IS&quot; 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.
+            ----
</ins><span class="cx"> 
</span><del>-        ---------------------------------------------------
-        -- Upgrade database schema from VERSION 16 to 17 --
-        ---------------------------------------------------
</del><ins>+            ---------------------------------------------------
+            -- Upgrade database schema from VERSION 16 to 17 --
+            ---------------------------------------------------
</ins><span class="cx"> 
</span><span class="cx"> 
</span><del>-        ------------------------------
-        -- CALENDAR_OBJECT clean-up --
-        ------------------------------
</del><ins>+            ------------------------------
+            -- CALENDAR_OBJECT clean-up --
+            ------------------------------
</ins><span class="cx"> 
</span><del>-        begin
-        for i in (select constraint_name from user_cons_columns where column_name = 'ORGANIZER_OBJECT')
-        loop
-        execute immediate 'alter table calendar_object drop constraint ' || i.constraint_name;
-        end loop;
-        end;
</del><ins>+            begin
+            for i in (select constraint_name from user_cons_columns where column_name = 'ORGANIZER_OBJECT')
+            loop
+            execute immediate 'alter table calendar_object drop constraint ' || i.constraint_name;
+            end loop;
+            end;
</ins><span class="cx"> 
</span><del>-        alter table CALENDAR_OBJECT
-         drop (ORGANIZER_OBJECT);
</del><ins>+            alter table CALENDAR_OBJECT
+             drop (ORGANIZER_OBJECT);
</ins><span class="cx"> 
</span><del>-        create index CALENDAR_OBJECT_ICALE_82e731d5 on CALENDAR_OBJECT (
-            ICALENDAR_UID
-        );
</del><ins>+            create index CALENDAR_OBJECT_ICALE_82e731d5 on CALENDAR_OBJECT (
+                ICALENDAR_UID
+            );
</ins><span class="cx"> 
</span><span class="cx"> 
</span><del>-        -- Now update the version
-        update CALENDARSERVER set VALUE = '17' where NAME = 'VERSION';
-        ''')
</del><ins>+            -- Now update the version
+            update CALENDARSERVER set VALUE = '17' where NAME = 'VERSION';
+            ''')
</ins><span class="cx">         s1 = &quot;begin\nfor i in (select constraint_name from user_cons_columns where column_name = 'ORGANIZER_OBJECT')\nloop\nexecute immediate 'alter table calendar_object drop constraint ' || i.constraint_name;end loop;end;&quot;
</span><span class="cx">         s2 = 'alter table CALENDAR_OBJECT\n drop (ORGANIZER_OBJECT)'
</span><span class="cx">         s3 = 'create index CALENDAR_OBJECT_ICALE_82e731d5 on CALENDAR_OBJECT (\n    ICALENDAR_UID\n)'
</span></span></pre></div>
<a id="CalendarServertrunktxdavcommondatastoretestutilpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/common/datastore/test/util.py (13808 => 13809)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/common/datastore/test/util.py        2014-07-31 19:21:33 UTC (rev 13808)
+++ CalendarServer/trunk/txdav/common/datastore/test/util.py        2014-07-31 20:15:15 UTC (rev 13809)
</span><span class="lines">@@ -265,6 +265,7 @@
</span><span class="cx"> 
</span><span class="cx">     @inlineCallbacks
</span><span class="cx">     def cleanStore(self, testCase, storeToClean):
</span><ins>+
</ins><span class="cx">         cleanupTxn = storeToClean.sqlTxnFactory(
</span><span class="cx">             &quot;%s schema-cleanup&quot; % (testCase.id(),)
</span><span class="cx">         )
</span><span class="lines">@@ -881,9 +882,9 @@
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         Get the calendar detailed by C{requirements['home1']['calendar_1']}.
</span><span class="cx">         &quot;&quot;&quot;
</span><del>-        returnValue((yield
-            (yield self.homeUnderTest(txn, home)).calendarWithName(name))
-        )
</del><ins>+        returnValue((
+            yield (yield self.homeUnderTest(txn, home)).calendarWithName(name)
+        ))
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @inlineCallbacks
</span><span class="lines">@@ -910,9 +911,9 @@
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         Get the addressbook detailed by C{requirements['home1']['addressbook']}.
</span><span class="cx">         &quot;&quot;&quot;
</span><del>-        returnValue((yield
-            (yield self.addressbookHomeUnderTest(txn=txn, name=home)).addressbookWithName(name))
-        )
</del><ins>+        returnValue((
+            yield (yield self.addressbookHomeUnderTest(txn=txn, name=home)).addressbookWithName(name)
+        ))
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx">     @inlineCallbacks
</span></span></pre></div>
<a id="CalendarServertrunktxdavcommondatastoreupgrademigratepy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/common/datastore/upgrade/migrate.py (13808 => 13809)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/common/datastore/upgrade/migrate.py        2014-07-31 19:21:33 UTC (rev 13808)
+++ CalendarServer/trunk/txdav/common/datastore/upgrade/migrate.py        2014-07-31 20:15:15 UTC (rev 13809)
</span><span class="lines">@@ -225,9 +225,10 @@
</span><span class="cx">                 lambda fileHome:
</span><span class="cx">                 self.upgrader.migrateOneHome(fileTxn, homeType, fileHome)
</span><span class="cx">             )
</span><del>-            .addCallbacks(lambda ignored: fileTxn.commit(),
-                          lambda err: fileTxn.abort()
-                                      .addCallback(lambda ign: err))
</del><ins>+            .addCallbacks(
+                lambda ignored: fileTxn.commit(),
+                lambda err: fileTxn.abort()
+                    .addCallback(lambda ign: err))
</ins><span class="cx">             .addCallback(lambda ignored: {})
</span><span class="cx">         )
</span><span class="cx"> 
</span><span class="lines">@@ -302,8 +303,9 @@
</span><span class="cx"> 
</span><span class="cx">                     appropriateStoreClass = AppleDoubleStore
</span><span class="cx"> 
</span><del>-                return FileStore(path, None, None, True, True,
-                          propertyStoreClass=appropriateStoreClass)
</del><ins>+                return FileStore(
+                    path, None, None, True, True,
+                    propertyStoreClass=appropriateStoreClass)
</ins><span class="cx">         return None
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="lines">@@ -361,7 +363,7 @@
</span><span class="cx">         for homeType, eachFunc in [
</span><span class="cx">                 (&quot;calendar&quot;, self.fileStore.withEachCalendarHomeDo),
</span><span class="cx">                 (&quot;addressbook&quot;, self.fileStore.withEachAddressbookHomeDo),
</span><del>-            ]:
</del><ins>+        ]:
</ins><span class="cx">             yield eachFunc(
</span><span class="cx">                 lambda txn, home: self._upgradeAction(
</span><span class="cx">                     txn, home, homeType
</span><span class="lines">@@ -372,8 +374,10 @@
</span><span class="cx">         # since attachments started living outside the database directory
</span><span class="cx">         # created by initdb?  default permissions might be correct now.
</span><span class="cx">         sqlAttachmentsPath = self.sqlStore.attachmentsPath
</span><del>-        if (sqlAttachmentsPath and sqlAttachmentsPath.exists() and
-            (self.uid or self.gid)):
</del><ins>+        if (
+            sqlAttachmentsPath and sqlAttachmentsPath.exists() and
+            (self.uid or self.gid)
+        ):
</ins><span class="cx">             uid = self.uid or -1
</span><span class="cx">             gid = self.gid or -1
</span><span class="cx">             for fp in sqlAttachmentsPath.walk():
</span><span class="lines">@@ -421,7 +425,7 @@
</span><span class="cx"> 
</span><span class="cx">         # Now apply each required data upgrade
</span><span class="cx">         self.sqlStore.setUpgrading(True)
</span><del>-        for upgrade, description  in (
</del><ins>+        for upgrade, description in (
</ins><span class="cx">             (doCalendarUpgrade_1_to_2, &quot;Calendar data upgrade from v1 to v2&quot;),
</span><span class="cx">             (doCalendarUpgrade_2_to_3, &quot;Calendar data upgrade from v2 to v3&quot;),
</span><span class="cx">             (doCalendarUpgrade_3_to_4, &quot;Calendar data upgrade from v3 to v4&quot;),
</span></span></pre></div>
<a id="CalendarServertrunktxdavcommondatastoreupgradesqltesttest_upgradepy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/common/datastore/upgrade/sql/test/test_upgrade.py (13808 => 13809)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/common/datastore/upgrade/sql/test/test_upgrade.py        2014-07-31 19:21:33 UTC (rev 13808)
+++ CalendarServer/trunk/txdav/common/datastore/upgrade/sql/test/test_upgrade.py        2014-07-31 20:15:15 UTC (rev 13809)
</span><span class="lines">@@ -57,13 +57,15 @@
</span><span class="cx"> 
</span><span class="cx">         upgrader.schemaLocation = getModule(__name__).filePath.sibling(&quot;fake_schema1&quot;)
</span><span class="cx">         files = upgrader.scanForUpgradeFiles(&quot;fake_dialect&quot;)
</span><del>-        self.assertEqual(files,
</del><ins>+        self.assertEqual(
+            files,
</ins><span class="cx">             [(3, 4, upgrader.schemaLocation.child(&quot;upgrades&quot;).child(&quot;fake_dialect&quot;).child(&quot;upgrade_from_3_to_4.sql&quot;))],
</span><span class="cx">         )
</span><span class="cx"> 
</span><span class="cx">         upgrader.schemaLocation = getModule(__name__).filePath.sibling(&quot;fake_schema2&quot;)
</span><span class="cx">         files = upgrader.scanForUpgradeFiles(&quot;fake_dialect&quot;)
</span><del>-        self.assertEqual(files,
</del><ins>+        self.assertEqual(
+            files,
</ins><span class="cx">             [
</span><span class="cx">                 (3, 4, upgrader.schemaLocation.child(&quot;upgrades&quot;).child(&quot;fake_dialect&quot;).child(&quot;upgrade_from_3_to_4.sql&quot;)),
</span><span class="cx">                 (3, 5, upgrader.schemaLocation.child(&quot;upgrades&quot;).child(&quot;fake_dialect&quot;).child(&quot;upgrade_from_3_to_5.sql&quot;)),
</span><span class="lines">@@ -79,7 +81,8 @@
</span><span class="cx">         upgrader.schemaLocation = getModule(__name__).filePath.sibling(&quot;fake_schema1&quot;)
</span><span class="cx">         files = upgrader.scanForUpgradeFiles(&quot;fake_dialect&quot;)
</span><span class="cx">         upgrades = upgrader.determineUpgradeSequence(3, 4, files, &quot;fake_dialect&quot;)
</span><del>-        self.assertEqual(upgrades,
</del><ins>+        self.assertEqual(
+            upgrades,
</ins><span class="cx">             [upgrader.schemaLocation.child(&quot;upgrades&quot;).child(&quot;fake_dialect&quot;).child(&quot;upgrade_from_3_to_4.sql&quot;)],
</span><span class="cx">         )
</span><span class="cx">         self.assertRaises(RuntimeError, upgrader.determineUpgradeSequence, 3, 5, files, &quot;fake_dialect&quot;)
</span><span class="lines">@@ -87,18 +90,21 @@
</span><span class="cx">         upgrader.schemaLocation = getModule(__name__).filePath.sibling(&quot;fake_schema2&quot;)
</span><span class="cx">         files = upgrader.scanForUpgradeFiles(&quot;fake_dialect&quot;)
</span><span class="cx">         upgrades = upgrader.determineUpgradeSequence(3, 5, files, &quot;fake_dialect&quot;)
</span><del>-        self.assertEqual(upgrades,
</del><ins>+        self.assertEqual(
+            upgrades,
</ins><span class="cx">             [upgrader.schemaLocation.child(&quot;upgrades&quot;).child(&quot;fake_dialect&quot;).child(&quot;upgrade_from_3_to_5.sql&quot;)]
</span><span class="cx">         )
</span><span class="cx">         upgrades = upgrader.determineUpgradeSequence(4, 5, files, &quot;fake_dialect&quot;)
</span><del>-        self.assertEqual(upgrades,
</del><ins>+        self.assertEqual(
+            upgrades,
</ins><span class="cx">             [upgrader.schemaLocation.child(&quot;upgrades&quot;).child(&quot;fake_dialect&quot;).child(&quot;upgrade_from_4_to_5.sql&quot;)]
</span><span class="cx">         )
</span><span class="cx"> 
</span><span class="cx">         upgrader.schemaLocation = getModule(__name__).filePath.sibling(&quot;fake_schema3&quot;)
</span><span class="cx">         files = upgrader.scanForUpgradeFiles(&quot;fake_dialect&quot;)
</span><span class="cx">         upgrades = upgrader.determineUpgradeSequence(3, 5, files, &quot;fake_dialect&quot;)
</span><del>-        self.assertEqual(upgrades,
</del><ins>+        self.assertEqual(
+            upgrades,
</ins><span class="cx">             [
</span><span class="cx">                 upgrader.schemaLocation.child(&quot;upgrades&quot;).child(&quot;fake_dialect&quot;).child(&quot;upgrade_from_3_to_4.sql&quot;),
</span><span class="cx">                 upgrader.schemaLocation.child(&quot;upgrades&quot;).child(&quot;fake_dialect&quot;).child(&quot;upgrade_from_4_to_5.sql&quot;),
</span></span></pre></div>
<a id="CalendarServertrunktxdavcommondatastoreupgradesqlupgradesaddressbook_upgrade_from_1_to_2py"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/common/datastore/upgrade/sql/upgrades/addressbook_upgrade_from_1_to_2.py (13808 => 13809)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/common/datastore/upgrade/sql/upgrades/addressbook_upgrade_from_1_to_2.py        2014-07-31 19:21:33 UTC (rev 13808)
+++ CalendarServer/trunk/txdav/common/datastore/upgrade/sql/upgrades/addressbook_upgrade_from_1_to_2.py        2014-07-31 20:15:15 UTC (rev 13809)
</span><span class="lines">@@ -67,11 +67,12 @@
</span><span class="cx">             if lcResourceKind == &quot;group&quot;:
</span><span class="cx">                 # update kind
</span><span class="cx">                 abo = schema.ADDRESSBOOK_OBJECT
</span><del>-                yield Update({abo.KIND: _ABO_KIND_GROUP},
-                                Where=abo.RESOURCE_ID == abObject._resourceID,
-                                ).on(txn)
</del><ins>+                yield Update(
+                    {abo.KIND: _ABO_KIND_GROUP},
+                    Where=abo.RESOURCE_ID == abObject._resourceID,
+                ).on(txn)
</ins><span class="cx">                 abObject._kind = _ABO_KIND_GROUP
</span><del>-                #update rest
</del><ins>+                # update rest
</ins><span class="cx">                 yield abObject.setComponent(component)
</span><span class="cx"> 
</span><span class="cx">     logUpgradeStatus(&quot;Starting Addressbook Populate Members&quot;)
</span></span></pre></div>
<a id="CalendarServertrunktxdavcommondatastoreupgradetesttest_migratepy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/common/datastore/upgrade/test/test_migrate.py (13808 => 13809)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/common/datastore/upgrade/test/test_migrate.py        2014-07-31 19:21:33 UTC (rev 13808)
+++ CalendarServer/trunk/txdav/common/datastore/upgrade/test/test_migrate.py        2014-07-31 20:15:15 UTC (rev 13809)
</span><span class="lines">@@ -86,8 +86,8 @@
</span><span class="cx"> 
</span><span class="cx">     @PickleConfig.responder
</span><span class="cx">     def pickleConfig(self, config, delegateTo):
</span><del>-        #from twistedcaldav.config import config as globalConfig
-        #globalConfig._data = config._data
</del><ins>+        # from twistedcaldav.config import config as globalConfig
+        # globalConfig._data = config._data
</ins><span class="cx">         swapAMP(self, namedAny(delegateTo)(config))
</span><span class="cx">         return {}
</span><span class="cx"> 
</span><span class="lines">@@ -282,10 +282,10 @@
</span><span class="cx">         self.addCleanup(txn.commit)
</span><span class="cx">         self.assertIdentical(
</span><span class="cx">             None,
</span><del>-            (yield (yield (yield
-                (yield txn.calendarHomeWithUID(&quot;home1&quot;))
-                          .calendarWithName(&quot;calendar_1&quot;)))
-                          .calendarObjectWithName(&quot;bogus.ics&quot;))
</del><ins>+            (yield (yield (yield (
+                yield txn.calendarHomeWithUID(&quot;home1&quot;)
+            ).calendarWithName(&quot;calendar_1&quot;))
+            ).calendarObjectWithName(&quot;bogus.ics&quot;))
</ins><span class="cx">         )
</span><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="CalendarServertrunktxdavcommondatastoreworkrevision_cleanuppy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/common/datastore/work/revision_cleanup.py (13808 => 13809)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/common/datastore/work/revision_cleanup.py        2014-07-31 19:21:33 UTC (rev 13808)
+++ CalendarServer/trunk/txdav/common/datastore/work/revision_cleanup.py        2014-07-31 20:15:15 UTC (rev 13809)
</span><span class="lines">@@ -60,8 +60,10 @@
</span><span class="cx">         minValidRevision = int((yield self.transaction.calendarserverValue(&quot;MIN-VALID-REVISION&quot;)))
</span><span class="cx"> 
</span><span class="cx">         # get max revision on table rows before dateLimit
</span><del>-        dateLimit = (datetime.datetime.utcnow() -
-            datetime.timedelta(days=float(config.RevisionCleanup.SyncTokenLifetimeDays)))
</del><ins>+        dateLimit = (
+            datetime.datetime.utcnow() -
+            datetime.timedelta(days=float(config.RevisionCleanup.SyncTokenLifetimeDays))
+        )
</ins><span class="cx">         maxRevOlderThanDate = 0
</span><span class="cx"> 
</span><span class="cx">         # TODO: Use one Select statement
</span></span></pre></div>
<a id="CalendarServertrunktxdavcommondatastoreworktesttest_inbox_cleanuppy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/common/datastore/work/test/test_inbox_cleanup.py (13808 => 13809)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/common/datastore/work/test/test_inbox_cleanup.py        2014-07-31 19:21:33 UTC (rev 13808)
+++ CalendarServer/trunk/txdav/common/datastore/work/test/test_inbox_cleanup.py        2014-07-31 20:15:15 UTC (rev 13809)
</span><span class="lines">@@ -161,7 +161,7 @@
</span><span class="cx">         self.patch(config.InboxCleanup, &quot;ItemLifetimeDays&quot;, -1)
</span><span class="cx">         self.patch(config.InboxCleanup, &quot;ItemLifeBeyondEventEndDays&quot;, -1)
</span><span class="cx"> 
</span><del>-        #create orphans by deleting events
</del><ins>+        # create orphans by deleting events
</ins><span class="cx">         inbox = yield self.calendarUnderTest(home=&quot;user01&quot;, name=&quot;inbox&quot;)
</span><span class="cx">         for item in (yield inbox.objectResourcesWithNames([&quot;cal1.ics&quot;, &quot;cal3.ics&quot;])):
</span><span class="cx">             yield item.remove()
</span><span class="lines">@@ -191,9 +191,11 @@
</span><span class="cx"> 
</span><span class="cx">         itemsToPredate = [&quot;cal2.ics&quot;, &quot;cal3.ics&quot;]
</span><span class="cx">         co = schema.CALENDAR_OBJECT
</span><del>-        yield Update({co.CREATED: oldDate},
</del><ins>+        yield Update(
+            {co.CREATED: oldDate},
</ins><span class="cx">             Where=co.RESOURCE_NAME.In(Parameter(&quot;itemsToPredate&quot;, len(itemsToPredate))).And(
</span><del>-            co.CALENDAR_RESOURCE_ID == inbox._resourceID)).on(self.transactionUnderTest(), itemsToPredate=itemsToPredate)
</del><ins>+                co.CALENDAR_RESOURCE_ID == inbox._resourceID)
+        ).on(self.transactionUnderTest(), itemsToPredate=itemsToPredate)
</ins><span class="cx"> 
</span><span class="cx">         # do cleanup
</span><span class="cx">         yield self.transactionUnderTest().enqueue(CleanupOneInboxWork, homeID=inbox.ownerHome()._resourceID, notBefore=datetime.datetime.utcnow())
</span><span class="lines">@@ -217,9 +219,10 @@
</span><span class="cx">         cal3Event = yield calendar.objectResourceWithName(&quot;cal3.ics&quot;)
</span><span class="cx"> 
</span><span class="cx">         tr = schema.TIME_RANGE
</span><del>-        yield Update({tr.END_DATE: datetime.datetime.utcnow()},
-            Where=tr.CALENDAR_OBJECT_RESOURCE_ID == cal3Event._resourceID).on(
-            self.transactionUnderTest())
</del><ins>+        yield Update(
+            {tr.END_DATE: datetime.datetime.utcnow()},
+            Where=tr.CALENDAR_OBJECT_RESOURCE_ID == cal3Event._resourceID
+        ).on(self.transactionUnderTest())
</ins><span class="cx">         # do cleanup
</span><span class="cx">         yield self.transactionUnderTest().enqueue(CleanupOneInboxWork, homeID=calendar.ownerHome()._resourceID, notBefore=datetime.datetime.utcnow())
</span><span class="cx">         yield self.commit()
</span></span></pre></div>
<a id="CalendarServertrunktxdavcommondatastoreworktesttest_revision_cleanuppy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/common/datastore/work/test/test_revision_cleanup.py (13808 => 13809)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/common/datastore/work/test/test_revision_cleanup.py        2014-07-31 19:21:33 UTC (rev 13808)
+++ CalendarServer/trunk/txdav/common/datastore/work/test/test_revision_cleanup.py        2014-07-31 20:15:15 UTC (rev 13809)
</span><span class="lines">@@ -246,7 +246,7 @@
</span><span class="cx">         calendar = yield self.calendarUnderTest(home=&quot;user01&quot;, name=&quot;calendar&quot;)
</span><span class="cx">         token = yield calendar.syncToken()
</span><span class="cx"> 
</span><del>-        #make changes
</del><ins>+        # make changes
</ins><span class="cx">         cal1Object = yield self.calendarObjectUnderTest(self.transactionUnderTest(), name=&quot;cal1.ics&quot;, calendar_name=&quot;calendar&quot;, home=&quot;user01&quot;)
</span><span class="cx">         yield cal1Object.remove()
</span><span class="cx">         cal2Object = yield self.calendarObjectUnderTest(self.transactionUnderTest(), name=&quot;cal2.ics&quot;, calendar_name=&quot;calendar&quot;, home=&quot;user01&quot;)
</span><span class="lines">@@ -297,7 +297,7 @@
</span><span class="cx">         home = yield self.homeUnderTest(name=&quot;user01&quot;)
</span><span class="cx">         token = yield home.syncToken()
</span><span class="cx"> 
</span><del>-        #make notification changes as side effect of sharing
</del><ins>+        # make notification changes as side effect of sharing
</ins><span class="cx">         yield self._createCalendarShare()
</span><span class="cx"> 
</span><span class="cx">         # Get object revisions
</span><span class="lines">@@ -346,7 +346,7 @@
</span><span class="cx">         addressbook = yield self.addressbookUnderTest(home=&quot;user01&quot;, name=&quot;addressbook&quot;)
</span><span class="cx">         token = yield addressbook.syncToken()
</span><span class="cx"> 
</span><del>-        #make changes
</del><ins>+        # make changes
</ins><span class="cx">         card1Object = yield self.addressbookObjectUnderTest(self.transactionUnderTest(), name=&quot;card1.vcf&quot;, addressbook_name=&quot;addressbook&quot;, home=&quot;user01&quot;)
</span><span class="cx">         yield card1Object.remove()
</span><span class="cx">         card2Object = yield self.addressbookObjectUnderTest(self.transactionUnderTest(), name=&quot;card2.vcf&quot;, addressbook_name=&quot;addressbook&quot;, home=&quot;user01&quot;)
</span></span></pre></div>
<a id="CalendarServertrunktxdavdpsclientpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/dps/client.py (13808 => 13809)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/dps/client.py        2014-07-31 19:21:33 UTC (rev 13808)
+++ CalendarServer/trunk/txdav/dps/client.py        2014-07-31 20:15:15 UTC (rev 13809)
</span><span class="lines">@@ -54,17 +54,17 @@
</span><span class="cx"> 
</span><span class="cx"> log = Logger()
</span><span class="cx"> 
</span><del>-##
-## Client implementation of Directory Proxy Service
-##
</del><ins>+#
+# Client implementation of Directory Proxy Service
+#
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> 
</span><del>-## MOVE2WHO TODOs:
-## LDAP
-## Store based directory service (records in the store, i.e.
-##    locations/resources)
-## Store autoAcceptGroups in the group db?
</del><ins>+# MOVE2WHO TODOs:
+# LDAP
+# Store based directory service (records in the store, i.e.
+#    locations/resources)
+# Store autoAcceptGroups in the group db?
</ins><span class="cx"> 
</span><span class="cx"> @implementer(IDirectoryService, IStoreDirectoryService)
</span><span class="cx"> class DirectoryService(BaseDirectoryService, CalendarDirectoryServiceMixin):
</span><span class="lines">@@ -200,7 +200,6 @@
</span><span class="cx">         )
</span><span class="cx"> 
</span><span class="cx"> 
</span><del>-
</del><span class="cx">     @inlineCallbacks
</span><span class="cx">     def _call(self, command, postProcess, **kwds):
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="lines">@@ -432,6 +431,7 @@
</span><span class="cx">         )
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+
</ins><span class="cx"> # Test client:
</span><span class="cx"> 
</span><span class="cx"> @inlineCallbacks
</span></span></pre></div>
<a id="CalendarServertrunktxdavdpsserverpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/dps/server.py (13808 => 13809)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/dps/server.py        2014-07-31 19:21:33 UTC (rev 13808)
+++ CalendarServer/trunk/txdav/dps/server.py        2014-07-31 20:15:15 UTC (rev 13809)
</span><span class="lines">@@ -47,9 +47,9 @@
</span><span class="cx"> log = Logger()
</span><span class="cx"> 
</span><span class="cx"> 
</span><del>-##
-## Server implementation of Directory Proxy Service
-##
</del><ins>+#
+# Server implementation of Directory Proxy Service
+#
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> class DirectoryProxyAMPProtocol(amp.AMP):
</span><span class="lines">@@ -254,8 +254,6 @@
</span><span class="cx">         returnValue(response)
</span><span class="cx"> 
</span><span class="cx"> 
</span><del>-
-
</del><span class="cx">     @RecordsMatchingTokensCommand.responder
</span><span class="cx">     @inlineCallbacks
</span><span class="cx">     def recordsMatchingTokens(self, tokens, context=None):
</span><span class="lines">@@ -269,7 +267,6 @@
</span><span class="cx">         returnValue(response)
</span><span class="cx"> 
</span><span class="cx"> 
</span><del>-
</del><span class="cx">     @RecordsMatchingFieldsCommand.responder
</span><span class="cx">     @inlineCallbacks
</span><span class="cx">     def recordsMatchingFields(self, fields, operand=&quot;OR&quot;, recordType=None):
</span><span class="lines">@@ -448,6 +445,7 @@
</span><span class="cx">         returnValue(response)
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+
</ins><span class="cx"> class DirectoryProxyAMPFactory(Factory):
</span><span class="cx">     &quot;&quot;&quot;
</span><span class="cx">     &quot;&quot;&quot;
</span></span></pre></div>
<a id="CalendarServertrunktxdavdpstesttest_clientpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/dps/test/test_client.py (13808 => 13809)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/dps/test/test_client.py        2014-07-31 19:21:33 UTC (rev 13808)
+++ CalendarServer/trunk/txdav/dps/test/test_client.py        2014-07-31 20:15:15 UTC (rev 13809)
</span><span class="lines">@@ -663,6 +663,7 @@
</span><span class="cx">                 self.assertEquals(authenticated, answer)
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+
</ins><span class="cx"> class DPSClientLargeResultsTest(unittest.TestCase):
</span><span class="cx">     &quot;&quot;&quot;
</span><span class="cx">     Tests the client against a single directory service (as opposed to the
</span></span></pre></div>
<a id="CalendarServertrunktxdavwhoaugmentpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/who/augment.py (13808 => 13809)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/who/augment.py        2014-07-31 19:21:33 UTC (rev 13808)
+++ CalendarServer/trunk/txdav/who/augment.py        2014-07-31 20:15:15 UTC (rev 13809)
</span><span class="lines">@@ -91,6 +91,7 @@
</span><span class="cx">     return timingWrapper
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+
</ins><span class="cx"> @implementer(IDirectoryService, IStoreDirectoryService)
</span><span class="cx"> class AugmentedDirectoryService(
</span><span class="cx">     BaseDirectoryService, CalendarDirectoryServiceMixin
</span></span></pre></div>
<a id="CalendarServertrunktxdavwhodirectorypy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/who/directory.py (13808 => 13809)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/who/directory.py        2014-07-31 19:21:33 UTC (rev 13808)
+++ CalendarServer/trunk/txdav/who/directory.py        2014-07-31 20:15:15 UTC (rev 13809)
</span><span class="lines">@@ -110,8 +110,8 @@
</span><span class="cx"> 
</span><span class="cx">     searchContext_location = &quot;location&quot;
</span><span class="cx">     searchContext_resource = &quot;resource&quot;
</span><del>-    searchContext_user     = &quot;user&quot;
-    searchContext_group    = &quot;group&quot;
</del><ins>+    searchContext_user = &quot;user&quot;
+    searchContext_group = &quot;group&quot;
</ins><span class="cx">     searchContext_attendee = &quot;attendee&quot;
</span><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="CalendarServertrunktxdavwhotestsupportpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/who/test/support.py (13808 => 13809)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/who/test/support.py        2014-07-31 19:21:33 UTC (rev 13808)
+++ CalendarServer/trunk/txdav/who/test/support.py        2014-07-31 20:15:15 UTC (rev 13809)
</span><span class="lines">@@ -36,6 +36,7 @@
</span><span class="cx">     pass
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+
</ins><span class="cx"> class InMemoryDirectoryService(IndexDirectoryService):
</span><span class="cx">     &quot;&quot;&quot;
</span><span class="cx">     An in-memory IDirectoryService.  You must call updateRecords( ) if you want
</span></span></pre></div>
<a id="CalendarServertrunktxdavwhotesttest_group_attendeespy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/who/test/test_group_attendees.py (13808 => 13809)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/who/test/test_group_attendees.py        2014-07-31 19:21:33 UTC (rev 13808)
+++ CalendarServer/trunk/txdav/who/test/test_group_attendees.py        2014-07-31 20:15:15 UTC (rev 13809)
</span><span class="lines">@@ -869,7 +869,7 @@
</span><span class="cx">         yield self.commit()
</span><span class="cx">         yield JobItem.waitEmpty(self._sqlCalendarStore.newTransaction, reactor, 60)
</span><span class="cx"> 
</span><del>-        #finally, simulate an event that has become old
</del><ins>+        # finally, simulate an event that has become old
</ins><span class="cx">         self.patch(CalendarDirectoryRecordMixin, &quot;expandedMembers&quot;, unpatchedExpandedMembers)
</span><span class="cx"> 
</span><span class="cx">         (
</span><span class="lines">@@ -878,11 +878,10 @@
</span><span class="cx">         ) = yield self.transactionUnderTest().groupByUID(&quot;group01&quot;)
</span><span class="cx">         ga = schema.GROUP_ATTENDEE
</span><span class="cx">         yield Insert({
</span><del>-                ga.RESOURCE_ID: cobj._resourceID,
-                ga.GROUP_ID: groupID,
-                ga.MEMBERSHIP_HASH: (-1),
-            }
-        ).on(self.transactionUnderTest())
</del><ins>+            ga.RESOURCE_ID: cobj._resourceID,
+            ga.GROUP_ID: groupID,
+            ga.MEMBERSHIP_HASH: (-1),
+        }).on(self.transactionUnderTest())
</ins><span class="cx">         wps = yield groupCacher.refreshGroup(self.transactionUnderTest(), &quot;group01&quot;)
</span><span class="cx">         self.assertEqual(len(wps), 1)
</span><span class="cx">         yield self.commit()
</span><span class="lines">@@ -1032,7 +1031,7 @@
</span><span class="cx">             yield JobItem.waitEmpty(self._sqlCalendarStore.newTransaction, reactor, 60)
</span><span class="cx">         self.assertEqual(len(wps), 0)
</span><span class="cx"> 
</span><del>-        #finally, simulate an event that has become old
</del><ins>+        # finally, simulate an event that has become old
</ins><span class="cx">         self.patch(CalendarDirectoryRecordMixin, &quot;expandedMembers&quot;, unpatchedExpandedMembers)
</span><span class="cx"> 
</span><span class="cx">         (
</span><span class="lines">@@ -1041,11 +1040,10 @@
</span><span class="cx">         ) = yield self.transactionUnderTest().groupByUID(&quot;group01&quot;)
</span><span class="cx">         ga = schema.GROUP_ATTENDEE
</span><span class="cx">         yield Insert({
</span><del>-                ga.RESOURCE_ID: cobj._resourceID,
-                ga.GROUP_ID: groupID,
-                ga.MEMBERSHIP_HASH: (-1),
-            }
-        ).on(self.transactionUnderTest())
</del><ins>+            ga.RESOURCE_ID: cobj._resourceID,
+            ga.GROUP_ID: groupID,
+            ga.MEMBERSHIP_HASH: (-1),
+        }).on(self.transactionUnderTest())
</ins><span class="cx">         wps = yield groupCacher.refreshGroup(self.transactionUnderTest(), &quot;group01&quot;)
</span><span class="cx">         self.assertEqual(len(wps), 1)
</span><span class="cx">         yield self.commit()
</span><span class="lines">@@ -1194,7 +1192,7 @@
</span><span class="cx">                     )
</span><span class="cx">                 )
</span><span class="cx"> 
</span><del>-        #TODO: add some meaningful test
</del><ins>+        # TODO: add some meaningful test
</ins><span class="cx">         '''
</span><span class="cx">         cal = yield self.calendarUnderTest(name=&quot;calendar&quot;, home=&quot;user01&quot;)
</span><span class="cx">         cobjs = yield cal.objectResources()
</span><span class="lines">@@ -1344,7 +1342,7 @@
</span><span class="cx">                 )
</span><span class="cx"> 
</span><span class="cx">         yield self._verifyObjectResourceCount(&quot;user01&quot;, 1)
</span><del>-        #TODO: add some meaningful test
</del><ins>+        # TODO: add some meaningful test
</ins><span class="cx">         '''
</span><span class="cx">         cal = yield self.calendarUnderTest(name=&quot;calendar&quot;, home=&quot;user01&quot;)
</span><span class="cx">         cobjs = yield cal.objectResources()
</span></span></pre></div>
<a id="CalendarServertrunktxdavwhotesttest_group_shareespy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/who/test/test_group_sharees.py (13808 => 13809)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/who/test/test_group_sharees.py        2014-07-31 19:21:33 UTC (rev 13808)
+++ CalendarServer/trunk/txdav/who/test/test_group_sharees.py        2014-07-31 20:15:15 UTC (rev 13809)
</span><span class="lines">@@ -94,9 +94,9 @@
</span><span class="cx">         &quot;&quot;&quot;
</span><span class="cx">         Get the calendar detailed by C{requirements['home1']['calendar_1']}.
</span><span class="cx">         &quot;&quot;&quot;
</span><del>-        returnValue((yield
-            (yield self.homeUnderTest(txn, home)).shareeView(shareUID))
-        )
</del><ins>+        returnValue((
+            yield (yield self.homeUnderTest(txn, home)).shareeView(shareUID)
+        ))
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="CalendarServertrunktxdavwhovcardpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/who/vcard.py (13808 => 13809)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/who/vcard.py        2014-07-31 19:21:33 UTC (rev 13808)
+++ CalendarServer/trunk/txdav/who/vcard.py        2014-07-31 20:15:15 UTC (rev 13809)
</span><span class="lines">@@ -37,44 +37,44 @@
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> recordTypeToVCardKindMap = {
</span><del>-   RecordType.user: &quot;individual&quot;,
-   RecordType.group: &quot;group&quot;,
-   CalRecordType.location: &quot;location&quot;,
-   CalRecordType.resource: &quot;device&quot;,
</del><ins>+    RecordType.user: &quot;individual&quot;,
+    RecordType.group: &quot;group&quot;,
+    CalRecordType.location: &quot;location&quot;,
+    CalRecordType.resource: &quot;device&quot;,
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> vCardKindToRecordTypeMap = {
</span><del>-   &quot;individual&quot; : RecordType.user,
-   &quot;group&quot;: RecordType.group,
-   &quot;org&quot;: RecordType.group,
-   &quot;location&quot;: CalRecordType.location,
-   &quot;device&quot;: CalRecordType.resource,
</del><ins>+    &quot;individual&quot; : RecordType.user,
+    &quot;group&quot;: RecordType.group,
+    &quot;org&quot;: RecordType.group,
+    &quot;location&quot;: CalRecordType.location,
+    &quot;device&quot;: CalRecordType.resource,
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> # all possible generated parameters.
</span><span class="cx"> vCardPropToParamMap = {
</span><del>-    #&quot;PHOTO&quot;: {&quot;ENCODING&quot;: (&quot;B&quot;,), &quot;TYPE&quot;: (&quot;JPEG&quot;,), },
</del><ins>+    # &quot;PHOTO&quot;: {&quot;ENCODING&quot;: (&quot;B&quot;,), &quot;TYPE&quot;: (&quot;JPEG&quot;,), },
</ins><span class="cx">     &quot;ADR&quot;: {&quot;TYPE&quot;: (&quot;WORK&quot;, &quot;PREF&quot;, &quot;POSTAL&quot;, &quot;PARCEL&quot;,),
</span><span class="cx">             &quot;LABEL&quot;: None, &quot;GEO&quot;: None, },
</span><span class="cx">     &quot;LABEL&quot;: {&quot;TYPE&quot;: (&quot;POSTAL&quot;, &quot;PARCEL&quot;,)},
</span><del>-    #&quot;TEL&quot;: {&quot;TYPE&quot;: None, },  # None means param value can be anything
</del><ins>+    # &quot;TEL&quot;: {&quot;TYPE&quot;: None, },  # None means param value can be anything
</ins><span class="cx">     &quot;EMAIL&quot;: {&quot;TYPE&quot;: None, },
</span><del>-    #&quot;KEY&quot;: {&quot;ENCODING&quot;: (&quot;B&quot;,), &quot;TYPE&quot;: (&quot;PGPPUBILICKEY&quot;, &quot;USERCERTIFICATE&quot;, &quot;USERPKCS12DATA&quot;, &quot;USERSMIMECERTIFICATE&quot;,)},
-    #&quot;URL&quot;: {&quot;TYPE&quot;: (&quot;WEBLOG&quot;, &quot;HOMEPAGE&quot;,)},
-    #&quot;IMPP&quot;: {&quot;TYPE&quot;: (&quot;PREF&quot;,), &quot;X-SERVICE-TYPE&quot;: None, },
-    #&quot;X-ABRELATEDNAMES&quot;: {&quot;TYPE&quot;: None, },
-    #&quot;X-AIM&quot;: {&quot;TYPE&quot;: (&quot;PREF&quot;,), },
-    #&quot;X-JABBER&quot;: {&quot;TYPE&quot;: (&quot;PREF&quot;,), },
-    #&quot;X-MSN&quot;: {&quot;TYPE&quot;: (&quot;PREF&quot;,), },
-    #&quot;X-ICQ&quot;: {&quot;TYPE&quot;: (&quot;PREF&quot;,), },
</del><ins>+    # &quot;KEY&quot;: {&quot;ENCODING&quot;: (&quot;B&quot;,), &quot;TYPE&quot;: (&quot;PGPPUBILICKEY&quot;, &quot;USERCERTIFICATE&quot;, &quot;USERPKCS12DATA&quot;, &quot;USERSMIMECERTIFICATE&quot;,)},
+    # &quot;URL&quot;: {&quot;TYPE&quot;: (&quot;WEBLOG&quot;, &quot;HOMEPAGE&quot;,)},
+    # &quot;IMPP&quot;: {&quot;TYPE&quot;: (&quot;PREF&quot;,), &quot;X-SERVICE-TYPE&quot;: None, },
+    # &quot;X-ABRELATEDNAMES&quot;: {&quot;TYPE&quot;: None, },
+    # &quot;X-AIM&quot;: {&quot;TYPE&quot;: (&quot;PREF&quot;,), },
+    # &quot;X-JABBER&quot;: {&quot;TYPE&quot;: (&quot;PREF&quot;,), },
+    # &quot;X-MSN&quot;: {&quot;TYPE&quot;: (&quot;PREF&quot;,), },
+    # &quot;X-ICQ&quot;: {&quot;TYPE&quot;: (&quot;PREF&quot;,), },
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> vCardConstantProperties = {
</span><del>-    #===================================================================
</del><ins>+    # ====================================================================
</ins><span class="cx">     # 3.6 EXPLANATORY TYPES http://tools.ietf.org/html/rfc2426#section-3.6
</span><del>-    #===================================================================
</del><ins>+    # ====================================================================
</ins><span class="cx">     # 3.6.3 PRODID
</span><span class="cx">     &quot;PRODID&quot;: vCardProductID,
</span><span class="cx">     # 3.6.9 VERSION
</span><span class="lines">@@ -107,12 +107,13 @@
</span><span class="cx">                 prop=newProperty
</span><span class="cx">             )
</span><span class="cx"> 
</span><del>-    #=======================================================================
</del><ins>+    # =======================================================================
</ins><span class="cx">     # start
</span><del>-    #=======================================================================
</del><ins>+    # =======================================================================
</ins><span class="cx"> 
</span><del>-    log.debug(&quot;vCardFromRecord: record={record}, forceKind={forceKind}, addProps={addProps}, parentURI={parentURI}&quot;,
-                   record=record, forceKind=forceKind, addProps=addProps, parentURI=parentURI)
</del><ins>+    log.debug(
+        &quot;vCardFromRecord: record={record}, forceKind={forceKind}, addProps={addProps}, parentURI={parentURI}&quot;,
+        record=record, forceKind=forceKind, addProps=addProps, parentURI=parentURI)
</ins><span class="cx"> 
</span><span class="cx">     if forceKind is None:
</span><span class="cx">         kind = recordTypeToVCardKindMap.get(record.recordType, &quot;individual&quot;)
</span><span class="lines">@@ -132,9 +133,9 @@
</span><span class="cx">     for key, value in constantProperties.items():
</span><span class="cx">         vcard.addProperty(Property(key, value))
</span><span class="cx"> 
</span><del>-    #===========================================================================
</del><ins>+    # ===========================================================================
</ins><span class="cx">     # 2.1 Predefined Type Usage
</span><del>-    #===========================================================================
</del><ins>+    # ===========================================================================
</ins><span class="cx">     # 2.1.4 SOURCE Type http://tools.ietf.org/html/rfc2426#section-2.1.4
</span><span class="cx">     if parentURI:
</span><span class="cx">         uri = joinURL(parentURI, record.fields[FieldName.uid].encode(&quot;utf-8&quot;) + &quot;.vcf&quot;)
</span><span class="lines">@@ -152,9 +153,9 @@
</span><span class="cx">                 source = &quot;https://{server}:{port}{uri}&quot;.format(server=config.ServerHostName, port=config.HTTPPort, uri=uri)
</span><span class="cx">         vcard.addProperty(Property(&quot;SOURCE&quot;, source))
</span><span class="cx"> 
</span><del>-    #===================================================================
</del><ins>+    # =======================================================================
</ins><span class="cx">     # 3.1 IDENTIFICATION TYPES http://tools.ietf.org/html/rfc2426#section-3.1
</span><del>-    #===================================================================
</del><ins>+    # =======================================================================
</ins><span class="cx">     # 3.1.1 FN
</span><span class="cx">     vcard.addProperty(Property(&quot;FN&quot;, record.fields[FieldName.fullNames][0].encode(&quot;utf-8&quot;)))
</span><span class="cx"> 
</span><span class="lines">@@ -185,9 +186,9 @@
</span><span class="cx">     #     3.1.4 PHOTO
</span><span class="cx">     #     3.1.5 BDAY
</span><span class="cx"> 
</span><del>-    #===========================================================================
</del><ins>+    # ============================================================================
</ins><span class="cx">     # 3.2 Delivery Addressing Types http://tools.ietf.org/html/rfc2426#section-3.2
</span><del>-    #===========================================================================
</del><ins>+    # ============================================================================
</ins><span class="cx">     # 3.2.1 ADR
</span><span class="cx">     #
</span><span class="cx">     # Experimental:
</span><span class="lines">@@ -215,7 +216,7 @@
</span><span class="cx">         vcard.addProperty(
</span><span class="cx">             Property(
</span><span class="cx">                 &quot;ADR&quot;, Adr(
</span><del>-                    #pobox = box,
</del><ins>+                    # pobox = box,
</ins><span class="cx">                     extended=extended.encode(&quot;utf-8&quot;) if extended else None,
</span><span class="cx">                     street=street.encode(&quot;utf-8&quot;) if street else None,
</span><span class="cx">                     locality=city.encode(&quot;utf-8&quot;) if city else None,
</span><span class="lines">@@ -228,13 +229,13 @@
</span><span class="cx">         )
</span><span class="cx"> 
</span><span class="cx">     #    3.2.2 LABEL
</span><del>-    #label = record.fields.get(CalFieldName.streetAddress)
</del><ins>+    # label = record.fields.get(CalFieldName.streetAddress)
</ins><span class="cx">     if label:
</span><span class="cx">         vcard.addProperty(Property(&quot;LABEL&quot;, label.encode(&quot;utf-8&quot;), params={&quot;TYPE&quot;: [&quot;POSTAL&quot;, &quot;PARCEL&quot;, ]}))
</span><span class="cx"> 
</span><del>-    #===================================================================
</del><ins>+    # ======================================================================================
</ins><span class="cx">     # 3.3 TELECOMMUNICATIONS ADDRESSING TYPES http://tools.ietf.org/html/rfc2426#section-3.3
</span><del>-    #===================================================================
</del><ins>+    # ======================================================================================
</ins><span class="cx">     #
</span><span class="cx">     # UNIMPLEMENTED
</span><span class="cx">     #     3.3.1 TEL
</span><span class="lines">@@ -250,9 +251,9 @@
</span><span class="cx">     # UNIMPLEMENTED:
</span><span class="cx">     #     3.3.3 MAILER
</span><span class="cx">     #
</span><del>-    #===================================================================
</del><ins>+    # =====================================================================
</ins><span class="cx">     # 3.4 GEOGRAPHICAL TYPES http://tools.ietf.org/html/rfc2426#section-3.4
</span><del>-    #===================================================================
</del><ins>+    # =====================================================================
</ins><span class="cx">     #
</span><span class="cx">     # UNIMPLEMENTED:
</span><span class="cx">     #     3.4.1 TZ
</span><span class="lines">@@ -262,9 +263,9 @@
</span><span class="cx">     if geographicLocation:
</span><span class="cx">         vcard.addProperty(Property(&quot;GEO&quot;, geographicLocation.encode(&quot;utf-8&quot;)))
</span><span class="cx"> 
</span><del>-    #===================================================================
</del><ins>+    # =======================================================================
</ins><span class="cx">     # 3.5 ORGANIZATIONAL TYPES http://tools.ietf.org/html/rfc2426#section-3.5
</span><del>-    #===================================================================
</del><ins>+    # =======================================================================
</ins><span class="cx">     #
</span><span class="cx">     # UNIMPLEMENTED:
</span><span class="cx">     #     3.5.1 TITLE
</span><span class="lines">@@ -273,9 +274,9 @@
</span><span class="cx">     #     3.5.4 AGENT
</span><span class="cx">     #     3.5.5 ORG
</span><span class="cx">     #
</span><del>-    #===================================================================
</del><ins>+    # ====================================================================
</ins><span class="cx">     # 3.6 EXPLANATORY TYPES http://tools.ietf.org/html/rfc2426#section-3.6
</span><del>-    #===================================================================
</del><ins>+    # ====================================================================
</ins><span class="cx">     #
</span><span class="cx">     # UNIMPLEMENTED:
</span><span class="cx">     #     3.6.1 CATEGORIES
</span><span class="lines">@@ -297,16 +298,16 @@
</span><span class="cx">     # ADDED WITH CONTSTANT PROPERTIES:
</span><span class="cx">     #     3.6.9 VERSION
</span><span class="cx"> 
</span><del>-    #===================================================================
</del><ins>+    # ===================================================================
</ins><span class="cx">     # 3.7 SECURITY TYPES http://tools.ietf.org/html/rfc2426#section-3.7
</span><del>-    #===================================================================
</del><ins>+    # ===================================================================
</ins><span class="cx">     # UNIMPLEMENTED:
</span><span class="cx">     #     3.7.1 CLASS
</span><span class="cx">     #     3.7.2 KEY
</span><span class="cx"> 
</span><del>-    #===================================================================
</del><ins>+    # ===================================================================
</ins><span class="cx">     # X Properties
</span><del>-    #===================================================================
</del><ins>+    # ===================================================================
</ins><span class="cx">     # UNIMPLEMENTED:
</span><span class="cx">     #    X-&lt;instant messaging type&gt; such as:
</span><span class="cx">     #        &quot;AIM&quot;, &quot;FACEBOOK&quot;, &quot;GAGU-GAGU&quot;, &quot;GOOGLE TALK&quot;, &quot;ICQ&quot;, &quot;JABBER&quot;, &quot;MSN&quot;, &quot;QQ&quot;, &quot;SKYPE&quot;, &quot;YAHOO&quot;,
</span><span class="lines">@@ -327,9 +328,9 @@
</span><span class="cx">         if cua:
</span><span class="cx">             vcard.addProperty(Property(&quot;X-ADDRESSBOOKSERVER-MEMBER&quot;, cua.encode(&quot;utf-8&quot;)))
</span><span class="cx"> 
</span><del>-    #===================================================================
</del><ins>+    # ===================================================================
</ins><span class="cx">     # vCard 4.0  http://tools.ietf.org/html/rfc6350
</span><del>-    #===================================================================
</del><ins>+    # ===================================================================
</ins><span class="cx">     # UNIMPLEMENTED:
</span><span class="cx">     #     6.4.3 IMPP http://tools.ietf.org/html/rfc6350#section-6.4.3
</span><span class="cx">     #
</span></span></pre></div>
<a id="CalendarServertrunktxdavxmlbasepy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/xml/base.py (13808 => 13809)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/xml/base.py        2014-07-31 19:21:33 UTC (rev 13808)
+++ CalendarServer/trunk/txdav/xml/base.py        2014-07-31 20:15:15 UTC (rev 13809)
</span><span class="lines">@@ -264,8 +264,8 @@
</span><span class="cx">     def __eq__(self, other):
</span><span class="cx">         if isinstance(other, WebDAVElement):
</span><span class="cx">             return (
</span><del>-                self.name == other.name       and
-                self.namespace == other.namespace  and
</del><ins>+                self.name == other.name and
+                self.namespace == other.namespace and
</ins><span class="cx">                 self.attributes == other.attributes and
</span><span class="cx">                 self.children == other.children
</span><span class="cx">             )
</span><span class="lines">@@ -301,8 +301,10 @@
</span><span class="cx">             output.write(&quot;  &quot; * level)
</span><span class="cx"> 
</span><span class="cx">         # Check for empty element (one with either no children or a single PCDATA that is itself empty)
</span><del>-        if (len(self.children) == 0 or
-            (len(self.children) == 1 and isinstance(self.children[0], PCDATAElement) and len(str(self.children[0])) == 0)):
</del><ins>+        if (
+            len(self.children) == 0 or
+            (len(self.children) == 1 and isinstance(self.children[0], PCDATAElement) and len(str(self.children[0])) == 0)
+        ):
</ins><span class="cx"> 
</span><span class="cx">             # Write out any attributes or the namespace if difference from enclosing element.
</span><span class="cx">             if self.attributes or (ns != self.namespace):
</span><span class="lines">@@ -822,7 +824,7 @@
</span><span class="cx"> 
</span><span class="cx">             delta = (offset_hour * 60) + offset_minute
</span><span class="cx"> 
</span><del>-            if   offset_sign == &quot;+&quot;:
</del><ins>+            if offset_sign == &quot;+&quot;:
</ins><span class="cx">                 offset = FixedOffset(0 - delta)
</span><span class="cx">             elif offset_sign == &quot;-&quot;:
</span><span class="cx">                 offset = FixedOffset(0 + delta)
</span></span></pre></div>
<a id="CalendarServertrunktxdavxmlparser_saxpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/xml/parser_sax.py (13808 => 13809)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/xml/parser_sax.py        2014-07-31 19:21:33 UTC (rev 13808)
+++ CalendarServer/trunk/txdav/xml/parser_sax.py        2014-07-31 20:15:15 UTC (rev 13809)
</span><span class="lines">@@ -176,7 +176,7 @@
</span><span class="cx">         except xml.sax.SAXParseException, e:
</span><span class="cx">             raise ValueError(e)
</span><span class="cx"> 
</span><del>-        #handler.dom.root_element.validate()
</del><ins>+        # handler.dom.root_element.validate()
</ins><span class="cx"> 
</span><span class="cx">         return handler.dom
</span><span class="cx"> 
</span><span class="lines">@@ -184,5 +184,5 @@
</span><span class="cx">     def writeXML(self, output):
</span><span class="cx">         document = xml.dom.minidom.Document()
</span><span class="cx">         self.root_element.addToDOM(document, None)
</span><del>-        #document.normalize()
</del><ins>+        # document.normalize()
</ins><span class="cx">         xmlPrint(document, output)
</span></span></pre></div>
<a id="CalendarServertrunktxdavxmlrfc2518py"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/xml/rfc2518.py (13808 => 13809)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/xml/rfc2518.py        2014-07-31 19:21:33 UTC (rev 13808)
+++ CalendarServer/trunk/txdav/xml/rfc2518.py        2014-07-31 20:15:15 UTC (rev 13809)
</span><span class="lines">@@ -299,7 +299,7 @@
</span><span class="cx">         propstat_count = 0
</span><span class="cx"> 
</span><span class="cx">         for child in children:
</span><del>-            if   isinstance(child, HRef):
</del><ins>+            if isinstance(child, HRef):
</ins><span class="cx">                 resource_count += 1
</span><span class="cx">             elif isinstance(child, Status):
</span><span class="cx">                 status_count += 1
</span><span class="lines">@@ -311,7 +311,7 @@
</span><span class="cx">                 &quot;{0} element must have at least one {1}.&quot;.format(
</span><span class="cx">                     cls.sname(), HRef.sname()
</span><span class="cx">                 )
</span><del>-        )
</del><ins>+            )
</ins><span class="cx"> 
</span><span class="cx">         if status_count is 0:
</span><span class="cx">             if propstat_count is 0:
</span><span class="lines">@@ -326,7 +326,7 @@
</span><span class="cx">                     &quot;{0} element with {1} may only have one {2}&quot;.format(
</span><span class="cx">                         cls.sname(), PropertyStatus.sname(), HRef.sname()
</span><span class="cx">                     )
</span><del>-            )
</del><ins>+                )
</ins><span class="cx"> 
</span><span class="cx">             return PropertyStatusResponse.__new__(PropertyStatusResponse, *children)
</span><span class="cx"> 
</span></span></pre></div>
<a id="CalendarServertrunktxdavxmlrfc5842py"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/xml/rfc5842.py (13808 => 13809)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/xml/rfc5842.py        2014-07-31 19:21:33 UTC (rev 13808)
+++ CalendarServer/trunk/txdav/xml/rfc5842.py        2014-07-31 20:15:15 UTC (rev 13809)
</span><span class="lines">@@ -90,9 +90,9 @@
</span><span class="cx"> # sub-elements and so that can extend it here.
</span><span class="cx"> 
</span><span class="cx"> 
</span><del>-#@registerElement
-#@registerElementClass
-#class BindResponse (WebDAVElement):
</del><ins>+# @registerElement
+# @registerElementClass
+# class BindResponse (WebDAVElement):
</ins><span class="cx"> #    &quot;&quot;&quot;
</span><span class="cx"> #    Response body for a BIND request
</span><span class="cx"> #    &quot;&quot;&quot;
</span><span class="lines">@@ -104,9 +104,9 @@
</span><span class="cx"> #    }
</span><span class="cx"> #
</span><span class="cx"> #
</span><del>-#@registerElement
-#@registerElementClass
-#class UnbindRequest (WebDAVElement):
</del><ins>+# @registerElement
+# @registerElementClass
+# class UnbindRequest (WebDAVElement):
</ins><span class="cx"> #    &quot;&quot;&quot;
</span><span class="cx"> #    Request body for a UNBIND request
</span><span class="cx"> #    &quot;&quot;&quot;
</span><span class="lines">@@ -118,9 +118,9 @@
</span><span class="cx"> #    }
</span><span class="cx"> #
</span><span class="cx"> #
</span><del>-#@registerElement
-#@registerElementClass
-#class Unbind (WebDAVElement):
</del><ins>+# @registerElement
+# @registerElementClass
+# class Unbind (WebDAVElement):
</ins><span class="cx"> #    &quot;&quot;&quot;
</span><span class="cx"> #    Response body for a UNBIND request
</span><span class="cx"> #    &quot;&quot;&quot;
</span><span class="lines">@@ -132,9 +132,9 @@
</span><span class="cx"> #    }
</span><span class="cx"> #
</span><span class="cx"> #
</span><del>-#@registerElement
-#@registerElementClass
-#class RebindRequest (WebDAVElement):
</del><ins>+# @registerElement
+# @registerElementClass
+# class RebindRequest (WebDAVElement):
</ins><span class="cx"> #    &quot;&quot;&quot;
</span><span class="cx"> #    Request body for a REBIND request
</span><span class="cx"> #    &quot;&quot;&quot;
</span><span class="lines">@@ -147,9 +147,9 @@
</span><span class="cx"> #    }
</span><span class="cx"> #
</span><span class="cx"> #
</span><del>-#@registerElement
-#@registerElementClass
-#class Rebind (WebDAVElement):
</del><ins>+# @registerElement
+# @registerElementClass
+# class Rebind (WebDAVElement):
</ins><span class="cx"> #    &quot;&quot;&quot;
</span><span class="cx"> #    Response body for a UNBIND request
</span><span class="cx"> #    &quot;&quot;&quot;
</span></span></pre></div>
<a id="CalendarServertrunktxdavxmltesttest_xmlpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/xml/test/test_xml.py (13808 => 13809)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/xml/test/test_xml.py        2014-07-31 19:21:33 UTC (rev 13808)
+++ CalendarServer/trunk/txdav/xml/test/test_xml.py        2014-07-31 20:15:15 UTC (rev 13809)
</span><span class="lines">@@ -50,8 +50,9 @@
</span><span class="cx">     element = MultiStatus(
</span><span class="cx">         Response(
</span><span class="cx">             HRef(&quot;http://webdav.sb.aol.com/webdav/secret&quot;),
</span><del>-            Status(&quot;HTTP/1.1 403 Forbidden&quot;)),
-        )
</del><ins>+            Status(&quot;HTTP/1.1 403 Forbidden&quot;)
+        ),
+    )
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="CalendarServertrunktxdavxmlxmlextpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/trunk/txdav/xml/xmlext.py (13808 => 13809)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/trunk/txdav/xml/xmlext.py        2014-07-31 19:21:33 UTC (rev 13808)
+++ CalendarServer/trunk/txdav/xml/xmlext.py        2014-07-31 20:15:15 UTC (rev 13809)
</span><span class="lines">@@ -46,10 +46,11 @@
</span><span class="cx">     preserveElements = preserveElements or []
</span><span class="cx">     owner_doc = root.ownerDocument or root
</span><span class="cx">     if hasattr(owner_doc, 'getElementsByName'):
</span><del>-        #We don't want to insert any whitespace into HTML inline elements
</del><ins>+        # We don't want to insert any whitespace into HTML inline elements
</ins><span class="cx">         preserveElements = preserveElements + HTML_4_TRANSITIONAL_INLINE
</span><del>-    visitor = PrintVisitor(stream, encoding, indent,
-                                   preserveElements, nss_hints)
</del><ins>+    visitor = PrintVisitor(
+        stream, encoding, indent,
+        preserveElements, nss_hints)
</ins><span class="cx">     PrintWalker(visitor, root).run()
</span><span class="cx">     stream.write('\n')
</span><span class="cx">     return
</span><span class="lines">@@ -57,7 +58,7 @@
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> def GetAllNs(node):
</span><del>-    #The xml namespace is implicit
</del><ins>+    # The xml namespace is implicit
</ins><span class="cx">     nss = {'xml': XML_NAMESPACE}
</span><span class="cx">     if node.nodeType == Node.ATTRIBUTE_NODE and node.ownerElement:
</span><span class="cx">         return GetAllNs(node.ownerElement)
</span><span class="lines">@@ -73,7 +74,7 @@
</span><span class="cx">             elif attr.namespaceURI:
</span><span class="cx">                 nss[attr.prefix] = attr.namespaceURI
</span><span class="cx">     if node.parentNode:
</span><del>-        #Inner NS/Prefix mappings take precedence over outer ones
</del><ins>+        # Inner NS/Prefix mappings take precedence over outer ones
</ins><span class="cx">         parent_nss = GetAllNs(node.parentNode)
</span><span class="cx">         parent_nss.update(nss)
</span><span class="cx">         nss = parent_nss
</span><span class="lines">@@ -210,7 +211,7 @@
</span><span class="cx">     def visitProlog(self):
</span><span class="cx">         self._write(&quot;&lt;?xml version='1.0' encoding='%s'?&gt;&quot; % (
</span><span class="cx">             self.encoding or 'utf-8'
</span><del>-            ))
</del><ins>+        ))
</ins><span class="cx">         self._inText = 0
</span><span class="cx">         return
</span><span class="cx"> 
</span><span class="lines">@@ -391,16 +392,16 @@
</span><span class="cx"> ILLEGAL_LOW_CHARS = '[\x01-\x08\x0B-\x0C\x0E-\x1F]'
</span><span class="cx"> SURROGATE_BLOCK = '[\xF0-\xF7][\x80-\xBF][\x80-\xBF][\x80-\xBF]'
</span><span class="cx"> ILLEGAL_HIGH_CHARS = '\xEF\xBF[\xBE\xBF]'
</span><del>-#Note: Prolly fuzzy on this, but it looks as if characters from the surrogate block are allowed if in scalar form, which is encoded in UTF8 the same was as in surrogate block form
</del><ins>+# Note: Prolly fuzzy on this, but it looks as if characters from the surrogate block are allowed if in scalar form, which is encoded in UTF8 the same was as in surrogate block form
</ins><span class="cx"> XML_ILLEGAL_CHAR_PATTERN = re.compile('%s|%s' % (ILLEGAL_LOW_CHARS, ILLEGAL_HIGH_CHARS))
</span><span class="cx"> 
</span><span class="cx"> g_utf8TwoBytePattern = re.compile('([\xC0-\xC3])([\x80-\xBF])')
</span><span class="cx"> g_cdataCharPattern = re.compile('[&amp;&lt;]|]]&gt;')
</span><span class="cx"> g_charToEntity = {
</span><del>-        '&amp;': '&amp;amp;',
-        '&lt;': '&amp;lt;',
-        ']]&gt;': ']]&amp;gt;',
-        }
</del><ins>+    '&amp;': '&amp;amp;',
+    '&lt;': '&amp;lt;',
+    ']]&gt;': ']]&amp;gt;',
+}
</ins><span class="cx"> 
</span><span class="cx"> # Slightly modified to not use types.Unicode
</span><span class="cx"> import codecs
</span><span class="lines">@@ -418,7 +419,7 @@
</span><span class="cx">     encoder = codecs.lookup(encoding)[0] # encode,decode,reader,writer
</span><span class="cx">     if type(text) is not unicode:
</span><span class="cx">         text = unicode(text, &quot;utf-8&quot;)
</span><del>-    #FIXME
</del><ins>+    # FIXME
</ins><span class="cx">     return str(encoder(text)[0])
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="lines">@@ -433,8 +434,8 @@
</span><span class="cx">     else:
</span><span class="cx">         delimiter = &quot;'&quot;
</span><span class="cx">         new_chars = re.sub(&quot;'&quot;, '&amp;apos;', characters)
</span><del>-    #FIXME: There's more to normalization
-    #Convert attribute new-lines to character entity
</del><ins>+    # FIXME: There's more to normalization
+    # Convert attribute new-lines to character entity
</ins><span class="cx">     # characters is possibly shorter than new_chars (no entities)
</span><span class="cx">     if &quot;\n&quot; in characters:
</span><span class="cx">         new_chars = re.sub('\n', '&amp;#10;', new_chars)
</span><span class="lines">@@ -442,7 +443,7 @@
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> 
</span><del>-#Note: Unicode object only for now
</del><ins>+# Note: Unicode object only for now
</ins><span class="cx"> def TranslateCdata(characters, encoding='UTF-8', prev_chars='', markupSafe=0,
</span><span class="cx">                    charsetHandler=utf8_to_code):
</span><span class="cx">     &quot;&quot;&quot;
</span><span class="lines">@@ -464,9 +465,9 @@
</span><span class="cx">             new_string = '&amp;gt;' + new_string[1:]
</span><span class="cx">     else:
</span><span class="cx">         new_string = characters
</span><del>-    #Note: use decimal char entity rep because some browsers are broken
-    #FIXME: This will bomb for high characters.  Should, for instance, detect
-    #The UTF-8 for 0xFFFE and put out &amp;#xFFFE;
</del><ins>+    # Note: use decimal char entity rep because some browsers are broken
+    # FIXME: This will bomb for high characters.  Should, for instance, detect
+    # The UTF-8 for 0xFFFE and put out &amp;#xFFFE;
</ins><span class="cx">     if XML_ILLEGAL_CHAR_PATTERN.search(new_string):
</span><span class="cx">         new_string = XML_ILLEGAL_CHAR_PATTERN.subn(
</span><span class="cx">             lambda m: '&amp;#%i;' % ord(m.group()),
</span><span class="lines">@@ -477,20 +478,20 @@
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> def TranslateHtmlCdata(characters, encoding='UTF-8', prev_chars=''):
</span><del>-    #Translate numerical char entity references with HTML entity equivalents
</del><ins>+    # Translate numerical char entity references with HTML entity equivalents
</ins><span class="cx">     new_string, _ignore_num_subst = re.subn(
</span><span class="cx">         g_cdataCharPattern,
</span><span class="cx">         lambda m, d=g_charToEntity: d[m.group()],
</span><span class="cx">         characters
</span><del>-        )
</del><ins>+    )
</ins><span class="cx">     if prev_chars[-2:] == ']]' and new_string[0] == '&gt;':
</span><span class="cx">         new_string = '&amp;gt;' + new_string[1:]
</span><span class="cx">     new_string = UseHtmlCharEntities(new_string)
</span><span class="cx">     try:
</span><span class="cx">         new_string = utf8_to_code(new_string, encoding)
</span><span class="cx">     except:
</span><del>-        #FIXME: This is a work-around, contributed by Mike Brown, that
-        #Deals with escaping output, until we have XML/HTML aware codecs
</del><ins>+        # FIXME: This is a work-around, contributed by Mike Brown, that
+        # Deals with escaping output, until we have XML/HTML aware codecs
</ins><span class="cx">         tmp_new_string = &quot;&quot;
</span><span class="cx">         for c in new_string:
</span><span class="cx">             try:
</span><span class="lines">@@ -499,8 +500,8 @@
</span><span class="cx">                 new_c = '&amp;#%i;' % ord(c)
</span><span class="cx">             tmp_new_string = tmp_new_string + new_c
</span><span class="cx">         new_string = tmp_new_string
</span><del>-    #new_string, num_subst = re.subn(g_xmlIllegalCharPattern, lambda m: '&amp;#%i;'%ord(m.group()), new_string)
-    #Note: use decimal char entity rep because some browsers are broken
</del><ins>+    # new_string, num_subst = re.subn(g_xmlIllegalCharPattern, lambda m: '&amp;#%i;'%ord(m.group()), new_string)
+    # Note: use decimal char entity rep because some browsers are broken
</ins><span class="cx">     return new_string
</span><span class="cx"> 
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>