[CalendarServer-changes] [2562] CalendarServer/trunk/twistedcaldav/extensions.py
source_changes at macosforge.org
source_changes at macosforge.org
Mon Jun 16 14:41:40 PDT 2008
Revision: 2562
http://trac.macosforge.org/projects/calendarserver/changeset/2562
Author: wsanchez at apple.com
Date: 2008-06-16 14:41:40 -0700 (Mon, 16 Jun 2008)
Log Message:
-----------
Unroll defgen
Modified Paths:
--------------
CalendarServer/trunk/twistedcaldav/extensions.py
Modified: CalendarServer/trunk/twistedcaldav/extensions.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/extensions.py 2008-06-16 21:40:57 UTC (rev 2561)
+++ CalendarServer/trunk/twistedcaldav/extensions.py 2008-06-16 21:41:40 UTC (rev 2562)
@@ -33,7 +33,7 @@
import cgi
import time
-from twisted.internet.defer import succeed, deferredGenerator, waitForDeferred
+from twisted.internet.defer import succeed, deferredGenerator, waitForDeferred, DeferredList
from twisted.internet.defer import maybeDeferred
from twisted.web2 import responsecode
from twisted.web2.http import HTTPError, Response, RedirectResponse
@@ -50,7 +50,7 @@
from twisted.web2.dav.xattrprops import xattrPropertyStore
from twistedcaldav.log import Logger, LoggingMixIn
-from twistedcaldav.util import submodule
+from twistedcaldav.util import submodule, Alternator
from twistedcaldav.directory.sudo import SudoDirectoryService
from twistedcaldav.directory.directory import DirectoryService
@@ -571,7 +571,7 @@
"""<tr><th>Name</th> <th>Size</th> <th>Last Modified</th> <th>MIME Type</th></tr>"""
]
- even = False
+ even = Alternator()
for name in sorted(self.listChildren()):
child = self.getChild(name)
@@ -586,7 +586,7 @@
"""<td>%(type)s</td>"""
"""</tr>"""
% {
- "even": even and "even" or "odd",
+ "even": even.state() and "even" or "odd",
"url": url,
"name": cgi.escape(name),
"size": size,
@@ -594,7 +594,6 @@
"type": contentType,
}
)
- even = not even
output.append(
"""</table></div>"""
@@ -604,50 +603,64 @@
"""<tr><th>Name</th> <th>Value</th></tr>"""
)
- @deferredGenerator
def gotProperties(qnames):
- even = False
+ ds = []
+
+ def gotProperty(property):
+ if property is None:
+ name = "{%s}%s" % qname
+ value = "** None **"
+ else:
+ name = property.sname()
+ value = property.toxml()
+
+ return (name, value)
+
+ def gotError(f, qname):
+ f.trap(HTTPError)
+
+ name = "{%s}%s" % qname
+ code = f.value.response.code
+
+ if code == responsecode.NOT_FOUND:
+ log.err("Property {%s}%s was returned by listProperties() but does not exist for resource %s."
+ % (qname[0], qname[1], self))
+ return (name, None)
+
+ if code == responsecode.UNAUTHORIZED:
+ return (name, "(access forbidden)")
+
+ return f
+
for qname in qnames:
- try:
- property = waitForDeferred(self.readProperty(qname, request))
- yield property
- property = property.getResult()
- if property is None:
- name = "{%s}%s" % qname
- value = "** None **"
- else:
- name = property.sname()
- value = property.toxml()
- except HTTPError, e:
- if e.response.code == responsecode.NOT_FOUND:
- log.err("Property {%s}%s was returned by listProperties() but does not exist for resource %s."
- % (qname[0], qname[1], self))
- continue
+ d = self.readProperty(qname, request)
+ d.addCallback(gotProperty)
+ d.addErrback(gotError, qname)
+ ds.append(d)
- if e.response.code != responsecode.UNAUTHORIZED:
- log.err("Unable to read property %s for dirlist: %s" % (qname, e))
- raise
+ even = Alternator()
- name = "{%s}%s" % qname
- value = "(access forbidden)"
-
- output.append(
+ def gotValues(items):
+ output.append("".join(
"""<tr class="%(even)s">"""
"""<td valign="top">%(name)s</td>"""
"""<td><pre>%(value)s</pre></td>"""
"""</tr>"""
% {
- "even": even and "even" or "odd",
+ "even": even.state() and "even" or "odd",
"name": name,
"value": cgi.escape(value),
}
- )
- even = not even
+ for result, (name, value) in items
+ if result and value is not None
+ ))
+ output.append("</div>")
+ return "".join(output)
- output.append("</div>")
+ d = DeferredList(ds)
+ d.addCallback(gotValues)
+ return d
- yield "".join(output)
-
d = self.listProperties(request)
d.addCallback(gotProperties)
return d
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20080616/86e4470a/attachment.htm
More information about the calendarserver-changes
mailing list