~landscape/zope3/ztk-1.1.3

« back to all changes in this revision

Viewing changes to src/twisted/web2/dav/element/util.py

  • Committer: Andreas Hasenack
  • Date: 2009-07-20 17:49:16 UTC
  • Revision ID: andreas@canonical.com-20090720174916-g2tn6qmietz2hn0u
Revert twisted removal, it breaks several dozen tests [trivial]

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
##
 
2
# Copyright (c) 2005 Apple Computer, Inc. All rights reserved.
 
3
#
 
4
# Permission is hereby granted, free of charge, to any person obtaining a copy
 
5
# of this software and associated documentation files (the "Software"), to deal
 
6
# in the Software without restriction, including without limitation the rights
 
7
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 
8
# copies of the Software, and to permit persons to whom the Software is
 
9
# furnished to do so, subject to the following conditions:
 
10
 
11
# The above copyright notice and this permission notice shall be included in all
 
12
# copies or substantial portions of the Software.
 
13
 
14
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 
15
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 
16
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 
17
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 
18
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 
19
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 
20
# SOFTWARE.
 
21
#
 
22
# DRI: Wilfredo Sanchez, wsanchez@apple.com
 
23
##
 
24
 
 
25
"""
 
26
WebDAV XML utilities.
 
27
 
 
28
This module provides XML utilities for use with WebDAV.
 
29
 
 
30
See RFC 2518: http://www.ietf.org/rfc/rfc2518.txt (WebDAV)
 
31
"""
 
32
 
 
33
__all__ = [
 
34
    "PrintXML",
 
35
    "encodeXMLName",
 
36
    "decodeXMLName",
 
37
]
 
38
 
 
39
try:
 
40
    import xml.dom.ext as ext
 
41
except ImportError:
 
42
    import twisted.web2.dav.element.xmlext as ext
 
43
 
 
44
def PrintXML(document, stream):
 
45
    document.normalize()
 
46
    ext.Print(document, stream)
 
47
    # For debugging, this is easier to read: (FIXME: disable for normal use)
 
48
    #ext.PrettyPrint(document, stream)
 
49
 
 
50
def encodeXMLName(name):
 
51
    """
 
52
    Encodes an XML (namespace, localname) pair into an ASCII string.
 
53
    If namespace is None, returns localname encoded as UTF-8.
 
54
    Otherwise, returns {namespace}localname encoded as UTF-8.
 
55
    """
 
56
    namespace, name = name
 
57
    if namespace is None: return name.encode("utf-8")
 
58
    return (u"{%s}%s" % (namespace, name)).encode("utf-8")
 
59
 
 
60
def decodeXMLName(name):
 
61
    """
 
62
    Decodes an XML (namespace, localname) pair from an ASCII string as encoded
 
63
    by encodeXMLName().
 
64
    """
 
65
    if name[0] is not "{": return (None, name.decode("utf-8"))
 
66
 
 
67
    index = name.find("}")
 
68
 
 
69
    if (index is -1 or not len(name) > index):
 
70
        raise ValueError("Invalid encoded name: %r" % (name,))
 
71
 
 
72
    return (name[1:index].decode("utf-8"), name[index+1:].decode("utf-8"))