[CalendarServer-changes] [9472] CalendarServer/trunk
source_changes at macosforge.org
source_changes at macosforge.org
Fri Jul 20 15:46:08 PDT 2012
Revision: 9472
http://trac.macosforge.org/projects/calendarserver/changeset/9472
Author: wsanchez at apple.com
Date: 2012-07-20 15:46:08 -0700 (Fri, 20 Jul 2012)
Log Message:
-----------
Use encodeXMLName()
Modified Paths:
--------------
CalendarServer/trunk/twext/web2/dav/method/report.py
CalendarServer/trunk/twext/web2/dav/noneprops.py
CalendarServer/trunk/twext/web2/dav/resource.py
CalendarServer/trunk/twext/web2/dav/test/test_xattrprops.py
CalendarServer/trunk/twext/web2/dav/test/util.py
CalendarServer/trunk/twext/web2/dav/xattrprops.py
CalendarServer/trunk/twistedcaldav/extensions.py
CalendarServer/trunk/twistedcaldav/memcacheprops.py
CalendarServer/trunk/twistedcaldav/method/report.py
CalendarServer/trunk/twistedcaldav/storebridge.py
CalendarServer/trunk/twistedcaldav/test/test_memcacheprops.py
CalendarServer/trunk/twistedcaldav/test/test_validation.py
CalendarServer/trunk/txdav/base/propertystore/base.py
CalendarServer/trunk/txdav/base/propertystore/xattr.py
Modified: CalendarServer/trunk/twext/web2/dav/method/report.py
===================================================================
--- CalendarServer/trunk/twext/web2/dav/method/report.py 2012-07-20 22:45:01 UTC (rev 9471)
+++ CalendarServer/trunk/twext/web2/dav/method/report.py 2012-07-20 22:46:08 UTC (rev 9472)
@@ -44,6 +44,7 @@
from twext.web2.dav.util import davXMLFromStream
from txdav.xml import element as davxml
from txdav.xml.element import lookupElement
+from txdav.xml.base import encodeXMLName
log = Logger()
@@ -115,7 +116,7 @@
if namespace == davxml.dav_namespace:
request.submethod = "DAV:" + name
else:
- request.submethod = "{%s}%s" % (namespace, name)
+ request.submethod = encodeXMLName(namespace, name)
else:
method_name = to_method(name)
@@ -136,8 +137,8 @@
#
# Requested report is not supported.
#
- log.err("Unsupported REPORT {%s}%s for resource %s (no method %s)"
- % (namespace, name, self, method_name))
+ log.err("Unsupported REPORT %s for resource %s (no method %s)"
+ % (encodeXMLName(namespace, name), self, method_name))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
Modified: CalendarServer/trunk/twext/web2/dav/noneprops.py
===================================================================
--- CalendarServer/trunk/twext/web2/dav/noneprops.py 2012-07-20 22:45:01 UTC (rev 9471)
+++ CalendarServer/trunk/twext/web2/dav/noneprops.py 2012-07-20 22:46:08 UTC (rev 9472)
@@ -33,7 +33,9 @@
from twext.web2 import responsecode
from twext.web2.http import HTTPError, StatusResponse
+from txdav.xml.base import encodeXMLName
+
class NonePropertyStore (object):
"""
DAV property store which contains no properties and does not allow
@@ -50,10 +52,16 @@
pass
def get(self, qname, uid=None):
- raise HTTPError(StatusResponse(responsecode.NOT_FOUND, "No such property: {%s}%s" % qname))
+ raise HTTPError(StatusResponse(
+ responsecode.NOT_FOUND,
+ "No such property: %s" % (encodeXMLName(*qname),)
+ ))
def set(self, property, uid=None):
- raise HTTPError(StatusResponse(responsecode.FORBIDDEN, "Permission denied for setting property: %s" % (property,)))
+ raise HTTPError(StatusResponse(
+ responsecode.FORBIDDEN,
+ "Permission denied for setting property: %s" % (property,)
+ ))
def delete(self, qname, uid=None):
# RFC 2518 Section 12.13.1 says that removal of
Modified: CalendarServer/trunk/twext/web2/dav/resource.py
===================================================================
--- CalendarServer/trunk/twext/web2/dav/resource.py 2012-07-20 22:45:01 UTC (rev 9471)
+++ CalendarServer/trunk/twext/web2/dav/resource.py 2012-07-20 22:46:08 UTC (rev 9472)
@@ -57,6 +57,12 @@
from twisted.internet import reactor
from twext.python.log import Logger
+from txdav.xml import element
+from txdav.xml.base import encodeXMLName
+from txdav.xml.element import WebDAVElement, WebDAVEmptyElement, WebDAVTextElement
+from txdav.xml.element import dav_namespace
+from txdav.xml.element import twisted_dav_namespace, twisted_private_namespace
+from txdav.xml.element import registerElement, lookupElement
from twext.web2 import responsecode
from twext.web2.http import HTTPError, RedirectResponse, StatusResponse
from twext.web2.http_headers import generateContentType
@@ -70,11 +76,6 @@
from twext.web2.dav.noneprops import NonePropertyStore
from twext.web2.dav.util import unimplemented, parentForURL, joinURL
from twext.web2.dav.auth import PrincipalCredentials
-from txdav.xml import element
-from txdav.xml.element import WebDAVElement, WebDAVEmptyElement, WebDAVTextElement
-from txdav.xml.element import dav_namespace
-from txdav.xml.element import twisted_dav_namespace, twisted_private_namespace
-from txdav.xml.element import registerElement, lookupElement
log = Logger()
@@ -217,7 +218,7 @@
def defer():
if type(property) is tuple:
qname = property
- sname = "{%s}%s" % property
+ sname = encodeXMLName(*property)
else:
qname = property.qname()
sname = property.sname()
@@ -416,7 +417,7 @@
def defer():
if type(property) is tuple:
qname = property
- sname = "{%s}%s" % property
+ sname = encodeXMLName(*property)
else:
qname = property.qname()
sname = property.sname()
@@ -1873,9 +1874,9 @@
return None
if not isinstance(principal, element.Principal):
- log.err("Non-principal value in property {%s}%s "
+ log.err("Non-principal value in property %s "
"referenced by property principal."
- % (namespace, name))
+ % (encodeXMLName(namespace, name),))
return None
if len(principal.children) != 1:
Modified: CalendarServer/trunk/twext/web2/dav/test/test_xattrprops.py
===================================================================
--- CalendarServer/trunk/twext/web2/dav/test/test_xattrprops.py 2012-07-20 22:45:01 UTC (rev 9471)
+++ CalendarServer/trunk/twext/web2/dav/test/test_xattrprops.py 2012-07-20 22:46:08 UTC (rev 9472)
@@ -132,7 +132,7 @@
attribute = (
self.propertyStore.deadPropertyXattrPrefix +
(uid if uid is not None else "") +
- "{%s}%s" % element.qname())
+ element.sname())
self.attrs[attribute] = value
@@ -141,7 +141,7 @@
attribute = (
self.propertyStore.deadPropertyXattrPrefix +
(uid if uid is not None else "") +
- "{%s}%s" % element.qname())
+ element.sname())
return self.attrs[attribute]
Modified: CalendarServer/trunk/twext/web2/dav/test/util.py
===================================================================
--- CalendarServer/trunk/twext/web2/dav/test/util.py 2012-07-20 22:45:01 UTC (rev 9471)
+++ CalendarServer/trunk/twext/web2/dav/test/util.py 2012-07-20 22:46:08 UTC (rev 9472)
@@ -38,6 +38,7 @@
from twext.web2.dav.static import DAVFile
from twext.web2.dav.util import joinURL
from txdav.xml import element
+from txdav.xml.base import encodeXMLName
log = Logger()
@@ -57,7 +58,7 @@
except KeyError:
raise HTTPError(StatusResponse(
responsecode.NOT_FOUND,
- "No such property: {%s}%s" % qname
+ "No such property: %s" % (encodeXMLName(*qname),)
))
doc = element.WebDAVDocument.fromString(property)
Modified: CalendarServer/trunk/twext/web2/dav/xattrprops.py
===================================================================
--- CalendarServer/trunk/twext/web2/dav/xattrprops.py 2012-07-20 22:45:01 UTC (rev 9471)
+++ CalendarServer/trunk/twext/web2/dav/xattrprops.py 2012-07-20 22:46:08 UTC (rev 9472)
@@ -50,10 +50,11 @@
from twisted.python.util import untilConcludes
from twisted.python.failure import Failure
from twisted.python.log import err
+from txdav.xml.base import encodeXMLName
+from txdav.xml.parser import WebDAVDocument
from twext.web2 import responsecode
from twext.web2.http import HTTPError, StatusResponse
from twext.web2.dav.http import statusForFailure
-from txdav.xml.parser import WebDAVDocument
# RFC 2518 Section 12.13.1 says that removal of non-existing property
# is not an error. python-xattr on Linux fails with ENODATA in this
@@ -86,7 +87,7 @@
deadPropertyXattrPrefix = "user."
def _encode(clazz, name, uid=None):
- result = urllib.quote("{%s}%s" % name, safe='{}:')
+ result = urllib.quote(encodeXMLName(*name), safe='{}:')
if uid:
result = uid + result
r = clazz.deadPropertyXattrPrefix + result
@@ -138,17 +139,20 @@
data = self.attrs.get(self._encode(qname, uid))
except KeyError:
raise HTTPError(StatusResponse(
- responsecode.NOT_FOUND,
- "No such property: {%s}%s" % qname))
+ responsecode.NOT_FOUND,
+ "No such property: %s" % (encodeXMLName(*qname),)
+ ))
except IOError, e:
if e.errno in _ATTR_MISSING or e.errno == errno.ENOENT:
raise HTTPError(StatusResponse(
- responsecode.NOT_FOUND,
- "No such property: {%s}%s" % qname))
+ responsecode.NOT_FOUND,
+ "No such property: %s" % (encodeXMLName(*qname),)
+ ))
else:
raise HTTPError(StatusResponse(
- statusForFailure(Failure()),
- "Unable to read property: {%s}%s" % qname))
+ statusForFailure(Failure()),
+ "Unable to read property: %s" % (encodeXMLName(*qname),)
+ ))
#
# Unserialize XML data from an xattr. The storage format has changed
@@ -175,8 +179,8 @@
try:
doc = unpickle(data)
except UnpicklingError:
- format = "Invalid property value stored on server: {%s}%s %s"
- msg = format % (qname[0], qname[1], data)
+ format = "Invalid property value stored on server: %s %s"
+ msg = format % (encodeXMLName(*qname), data)
err(None, msg)
raise HTTPError(
StatusResponse(responsecode.INTERNAL_SERVER_ERROR, msg))
@@ -225,10 +229,10 @@
if e.errno not in _ATTR_MISSING:
raise
except:
- raise HTTPError(
- StatusResponse(
- statusForFailure(Failure()),
- "Unable to delete property: " + key))
+ raise HTTPError(StatusResponse(
+ statusForFailure(Failure()),
+ "Unable to delete property: %s", (key,)
+ ))
def contains(self, qname, uid=None):
@@ -252,10 +256,10 @@
except IOError, e:
if e.errno in _ATTR_MISSING or e.errno == errno.ENOENT:
return False
- raise HTTPError(
- StatusResponse(
- statusForFailure(Failure()),
- "Unable to read property: " + key))
+ raise HTTPError(StatusResponse(
+ statusForFailure(Failure()),
+ "Unable to read property: %s" % (key,)
+ ))
else:
return True
@@ -277,10 +281,10 @@
except IOError, e:
if e.errno == errno.ENOENT:
return []
- raise HTTPError(
- StatusResponse(
- statusForFailure(Failure()),
- "Unable to list properties: " + self.resource.fp.path))
+ raise HTTPError(StatusResponse(
+ statusForFailure(Failure()),
+ "Unable to list properties: %s", (self.resource.fp.path,)
+ ))
else:
results = [
self._decode(name)
Modified: CalendarServer/trunk/twistedcaldav/extensions.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/extensions.py 2012-07-20 22:45:01 UTC (rev 9471)
+++ CalendarServer/trunk/twistedcaldav/extensions.py 2012-07-20 22:46:08 UTC (rev 9472)
@@ -46,6 +46,7 @@
from twext.web2.stream import FileStream
from twext.web2.static import MetaDataMixin, StaticRenderMixin
from txdav.xml import element
+from txdav.xml.base import encodeXMLName
from txdav.xml.element import dav_namespace
from twext.web2.dav.http import MultiStatusResponse
from twext.web2.dav.static import DAVFile as SuperDAVFile
@@ -339,8 +340,8 @@
whenAllProperties = gatherResults([
maybeDeferred(self.resource.readProperty, qn, request)
.addCallback(lambda p, iqn=qn: (p.sname(), p.toxml())
- if p is not None else ("{%s}%s" % iqn, None) )
- .addErrback(gotError, "{%s}%s" % qn)
+ if p is not None else (encodeXMLName(*iqn), None) )
+ .addErrback(gotError, encodeXMLName(*qn))
for qn in sorted(qnames)
])
@@ -771,7 +772,7 @@
HTTPError.__init__(self,
StatusResponse(
responsecode.NOT_FOUND,
- "No such property: {%s}%s" % qname
+ "No such property: %s" % encodeXMLName(*qname)
)
)
Modified: CalendarServer/trunk/twistedcaldav/memcacheprops.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/memcacheprops.py 2012-07-20 22:45:01 UTC (rev 9471)
+++ CalendarServer/trunk/twistedcaldav/memcacheprops.py 2012-07-20 22:46:08 UTC (rev 9472)
@@ -36,6 +36,7 @@
from twext.python.memcacheclient import ClientFactory
from twext.python.memcacheclient import MemcacheError, TokenMismatchError
from twext.python.filepath import CachingFilePath as FilePath
+from txdav.xml.base import encodeXMLName
from twext.web2 import responsecode
from twext.web2.http import HTTPError, StatusResponse
@@ -293,11 +294,10 @@
else:
log.error("memcacheprops setProperty had too many failures")
delattr(self, "_propertyCache")
- raise MemcacheError("Unable to %s property %s{%s}%s on %s" % (
+ raise MemcacheError("Unable to %s property %s%s on %s" % (
"delete" if delete else "set",
uid if uid else "",
- qname[0],
- qname[1],
+ encodeXMLName(*qname),
child
))
@@ -345,7 +345,7 @@
else:
raise HTTPError(StatusResponse(
responsecode.NOT_FOUND,
- "No such property: %s{%s}%s" % (uid if uid else "", qname[0], qname[1],)
+ "No such property: %s%s" % (uid if uid else "", encodeXMLName(*qname))
))
self.log_debug("Read for %s%s on %s" % (
Modified: CalendarServer/trunk/twistedcaldav/method/report.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/method/report.py 2012-07-20 22:45:01 UTC (rev 9471)
+++ CalendarServer/trunk/twistedcaldav/method/report.py 2012-07-20 22:46:08 UTC (rev 9472)
@@ -33,6 +33,7 @@
from twext.web2.http import HTTPError, StatusResponse
from twext.web2.dav.util import davXMLFromStream
from txdav.xml import element as davxml
+from txdav.xml.base import encodeXMLName
from txdav.xml.element import lookupElement
from twext.python.log import Logger
@@ -78,7 +79,7 @@
elif namespace == caldavxml.caldav_namespace:
request.submethod = "CalDAV:" + name
else:
- request.submethod = "{%s}%s" % (namespace, name)
+ request.submethod = encodeXMLName(namespace, name)
else:
request.submethod = name
@@ -114,8 +115,8 @@
#
# Requested report is not supported.
#
- log.err("Unsupported REPORT {%s}%s for resource %s (no method %s)"
- % (namespace, name, self, method_name))
+ log.err("Unsupported REPORT %s for resource %s (no method %s)"
+ % (encodeXMLName(namespace, name), self, method_name))
raise HTTPError(ErrorResponse(
responsecode.FORBIDDEN,
Modified: CalendarServer/trunk/twistedcaldav/storebridge.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/storebridge.py 2012-07-20 22:45:01 UTC (rev 9471)
+++ CalendarServer/trunk/twistedcaldav/storebridge.py 2012-07-20 22:46:08 UTC (rev 9472)
@@ -15,27 +15,38 @@
# limitations under the License.
##
+import time
+import hashlib
+from urlparse import urlsplit
+
+from twisted.python.hashlib import md5
+from twisted.python.log import err as logDefaultException
+from twisted.python.util import FancyEqMixin
+from twisted.internet.defer import succeed, inlineCallbacks, returnValue, maybeDeferred
+from twisted.internet.protocol import Protocol
+
from twext.python.log import Logger
+
+from txdav.xml import element as davxml
+from txdav.xml.base import dav_namespace, WebDAVUnknownElement, encodeXMLName
+from txdav.base.propertystore.base import PropertyName
+from txdav.caldav.icalendarstore import QuotaExceeded
+from txdav.common.icommondatastore import NoSuchObjectResourceError
+from txdav.idav import PropertyChangeNotAllowedError
+
from twext.web2 import responsecode
-from txdav.xml import element as davxml
-from txdav.xml.base import dav_namespace, WebDAVUnknownElement
+from twext.web2.stream import ProducerStream, readStream, MemoryStream
+from twext.web2.http import HTTPError, StatusResponse, Response
+from twext.web2.http_headers import ETag, MimeType
from twext.web2.dav.http import ErrorResponse, ResponseQueue, MultiStatusResponse
from twext.web2.dav.noneprops import NonePropertyStore
from twext.web2.dav.resource import TwistedACLInheritable, AccessDeniedError
from twext.web2.dav.util import parentForURL, allDataFromStream, joinURL, davXMLFromStream
-from twext.web2.http import HTTPError, StatusResponse, Response
-from twext.web2.http_headers import ETag, MimeType
from twext.web2.responsecode import (
FORBIDDEN, NO_CONTENT, NOT_FOUND, CREATED, CONFLICT, PRECONDITION_FAILED,
BAD_REQUEST, OK, INSUFFICIENT_STORAGE_SPACE
)
-from twext.web2.stream import ProducerStream, readStream, MemoryStream
-from twisted.internet.defer import succeed, inlineCallbacks, returnValue, maybeDeferred
-from twisted.internet.protocol import Protocol
-from twisted.python.hashlib import md5
-from twisted.python.log import err as logDefaultException
-from twisted.python.util import FancyEqMixin
from twistedcaldav import customxml, carddavxml, caldavxml
from twistedcaldav.cache import CacheStoreNotifier, ResponseCacheMixin,\
DisabledCacheNotifier
@@ -56,15 +67,6 @@
from twistedcaldav.scheduling.implicit import ImplicitScheduler
from twistedcaldav.vcard import Component as VCard, InvalidVCardDataError
-from txdav.base.propertystore.base import PropertyName
-from txdav.caldav.icalendarstore import QuotaExceeded
-from txdav.common.icommondatastore import NoSuchObjectResourceError
-from txdav.idav import PropertyChangeNotAllowedError
-
-import time
-import hashlib
-from urlparse import urlsplit
-
"""
Wrappers to translate between the APIs in L{txdav.caldav.icalendarstore} and
L{txdav.carddav.iaddressbookstore} and those in L{twistedcaldav}.
@@ -101,7 +103,7 @@
except KeyError:
raise HTTPError(StatusResponse(
NOT_FOUND,
- "No such property: {%s}%s" % qname
+ "No such property: %s" % (encodeXMLName(*qname),)
))
@@ -111,7 +113,7 @@
except PropertyChangeNotAllowedError:
raise HTTPError(StatusResponse(
FORBIDDEN,
- "Property cannot be changed: {%s}%s" % property.qname(),
+ "Property cannot be changed: %s" % (property.sname(),)
))
Modified: CalendarServer/trunk/twistedcaldav/test/test_memcacheprops.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/test/test_memcacheprops.py 2012-07-20 22:45:01 UTC (rev 9471)
+++ CalendarServer/trunk/twistedcaldav/test/test_memcacheprops.py 2012-07-20 22:46:08 UTC (rev 9472)
@@ -26,6 +26,7 @@
import os
+from twext.xml.base import encodeXMLName
from twext.web2.http import HTTPError
from twistedcaldav.memcacheprops import MemcachePropertyCollection
@@ -33,7 +34,6 @@
from twistedcaldav.test.util import TestCase
-
class StubCollection(object):
def __init__(self, path, childNames):
@@ -91,9 +91,8 @@
def qname(self):
return self.ns, self.name
-
def __repr__(self):
- return "{%s}%s = %s" % (self.ns, self.name, self.value)
+ return "%s = %s" % (encodeXMLName(self.ns, self.name), self.value)
class MemcachePropertyCollectionTestCase(TestCase):
Modified: CalendarServer/trunk/twistedcaldav/test/test_validation.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/test/test_validation.py 2012-07-20 22:45:01 UTC (rev 9471)
+++ CalendarServer/trunk/twistedcaldav/test/test_validation.py 2012-07-20 22:46:08 UTC (rev 9472)
@@ -118,10 +118,7 @@
element = XML(err.response.stream.mem)[0]
self.assertEquals(
element.tag,
- "{%s}%s" % (
- MaxAttendeesPerInstance.namespace,
- MaxAttendeesPerInstance.name
- )
+ MaxAttendeesPerInstance.sname()
)
self.assertEquals(int(element.text), config.MaxAttendeesPerInstance)
else:
@@ -165,10 +162,7 @@
element = XML(err.response.stream.mem)[0]
self.assertEquals(
element.tag,
- "{%s}%s" % (
- MaxAttendeesPerInstance.namespace,
- MaxAttendeesPerInstance.name
- )
+ MaxAttendeesPerInstance.sname()
)
self.assertEquals(int(element.text), config.MaxAttendeesPerInstance)
else:
Modified: CalendarServer/trunk/txdav/base/propertystore/base.py
===================================================================
--- CalendarServer/trunk/txdav/base/propertystore/base.py 2012-07-20 22:45:01 UTC (rev 9471)
+++ CalendarServer/trunk/txdav/base/propertystore/base.py 2012-07-20 22:46:08 UTC (rev 9472)
@@ -25,6 +25,7 @@
from twext.python.log import LoggingMixIn
from txdav.xml import element as davxml
+from txdav.xml.base import encodeXMLName
from twext.web2.dav.resource import TwistedGETContentMD5,\
TwistedQuotaRootProperty
@@ -89,7 +90,7 @@
)
def toString(self):
- return "{%s}%s" % (self.namespace, self.name)
+ return encodeXMLName(self.namespace, self.name)
class AbstractPropertyStore(LoggingMixIn, DictMixin):
Modified: CalendarServer/trunk/txdav/base/propertystore/xattr.py
===================================================================
--- CalendarServer/trunk/txdav/base/propertystore/xattr.py 2012-07-20 22:45:01 UTC (rev 9471)
+++ CalendarServer/trunk/txdav/base/propertystore/xattr.py 2012-07-20 22:46:08 UTC (rev 9472)
@@ -34,6 +34,7 @@
from twisted.python.reflect import namedAny
+from txdav.xml.base import encodeXMLName
from txdav.xml.parser import WebDAVDocument
from txdav.base.propertystore.base import AbstractPropertyStore, PropertyName,\
validKey
@@ -116,7 +117,7 @@
qname.namespace)
else:
namespace = qname.namespace
- result = urllib.quote("{%s}%s" % (namespace, qname.name), safe="{}:")
+ result = urllib.quote(encodeXMLName(namespace, qname.name), safe="{}:")
if uid and uid != self._defaultUser:
result = uid + result
r = self.deadPropertyXattrPrefix + result
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20120720/a72f9e55/attachment-0001.html>
More information about the calendarserver-changes
mailing list