~launchpad-pqm/launchpad/devel

« back to all changes in this revision

Viewing changes to lib/canonical/launchpad/webapp/namespace.py

  • Committer: Gary Poster
  • Date: 2011-07-27 15:25:32 UTC
  • mto: This revision was merged to the branch mainline in revision 13541.
  • Revision ID: gary.poster@canonical.com-20110727152532-50akr19c7mgcj5qu
add config option for timeout value

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright 2009-2011 Canonical Ltd.  This software is licensed under the
 
1
# Copyright 2009 Canonical Ltd.  This software is licensed under the
2
2
# GNU Affero General Public License version 3 (see the file LICENSE).
3
3
 
4
 
__metaclass__ = type
5
 
 
6
 
__all__ = [
7
 
    'FormNamespaceView',
8
 
    'JsonModelNamespaceView',
9
 
    ]
10
 
 
11
 
 
12
4
from z3c.ptcompat import ViewPageTemplateFile
13
5
from zope.app.pagetemplate.viewpagetemplatefile import BoundPageTemplate
14
 
from zope.app.publisher.browser import getDefaultViewName
15
 
from zope.component import getMultiAdapter
16
6
from zope.security.proxy import removeSecurityProxy
17
7
from zope.traversing.interfaces import TraversalError
18
8
from zope.traversing.namespace import view
19
 
from zope.interface import implements
20
 
from zope.publisher.interfaces.browser import IBrowserPublisher
21
9
 
22
10
from lp.app.browser.launchpadform import LaunchpadFormView
23
11
 
40
28
        context = removeSecurityProxy(self.context)
41
29
 
42
30
        if isinstance(context, LaunchpadFormView):
43
 
            # Note: without explicitly creating the BoundPageTemplate here
 
31
            # Note: without explicitely creating the BoundPageTemplate here
44
32
            # the view fails to render.
45
33
            context.index = BoundPageTemplate(FormNamespaceView.template,
46
34
                                              context)
48
36
            raise TraversalError("The URL does not correspond to a form.")
49
37
 
50
38
        return self.context
51
 
 
52
 
 
53
 
class JsonModelNamespaceView(view):
54
 
    """A namespace view to handle traversals with ++model++.
55
 
 
56
 
    Use of this namespace is only guaranteed to work if it is fully populated
57
 
    by a view's `initialize` method.  Any objects added after the call to
58
 
    initialize will not be presented by the namespace.
59
 
    """
60
 
 
61
 
    implements(IBrowserPublisher)
62
 
 
63
 
    def traverse(self, name, ignored):
64
 
        """Model traversal adapter.
65
 
 
66
 
        This adapter allows any LaunchpadView to render its JSON cache.
67
 
        """
68
 
        return self
69
 
 
70
 
    def browserDefault(self, request):
71
 
        # Tell traversal to stop, already.
72
 
        return self, None
73
 
 
74
 
    def __call__(self):
75
 
        """Return the JSON cache."""
76
 
        if IBrowserPublisher.providedBy(self.context):
77
 
            view = self.context
78
 
        else:
79
 
            defaultviewname = getDefaultViewName(
80
 
                self.context, self.request)
81
 
            view = getMultiAdapter(
82
 
                (self.context, self.request), name=defaultviewname)
83
 
        if view is None:
84
 
            return
85
 
        naked_view = removeSecurityProxy(view)
86
 
        naked_view.initialize()
87
 
        cache = naked_view.getCacheJSON()
88
 
        self.request.response.setHeader('content-type', 'application/json')
89
 
        return cache