[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