[CalendarServer-changes] [4063] CalendarServer/branches/users/sagen/resource-delegates-4038
source_changes at macosforge.org
source_changes at macosforge.org
Thu Apr 23 06:46:00 PDT 2009
Revision: 4063
http://trac.macosforge.org/projects/calendarserver/changeset/4063
Author: sagen at apple.com
Date: 2009-04-23 06:45:58 -0700 (Thu, 23 Apr 2009)
Log Message:
-----------
Unit tests pass, CalDAVTester not so much
Modified Paths:
--------------
CalendarServer/branches/users/sagen/resource-delegates-4038/bin/caldav_utility.py
CalendarServer/branches/users/sagen/resource-delegates-4038/conf/auth/accounts-test.xml
CalendarServer/branches/users/sagen/resource-delegates-4038/conf/auth/accounts.dtd
CalendarServer/branches/users/sagen/resource-delegates-4038/conf/auth/accounts.xml
CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/appleopendirectory.py
CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/cachingappleopendirectory.py
CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/cachingdirectory.py
CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/cachingxmlfile.py
CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/calendaruserproxy.py
CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/directory.py
CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/idirectory.py
CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/principal.py
CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/sqldb.py
CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/test/accounts.xml
CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/test/test_cachedirectory.py
CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/test/test_opendirectory.py
CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/test/test_opendirectoryrecords.py
CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/test/test_principal.py
CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/test/test_proxyprincipalmembers.py
CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/test/test_xmlfile.py
CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/xmlaccountsparser.py
CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/xmlfile.py
CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/memcachepool.py
CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/resource.py
CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/test/test_memcachepool.py
Modified: CalendarServer/branches/users/sagen/resource-delegates-4038/bin/caldav_utility.py
===================================================================
--- CalendarServer/branches/users/sagen/resource-delegates-4038/bin/caldav_utility.py 2009-04-22 19:27:33 UTC (rev 4062)
+++ CalendarServer/branches/users/sagen/resource-delegates-4038/bin/caldav_utility.py 2009-04-23 13:45:58 UTC (rev 4063)
@@ -78,6 +78,8 @@
print " --add-read-delegate <prinicpal-path>: add argument as a read-only delegate to the current resource"
print " --add-write-delegate <prinicpal-path>: add argument as a read-write delegate to the current resource"
print " --remove-delegate <prinicpal-path>: strip argument of delegate status for the current resource"
+ print " --set-auto-schedule [true|false] : determines whether the current resource auto-accepts invitations"
+ print " --get-auto-schedule : returns the current resource's auto-schedule state"
if e:
sys.exit(64)
@@ -203,6 +205,7 @@
print "Auto-Schedule: %s" % ("True" if result else "False",)
+ # reactor.callLater(0, reactor.stop)
reactor.stop()
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Modified: CalendarServer/branches/users/sagen/resource-delegates-4038/conf/auth/accounts-test.xml
===================================================================
--- CalendarServer/branches/users/sagen/resource-delegates-4038/conf/auth/accounts-test.xml 2009-04-22 19:27:33 UTC (rev 4062)
+++ CalendarServer/branches/users/sagen/resource-delegates-4038/conf/auth/accounts-test.xml 2009-04-23 13:45:58 UTC (rev 4063)
@@ -60,20 +60,12 @@
<guid>location%02d</guid>
<password>location%02d</password>
<name>Room %02d</name>
- <auto-schedule/>
</location>
<resource repeat="10">
<uid>resource%02d</uid>
<guid>resource%02d</guid>
<password>resource%02d</password>
<name>Resource %02d</name>
- <auto-schedule/>
- <proxies>
- <member type="users">user01</member>
- </proxies>
- <read-only-proxies>
- <member type="users">user03</member>
- </read-only-proxies>
</resource>
<group>
<uid>group01</uid>
Modified: CalendarServer/branches/users/sagen/resource-delegates-4038/conf/auth/accounts.dtd
===================================================================
--- CalendarServer/branches/users/sagen/resource-delegates-4038/conf/auth/accounts.dtd 2009-04-22 19:27:33 UTC (rev 4062)
+++ CalendarServer/branches/users/sagen/resource-delegates-4038/conf/auth/accounts.dtd 2009-04-23 13:45:58 UTC (rev 4063)
@@ -23,10 +23,10 @@
<!ELEMENT group (uid+, guid, password, name, members, cuaddr*, disable-calendar?)>
<!ATTLIST group repeat CDATA "1">
- <!ELEMENT resource (uid+, guid, password, name, cuaddr*, auto-schedule?, proxies?, read-only-proxies?)>
+ <!ELEMENT resource (uid+, guid, password, name, cuaddr*)>
<!ATTLIST resource repeat CDATA "1">
- <!ELEMENT location (uid+, guid, password, name, cuaddr*, auto-schedule?, proxies?, read-only-proxies?)>
+ <!ELEMENT location (uid+, guid, password, name, cuaddr*)>
<!ATTLIST location repeat CDATA "1">
<!ELEMENT member (#PCDATA)>
@@ -38,8 +38,5 @@
<!ELEMENT name (#PCDATA)>
<!ELEMENT cuaddr (#PCDATA)>
<!ELEMENT members (member*)>
- <!ELEMENT auto-schedule EMPTY>
<!ELEMENT disable-calendar EMPTY>
- <!ELEMENT proxies (member*)>
- <!ELEMENT read-only-proxies (member*)>
>
Modified: CalendarServer/branches/users/sagen/resource-delegates-4038/conf/auth/accounts.xml
===================================================================
--- CalendarServer/branches/users/sagen/resource-delegates-4038/conf/auth/accounts.xml 2009-04-22 19:27:33 UTC (rev 4062)
+++ CalendarServer/branches/users/sagen/resource-delegates-4038/conf/auth/accounts.xml 2009-04-23 13:45:58 UTC (rev 4063)
@@ -42,10 +42,6 @@
<uid>mercury</uid>
<password>mercury</password>
<name>Mecury Conference Room, Building 1, 2nd Floor</name>
- <auto-schedule/>
- <proxies>
- <member type="users">test</member>
- </proxies>
</location>
</accounts>
Modified: CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/appleopendirectory.py
===================================================================
--- CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/appleopendirectory.py 2009-04-22 19:27:33 UTC (rev 4062)
+++ CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/appleopendirectory.py 2009-04-23 13:45:58 UTC (rev 4063)
@@ -619,22 +619,6 @@
else:
memberGUIDs = ()
- # Special case for resources and locations
- autoSchedule = False
- proxyGUIDs = ()
- readOnlyProxyGUIDs = ()
- if recordType in (self.recordType_resources, self.recordType_locations):
- resourceInfo = value.get(dsattributes.kDSNAttrResourceInfo)
- if resourceInfo is not None:
- try:
- autoSchedule, proxy, read_only_proxy = self._parseResourceInfo(resourceInfo, recordGUID, recordType, recordShortName)
- except ValueError:
- continue
- if proxy:
- proxyGUIDs = (proxy,)
- if read_only_proxy:
- readOnlyProxyGUIDs = (read_only_proxy,)
-
record = OpenDirectoryRecord(
service = self,
recordType = recordType,
@@ -647,11 +631,8 @@
lastName = recordLastName,
emailAddresses = recordEmailAddresses,
calendarUserAddresses = calendarUserAddresses,
- autoSchedule = autoSchedule,
enabledForCalendaring = enabledForCalendaring,
memberGUIDs = memberGUIDs,
- proxyGUIDs = proxyGUIDs,
- readOnlyProxyGUIDs = readOnlyProxyGUIDs,
)
def disableGUID(guid, record):
@@ -709,11 +690,6 @@
if recordType == self.recordType_groups:
self._indexGroup(record, record._memberGUIDs, groupsForGUID)
- # Do proxy indexing if needed
- elif recordType in (self.recordType_resources, self.recordType_locations):
- self._indexGroup(record, record._proxyGUIDs, proxiesForGUID)
- self._indexGroup(record, record._readOnlyProxyGUIDs, readOnlyProxiesForGUID)
-
# Index non-duplicate shortNames
def disableName(shortName, record):
self.log_warn("Short name %s disabled due to conflict for record: %s"
@@ -957,8 +933,8 @@
def __init__(
self, service, recordType, guid, nodeName, shortNames, authIDs, fullName,
firstName, lastName, emailAddresses,
- calendarUserAddresses, autoSchedule, enabledForCalendaring,
- memberGUIDs, proxyGUIDs, readOnlyProxyGUIDs,
+ calendarUserAddresses, enabledForCalendaring,
+ memberGUIDs,
):
super(OpenDirectoryRecord, self).__init__(
service = service,
@@ -971,13 +947,10 @@
lastName = lastName,
emailAddresses = emailAddresses,
calendarUserAddresses = calendarUserAddresses,
- autoSchedule = autoSchedule,
enabledForCalendaring = enabledForCalendaring,
)
self.nodeName = nodeName
self._memberGUIDs = tuple(memberGUIDs)
- self._proxyGUIDs = tuple(proxyGUIDs)
- self._readOnlyProxyGUIDs = tuple(readOnlyProxyGUIDs)
def __repr__(self):
if self.service.realmName == self.nodeName:
@@ -1007,48 +980,6 @@
def groups(self):
return self.service.groupsForGUID(self.guid)
- def proxies(self):
- if self.recordType not in (self.service.recordType_resources, self.service.recordType_locations):
- return
-
- for guid in self._proxyGUIDs:
- proxyRecord = self.service.recordWithGUID(guid)
- if proxyRecord is None:
- self.log_error("No record for proxy in (%s)%s with GUID %s" % (
- self.recordType,
- self.shortNames[0],
- guid,
- ))
- else:
- yield proxyRecord
-
- def proxyFor(self):
- result = set()
- result.update(self.service.proxiesForGUID(self.service.recordType_resources, self.guid))
- result.update(self.service.proxiesForGUID(self.service.recordType_locations, self.guid))
- return result
-
- def readOnlyProxies(self):
- if self.recordType not in (self.service.recordType_resources, self.service.recordType_locations):
- return
-
- for guid in self._readOnlyProxyGUIDs:
- proxyRecord = self.service.recordWithGUID(guid)
- if proxyRecord is None:
- self.log_error("No record for proxy in (%s)%s with GUID %s" % (
- self.recordType,
- self.shortNames[0],
- guid,
- ))
- else:
- yield proxyRecord
-
- def readOnlyProxyFor(self):
- result = set()
- result.update(self.service.readOnlyProxiesForGUID(self.service.recordType_resources, self.guid))
- result.update(self.service.readOnlyProxiesForGUID(self.service.recordType_locations, self.guid))
- return result
-
def verifyCredentials(self, credentials):
if isinstance(credentials, UsernamePassword):
# Check cached password
Modified: CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/cachingappleopendirectory.py
===================================================================
--- CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/cachingappleopendirectory.py 2009-04-22 19:27:33 UTC (rev 4062)
+++ CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/cachingappleopendirectory.py 2009-04-23 13:45:58 UTC (rev 4063)
@@ -659,28 +659,6 @@
else:
memberGUIDs = ()
- # MOR:
- # autoSchedule = False
-
- proxyGUIDs = ()
- readOnlyProxyGUIDs = ()
-
- # MOR:
- # Special case for resources and locations
- """
- if recordType in (self.recordType_resources, self.recordType_locations):
- resourceInfo = value.get(dsattributes.kDSNAttrResourceInfo)
- if resourceInfo is not None:
- try:
- autoSchedule, proxy, read_only_proxy = self._parseResourceInfo(resourceInfo, recordGUID, recordType, recordShortName)
- except ValueError:
- continue
- if proxy:
- proxyGUIDs = (proxy,)
- if read_only_proxy:
- readOnlyProxyGUIDs = (read_only_proxy,)
- """
-
record = OpenDirectoryRecord(
service = self,
recordType = recordType,
@@ -693,12 +671,8 @@
lastName = recordLastName,
emailAddresses = recordEmailAddresses,
calendarUserAddresses = calendarUserAddresses,
- # MOR:
- # autoSchedule = autoSchedule,
enabledForCalendaring = enabledForCalendaring,
memberGUIDs = memberGUIDs,
- proxyGUIDs = proxyGUIDs,
- readOnlyProxyGUIDs = readOnlyProxyGUIDs,
)
self.recordCacheForType(recordType).addRecord(record)
@@ -711,10 +685,8 @@
self, service, recordType, guid, nodeName, shortNames, authIDs,
fullName, firstName, lastName, emailAddresses,
calendarUserAddresses,
- # MOR:
- # autoSchedule,
enabledForCalendaring,
- memberGUIDs, proxyGUIDs, readOnlyProxyGUIDs,
+ memberGUIDs,
):
super(OpenDirectoryRecord, self).__init__(
service = service,
@@ -727,14 +699,10 @@
lastName = lastName,
emailAddresses = emailAddresses,
calendarUserAddresses = calendarUserAddresses,
- # MOR:
- # autoSchedule = autoSchedule,
enabledForCalendaring = enabledForCalendaring,
)
self.nodeName = nodeName
self._memberGUIDs = tuple(memberGUIDs)
- self._proxyGUIDs = tuple(proxyGUIDs)
- self._readOnlyProxyGUIDs = tuple(readOnlyProxyGUIDs)
self._groupMembershipGUIDs = None
@@ -772,48 +740,6 @@
if record:
yield record
- def proxies(self):
- if self.recordType not in (self.service.recordType_resources, self.service.recordType_locations):
- return
-
- for guid in self._proxyGUIDs:
- proxyRecord = self.service.recordWithGUID(guid)
- if proxyRecord is None:
- self.log_error("No record for proxy in (%s)%s with GUID %s" % (
- self.recordType,
- self.shortNames[0],
- guid,
- ))
- else:
- yield proxyRecord
-
- def proxyFor(self):
- result = set()
- result.update(self.service.proxiesForGUID(self.service.recordType_resources, self.guid))
- result.update(self.service.proxiesForGUID(self.service.recordType_locations, self.guid))
- return result
-
- def readOnlyProxies(self):
- if self.recordType not in (self.service.recordType_resources, self.service.recordType_locations):
- return
-
- for guid in self._readOnlyProxyGUIDs:
- proxyRecord = self.service.recordWithGUID(guid)
- if proxyRecord is None:
- self.log_error("No record for proxy in (%s)%s with GUID %s" % (
- self.recordType,
- self.shortNames[0],
- guid,
- ))
- else:
- yield proxyRecord
-
- def readOnlyProxyFor(self):
- result = set()
- result.update(self.service.readOnlyProxiesForGUID(self.service.recordType_resources, self.guid))
- result.update(self.service.readOnlyProxiesForGUID(self.service.recordType_locations, self.guid))
- return result
-
def verifyCredentials(self, credentials):
if isinstance(credentials, UsernamePassword):
# Check cached password
Modified: CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/cachingdirectory.py
===================================================================
--- CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/cachingdirectory.py 2009-04-22 19:27:33 UTC (rev 4062)
+++ CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/cachingdirectory.py 2009-04-23 13:45:58 UTC (rev 4063)
@@ -320,8 +320,6 @@
self, service, recordType, guid, shortNames=(), authIDs=set(),
fullName=None, firstName=None, lastName=None, emailAddresses=set(),
calendarUserAddresses=set(),
- # MOR:
- # autoSchedule=False,
enabledForCalendaring=None, uid=None,
):
super(CachingDirectoryRecord, self).__init__(
@@ -335,8 +333,6 @@
lastName = lastName,
emailAddresses = emailAddresses,
calendarUserAddresses = calendarUserAddresses,
- # MOR:
- # autoSchedule = autoSchedule,
enabledForCalendaring = enabledForCalendaring,
uid = uid,
)
Modified: CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/cachingxmlfile.py
===================================================================
--- CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/cachingxmlfile.py 2009-04-22 19:27:33 UTC (rev 4062)
+++ CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/cachingxmlfile.py 2009-04-23 13:45:58 UTC (rev 4063)
@@ -183,17 +183,12 @@
lastName = xmlPrincipal.lastName,
emailAddresses = xmlPrincipal.emailAddresses,
calendarUserAddresses = xmlPrincipal.calendarUserAddresses,
- autoSchedule = xmlPrincipal.autoSchedule,
enabledForCalendaring = xmlPrincipal.enabledForCalendaring,
)
self.password = xmlPrincipal.password
self._members = xmlPrincipal.members
self._groups = xmlPrincipal.groups
- self._proxies = xmlPrincipal.proxies
- self._proxyFor = xmlPrincipal.proxyFor
- self._readOnlyProxies = xmlPrincipal.readOnlyProxies
- self._readOnlyProxyFor = xmlPrincipal.readOnlyProxyFor
def members(self):
for recordType, shortName in self._members:
@@ -203,22 +198,6 @@
for shortName in self._groups:
yield self.service.recordWithShortName(DirectoryService.recordType_groups, shortName)
- def proxies(self):
- for recordType, shortName in self._proxies:
- yield self.service.recordWithShortName(recordType, shortName)
-
- def proxyFor(self, read_write=True):
- for recordType, shortName in self._proxyFor:
- yield self.service.recordWithShortName(recordType, shortName)
-
- def readOnlyProxies(self):
- for recordType, shortName in self._readOnlyProxies:
- yield self.service.recordWithShortName(recordType, shortName)
-
- def readOnlyProxyFor(self, read_write=True):
- for recordType, shortName in self._readOnlyProxyFor:
- yield self.service.recordWithShortName(recordType, shortName)
-
def verifyCredentials(self, credentials):
if isinstance(credentials, UsernamePassword):
return credentials.password == self.password
Modified: CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/calendaruserproxy.py
===================================================================
--- CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/calendaruserproxy.py 2009-04-22 19:27:33 UTC (rev 4062)
+++ CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/calendaruserproxy.py 2009-04-23 13:45:58 UTC (rev 4063)
@@ -161,15 +161,7 @@
assert isinstance(property, davxml.WebDAVElement)
if property.qname() == (dav_namespace, "group-member-set"):
- if self.hasEditableMembership():
- return self.setGroupMemberSet(property, request)
- else:
- raise HTTPError(
- StatusResponse(
- responsecode.FORBIDDEN,
- "Proxies cannot be changed."
- )
- )
+ return self.setGroupMemberSet(property, request)
return super(CalendarUserProxyPrincipalResource, self).writeProperty(property, request)
@@ -269,8 +261,7 @@
"""Principal UID: %s\n""" % (self.principalUID(),),
"""Principal URL: %s\n""" % (format_link(self.principalURL()),),
"""\nAlternate URIs:\n""" , format_list(format_link(u) for u in self.alternateURIs()),
- """\nGroup members (%s):\n""" % ({False:"Locked", True:"Editable"}[self.hasEditableMembership()])
- , format_principals(closure["members"]),
+ """\nGroup members:\n""" , format_principals(closure["members"]),
"""\nGroup memberships:\n""" , format_principals(closure["memberships"]),
"""</pre></blockquote></div>""",
closure["output"]
@@ -321,7 +312,8 @@
for member in members:
if member.principalUID() not in uids:
relatives.add(member)
- yield self._expandMemberUIDs(member.principalUID(), relatives, uids, infinity=infinity)
+ if infinity:
+ yield self._expandMemberUIDs(member.principalUID(), relatives, uids, infinity=infinity)
elif isinstance(principal, DirectoryPrincipalResource):
if infinity:
members = yield principal.expandedGroupMembers()
@@ -333,35 +325,28 @@
@inlineCallbacks
def _directGroupMembers(self):
- if self.hasEditableMembership():
- # Get member UIDs from database and map to principal resources
- members = yield self._index().getMembers(self.uid)
- found = []
- missing = []
- for uid in members:
- p = self.pcollection.principalForUID(uid)
- if p:
- found.append(p)
- # Make sure any outstanding deletion timer entries for
- # existing principals are removed
- yield self._index()._memcacher.clearDeletionTimer(uid)
- else:
- missing.append(uid)
+ # Get member UIDs from database and map to principal resources
+ members = yield self._index().getMembers(self.uid)
+ found = []
+ missing = []
+ for uid in members:
+ p = self.pcollection.principalForUID(uid)
+ if p:
+ found.append(p)
+ # Make sure any outstanding deletion timer entries for
+ # existing principals are removed
+ yield self._index()._memcacher.clearDeletionTimer(uid)
+ else:
+ missing.append(uid)
- # Clean-up ones that are missing
- for uid in missing:
- cacheTimeout = config.DirectoryService.params.get("cacheTimeout", 30) * 60 # in seconds
+ # Clean-up ones that are missing
+ for uid in missing:
+ cacheTimeout = config.DirectoryService.params.get("cacheTimeout", 30) * 60 # in seconds
- yield self._index().removePrincipal(uid,
- delay=cacheTimeout*2)
+ yield self._index().removePrincipal(uid,
+ delay=cacheTimeout*2)
- returnValue(found)
- else:
- # Fixed proxies
- if self.proxyType == "calendar-proxy-write":
- returnValue(self.parent.proxies())
- else:
- returnValue(self.parent.readOnlyProxies())
+ returnValue(found)
def groupMembers(self):
return self._expandMemberUIDs()
@@ -375,9 +360,6 @@
memberships = yield self._index().getMemberships(self.uid)
returnValue([p for p in [self.pcollection.principalForUID(uid) for uid in memberships] if p])
- def hasEditableMembership(self):
- return self.parent.hasEditableProxyMembership()
-
class CalendarUserProxyDatabase(AbstractSQLDatabase, LoggingMixIn):
"""
A database to maintain calendar user proxy group memberships.
Modified: CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/directory.py
===================================================================
--- CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/directory.py 2009-04-22 19:27:33 UTC (rev 4062)
+++ CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/directory.py 2009-04-23 13:45:58 UTC (rev 4063)
@@ -270,8 +270,6 @@
self, service, recordType, guid, shortNames=(), authIDs=set(), fullName=None,
firstName=None, lastName=None, emailAddresses=set(),
calendarUserAddresses=set(),
- # MOR:
- # autoSchedule=False,
enabledForCalendaring=None,
uid=None,
):
@@ -312,8 +310,6 @@
self.emailAddresses = emailAddresses
self.enabledForCalendaring = enabledForCalendaring
self.calendarUserAddresses = calendarUserAddresses
- # MOR:
- # self.autoSchedule = autoSchedule
def __cmp__(self, other):
if not isinstance(other, DirectoryRecord):
@@ -339,22 +335,8 @@
def groups(self):
return ()
- def proxies(self):
- return ()
-
- def proxyFor(self):
- return ()
-
- def readOnlyProxies(self):
- return ()
-
- def readOnlyProxyFor(self):
- return ()
-
def hasEditableProxyMembership(self):
return True
- # MOR:
- # return self.recordType in (DirectoryService.recordType_users, DirectoryService.recordType_groups)
def verifyCredentials(self, credentials):
return False
Modified: CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/idirectory.py
===================================================================
--- CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/idirectory.py 2009-04-22 19:27:33 UTC (rev 4062)
+++ CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/idirectory.py 2009-04-23 13:45:58 UTC (rev 4063)
@@ -101,8 +101,6 @@
lastName = Attribute("The last name of this record.")
emailAddress = Attribute("The email address of this record.")
calendarUserAddresses = Attribute("A set of calendar user addresses for this record.")
- # MOR:
- # autoSchedule = Attribute("Principal identified by this record should automatically accept/deny meetings.")
enabledForCalendaring = Attribute("Determines whether this record should be provisioned with a calendar home.")
def members():
Modified: CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/principal.py
===================================================================
--- CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/principal.py 2009-04-22 19:27:33 UTC (rev 4062)
+++ CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/principal.py 2009-04-23 13:45:58 UTC (rev 4063)
@@ -583,10 +583,6 @@
memberships = (yield self.groupMemberships())
- proxyFor = (yield self.proxyFor(True))
-
- readOnlyProxyFor = (yield self.proxyFor(False))
-
returnValue("".join((
"""<div class="directory-listing">"""
"""<h1>Principal Details</h1>"""
@@ -611,8 +607,6 @@
"""\nAlternate URIs:\n""" , format_list(format_link(u) for u in self.alternateURIs()),
"""\nGroup members:\n""" , format_principals(members),
"""\nGroup memberships:\n""" , format_principals(memberships),
- """\nRead-write Proxy For:\n""" , format_principals(proxyFor),
- """\nRead-only Proxy For:\n""" , format_principals(readOnlyProxyFor),
"""%s</pre></blockquote></div>""" % extras,
output
)))
@@ -662,6 +656,38 @@
def url(self):
return self.principalURL()
+ @inlineCallbacks
+ def proxyFor(self, read_write, resolve_memberships=True):
+ proxyFors = set()
+ print "IN PROXYFOR", self, read_write
+
+ if resolve_memberships:
+ memberships = self._getRelatives("groups", infinity=True)
+ for membership in memberships:
+ print "MEMBERSHIP:", membership
+ results = (yield membership.proxyFor(read_write, False))
+ print "RESULTS", results
+ proxyFors.update(results)
+
+ if config.EnableProxyPrincipals:
+ # Get proxy group UIDs and map to principal resources
+ proxies = []
+ memberships = (yield self._calendar_user_proxy_index().getMemberships(self.principalUID()))
+ print "FROM INDEX", memberships
+ for uid in memberships:
+ subprincipal = self.parent.principalForUID(uid)
+ if subprincipal:
+ print "SUBPRINCIPAL", subprincipal
+ if subprincipal.isProxyType(read_write):
+ print "IS PROXY TYPE", read_write
+ proxies.append(subprincipal.parent)
+ else:
+ yield self._calendar_user_proxy_index().removeGroup(uid)
+
+ proxyFors.update(proxies)
+
+ returnValue(proxyFors)
+
def _getRelatives(self, method, record=None, relatives=None, records=None, proxy=None, infinity=False):
if record is None:
record = self.record
@@ -703,8 +729,9 @@
if config.EnableProxyPrincipals:
# Get any directory specified proxies
- groups.update(self._getRelatives("proxyFor", proxy='read-write', infinity=infinity))
- groups.update(self._getRelatives("readOnlyProxyFor", proxy='read-only', infinity=infinity))
+ # MOR:
+ # groups.update(self._getRelatives("proxyFor", proxy='read-write', infinity=infinity))
+ # groups.update(self._getRelatives("readOnlyProxyFor", proxy='read-only', infinity=infinity))
# Get proxy group UIDs and map to principal resources
proxies = []
@@ -723,40 +750,6 @@
def expandedGroupMemberships(self):
return self.groupMemberships(infinity=True)
-
- @inlineCallbacks
- def proxyFor(self, read_write, resolve_memberships=True):
- proxyFors = set()
-
- if resolve_memberships:
- memberships = self._getRelatives("groups", infinity=True)
- for membership in memberships:
- results = (yield membership.proxyFor(read_write, False))
- proxyFors.update(results)
-
- if config.EnableProxyPrincipals:
- # Get any directory specified proxies
- if read_write:
- directoryProxies = self._getRelatives("proxyFor", proxy='read-write', infinity=True)
- else:
- directoryProxies = self._getRelatives("readOnlyProxyFor", proxy='read-only', infinity=True)
- proxyFors.update([subprincipal.parent for subprincipal in directoryProxies])
-
- # Get proxy group UIDs and map to principal resources
- proxies = []
- memberships = (yield self._calendar_user_proxy_index().getMemberships(self.principalUID()))
- for uid in memberships:
- subprincipal = self.parent.principalForUID(uid)
- if subprincipal:
- if subprincipal.isProxyType(read_write):
- proxies.append(subprincipal.parent)
- else:
- yield self._calendar_user_proxy_index().removeGroup(uid)
-
- proxyFors.update(proxies)
-
- returnValue(proxyFors)
-
def principalCollections(self):
return self.parent.principalCollections()
@@ -837,10 +830,6 @@
return addresses
- # MOR:
- # def autoSchedule(self):
- # return self.record.autoSchedule
-
def enabledAsOrganizer(self):
if self.record.recordType == DirectoryService.recordType_users:
return True
@@ -853,15 +842,6 @@
else:
return False
- def proxies(self):
- return self._getRelatives("proxies", infinity=True)
-
- def readOnlyProxies(self):
- return self._getRelatives("readOnlyProxies", infinity=True)
-
- def hasEditableProxyMembership(self):
- return self.record.hasEditableProxyMembership()
-
def scheduleInbox(self, request):
home = self.calendarHome()
if home is None:
@@ -908,6 +888,7 @@
else:
return None
+
##
# Static
##
Modified: CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/sqldb.py
===================================================================
--- CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/sqldb.py 2009-04-22 19:27:33 UTC (rev 4062)
+++ CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/sqldb.py 2009-04-23 13:45:58 UTC (rev 4063)
@@ -101,10 +101,7 @@
# Get calendar user addresses
calendarUserAddresses = self.calendarUserAddresses(shortName)
- # TODO: need this for Resources and Locations
- autoSchedule = False
-
- yield shortName, guid, password, name, members, groups, calendarUserAddresses, autoSchedule
+ yield shortName, guid, password, name, members, groups, calendarUserAddresses
def getRecord(self, recordType, shortName):
# Get individual account record
@@ -129,11 +126,8 @@
# Get calendar user addresses
calendarUserAddresses = self.calendarUserAddresses(shortName)
- # TODO: need this for Resources and Locations
- autoSchedule = False
+ return shortName, guid, password, name, members, groups, calendarUserAddresses
- return shortName, guid, password, name, members, groups, calendarUserAddresses, autoSchedule
-
def members(self, shortName):
members = set()
for member in self._db_execute(
@@ -318,7 +312,6 @@
members = result[4],
groups = result[5],
calendarUserAddresses = result[6],
- autoSchedule = result[7],
)
def recordWithShortName(self, recordType, shortName):
@@ -334,7 +327,6 @@
members = result[4],
groups = result[5],
calendarUserAddresses = result[6],
- autoSchedule = result[7],
)
return None
@@ -343,7 +335,7 @@
"""
XML based implementation implementation of L{IDirectoryRecord}.
"""
- def __init__(self, service, recordType, shortName, guid, password, name, members, groups, calendarUserAddresses, autoSchedule):
+ def __init__(self, service, recordType, shortName, guid, password, name, members, groups, calendarUserAddresses):
super(SQLDirectoryRecord, self).__init__(
service = service,
recordType = recordType,
@@ -351,7 +343,6 @@
shortNames = (shortName,),
fullName = name,
calendarUserAddresses = calendarUserAddresses,
- autoSchedule = autoSchedule,
)
self.password = password
Modified: CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/test/accounts.xml
===================================================================
--- CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/test/accounts.xml 2009-04-22 19:27:33 UTC (rev 4062)
+++ CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/test/accounts.xml 2009-04-23 13:45:58 UTC (rev 4063)
@@ -158,9 +158,6 @@
<name>Mecury Seven</name>
<email-address>mercury at example.com</email-address>
<cuaddr>mailto:mercury at example.com</cuaddr>
- <proxies>
- <member type="groups">left_coast</member>
- </proxies>
</location>
<location>
<uid>gemini</uid>
@@ -168,10 +165,6 @@
<name>Gemini Twelve</name>
<email-address>gemini at example.com</email-address>
<cuaddr>mailto:gemini at example.com</cuaddr>
- <auto-schedule/>
- <proxies>
- <member>wsanchez</member>
- </proxies>
</location>
<location>
<uid>apollo</uid>
@@ -179,9 +172,6 @@
<name>Apollo Eleven</name>
<email-address>apollo at example.com</email-address>
<cuaddr>mailto:apollo at example.com</cuaddr>
- <proxies>
- <member type="groups">both_coasts</member>
- </proxies>
</location>
<location>
<uid>orion</uid>
@@ -189,9 +179,6 @@
<name>Orion</name>
<email-address>orion at example.com</email-address>
<cuaddr>mailto:orion at example.com</cuaddr>
- <proxies>
- <member type="groups">recursive1_coasts</member>
- </proxies>
</location>
<resource>
<uid>transporter</uid>
@@ -214,11 +201,5 @@
<name>Non-calendar proxy</name>
<email-address>non_calendar_proxy at example.com</email-address>
<cuaddr>mailto:non_calendar_proxy at example.com</cuaddr>
- <proxies>
- <member type="groups">non_calendar_group</member>
- </proxies>
- <read-only-proxies>
- <member type="groups">recursive2_coasts</member>
- </read-only-proxies>
</resource>
</accounts>
Modified: CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/test/test_cachedirectory.py
===================================================================
--- CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/test/test_cachedirectory.py 2009-04-22 19:27:33 UTC (rev 4062)
+++ CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/test/test_cachedirectory.py 2009-04-23 13:45:58 UTC (rev 4063)
@@ -61,7 +61,6 @@
lastName = "",
emailAddresses = record.get("email"),
calendarUserAddresses = record.get("email"),
- autoSchedule = False,
enabledForCalendaring = True,
)
self.recordCacheForType(recordType).addRecord(cacheRecord)
Modified: CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/test/test_opendirectory.py
===================================================================
--- CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/test/test_opendirectory.py 2009-04-22 19:27:33 UTC (rev 4062)
+++ CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/test/test_opendirectory.py 2009-04-23 13:45:58 UTC (rev 4063)
@@ -72,11 +72,8 @@
lastName = "User",
emailAddresses = set(("someuser at example.com",)),
calendarUserAddresses = set(("mailtoguid at example.com",)),
- autoSchedule = False,
enabledForCalendaring = True,
memberGUIDs = [],
- proxyGUIDs = (),
- readOnlyProxyGUIDs = (),
)
digestFields = {}
Modified: CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/test/test_opendirectoryrecords.py
===================================================================
--- CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/test/test_opendirectoryrecords.py 2009-04-22 19:27:33 UTC (rev 4062)
+++ CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/test/test_opendirectoryrecords.py 2009-04-23 13:45:58 UTC (rev 4063)
@@ -692,58 +692,8 @@
self.verifyQuery(self.service.recordWithEmailAddress, "location05 at example.com")
self.verifyNoQuery(self.service.recordWithEmailAddress, "location05 at example.com")
- def test_resourceinfo(self):
- good_plist = """<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>com.apple.WhitePagesFramework</key>
- <dict>
- <key>AutoAcceptsInvitation</key>
- <true/>
- <key>Label</key>
- <string>Location</string>
- <key>CalendaringDelegate</key>
- <string></string>
- <key>ReadOnlyCalendaringDelegate</key>
- <string></string>
- </dict>
-</dict>
-</plist>
-"""
- bad_plist = """<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>com.apple.WhitePagesFramework</key>
- <string>bogus</string>
-</dict>
-</plist>
-"""
- invalid_xml = """<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>com.apple.WhitePagesFramework</key>
- <string>R&D</string>
-</dict>
-</plist>
-"""
-
- self.loadRecords({
- DirectoryService.recordType_locations: [
- fakeODRecord("Location 01", resourceInfo=good_plist),
- fakeODRecord("Location 02", resourceInfo=bad_plist),
- fakeODRecord("Location 03", resourceInfo=invalid_xml),
- ],
- })
-
- self.verifyRecords(DirectoryService.recordType_locations, ("location01",))
- self.verifyDisabledRecords(DirectoryService.recordType_locations, (), ())
-
-
def fakeODRecord(fullName, shortName=None, guid=None, email=None, members=None, resourceInfo=None):
if shortName is None:
shortName = shortNameForFullName(fullName)
Modified: CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/test/test_principal.py
===================================================================
--- CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/test/test_principal.py 2009-04-22 19:27:33 UTC (rev 4062)
+++ CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/test/test_principal.py 2009-04-23 13:45:58 UTC (rev 4063)
@@ -204,20 +204,6 @@
self.failIf(provisioningResource.principalForCalendarUserAddress("/principals/users/nocalendar/") is not None)
self.failIf(provisioningResource.principalForCalendarUserAddress("/principals/__uids__/543D28BA-F74F-4D5F-9243-B3E3A61171E5/") is not None)
- def test_autoSchedule(self):
- """
- DirectoryPrincipalProvisioningResource.principalForCalendarUserAddress()
- """
- for provisioningResource, recordType, recordResource, record in self._allRecords():
- principal = provisioningResource.principalForRecord(record)
- self.failIf(principal is None)
- if record.enabledForCalendaring:
- self.assertEquals(record.autoSchedule, principal.autoSchedule())
- if record.shortNames[0] == "gemini":
- self.assertTrue(principal.autoSchedule())
- else:
- self.assertFalse(principal.autoSchedule())
-
def test_enabledForCalendaring(self):
"""
DirectoryPrincipalProvisioningResource.principalForCalendarUserAddress()
@@ -302,24 +288,6 @@
memberships = yield recordResource.groupMemberships()
self.failUnless(set(record.groups()).issubset(set(r.record for r in memberships if hasattr(r, "record"))))
- def test_proxies(self):
- """
- DirectoryPrincipalResource.proxies()
- """
- for provisioningResource, recordType, recordResource, record in self._allRecords():
- if record.enabledForCalendaring:
- self.failUnless(set(record.proxies()).issubset(set(r.record for r in recordResource.proxies())))
- self.assertEqual(record.hasEditableProxyMembership(), recordResource.hasEditableProxyMembership())
-
- def test_read_only_proxies(self):
- """
- DirectoryPrincipalResource.proxies()
- """
- for provisioningResource, recordType, recordResource, record in self._allRecords():
- if record.enabledForCalendaring:
- self.failUnless(set(record.readOnlyProxies()).issubset(set(r.record for r in recordResource.readOnlyProxies())))
- self.assertEqual(record.hasEditableProxyMembership(), recordResource.hasEditableProxyMembership())
-
def test_principalUID(self):
"""
DirectoryPrincipalResource.principalUID()
Modified: CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/test/test_proxyprincipalmembers.py
===================================================================
--- CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/test/test_proxyprincipalmembers.py 2009-04-22 19:27:33 UTC (rev 4062)
+++ CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/test/test_proxyprincipalmembers.py 2009-04-23 13:45:58 UTC (rev 4063)
@@ -48,6 +48,7 @@
self.principalRootResources[directoryService.__class__.__name__] = provisioningResource
+
def _getPrincipalByShortName(self, type, name):
provisioningResource = self.principalRootResources[directoryService.__class__.__name__]
return provisioningResource.principalForShortName(type, name)
@@ -139,60 +140,85 @@
("Wilfredo Sanchez", "Recursive2 Coasts", "Cyrus Daboo",),
)
+ @inlineCallbacks
def test_groupMembersProxySingleUser(self):
"""
DirectoryPrincipalResource.expandedGroupMembers()
"""
- return self._groupMembersTest(
+ yield self._addProxy(
+ (DirectoryService.recordType_locations, "gemini",),
+ "calendar-proxy-write",
+ (DirectoryService.recordType_users, "wsanchez",),
+ )
+ self._groupMembersTest(
DirectoryService.recordType_locations, "gemini", "calendar-proxy-write",
("Wilfredo Sanchez",),
)
+ @inlineCallbacks
def test_groupMembersProxySingleGroup(self):
"""
DirectoryPrincipalResource.expandedGroupMembers()
"""
- return self._groupMembersTest(
+ yield self._addProxy(
+ (DirectoryService.recordType_locations, "mercury",),
+ "calendar-proxy-write",
+ (DirectoryService.recordType_groups, "left_coast",),
+ )
+ self._groupMembersTest(
DirectoryService.recordType_locations, "mercury", "calendar-proxy-write",
("Chris Lecroy", "David Reid", "Wilfredo Sanchez", "West Coast",),
)
+ @inlineCallbacks
def test_groupMembersProxySingleGroupWithNestedGroups(self):
"""
DirectoryPrincipalResource.expandedGroupMembers()
"""
- return self._groupMembersTest(
+ yield self._addProxy(
+ (DirectoryService.recordType_locations, "apollo",),
+ "calendar-proxy-write",
+ (DirectoryService.recordType_groups, "both_coasts",),
+ )
+ self._groupMembersTest(
DirectoryService.recordType_locations, "apollo", "calendar-proxy-write",
("Chris Lecroy", "David Reid", "Wilfredo Sanchez", "West Coast", "East Coast", "Cyrus Daboo", "Both Coasts",),
)
+ @inlineCallbacks
def test_groupMembersProxySingleGroupWithNestedRecursiveGroups(self):
"""
DirectoryPrincipalResource.expandedGroupMembers()
"""
- return self._groupMembersTest(
+ yield self._addProxy(
+ (DirectoryService.recordType_locations, "orion",),
+ "calendar-proxy-write",
+ (DirectoryService.recordType_groups, "recursive1_coasts",),
+ )
+ self._groupMembersTest(
DirectoryService.recordType_locations, "orion", "calendar-proxy-write",
("Wilfredo Sanchez", "Cyrus Daboo", "Recursive1 Coasts", "Recursive2 Coasts",),
)
+ @inlineCallbacks
def test_groupMembersProxySingleGroupWithNonCalendarGroup(self):
"""
DirectoryPrincipalResource.expandedGroupMembers()
"""
- ds = []
-
- ds.append(self._groupMembersTest(
+ yield self._addProxy(
+ (DirectoryService.recordType_resources, "non_calendar_proxy",),
+ "calendar-proxy-write",
+ (DirectoryService.recordType_groups, "non_calendar_group",),
+ )
+ yield self._groupMembersTest(
DirectoryService.recordType_resources, "non_calendar_proxy", "calendar-proxy-write",
("Chris Lecroy", "Cyrus Daboo", "Non-calendar group"),
- ))
-
- ds.append(self._groupMembershipsTest(
+ )
+ yield self._groupMembershipsTest(
DirectoryService.recordType_groups, "non_calendar_group", None,
("non_calendar_proxy#calendar-proxy-write",),
- ))
+ )
- return DeferredList(ds)
-
def test_groupMembersProxyMissingUser(self):
"""
DirectoryPrincipalResource.expandedGroupMembers()
@@ -304,17 +330,46 @@
finally:
DirectoryPrincipalResource.cacheNotifierFactory = oldCacheNotifier
+ @inlineCallbacks
def test_proxyFor(self):
- return self._proxyForTest(
- DirectoryService.recordType_users, "wsanchez",
+ yield self._addProxy(
+ (DirectoryService.recordType_locations, "mercury",),
+ "calendar-proxy-write",
+ (DirectoryService.recordType_groups, "left_coast",),
+ )
+ yield self._addProxy(
+ (DirectoryService.recordType_locations, "gemini",),
+ "calendar-proxy-write",
+ (DirectoryService.recordType_users, "wsanchez",),
+ )
+ yield self._addProxy(
+ (DirectoryService.recordType_locations, "apollo",),
+ "calendar-proxy-write",
+ (DirectoryService.recordType_groups, "both_coasts",),
+ )
+ yield self._addProxy(
+ (DirectoryService.recordType_locations, "orion",),
+ "calendar-proxy-write",
+ (DirectoryService.recordType_groups, "recursive1_coasts",),
+ )
+
+ yield self._proxyForTest(
+ DirectoryService.recordType_users, "wsanchez",
("Mecury Seven", "Gemini Twelve", "Apollo Eleven", "Orion", ),
True
)
+ @inlineCallbacks
def test_readOnlyProxyFor(self):
- return self._proxyForTest(
+ yield self._addProxy(
+ (DirectoryService.recordType_resources, "non_calendar_proxy",),
+ "calendar-proxy-read",
+ (DirectoryService.recordType_groups, "recursive2_coasts",),
+ )
+
+ yield self._proxyForTest(
DirectoryService.recordType_users, "wsanchez",
("Non-calendar proxy", ),
False
Modified: CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/test/test_xmlfile.py
===================================================================
--- CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/test/test_xmlfile.py 2009-04-22 19:27:33 UTC (rev 4062)
+++ CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/test/test_xmlfile.py 2009-04-23 13:45:58 UTC (rev 4063)
@@ -121,56 +121,7 @@
set(expectedRecords)
)
- def test_okAutoSchedule(self):
- service = self.service()
-
- self.xmlFile().open("w").write(
-"""<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE accounts SYSTEM "accounts.dtd">
-<accounts realm="Test Realm">
- <location>
- <uid>my office</uid>
- <password>nimda</password>
- <name>Super User</name>
- <auto-schedule/>
- </location>
-</accounts>
-"""
- )
- for recordType, expectedRecords in (
- ( DirectoryService.recordType_users , () ),
- ( DirectoryService.recordType_groups , () ),
- ( DirectoryService.recordType_locations , ("my office",) ),
- ( DirectoryService.recordType_resources , () ),
- ):
- self.assertEquals(
- set(r.shortNames[0] for r in service.listRecords(recordType)),
- set(expectedRecords)
- )
- self.assertTrue(service.recordWithShortName(DirectoryService.recordType_locations, "my office").autoSchedule)
-
- def test_badAutoSchedule(self):
- service = self.service()
-
- self.xmlFile().open("w").write(
-"""<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE accounts SYSTEM "accounts.dtd">
-<accounts realm="Test Realm">
- <user>
- <uid>my office</uid>
- <password>nimda</password>
- <name>Super User</name>
- <auto-schedule/>
- </user>
-</accounts>
-"""
- )
- def _findRecords():
- set(r.shortNames[0] for r in service.listRecords(DirectoryService.recordType_users))
-
- self.assertRaises(ValueError, _findRecords)
-
def test_okDisableCalendar(self):
service = self.service()
@@ -207,63 +158,3 @@
self.assertFalse(service.recordWithShortName(DirectoryService.recordType_groups, "enabled").enabledForCalendaring)
self.assertFalse(service.recordWithShortName(DirectoryService.recordType_groups, "disabled").enabledForCalendaring)
- def test_okProxies(self):
- service = self.service()
-
- self.xmlFile().open("w").write(
-"""<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE accounts SYSTEM "accounts.dtd">
-<accounts realm="Test Realm">
- <user>
- <uid>test</uid>
- <password>nimda</password>
- <name>Test</name>
- </user>
- <location>
- <uid>my office</uid>
- <password>nimda</password>
- <name>Super User</name>
- <auto-schedule/>
- <proxies>
- <member>test</member>
- </proxies>
- </location>
-</accounts>
-"""
- )
- for recordType, expectedRecords in (
- ( DirectoryService.recordType_users , ("test",) ),
- ( DirectoryService.recordType_groups , () ),
- ( DirectoryService.recordType_locations , ("my office",) ),
- ( DirectoryService.recordType_resources , () ),
- ):
- self.assertEquals(
- set(r.shortNames[0] for r in service.listRecords(recordType)),
- set(expectedRecords)
- )
- self.assertEqual(set([("users", "test",)],), service.recordWithShortName(DirectoryService.recordType_locations, "my office")._proxies)
- self.assertEqual(set([("locations", "my office",)],), service.recordWithShortName(DirectoryService.recordType_users, "test")._proxyFor)
-
- def test_badProxies(self):
- service = self.service()
-
- self.xmlFile().open("w").write(
-"""<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE accounts SYSTEM "accounts.dtd">
-<accounts realm="Test Realm">
- <user>
- <uid>my office</uid>
- <password>nimda</password>
- <name>Super User</name>
- <proxies>
- <member>12345-GUID-67890</member>
- </proxies>
- </user>
-</accounts>
-"""
- )
-
- def _findRecords():
- set(r.shortNames[0] for r in service.listRecords(DirectoryService.recordType_users))
-
- self.assertRaises(ValueError, _findRecords)
Modified: CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/xmlaccountsparser.py
===================================================================
--- CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/xmlaccountsparser.py 2009-04-22 19:27:33 UTC (rev 4062)
+++ CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/xmlaccountsparser.py 2009-04-23 13:45:58 UTC (rev 4063)
@@ -49,10 +49,7 @@
ELEMENT_MEMBERS = "members"
ELEMENT_MEMBER = "member"
ELEMENT_CUADDR = "cuaddr"
-ELEMENT_AUTOSCHEDULE = "auto-schedule"
ELEMENT_DISABLECALENDAR = "disable-calendar"
-ELEMENT_PROXIES = "proxies"
-ELEMENT_READ_ONLY_PROXIES = "read-only-proxies"
ATTRIBUTE_REALM = "realm"
ATTRIBUTE_REPEAT = "repeat"
@@ -110,19 +107,6 @@
if item is not None:
item.groups.add(group.shortNames[0])
- def updateProxyFor(proxier):
- # Update proxy membership
- for recordType, shortName in proxier.proxies:
- item = self.items[recordType].get(shortName)
- if item is not None:
- item.proxyFor.add((proxier.recordType, proxier.shortNames[0]))
-
- # Update read-only proxy membership
- for recordType, shortName in proxier.readOnlyProxies:
- item = self.items[recordType].get(shortName)
- if item is not None:
- item.readOnlyProxyFor.add((proxier.recordType, proxier.shortNames[0]))
-
for child in node._get_childNodes():
child_name = child._get_localName()
if child_name is None:
@@ -151,7 +135,6 @@
for records in self.items.itervalues():
for principal in records.itervalues():
updateMembership(principal)
- updateProxyFor(principal)
class XMLAccountRecord (object):
"""
@@ -172,15 +155,10 @@
self.members = set()
self.groups = set()
self.calendarUserAddresses = set()
- self.autoSchedule = False
if recordType == DirectoryService.recordType_groups:
self.enabledForCalendaring = False
else:
self.enabledForCalendaring = True
- self.proxies = set()
- self.proxyFor = set()
- self.readOnlyProxies = set()
- self.readOnlyProxyFor = set()
def repeat(self, ctr):
"""
@@ -237,10 +215,7 @@
result.emailAddresses = emailAddresses
result.members = self.members
result.calendarUserAddresses = calendarUserAddresses
- result.autoSchedule = self.autoSchedule
result.enabledForCalendaring = self.enabledForCalendaring
- result.proxies = self.proxies
- result.readOnlyProxies = self.readOnlyProxies
return result
def parseXML(self, node):
@@ -279,27 +254,12 @@
elif child_name == ELEMENT_CUADDR:
if child.firstChild is not None:
self.calendarUserAddresses.add(child.firstChild.data.encode("utf-8"))
- elif child_name == ELEMENT_AUTOSCHEDULE:
- # Only Resources & Locations
- if self.recordType not in (DirectoryService.recordType_resources, DirectoryService.recordType_locations):
- raise ValueError("<auto-schedule> element only allowed for Resources and Locations: %s" % (child_name,))
- self.autoSchedule = True
elif child_name == ELEMENT_DISABLECALENDAR:
# FIXME: Not sure I see why this restriction is needed. --wsanchez
## Only Users or Groups
#if self.recordType != DirectoryService.recordType_users:
# raise ValueError("<disable-calendar> element only allowed for Users: %s" % (child_name,))
self.enabledForCalendaring = False
- elif child_name == ELEMENT_PROXIES:
- # Only Resources & Locations
- if self.recordType not in (DirectoryService.recordType_resources, DirectoryService.recordType_locations):
- raise ValueError("<proxies> element only allowed for Resources and Locations: %s" % (child_name,))
- self._parseMembers(child, self.proxies)
- elif child_name == ELEMENT_READ_ONLY_PROXIES:
- # Only Resources & Locations
- if self.recordType not in (DirectoryService.recordType_resources, DirectoryService.recordType_locations):
- raise ValueError("<read-only-proxies> element only allowed for Resources and Locations: %s" % (child_name,))
- self._parseMembers(child, self.readOnlyProxies)
else:
raise RuntimeError("Unknown account attribute: %s" % (child_name,))
Modified: CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/xmlfile.py
===================================================================
--- CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/xmlfile.py 2009-04-22 19:27:33 UTC (rev 4062)
+++ CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/directory/xmlfile.py 2009-04-23 13:45:58 UTC (rev 4063)
@@ -119,17 +119,12 @@
lastName = xmlPrincipal.lastName,
emailAddresses = xmlPrincipal.emailAddresses,
calendarUserAddresses = xmlPrincipal.calendarUserAddresses,
- autoSchedule = xmlPrincipal.autoSchedule,
enabledForCalendaring = xmlPrincipal.enabledForCalendaring,
)
self.password = xmlPrincipal.password
self._members = xmlPrincipal.members
self._groups = xmlPrincipal.groups
- self._proxies = xmlPrincipal.proxies
- self._proxyFor = xmlPrincipal.proxyFor
- self._readOnlyProxies = xmlPrincipal.readOnlyProxies
- self._readOnlyProxyFor = xmlPrincipal.readOnlyProxyFor
def members(self):
for recordType, shortName in self._members:
@@ -139,22 +134,6 @@
for shortName in self._groups:
yield self.service.recordWithShortName(DirectoryService.recordType_groups, shortName)
- def proxies(self):
- for recordType, shortName in self._proxies:
- yield self.service.recordWithShortName(recordType, shortName)
-
- def proxyFor(self, read_write=True):
- for recordType, shortName in self._proxyFor:
- yield self.service.recordWithShortName(recordType, shortName)
-
- def readOnlyProxies(self):
- for recordType, shortName in self._readOnlyProxies:
- yield self.service.recordWithShortName(recordType, shortName)
-
- def readOnlyProxyFor(self, read_write=True):
- for recordType, shortName in self._readOnlyProxyFor:
- yield self.service.recordWithShortName(recordType, shortName)
-
def verifyCredentials(self, credentials):
if isinstance(credentials, UsernamePassword):
return credentials.password == self.password
Modified: CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/memcachepool.py
===================================================================
--- CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/memcachepool.py 2009-04-22 19:27:33 UTC (rev 4062)
+++ CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/memcachepool.py 2009-04-23 13:45:58 UTC (rev 4063)
@@ -153,9 +153,16 @@
self._pendingConnects = 0
self._commands = []
+ def _isIdle(self):
+ return (
+ len(self._busyClients) == 0 and
+ len(self._commands) == 0 and
+ self._pendingConnects == 0
+ )
+
def _shutdownCallback(self):
self.shutdown_requested = True
- if len(self._busyClients) == 0 and len(self._commands) == 0 and self._pendingConnects == 0:
+ if self._isIdle():
return None
self.shutdown_deferred = Deferred()
return self.shutdown_deferred
@@ -236,6 +243,7 @@
@return: A L{Deferred} that fires with the result of the given command.
"""
+
if len(self._freeClients) > 0:
client = self._freeClients.pop()
@@ -289,9 +297,6 @@
@param client: An instance of C{self.clientFactory}
"""
- if self.shutdown_deferred and len(self._busyClients) == 0 and len(self._commands) == 0 and self._pendingConnects == 0:
- self.shutdown_deferred.callback(None)
-
if client in self._freeClients:
self._freeClients.remove(client)
@@ -312,7 +317,7 @@
self._freeClients.add(client)
- if self.shutdown_deferred and len(self._busyClients) == 0 and len(self._commands) == 0 and self._pendingConnects == 0:
+ if self.shutdown_deferred and self._isIdle():
self.shutdown_deferred.callback(None)
if len(self._commands) > 0:
Modified: CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/resource.py
===================================================================
--- CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/resource.py 2009-04-22 19:27:33 UTC (rev 4062)
+++ CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/resource.py 2009-04-23 13:45:58 UTC (rev 4063)
@@ -1007,14 +1007,14 @@
return None
def setAutoSchedule(self, autoSchedule):
- self._index().setAutoSchedule(self.record.guid, autoSchedule)
+ self._resource_info_index().setAutoSchedule(self.record.guid, autoSchedule)
def getAutoSchedule(self):
- return self._index().getAutoSchedule(self.record.guid)
+ return self._resource_info_index().getAutoSchedule(self.record.guid)
- def _index(self):
+ def _resource_info_index(self):
"""
- Return the SQL database for this calendar principal.
+ Return the resource info SQL database for this calendar principal.
@return: the L{ResourceInfoDatabase} for the calendar principal.
"""
@@ -1025,6 +1025,20 @@
setattr(self.pcollection, "resource_info_db", ResourceInfoDatabase(config.DataRoot))
return self.pcollection.resource_info_db
+ def _calendar_user_proxy_index(self):
+ """
+ Return the calendar user proxy SQL database for this calendar principal.
+
+ @return: the L{CalendarUserProxyDatabase} for the calendar principal.
+ """
+
+ # The db is located in the data root
+ self.pcollection = self.parent.parent # MOR: doesn't feel right
+ if not hasattr(self.pcollection, "calendar_user_proxy_db"):
+ setattr(self.pcollection, "calendar_user_proxy_db", CalendarUserProxyDatabase(config.DataRoot))
+ return self.pcollection.calendar_user_proxy_db
+
+
##
# Utilities
##
Modified: CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/test/test_memcachepool.py
===================================================================
--- CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/test/test_memcachepool.py 2009-04-22 19:27:33 UTC (rev 4062)
+++ CalendarServer/branches/users/sagen/resource-delegates-4038/twistedcaldav/test/test_memcachepool.py 2009-04-23 13:45:58 UTC (rev 4063)
@@ -40,8 +40,11 @@
"""
def __init__(self):
self.calls = []
+ self.shutdown_deferred = None
+ self.shutdown_requested = False
+
def clientFree(self, client):
"""
Record a C{'free'} call for C{client}.
@@ -100,7 +103,10 @@
return StubConnector()
+ def addSystemEventTrigger(*args, **kwds):
+ pass
+
class PooledMemCacheProtocolTests(TestCase):
"""
Tests for the L{PooledMemCacheProtocol}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20090423/c4e23f44/attachment-0001.html>
More information about the calendarserver-changes
mailing list