<!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>[12971] CalendarServer/branches/users/sagen/move2who-4/twistedcaldav/directory/test/test_principal.py</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/12971">12971</a></dd>
<dt>Author</dt> <dd>wsanchez@apple.com</dd>
<dt>Date</dt> <dd>2014-03-19 12:17:18 -0700 (Wed, 19 Mar 2014)</dd>
</dl>
<h3>Log Message</h3>
<pre>lint</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#CalendarServerbranchesuserssagenmove2who4twistedcaldavdirectorytesttest_principalpy">CalendarServer/branches/users/sagen/move2who-4/twistedcaldav/directory/test/test_principal.py</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="CalendarServerbranchesuserssagenmove2who4twistedcaldavdirectorytesttest_principalpy"></a>
<div class="modfile"><h4>Modified: CalendarServer/branches/users/sagen/move2who-4/twistedcaldav/directory/test/test_principal.py (12970 => 12971)</h4>
<pre class="diff"><span>
<span class="info">--- CalendarServer/branches/users/sagen/move2who-4/twistedcaldav/directory/test/test_principal.py        2014-03-19 16:55:24 UTC (rev 12970)
+++ CalendarServer/branches/users/sagen/move2who-4/twistedcaldav/directory/test/test_principal.py        2014-03-19 19:17:18 UTC (rev 12971)
</span><span class="lines">@@ -20,29 +20,38 @@
</span><span class="cx">
</span><span class="cx"> from twisted.cred.credentials import UsernamePassword
</span><span class="cx"> from twisted.internet.defer import inlineCallbacks
</span><ins>+
+from txweb2.dav.fileop import rmdir
+from txweb2.dav.resource import AccessDeniedError
+from txweb2.http import HTTPError
+from txweb2.test.test_server import SimpleRequest
+
+from txdav.common.datastore.file import CommonDataStore
+from txdav.xml import element as davxml
+
</ins><span class="cx"> from twistedcaldav import carddavxml
</span><span class="cx"> from twistedcaldav.cache import DisabledCacheNotifier
</span><span class="cx"> from twistedcaldav.caldavxml import caldav_namespace
</span><span class="cx"> from twistedcaldav.config import config
</span><span class="cx"> from twistedcaldav.customxml import calendarserver_namespace
</span><del>-from twistedcaldav.directory.addressbook import DirectoryAddressBookHomeProvisioningResource
-from twistedcaldav.directory.calendar import DirectoryCalendarHomeProvisioningResource
-from twistedcaldav.directory.principal import DirectoryCalendarPrincipalResource
-from twistedcaldav.directory.principal import DirectoryPrincipalProvisioningResource
-from twistedcaldav.directory.principal import DirectoryPrincipalResource
-from twistedcaldav.directory.principal import DirectoryPrincipalTypeProvisioningResource
</del><ins>+from twistedcaldav.directory.addressbook import (
+ DirectoryAddressBookHomeProvisioningResource
+)
+from twistedcaldav.directory.calendar import (
+ DirectoryCalendarHomeProvisioningResource
+)
+from twistedcaldav.directory.principal import (
+ DirectoryCalendarPrincipalResource,
+ DirectoryPrincipalProvisioningResource,
+ DirectoryPrincipalResource,
+ DirectoryPrincipalTypeProvisioningResource,
+)
</ins><span class="cx"> from twistedcaldav.test.util import StoreTestCase
</span><del>-from txdav.common.datastore.file import CommonDataStore
-from txdav.xml import element as davxml
-from txweb2.dav.fileop import rmdir
-from txweb2.dav.resource import AccessDeniedError
-from txweb2.http import HTTPError
-from txweb2.test.test_server import SimpleRequest
</del><span class="cx">
</span><span class="cx">
</span><span class="cx">
</span><del>-
-class ProvisionedPrincipals(StoreTestCase): # twistedcaldav.test.util.TestCase):
</del><ins>+# twistedcaldav.test.util.TestCase
+class ProvisionedPrincipals(StoreTestCase):
</ins><span class="cx"> """
</span><span class="cx"> Directory service provisioned principals.
</span><span class="cx"> """
</span><span class="lines">@@ -93,13 +102,21 @@
</span><span class="cx"> directory = self.directory
</span><span class="cx"> if True:
</span><span class="cx"> #print("\n -> %s" % (directory.__class__.__name__,))
</span><del>- provisioningResource = self.principalRootResources[directory.__class__.__name__]
</del><ins>+ provisioningResource = (
+ self.principalRootResources[directory.__class__.__name__]
+ )
</ins><span class="cx">
</span><span class="cx"> provisioningURL = "/" + directory.__class__.__name__ + "/"
</span><del>- self.assertEquals(provisioningURL, provisioningResource.principalCollectionURL())
</del><ins>+ self.assertEquals(
+ provisioningURL,
+ provisioningResource.principalCollectionURL()
+ )
</ins><span class="cx">
</span><span class="cx"> principalCollections = provisioningResource.principalCollections()
</span><del>- self.assertEquals(set((provisioningURL,)), set(pc.principalCollectionURL() for pc in principalCollections))
</del><ins>+ self.assertEquals(
+ set((provisioningURL,)),
+ set(pc.principalCollectionURL() for pc in principalCollections)
+ )
</ins><span class="cx">
</span><span class="cx"> recordTypes = set((yield provisioningResource.listChildren()))
</span><span class="cx"> self.assertEquals(recordTypes, set(directory.recordTypes()))
</span><span class="lines">@@ -107,13 +124,26 @@
</span><span class="cx"> for recordType in recordTypes:
</span><span class="cx"> #print(" -> %s" % (recordType,))
</span><span class="cx"> typeResource = provisioningResource.getChild(recordType)
</span><del>- self.failUnless(isinstance(typeResource, DirectoryPrincipalTypeProvisioningResource))
</del><ins>+ self.failUnless(
+ isinstance(
+ typeResource,
+ DirectoryPrincipalTypeProvisioningResource
+ )
+ )
</ins><span class="cx">
</span><span class="cx"> typeURL = provisioningURL + recordType + "/"
</span><del>- self.assertEquals(typeURL, typeResource.principalCollectionURL())
</del><ins>+ self.assertEquals(
+ typeURL, typeResource.principalCollectionURL()
+ )
</ins><span class="cx">
</span><span class="cx"> principalCollections = typeResource.principalCollections()
</span><del>- self.assertEquals(set((provisioningURL,)), set(pc.principalCollectionURL() for pc in principalCollections))
</del><ins>+ self.assertEquals(
+ set((provisioningURL,)),
+ set(
+ pc.principalCollectionURL()
+ for pc in principalCollections
+ )
+ )
</ins><span class="cx">
</span><span class="cx"> shortNames = set((yield typeResource.listChildren()))
</span><span class="cx"> # Handle records with mulitple shortNames
</span><span class="lines">@@ -126,21 +156,39 @@
</span><span class="cx"> for shortName in shortNames:
</span><span class="cx"> #print(" -> %s" % (shortName,))
</span><span class="cx"> recordResource = typeResource.getChild(shortName)
</span><del>- self.failUnless(isinstance(recordResource, DirectoryPrincipalResource))
</del><ins>+ self.failUnless(
+ isinstance(recordResource, DirectoryPrincipalResource)
+ )
</ins><span class="cx">
</span><span class="cx"> # shortName may be non-ascii
</span><span class="cx"> recordURL = typeURL + quote(shortName) + "/"
</span><del>- self.assertIn(recordURL, (recordResource.principalURL(),) + tuple(recordResource.alternateURIs()))
</del><ins>+ self.assertIn(
+ recordURL,
+ (
+ (recordResource.principalURL(),) +
+ tuple(recordResource.alternateURIs())
+ )
+ )
</ins><span class="cx">
</span><del>- principalCollections = recordResource.principalCollections()
- self.assertEquals(set((provisioningURL,)), set(pc.principalCollectionURL() for pc in principalCollections))
</del><ins>+ principalCollections = (
+ recordResource.principalCollections()
+ )
+ self.assertEquals(
+ set((provisioningURL,)),
+ set(
+ pc.principalCollectionURL()
+ for pc in principalCollections
+ )
+ )
</ins><span class="cx">
</span><span class="cx">
</span><span class="cx"> def test_allRecords(self):
</span><span class="cx"> """
</span><span class="cx"> Test of a test routine...
</span><span class="cx"> """
</span><del>- for _ignore_provisioningResource, _ignore_recordType, recordResource, record in self._allRecords():
</del><ins>+ for (
+ provisioningResource, recordType, recordResource, record
+ ) in self._allRecords():
</ins><span class="cx"> if record.enabled:
</span><span class="cx"> self.assertEquals(recordResource.record, record)
</span><span class="cx">
</span><span class="lines">@@ -153,8 +201,12 @@
</span><span class="cx"> """
</span><span class="cx"> DirectoryPrincipalProvisioningResource.principalForShortName()
</span><span class="cx"> """
</span><del>- for provisioningResource, recordType, _ignore_recordResource, record in self._allRecords():
- principal = provisioningResource.principalForShortName(recordType, record.shortNames[0])
</del><ins>+ for (
+ provisioningResource, recordType, recordResource, record
+ ) in self._allRecords():
+ principal = provisioningResource.principalForShortName(
+ recordType, record.shortNames[0]
+ )
</ins><span class="cx"> if record.enabled:
</span><span class="cx"> self.failIf(principal is None)
</span><span class="cx"> self.assertEquals(record, principal.record)
</span><span class="lines">@@ -167,10 +219,14 @@
</span><span class="cx"> DirectoryPrincipalProvisioningResource.principalForUser()
</span><span class="cx"> """
</span><span class="cx"> directory = self.directory
</span><del>- provisioningResource = self.principalRootResources[directory.__class__.__name__]
</del><ins>+ provisioningResource = (
+ self.principalRootResources[directory.__class__.__name__]
+ )
</ins><span class="cx">
</span><span class="cx"> for user in directory.listRecords(DirectoryService.recordType_users):
</span><del>- userResource = provisioningResource.principalForUser(user.shortNames[0])
</del><ins>+ userResource = provisioningResource.principalForUser(
+ user.shortNames[0]
+ )
</ins><span class="cx"> if user.enabled:
</span><span class="cx"> self.failIf(userResource is None)
</span><span class="cx"> self.assertEquals(user, userResource.record)
</span><span class="lines">@@ -183,7 +239,9 @@
</span><span class="cx"> DirectoryPrincipalProvisioningResource.principalForAuthID()
</span><span class="cx"> """
</span><span class="cx"> directory = self.directory
</span><del>- provisioningResource = self.principalRootResources[directory.__class__.__name__]
</del><ins>+ provisioningResource = (
+ self.principalRootResources[directory.__class__.__name__]
+ )
</ins><span class="cx">
</span><span class="cx"> for user in directory.listRecords(DirectoryService.recordType_users):
</span><span class="cx"> creds = UsernamePassword(user.shortNames[0], "bogus")
</span><span class="lines">@@ -199,7 +257,9 @@
</span><span class="cx"> """
</span><span class="cx"> DirectoryPrincipalProvisioningResource.principalForUID()
</span><span class="cx"> """
</span><del>- for provisioningResource, _ignore_recordType, _ignore_recordResource, record in self._allRecords():
</del><ins>+ for (
+ provisioningResource, recordType, recordResource, record
+ ) in self._allRecords():
</ins><span class="cx"> principal = provisioningResource.principalForUID(record.uid)
</span><span class="cx"> if record.enabled:
</span><span class="cx"> self.failIf(principal is None)
</span><span class="lines">@@ -212,7 +272,9 @@
</span><span class="cx"> """
</span><span class="cx"> DirectoryPrincipalProvisioningResource.principalForRecord()
</span><span class="cx"> """
</span><del>- for provisioningResource, _ignore_recordType, _ignore_recordResource, record in self._allRecords():
</del><ins>+ for (
+ provisioningResource, recordType, recordResource, record
+ ) in self._allRecords():
</ins><span class="cx"> principal = provisioningResource.principalForRecord(record)
</span><span class="cx"> if record.enabled:
</span><span class="cx"> self.failIf(principal is None)
</span><span class="lines">@@ -226,7 +288,7 @@
</span><span class="cx"> DirectoryPrincipalProvisioningResource.principalForCalendarUserAddress()
</span><span class="cx"> """
</span><span class="cx"> for (
</span><del>- provisioningResource, _ignore_recordType, recordResource, record
</del><ins>+ provisioningResource, recordType, recordResource, record
</ins><span class="cx"> ) in self._allRecords():
</span><span class="cx">
</span><span class="cx"> test_items = tuple(record.calendarUserAddresses)
</span><span class="lines">@@ -239,7 +301,10 @@
</span><span class="cx"> test_items += (principalURL, alternateURL)
</span><span class="cx">
</span><span class="cx"> for address in test_items:
</span><del>- principal = provisioningResource.principalForCalendarUserAddress(address)
</del><ins>+ principal = (
+ provisioningResource
+ .principalForCalendarUserAddress(address)
+ )
</ins><span class="cx"> if record.enabledForCalendaring:
</span><span class="cx"> self.failIf(principal is None)
</span><span class="cx"> self.assertEquals(record, principal.record)
</span><span class="lines">@@ -247,7 +312,9 @@
</span><span class="cx"> self.failIf(principal is not None)
</span><span class="cx">
</span><span class="cx"> # Explicitly check the disabled record
</span><del>- provisioningResource = self.principalRootResources['XMLDirectoryService']
</del><ins>+ provisioningResource = (
+ self.principalRootResources['XMLDirectoryService']
+ )
</ins><span class="cx">
</span><span class="cx"> self.failUnlessIdentical(
</span><span class="cx"> provisioningResource.principalForCalendarUserAddress(
</span><span class="lines">@@ -280,7 +347,9 @@
</span><span class="cx"> """
</span><span class="cx"> DirectoryPrincipalProvisioningResource.principalForCalendarUserAddress()
</span><span class="cx"> """
</span><del>- for provisioningResource, _ignore_recordType, _ignore_recordResource, record in self._allRecords():
</del><ins>+ for (
+ provisioningResource, recordType, recordResource, record
+ ) in self._allRecords():
</ins><span class="cx"> principal = provisioningResource.principalForRecord(record)
</span><span class="cx"> if record.enabled:
</span><span class="cx"> self.failIf(principal is None)
</span><span class="lines">@@ -288,13 +357,25 @@
</span><span class="cx"> self.failIf(principal is not None)
</span><span class="cx"> continue
</span><span class="cx"> if record.enabledForCalendaring:
</span><del>- self.assertTrue(isinstance(principal, DirectoryCalendarPrincipalResource))
</del><ins>+ self.assertTrue(
+ isinstance(principal, DirectoryCalendarPrincipalResource)
+ )
</ins><span class="cx"> else:
</span><del>- self.assertTrue(isinstance(principal, DirectoryPrincipalResource))
</del><ins>+ self.assertTrue(
+ isinstance(principal, DirectoryPrincipalResource)
+ )
</ins><span class="cx"> if record.enabledForAddressBooks:
</span><del>- self.assertTrue(isinstance(principal, DirectoryCalendarPrincipalResource))
</del><ins>+ self.assertTrue(
+ isinstance(
+ principal, DirectoryCalendarPrincipalResource
+ )
+ )
</ins><span class="cx"> else:
</span><del>- self.assertFalse(isinstance(principal, DirectoryCalendarPrincipalResource))
</del><ins>+ self.assertFalse(
+ isinstance(
+ principal, DirectoryCalendarPrincipalResource
+ )
+ )
</ins><span class="cx">
</span><span class="cx"> @inlineCallbacks
</span><span class="cx"> def hasProperty(property):
</span><span class="lines">@@ -311,31 +392,68 @@
</span><span class="cx"> except:
</span><span class="cx"> self.fail("Wrong exception type")
</span><span class="cx"> else:
</span><del>- self.fail("No exception principal: %s, property %s" % (principal, property,))
</del><ins>+ self.fail(
+ "No exception principal: %s, property %s"
+ % (principal, property,)
+ )
</ins><span class="cx">
</span><span class="cx"> if record.enabledForCalendaring:
</span><del>- yield hasProperty((caldav_namespace, "calendar-home-set"))
- yield hasProperty((caldav_namespace, "calendar-user-address-set"))
- yield hasProperty((caldav_namespace, "schedule-inbox-URL"))
- yield hasProperty((caldav_namespace, "schedule-outbox-URL"))
- yield hasProperty((caldav_namespace, "calendar-user-type"))
- yield hasProperty((calendarserver_namespace, "calendar-proxy-read-for"))
- yield hasProperty((calendarserver_namespace, "calendar-proxy-write-for"))
- yield hasProperty((calendarserver_namespace, "auto-schedule"))
</del><ins>+ yield hasProperty(
+ (caldav_namespace, "calendar-home-set")
+ )
+ yield hasProperty(
+ (caldav_namespace, "calendar-user-address-set")
+ )
+ yield hasProperty(
+ (caldav_namespace, "schedule-inbox-URL")
+ )
+ yield hasProperty(
+ (caldav_namespace, "schedule-outbox-URL")
+ )
+ yield hasProperty(
+ (caldav_namespace, "calendar-user-type")
+ )
+ yield hasProperty(
+ (calendarserver_namespace, "calendar-proxy-read-for")
+ )
+ yield hasProperty(
+ (calendarserver_namespace, "calendar-proxy-write-for")
+ )
+ yield hasProperty(
+ (calendarserver_namespace, "auto-schedule")
+ )
</ins><span class="cx"> else:
</span><del>- yield doesNotHaveProperty((caldav_namespace, "calendar-home-set"))
- yield doesNotHaveProperty((caldav_namespace, "calendar-user-address-set"))
- yield doesNotHaveProperty((caldav_namespace, "schedule-inbox-URL"))
- yield doesNotHaveProperty((caldav_namespace, "schedule-outbox-URL"))
- yield doesNotHaveProperty((caldav_namespace, "calendar-user-type"))
- yield doesNotHaveProperty((calendarserver_namespace, "calendar-proxy-read-for"))
- yield doesNotHaveProperty((calendarserver_namespace, "calendar-proxy-write-for"))
- yield doesNotHaveProperty((calendarserver_namespace, "auto-schedule"))
</del><ins>+ yield doesNotHaveProperty(
+ (caldav_namespace, "calendar-home-set")
+ )
+ yield doesNotHaveProperty(
+ (caldav_namespace, "calendar-user-address-set")
+ )
+ yield doesNotHaveProperty(
+ (caldav_namespace, "schedule-inbox-URL")
+ )
+ yield doesNotHaveProperty(
+ (caldav_namespace, "schedule-outbox-URL")
+ )
+ yield doesNotHaveProperty(
+ (caldav_namespace, "calendar-user-type")
+ )
+ yield doesNotHaveProperty(
+ (calendarserver_namespace, "calendar-proxy-read-for")
+ )
+ yield doesNotHaveProperty(
+ (calendarserver_namespace, "calendar-proxy-write-for")
+ )
+ yield doesNotHaveProperty(
+ (calendarserver_namespace, "auto-schedule")
+ )
</ins><span class="cx">
</span><span class="cx"> if record.enabledForAddressBooks:
</span><span class="cx"> yield hasProperty(carddavxml.AddressBookHomeSet.qname())
</span><span class="cx"> else:
</span><del>- yield doesNotHaveProperty(carddavxml.AddressBookHomeSet.qname())
</del><ins>+ yield doesNotHaveProperty(
+ carddavxml.AddressBookHomeSet.qname()
+ )
</ins><span class="cx">
</span><span class="cx">
</span><span class="cx"> def test_enabledAsOrganizer(self):
</span><span class="lines">@@ -346,12 +464,17 @@
</span><span class="cx"> ok_types = (
</span><span class="cx"> DirectoryService.recordType_users,
</span><span class="cx"> )
</span><del>- for provisioningResource, recordType, _ignore_recordResource, record in self._allRecords():
</del><ins>+ for (
+ provisioningResource, recordType, recordResource, record
+ ) in self._allRecords():
</ins><span class="cx">
</span><span class="cx"> if record.enabledForCalendaring:
</span><span class="cx"> principal = provisioningResource.principalForRecord(record)
</span><span class="cx"> self.failIf(principal is None)
</span><del>- self.assertEqual(principal.enabledAsOrganizer(), recordType in ok_types)
</del><ins>+ self.assertEqual(
+ principal.enabledAsOrganizer(),
+ recordType in ok_types
+ )
</ins><span class="cx">
</span><span class="cx"> config.Scheduling.Options.AllowGroupAsOrganizer = True
</span><span class="cx"> config.Scheduling.Options.AllowLocationAsOrganizer = True
</span><span class="lines">@@ -362,15 +485,20 @@
</span><span class="cx"> DirectoryService.recordType_locations,
</span><span class="cx"> DirectoryService.recordType_resources,
</span><span class="cx"> )
</span><del>- for provisioningResource, recordType, _ignore_recordResource, record in self._allRecords():
-
</del><ins>+ for (
+ provisioningResource, recordType, recordResource, record
+ ) in self._allRecords():
</ins><span class="cx"> if record.enabledForCalendaring:
</span><span class="cx"> principal = provisioningResource.principalForRecord(record)
</span><span class="cx"> self.failIf(principal is None)
</span><del>- self.assertEqual(principal.enabledAsOrganizer(), recordType in ok_types)
</del><ins>+ self.assertEqual(
+ principal.enabledAsOrganizer(),
+ recordType in ok_types
+ )
</ins><span class="cx">
</span><span class="cx">
</span><del>- # FIXME: Run DirectoryPrincipalProvisioningResource tests on DirectoryPrincipalTypeProvisioningResource also
</del><ins>+ # FIXME: Run DirectoryPrincipalProvisioningResource tests on
+ # DirectoryPrincipalTypeProvisioningResource also
</ins><span class="cx">
</span><span class="cx"> ##
</span><span class="cx"> # DirectoryPrincipalResource
</span><span class="lines">@@ -381,17 +509,25 @@
</span><span class="cx"> Each DirectoryPrincipalResource should have a cacheNotifier attribute
</span><span class="cx"> that is an instance of DisabledCacheNotifier
</span><span class="cx"> """
</span><del>- for _ignore_provisioningResource, _ignore_recordType, recordResource, record in self._allRecords():
</del><ins>+ for (
+ provisioningResource, recordType, recordResource, record
+ ) in self._allRecords():
</ins><span class="cx"> if record.enabled:
</span><del>- self.failUnless(isinstance(recordResource.cacheNotifier,
- DisabledCacheNotifier))
</del><ins>+ self.failUnless(
+ isinstance(
+ recordResource.cacheNotifier,
+ DisabledCacheNotifier
+ )
+ )
</ins><span class="cx">
</span><span class="cx">
</span><span class="cx"> def test_displayName(self):
</span><span class="cx"> """
</span><span class="cx"> DirectoryPrincipalResource.displayName()
</span><span class="cx"> """
</span><del>- for _ignore_provisioningResource, _ignore_recordType, recordResource, record in self._allRecords():
</del><ins>+ for (
+ provisioningResource, recordType, recordResource, record
+ ) in self._allRecords():
</ins><span class="cx"> if record.enabled:
</span><span class="cx"> self.failUnless(recordResource.displayName())
</span><span class="cx">
</span><span class="lines">@@ -401,10 +537,16 @@
</span><span class="cx"> """
</span><span class="cx"> DirectoryPrincipalResource.groupMembers()
</span><span class="cx"> """
</span><del>- for _ignore_provisioningResource, _ignore_recordType, recordResource, record in self._allRecords():
</del><ins>+ for (
+ provisioningResource, recordType, recordResource, record
+ ) in self._allRecords():
</ins><span class="cx"> if record.enabled:
</span><span class="cx"> members = yield recordResource.groupMembers()
</span><del>- self.failUnless(set(record.members()).issubset(set(r.record for r in members)))
</del><ins>+ self.failUnless(
+ set(record.members()).issubset(
+ set(r.record for r in members)
+ )
+ )
</ins><span class="cx">
</span><span class="cx">
</span><span class="cx"> @inlineCallbacks
</span><span class="lines">@@ -412,17 +554,28 @@
</span><span class="cx"> """
</span><span class="cx"> DirectoryPrincipalResource.groupMemberships()
</span><span class="cx"> """
</span><del>- for _ignore_provisioningResource, _ignore_recordType, recordResource, record in self._allRecords():
</del><ins>+ for (
+ provisioningResource, recordType, recordResource, record
+ ) in self._allRecords():
</ins><span class="cx"> if record.enabled:
</span><span class="cx"> memberships = yield recordResource.groupMemberships()
</span><del>- self.failUnless(set(record.groups()).issubset(set(r.record for r in memberships if hasattr(r, "record"))))
</del><ins>+ self.failUnless(
+ set(record.groups()).issubset(
+ set(
+ r.record
+ for r in memberships if hasattr(r, "record")
+ )
+ )
+ )
</ins><span class="cx">
</span><span class="cx">
</span><span class="cx"> def test_principalUID(self):
</span><span class="cx"> """
</span><span class="cx"> DirectoryPrincipalResource.principalUID()
</span><span class="cx"> """
</span><del>- for _ignore_provisioningResource, _ignore_recordType, recordResource, record in self._allRecords():
</del><ins>+ for (
+ provisioningResource, recordType, recordResource, record
+ ) in self._allRecords():
</ins><span class="cx"> if record.enabled:
</span><span class="cx"> self.assertEquals(record.guid, recordResource.principalUID())
</span><span class="cx">
</span><span class="lines">@@ -431,9 +584,14 @@
</span><span class="cx"> """
</span><span class="cx"> DirectoryPrincipalResource.calendarUserAddresses()
</span><span class="cx"> """
</span><del>- for _ignore_provisioningResource, _ignore_recordType, recordResource, record in self._allRecords():
</del><ins>+ for (
+ provisioningResource, recordType, recordResource, record
+ ) in self._allRecords():
</ins><span class="cx"> if record.enabledForCalendaring:
</span><del>- self.assertEqual(set(record.calendarUserAddresses), set(recordResource.calendarUserAddresses()))
</del><ins>+ self.assertEqual(
+ set(record.calendarUserAddresses),
+ set(recordResource.calendarUserAddresses())
+ )
</ins><span class="cx">
</span><span class="cx"> # Verify that if not enabled for calendaring, no CUAs:
</span><span class="cx"> record.enabledForCalendaring = False
</span><span class="lines">@@ -444,17 +602,25 @@
</span><span class="cx"> """
</span><span class="cx"> DirectoryPrincipalResource.canonicalCalendarUserAddress()
</span><span class="cx"> """
</span><del>- for _ignore_provisioningResource, _ignore_recordType, recordResource, record in self._allRecords():
</del><ins>+ for (
+ provisioningResource, recordType, recordResource, record
+ ) in self._allRecords():
</ins><span class="cx"> if record.enabledForCalendaring:
</span><del>- self.failUnless(recordResource.canonicalCalendarUserAddress().startswith("urn:uuid:"))
</del><ins>+ self.failUnless(
+ recordResource.canonicalCalendarUserAddress()
+ .startswith("urn:uuid:")
+ )
</ins><span class="cx">
</span><span class="cx">
</span><span class="cx"> def test_addressBookHomeURLs(self):
</span><span class="cx"> """
</span><span class="cx"> DirectoryPrincipalResource.addressBookHomeURLs(),
</span><span class="cx"> """
</span><del>- # No addressbook home provisioner should result in no addressbook homes.
- for provisioningResource, _ignore_recordType, recordResource, record in self._allRecords():
</del><ins>+ # No addressbook home provisioner should result in no addressbook
+ # homes.
+ for (
+ provisioningResource, recordType, recordResource, record
+ ) in self._allRecords():
</ins><span class="cx"> if record.enabledForAddressBooks:
</span><span class="cx"> self.failIf(tuple(recordResource.addressBookHomeURLs()))
</span><span class="cx">
</span><span class="lines">@@ -469,29 +635,37 @@
</span><span class="cx"> os.mkdir(path)
</span><span class="cx">
</span><span class="cx"> # need a data store
</span><del>- _newstore = commondatastore(path, none, none, true, false)
</del><ins>+ newstore = commondatastore(path, none, none, true, false)
</ins><span class="cx">
</span><span class="cx"> provisioningresource = directoryaddressbookhomeprovisioningresource(
</span><span class="cx"> directory,
</span><span class="cx"> "/addressbooks/",
</span><del>- _newstore
</del><ins>+ newstore
</ins><span class="cx"> )
</span><span class="cx">
</span><del>- addressbookrootresources[directory.__class__.__name__] = provisioningResource
</del><ins>+ addressbookrootresources[directory.__class__.__name__] = (
+ provisioningResource
+ )
</ins><span class="cx">
</span><span class="cx"> # AddressBook home provisioners should result in addressBook homes.
</span><del>- for provisioningResource, _ignore_recordType, recordResource, record in self._allRecords():
</del><ins>+ for (
+ provisioningResource, recordType, recordResource, record
+ ) in self._allRecords():
</ins><span class="cx"> if record.enabledForAddressBooks:
</span><span class="cx"> homeURLs = tuple(recordResource.addressBookHomeURLs())
</span><span class="cx"> self.failUnless(homeURLs)
</span><span class="cx">
</span><del>- # Turn off enabledForAddressBooks and addressBookHomeURLs should
- # be empty
</del><ins>+ # Turn off enabledForAddressBooks and addressBookHomeURLs
+ # should be empty
</ins><span class="cx"> record.enabledForAddressBooks = False
</span><span class="cx"> self.failIf(tuple(recordResource.addressBookHomeURLs()))
</span><span class="cx"> record.enabledForAddressBooks = True
</span><span class="cx">
</span><del>- addressBookRootURL = addressBookRootResources[record.service.__class__.__name__].url()
</del><ins>+ addressBookRootURL = (
+ addressBookRootResources[
+ record.service.__class__.__name__
+ ].url()
+ )
</ins><span class="cx">
</span><span class="cx"> for homeURL in homeURLs:
</span><span class="cx"> self.failUnless(homeURL.startswith(addressBookRootURL))
</span><span class="lines">@@ -504,7 +678,9 @@
</span><span class="cx"> DirectoryPrincipalResource.scheduleOutboxURL()
</span><span class="cx"> """
</span><span class="cx"> # No calendar home provisioner should result in no calendar homes.
</span><del>- for provisioningResource, _ignore_recordType, recordResource, record in self._allRecords():
</del><ins>+ for (
+ provisioningResource, recordType, recordResource, record
+ ) in self._allRecords():
</ins><span class="cx"> if record.enabledForCalendaring:
</span><span class="cx"> self.failIf(tuple(recordResource.calendarHomeURLs()))
</span><span class="cx"> self.failIf(recordResource.scheduleInboxURL())
</span><span class="lines">@@ -529,10 +705,14 @@
</span><span class="cx"> _newStore
</span><span class="cx"> )
</span><span class="cx">
</span><del>- calendarRootResources[directory.__class__.__name__] = provisioningResource
</del><ins>+ calendarRootResources[directory.__class__.__name__] = (
+ provisioningResource
+ )
</ins><span class="cx">
</span><span class="cx"> # Calendar home provisioners should result in calendar homes.
</span><del>- for provisioningResource, _ignore_recordType, recordResource, record in self._allRecords():
</del><ins>+ for (
+ provisioningResource, recordType, recordResource, record
+ ) in self._allRecords():
</ins><span class="cx"> if record.enabledForCalendaring:
</span><span class="cx"> homeURLs = tuple(recordResource.calendarHomeURLs())
</span><span class="cx"> self.failUnless(homeURLs)
</span><span class="lines">@@ -543,7 +723,11 @@
</span><span class="cx"> self.failIf(tuple(recordResource.calendarHomeURLs()))
</span><span class="cx"> record.enabledForCalendaring = True
</span><span class="cx">
</span><del>- calendarRootURL = calendarRootResources[record.service.__class__.__name__].url()
</del><ins>+ calendarRootURL = (
+ calendarRootResources[
+ record.service.__class__.__name__
+ ].url()
+ )
</ins><span class="cx">
</span><span class="cx"> inboxURL = recordResource.scheduleInboxURL()
</span><span class="cx"> outboxURL = recordResource.scheduleOutboxURL()
</span><span class="lines">@@ -574,13 +758,20 @@
</span><span class="cx"> """
</span><span class="cx">
</span><span class="cx"> # Set all resources and locations to auto-schedule, plus one user
</span><del>- for _ignore_provisioningResource, recordType, recordResource, record in self._allRecords():
</del><ins>+ for (
+ provisioningResource, recordType, recordResource, record
+ ) in self._allRecords():
</ins><span class="cx"> if record.enabledForCalendaring:
</span><del>- if recordType in ("locations", "resources") or record.uid == "cdaboo":
</del><ins>+ if (
+ recordType in ("locations", "resources") or
+ record.uid == "cdaboo"
+ ):
</ins><span class="cx"> recordResource.record.autoSchedule = True
</span><span class="cx">
</span><span class="cx"> # Default state - resources and locations, enabled, others not
</span><del>- for _ignore_provisioningResource, recordType, recordResource, record in self._allRecords():
</del><ins>+ for (
+ provisioningResource, recordType, recordResource, record
+ ) in self._allRecords():
</ins><span class="cx"> if record.enabledForCalendaring:
</span><span class="cx"> if recordType in ("locations", "resources"):
</span><span class="cx"> self.assertTrue(recordResource.canAutoSchedule())
</span><span class="lines">@@ -589,16 +780,23 @@
</span><span class="cx">
</span><span class="cx"> # Set config to allow users
</span><span class="cx"> self.patch(config.Scheduling.Options.AutoSchedule, "AllowUsers", True)
</span><del>- for _ignore_provisioningResource, recordType, recordResource, record in self._allRecords():
</del><ins>+ for (
+ provisioningResource, recordType, recordResource, record
+ ) in self._allRecords():
</ins><span class="cx"> if record.enabledForCalendaring:
</span><del>- if recordType in ("locations", "resources") or record.uid == "cdaboo":
</del><ins>+ if (
+ recordType in ("locations", "resources") or
+ record.uid == "cdaboo"
+ ):
</ins><span class="cx"> self.assertTrue(recordResource.canAutoSchedule())
</span><span class="cx"> else:
</span><span class="cx"> self.assertFalse(recordResource.canAutoSchedule())
</span><span class="cx">
</span><span class="cx"> # Set config to disallow all
</span><span class="cx"> self.patch(config.Scheduling.Options.AutoSchedule, "Enabled", False)
</span><del>- for _ignore_provisioningResource, recordType, recordResource, record in self._allRecords():
</del><ins>+ for (
+ provisioningResource, recordType, recordResource, record
+ ) in self._allRecords():
</ins><span class="cx"> if record.enabledForCalendaring:
</span><span class="cx"> self.assertFalse(recordResource.canAutoSchedule())
</span><span class="cx">
</span><span class="lines">@@ -608,19 +806,30 @@
</span><span class="cx"> DirectoryPrincipalResource.canAutoSchedule(organizer)
</span><span class="cx"> """
</span><span class="cx">
</span><del>- # Location "apollo" has an auto-accept group ("both_coasts") set in augments.xml,
- # therefore any organizer in that group should be able to auto schedule
</del><ins>+ # Location "apollo" has an auto-accept group ("both_coasts") set in
+ # augments.xml, therefore any organizer in that group should be able to
+ # auto schedule
</ins><span class="cx">
</span><del>- for _ignore_provisioningResource, _ignore_recordType, recordResource, record in self._allRecords():
</del><ins>+ for (
+ provisioningResource, recordType, recordResource, record
+ ) in self._allRecords():
</ins><span class="cx"> if record.uid == "apollo":
</span><span class="cx">
</span><span class="cx"> # No organizer
</span><span class="cx"> self.assertFalse(recordResource.canAutoSchedule())
</span><span class="cx">
</span><span class="cx"> # Organizer in auto-accept group
</span><del>- self.assertTrue(recordResource.canAutoSchedule(organizer="mailto:wsanchez@example.com"))
</del><ins>+ self.assertTrue(
+ recordResource.canAutoSchedule(
+ organizer="mailto:wsanchez@example.com"
+ )
+ )
</ins><span class="cx"> # Organizer not in auto-accept group
</span><del>- self.assertFalse(recordResource.canAutoSchedule(organizer="mailto:a@example.com"))
</del><ins>+ self.assertFalse(
+ recordResource.canAutoSchedule(
+ organizer="mailto:a@example.com"
+ )
+ )
</ins><span class="cx">
</span><span class="cx">
</span><span class="cx"> @inlineCallbacks
</span><span class="lines">@@ -628,9 +837,13 @@
</span><span class="cx"> """
</span><span class="cx"> Default access controls for principals.
</span><span class="cx"> """
</span><del>- for _ignore_provisioningResource, _ignore_recordType, recordResource, record in self._allRecords():
</del><ins>+ for (
+ provisioningResource, recordType, recordResource, record
+ ) in self._allRecords():
</ins><span class="cx"> if record.enabled:
</span><del>- for args in _authReadOnlyPrivileges(self, recordResource, recordResource.principalURL()):
</del><ins>+ for args in _authReadOnlyPrivileges(
+ self, recordResource, recordResource.principalURL()
+ ):
</ins><span class="cx"> yield self._checkPrivileges(*args)
</span><span class="cx">
</span><span class="cx">
</span><span class="lines">@@ -641,16 +854,23 @@
</span><span class="cx"> """
</span><span class="cx"> directory = self.directory
</span><span class="cx"> #print("\n -> %s" % (directory.__class__.__name__,))
</span><del>- provisioningResource = self.principalRootResources[directory.__class__.__name__]
</del><ins>+ provisioningResource = (
+ self.principalRootResources[directory.__class__.__name__]
+ )
</ins><span class="cx">
</span><del>- for args in _authReadOnlyPrivileges(self, provisioningResource, provisioningResource.principalCollectionURL()):
</del><ins>+ for args in _authReadOnlyPrivileges(
+ self, provisioningResource,
+ provisioningResource.principalCollectionURL()
+ ):
</ins><span class="cx"> yield self._checkPrivileges(*args)
</span><span class="cx">
</span><span class="cx"> for recordType in (yield provisioningResource.listChildren()):
</span><span class="cx"> #print(" -> %s" % (recordType,))
</span><span class="cx"> typeResource = provisioningResource.getChild(recordType)
</span><span class="cx">
</span><del>- for args in _authReadOnlyPrivileges(self, typeResource, typeResource.principalCollectionURL()):
</del><ins>+ for args in _authReadOnlyPrivileges(
+ self, typeResource, typeResource.principalCollectionURL()
+ ):
</ins><span class="cx"> yield self._checkPrivileges(*args)
</span><span class="cx">
</span><span class="cx">
</span><span class="lines">@@ -664,23 +884,73 @@
</span><span class="cx"> def qname(self):
</span><span class="cx"> return self.ns, self.name
</span><span class="cx">
</span><del>- provisioningResource = self.principalRootResources['XMLDirectoryService']
</del><ins>+ provisioningResource = (
+ self.principalRootResources['XMLDirectoryService']
+ )
</ins><span class="cx">
</span><span class="cx"> expected = (
</span><del>- ("DAV:", "displayname", "morgen", "fullName", "morgen"),
- ("urn:ietf:params:xml:ns:caldav", "calendar-user-type", "INDIVIDUAL", "recordType", "users"),
- ("urn:ietf:params:xml:ns:caldav", "calendar-user-type", "GROUP", "recordType", "groups"),
- ("urn:ietf:params:xml:ns:caldav", "calendar-user-type", "RESOURCE", "recordType", "resources"),
- ("urn:ietf:params:xml:ns:caldav", "calendar-user-type", "ROOM", "recordType", "locations"),
- ("urn:ietf:params:xml:ns:caldav", "calendar-user-address-set", "/principals/__uids__/AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA/", "guid", "AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA"),
- ("urn:ietf:params:xml:ns:caldav", "calendar-user-address-set", "http://example.com:8008/principals/__uids__/AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA/", "guid", "AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA"),
- ("urn:ietf:params:xml:ns:caldav", "calendar-user-address-set", "urn:uuid:AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA", "guid", "AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA"),
- ("urn:ietf:params:xml:ns:caldav", "calendar-user-address-set", "/principals/users/example/", "recordName", "example"),
- ("urn:ietf:params:xml:ns:caldav", "calendar-user-address-set", "https://example.com:8443/principals/users/example/", "recordName", "example"),
- ("urn:ietf:params:xml:ns:caldav", "calendar-user-address-set", "mailto:example@example.com", "emailAddresses", "example@example.com"),
- ("http://calendarserver.org/ns/", "first-name", "morgen", "firstName", "morgen"),
- ("http://calendarserver.org/ns/", "last-name", "sagen", "lastName", "sagen"),
- ("http://calendarserver.org/ns/", "email-address-set", "example@example.com", "emailAddresses", "example@example.com"),
</del><ins>+ (
+ "DAV:", "displayname",
+ "morgen", "fullName", "morgen"
+ ),
+ (
+ "urn:ietf:params:xml:ns:caldav", "calendar-user-type",
+ "INDIVIDUAL", "recordType", "users"
+ ),
+ (
+ "urn:ietf:params:xml:ns:caldav", "calendar-user-type",
+ "GROUP", "recordType", "groups"
+ ),
+ (
+ "urn:ietf:params:xml:ns:caldav", "calendar-user-type",
+ "RESOURCE", "recordType", "resources"
+ ),
+ (
+ "urn:ietf:params:xml:ns:caldav", "calendar-user-type",
+ "ROOM", "recordType", "locations"
+ ),
+ (
+ "urn:ietf:params:xml:ns:caldav", "calendar-user-address-set",
+ "/principals/__uids__/AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA/",
+ "guid", "AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA"
+ ),
+ (
+ "urn:ietf:params:xml:ns:caldav", "calendar-user-address-set",
+ "http://example.com:8008/principals/__uids__/"
+ "AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA/",
+ "guid", "AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA"
+ ),
+ (
+ "urn:ietf:params:xml:ns:caldav", "calendar-user-address-set",
+ "urn:uuid:AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA",
+ "guid", "AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA"
+ ),
+ (
+ "urn:ietf:params:xml:ns:caldav", "calendar-user-address-set",
+ "/principals/users/example/", "recordName", "example"
+ ),
+ (
+ "urn:ietf:params:xml:ns:caldav", "calendar-user-address-set",
+ "https://example.com:8443/principals/users/example/",
+ "recordName", "example"
+ ),
+ (
+ "urn:ietf:params:xml:ns:caldav", "calendar-user-address-set",
+ "mailto:example@example.com",
+ "emailAddresses", "example@example.com"
+ ),
+ (
+ "http://calendarserver.org/ns/", "first-name",
+ "morgen", "firstName", "morgen"
+ ),
+ (
+ "http://calendarserver.org/ns/", "last-name",
+ "sagen", "lastName", "sagen"
+ ),
+ (
+ "http://calendarserver.org/ns/", "email-address-set",
+ "example@example.com", "emailAddresses", "example@example.com"
+ ),
</ins><span class="cx"> )
</span><span class="cx">
</span><span class="cx"> for ns, property, match, field, converted in expected:
</span><span class="lines">@@ -694,11 +964,10 @@
</span><span class="cx"> def _allRecords(self):
</span><span class="cx"> """
</span><span class="cx"> @return: an iterable of tuples
</span><del>- C{(provisioningResource, recordType, recordResource, record)}, where
- C{provisioningResource} is the root provisioning resource,
- C{recordType} is the record type,
- C{recordResource} is the principal resource and
- C{record} is the directory service record
</del><ins>+ C{(provisioningResource, recordType, recordResource, record)},
+ where C{provisioningResource} is the root provisioning resource,
+ C{recordType} is the record type, C{recordResource} is the
+ principal resource and C{record} is the directory service record
</ins><span class="cx"> for each record in each directory in C{directoryServices}.
</span><span class="cx"> """
</span><span class="cx"> directory = self.directory
</span><span class="lines">@@ -707,7 +976,9 @@
</span><span class="cx"> ]
</span><span class="cx"> for recordType in directory.recordTypes():
</span><span class="cx"> for record in directory.listRecords(recordType):
</span><del>- recordResource = provisioningResource.principalForRecord(record)
</del><ins>+ recordResource = (
+ provisioningResource.principalForRecord(record)
+ )
</ins><span class="cx"> yield provisioningResource, recordType, recordResource, record
</span><span class="cx">
</span><span class="cx">
</span><span class="lines">@@ -715,19 +986,28 @@
</span><span class="cx"> request = SimpleRequest(self.site, "GET", "/")
</span><span class="cx">
</span><span class="cx"> def gotResource(resource):
</span><del>- d = resource.checkPrivileges(request, (privilege,), principal=davxml.Principal(principal))
</del><ins>+ d = resource.checkPrivileges(
+ request, (privilege,), principal=davxml.Principal(principal)
+ )
</ins><span class="cx"> if allowed:
</span><span class="cx"> def onError(f):
</span><span class="cx"> f.trap(AccessDeniedError)
</span><span class="cx"> #print(resource.readDeadProperty(davxml.ACL))
</span><del>- self.fail("%s should have %s privilege on %r" % (principal.sname(), privilege.sname(), resource))
</del><ins>+ self.fail(
+ "%s should have %s privilege on %r"
+ % (principal.sname(), privilege.sname(), resource)
+ )
</ins><span class="cx"> d.addErrback(onError)
</span><span class="cx"> else:
</span><span class="cx"> def expectAccessDenied(f):
</span><span class="cx"> f.trap(AccessDeniedError)
</span><ins>+
</ins><span class="cx"> def onSuccess(_):
</span><span class="cx"> #print(resource.readDeadProperty(davxml.ACL))
</span><del>- self.fail("%s should not have %s privilege on %r" % (principal.sname(), privilege.sname(), resource))
</del><ins>+ self.fail(
+ "%s should not have %s privilege on %r"
+ % (principal.sname(), privilege.sname(), resource)
+ )
</ins><span class="cx"> d.addCallbacks(onSuccess, expectAccessDenied)
</span><span class="cx"> return d
</span><span class="cx">
</span><span class="lines">@@ -739,12 +1019,24 @@
</span><span class="cx">
</span><span class="cx"> def _authReadOnlyPrivileges(self, resource, url):
</span><span class="cx"> items = []
</span><del>- for _ignore_provisioningResource, _ignore_recordType, recordResource, record in self._allRecords():
</del><ins>+ for (
+ provisioningResource, recordType, recordResource, record
+ ) in self._allRecords():
</ins><span class="cx"> if record.enabled:
</span><del>- items.append((davxml.HRef().fromString(recordResource.principalURL()), davxml.Read() , True))
- items.append((davxml.HRef().fromString(recordResource.principalURL()), davxml.Write() , False))
- items.append((davxml.Unauthenticated() , davxml.Read() , False))
- items.append((davxml.Unauthenticated() , davxml.Write() , False))
</del><ins>+ items.append((
+ davxml.HRef().fromString(recordResource.principalURL()),
+ davxml.Read(), True
+ ))
+ items.append((
+ davxml.HRef().fromString(recordResource.principalURL()),
+ davxml.Write(), False
+ ))
+ items.append((
+ davxml.Unauthenticated(), davxml.Read(), False
+ ))
+ items.append((
+ davxml.Unauthenticated(), davxml.Write(), False
+ ))
</ins><span class="cx">
</span><span class="cx"> for principal, privilege, allowed in items:
</span><span class="cx"> yield resource, url, principal, privilege, allowed
</span></span></pre>
</div>
</div>
</body>
</html>