[CalendarServer-changes] [7914] CalendarServer/branches/users/glyph/imip-and-admin-html/ calendarserver/webadmin

source_changes at macosforge.org source_changes at macosforge.org
Thu Aug 11 21:42:42 PDT 2011


Revision: 7914
          http://trac.macosforge.org/projects/calendarserver/changeset/7914
Author:   glyph at apple.com
Date:     2011-08-11 21:42:42 -0700 (Thu, 11 Aug 2011)
Log Message:
-----------
add a bootstrap renderer that can be tested against the old implementation.

Modified Paths:
--------------
    CalendarServer/branches/users/glyph/imip-and-admin-html/calendarserver/webadmin/resource.py
    CalendarServer/branches/users/glyph/imip-and-admin-html/calendarserver/webadmin/test/test_resource.py

Modified: CalendarServer/branches/users/glyph/imip-and-admin-html/calendarserver/webadmin/resource.py
===================================================================
--- CalendarServer/branches/users/glyph/imip-and-admin-html/calendarserver/webadmin/resource.py	2011-08-12 04:42:31 UTC (rev 7913)
+++ CalendarServer/branches/users/glyph/imip-and-admin-html/calendarserver/webadmin/resource.py	2011-08-12 04:42:42 UTC (rev 7914)
@@ -1,3 +1,4 @@
+# -*- test-case-name: calendarserver.webadmin.test.test_resource -*-
 ##
 # Copyright (c) 2009-2010 Apple Inc. All rights reserved.
 #
@@ -20,25 +21,82 @@
 
 __all__ = [
     "WebAdminResource",
+    "WebAdminPage",
 ]
 
 import cgi
 import operator
 import urlparse
 
-from calendarserver.tools.principals import principalForPrincipalID, proxySubprincipal, action_addProxyPrincipal, action_removeProxyPrincipal
+from calendarserver.tools.principals import (
+    principalForPrincipalID, proxySubprincipal, action_addProxyPrincipal,
+    action_removeProxyPrincipal
+)
 
 from twistedcaldav.config import config
 from twistedcaldav.extensions import DAVFile, ReadOnlyResourceMixIn
 
 from twisted.internet.defer import inlineCallbacks, returnValue
 from twext.web2.http import Response
+from twisted.python.modules import getModule
 from twext.web2.http_headers import MimeType
 from twext.web2.stream import MemoryStream
 from twext.web2.dav import davxml
 
+from twisted.web.template import (
+    Element, renderer, XMLFile, flattenString
+)
 
+from twisted.web.error import MissingRenderMethod
+
+
+
+class WebAdminPage(Element):
+    """
+    Web administration renderer for HTML.
+    """
+
+    loader = XMLFile(
+        getModule(__name__).filePath.sibling("template.html").open()
+    )
+
+    def __init__(self):
+        super(WebAdminPage, self).__init__()
+
+
+    @renderer
+    def main(self, render, tag):
+        """
+        Main renderer, which fills page-global slots like 'title'.
+        """
+        return tag.fillSlots(
+            title="Placeholder Title",
+            resourceSearch="Placeholder Resource Search",
+            resourceTitle="Placeholder Resource Title",
+            resourceId="Placeholder Resource ID",
+            davPropertyName="placeholder DAV property name",
+            name="Placeholder Name",
+            value="Placeholder Value",
+        )
+
+
+    def lookupRenderMethod(self, name):
+        """
+        FOR TESTING ONLY: construct valid renderers for any unknown renderer.
+        """
+        try:
+            return super(WebAdminPage, self).lookupRenderMethod(name)
+        except MissingRenderMethod:
+            def stub(request, tag):
+                return "Stub " + name
+            return stub
+
+
+
 class WebAdminResource (ReadOnlyResourceMixIn, DAVFile):
+    """
+    Web administration HTTP resource.
+    """
 
     def __init__(self, path, root, directory, principalCollections=()):
         self.root = root
@@ -49,7 +107,7 @@
     # Only allow administrators to access
     def defaultAccessControlList(self):
         return davxml.ACL(*config.AdminACEs)
-    
+
     def etag(self):
         # Can't be calculated here
         return None
@@ -416,6 +474,25 @@
 
         returnValue(detailHtml)
 
+
+    @inlineCallbacks
+    def renderNew(self, request):
+        """
+        Create a L{WebAdminPage} to render HTML content for this request, and
+        return a response.
+        """
+        htmlContent = yield flattenString(request, WebAdminPage())
+        response = Response()
+        response.stream = MemoryStream(htmlContent)
+        for (header, value) in (
+                ("content-type", self.contentType()),
+                ("content-encoding", self.contentEncoding()),
+            ):
+            if value is not None:
+                response.headers.setHeader(header, value)
+        returnValue(response)
+
+
     def render(self, request):
 
         # The response-generation will be deferred.

Modified: CalendarServer/branches/users/glyph/imip-and-admin-html/calendarserver/webadmin/test/test_resource.py
===================================================================
--- CalendarServer/branches/users/glyph/imip-and-admin-html/calendarserver/webadmin/test/test_resource.py	2011-08-12 04:42:31 UTC (rev 7913)
+++ CalendarServer/branches/users/glyph/imip-and-admin-html/calendarserver/webadmin/test/test_resource.py	2011-08-12 04:42:42 UTC (rev 7914)
@@ -23,8 +23,11 @@
 from twisted.web.microdom import parseString
 from calendarserver.tap.util import FakeRequest
 from twisted.internet.defer import inlineCallbacks
+from twisted.internet.defer import returnValue
 from calendarserver.webadmin.resource import WebAdminResource
 
+
+
 class RenderingTests(TestCase):
     """
     Tests for HTML rendering L{WebAdminResource}.
@@ -44,10 +47,10 @@
 
 
     @inlineCallbacks
-    def test_simplestRender(self):
+    def renderPage(self):
         """
-        Rendering a L{WebAdminResource} will result in something vaguely
-        parseable as HTML.
+        Render a page, returning a Deferred that fires with the HTML as a
+        result..
         """
         req = FakeRequest(method='GET', path='/webadmin',
                           rootResource=self.resource)
@@ -55,5 +58,28 @@
         self.assertEquals(response.code, 200)
         content = response.stream.mem
         document = parseString(content)
+        returnValue(document)
+
+
+    @inlineCallbacks
+    def test_simplestRender(self):
+        """
+        Rendering a L{WebAdminResource} will result in something vaguely
+        parseable as HTML.
+        """
+        document = yield self.renderPage()
         self.assertEquals(document.documentElement.tagName, 'html')
 
+
+
+class NewRenderingTests(RenderingTests):
+    """
+    Tests for new L{WebAdminPage} renderer.
+    """
+
+    @inlineCallbacks
+    def renderPage(self):
+        self.resource.render = self.resource.renderNew
+        returnValue((yield super(NewRenderingTests, self).renderPage()))
+
+
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20110811/fdcb82bd/attachment-0001.html>


More information about the calendarserver-changes mailing list