~ubuntu-branches/ubuntu/lucid/twisted-web2/lucid

« back to all changes in this revision

Viewing changes to twisted/web2/dav/method/report_expand.py

  • Committer: Bazaar Package Importer
  • Author(s): Matthias Klose
  • Date: 2006-02-23 00:38:42 UTC
  • mfrom: (0.1.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20060223003842-rcpl8v09a91wfpvr
Tags: 0.1.0.20060222-1ubuntu1
Synchronize with Debian unstable.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# -*- test-case-name: twisted.web2.dav.test.test_report_expand -*-
 
2
##
 
3
# Copyright (c) 2005 Apple Computer, Inc. All rights reserved.
 
4
#
 
5
# Permission is hereby granted, free of charge, to any person obtaining a copy
 
6
# of this software and associated documentation files (the "Software"), to deal
 
7
# in the Software without restriction, including without limitation the rights
 
8
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 
9
# copies of the Software, and to permit persons to whom the Software is
 
10
# furnished to do so, subject to the following conditions:
 
11
 
12
# The above copyright notice and this permission notice shall be included in all
 
13
# copies or substantial portions of the Software.
 
14
 
15
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 
16
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 
17
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 
18
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 
19
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 
20
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 
21
# SOFTWARE.
 
22
#
 
23
# DRI: Wilfredo Sanchez, wsanchez@apple.com
 
24
##
 
25
 
 
26
"""
 
27
WebDAV expand-property report
 
28
"""
 
29
 
 
30
__all__ = ["report_DAV__expand_property"]
 
31
 
 
32
from twisted.web2 import responsecode
 
33
 
 
34
from twisted.web2.dav import davxml
 
35
from twisted.web2.dav.http import statusForFailure
 
36
from twisted.web2.dav.davxml import dav_namespace
 
37
 
 
38
def report_DAV__expand_property(self, request, expand_property):
 
39
    """
 
40
    Generate an expand-property REPORT. (RFC 3253, section 3.8)
 
41
    """
 
42
    # FIXME: Handle depth header
 
43
 
 
44
    if not isinstance(expand_property, davxml.ExpandProperty):
 
45
        raise ValueError("%s expected as root element, not %s."
 
46
                         % (davxml.ExpandProperty.sname(), expand_property.sname()))
 
47
 
 
48
    #
 
49
    # Expand DAV:allprop
 
50
    #
 
51
    properties = {}
 
52
 
 
53
    for property in expand_property.children:
 
54
        namespace = property.getAttribute("namespace")
 
55
        name      = property.getAttribute("name")
 
56
 
 
57
        if not namespace: namespace = dav_namespace
 
58
 
 
59
        if (namespace, name) == (dav_namespace, "allprop"):
 
60
            for all_property in self.properties.allpropKeys():
 
61
                properties[all_property.qname()] = property
 
62
        else:
 
63
            properties[(namespace, name)] = property
 
64
 
 
65
    #
 
66
    # Look up the requested properties
 
67
    #
 
68
    properties_by_status = {
 
69
        responsecode.OK        : [],
 
70
        responsecode.NOT_FOUND : [],
 
71
    }
 
72
 
 
73
    for property in properties:
 
74
        if property in self.properties:
 
75
            try:
 
76
                value = self.properties[property]
 
77
                if isinstance(value, davxml.HRef):
 
78
                    raise NotImplementedError()
 
79
                else:
 
80
                    raise NotImplementedError()
 
81
            except:
 
82
                f = Failure()
 
83
 
 
84
                log.err("Error reading property %r for resource %s: %s"
 
85
                        % (property, self, f.value))
 
86
 
 
87
                status = statusForFailure(f, "getting property: %s" % (property,))
 
88
                if status not in properties_by_status:
 
89
                    properties_by_status[status] = []
 
90
 
 
91
                raise NotImplementedError()
 
92
 
 
93
                #properties_by_status[status].append(
 
94
                #    ____propertyName(property)
 
95
                #)
 
96
        else:
 
97
            log.err("Can't find property %r for resource %s" % (property, self))
 
98
            properties_by_status[responsecode.NOT_FOUND].append(property)
 
99
 
 
100
    raise NotImplementedError()