[CalendarServer-changes] [3763] CalendarServer/trunk/calendarserver/webcal/resource.py
source_changes at macosforge.org
source_changes at macosforge.org
Fri Feb 27 16:34:52 PST 2009
Revision: 3763
http://trac.macosforge.org/projects/calendarserver/changeset/3763
Author: wsanchez at apple.com
Date: 2009-02-27 16:34:52 -0800 (Fri, 27 Feb 2009)
Log Message:
-----------
Read template from file
Modified Paths:
--------------
CalendarServer/trunk/calendarserver/webcal/resource.py
Modified: CalendarServer/trunk/calendarserver/webcal/resource.py
===================================================================
--- CalendarServer/trunk/calendarserver/webcal/resource.py 2009-02-27 23:52:42 UTC (rev 3762)
+++ CalendarServer/trunk/calendarserver/webcal/resource.py 2009-02-28 00:34:52 UTC (rev 3763)
@@ -22,6 +22,9 @@
"WebCalendarResource",
]
+import os
+
+from time import time
from urlparse import urlparse
from cgi import parse_qs
@@ -30,9 +33,9 @@
from twisted.web2.http_headers import MimeType
from twisted.web2.stream import MemoryStream
from twisted.web2.dav import davxml
-from twisted.web2.dav.static import DAVFile
-from twistedcaldav.extensions import ReadOnlyResourceMixIn
+from twistedcaldav.config import config
+from twistedcaldav.extensions import DAVFile, ReadOnlyResourceMixIn
class WebCalendarResource (ReadOnlyResourceMixIn, DAVFile):
def defaultAccessControlList(self):
@@ -72,6 +75,58 @@
def createSimilarFile(self, path):
return DAVFile(path)
+ _htmlContent_lastCheck = 0
+ _htmlContent_statInfo = 0
+ _htmlContentDebug_lastCheck = 0
+ _htmlContentDebug_statInfo = 0
+
+ def htmlContent(self, debug=False):
+ if debug:
+ cacheAttr = "_htmlContentDebug"
+ templateFileName = "debug_template.html"
+ else:
+ cacheAttr = "_htmlContent"
+ templateFileName = "template.html"
+ templateFileName = os.path.join(config.WebCalendarRoot, "calendar", templateFileName)+"1"
+
+ #
+ # See if the file changed, and dump the cached template if so.
+ # Don't bother to check if we've checked in the past minute.
+ # We don't cache if debug is true.
+ #
+ if not debug and hasattr(self, cacheAttr):
+ currentTime = time()
+ if currentTime - getattr(self, cacheAttr + "_lastCheck") > 60:
+ statInfo = os.stat(templateFileName)
+ statInfo = (statInfo.st_mtime, statInfo.st_size)
+ if statInfo != getattr(self, cacheAttr + "_statInfo"):
+ print "*"*40
+ print currentTime
+ print getattr(self, cacheAttr + "_lastCheck")
+ print statInfo
+ print getattr(self, cacheAttr + "_statInfo")
+ print "*"*40
+ delattr(self, cacheAttr)
+ setattr(self, cacheAttr + "_statInfo", statInfo)
+ setattr(self, cacheAttr + "_lastCheck", currentTime)
+
+ #
+ # If we don't have a cached template, load it up.
+ #
+ if not hasattr(self, cacheAttr):
+ templateFile = open(templateFileName)
+ try:
+ htmlContent = templateFile.read()
+ finally:
+ templateFile.close()
+
+ if debug:
+ # Don't cache
+ return htmlContent
+ setattr(self, cacheAttr, htmlContent)
+
+ return getattr(self, cacheAttr)
+
def render(self, request):
if not self.fp.isdir():
return responsecode.NOT_FOUND
@@ -90,10 +145,7 @@
# Parse debug query arg
#
debug = queryValue("debug")
- if debug is not None and debug.lower() in ("1", "true", "yes"):
- debug = "true"
- else:
- debug = "false"
+ debug = debug is not None and debug.lower() in ("1", "true", "yes")
#
# Parse TimeZone query arg
@@ -105,53 +157,17 @@
#
# Make some HTML
#
- data = """
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+ try:
+ htmlContent = self.htmlContent(debug) % {
+ "tzid": tzid,
+ "principalURL": authenticatedPrincipalURL,
+ }
+ except IOError, e:
+ self.log_error("Unable to obtain WebCalendar template: %s" % (e,))
+ return responsecode.NOT_FOUND
-<html lang="en">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
- <meta name="caldav_principal_path" content="%(principalURL)s">
- <meta name="tzid" content="%(tzid)s">
- <title>Calendar</title>
- <link rel="stylesheet" href="/webcal/calendar/css/calendar_standalone.css" type="text/css" media="screen" charset="utf-8">
- <link rel="stylesheet" href="/webcal/css/required/niftydate.css" type="text/css" media="screen" charset="utf-8">
- <link rel="stylesheet" href="/webcal/css/required/calendar.css" type="text/css" media="screen" charset="utf-8">
- <link rel="stylesheet" href="/webcal/css/required/dialog.css" type="text/css" media="screen" charset="utf-8">
- <link rel="stylesheet" href="/webcal/css/required/forms.css" type="text/css" media="screen" charset="utf-8">
- <link rel="stylesheet" href="/webcal/css/required/search.css" type="text/css" media="screen" charset="utf-8">
- <link rel="stylesheet" href="/webcal/css/required/widgets.css" type="text/css" media="screen" charset="utf-8">
- <link rel="stylesheet" href="/webcal/css/required/tags.css" type="text/css" media="screen" charset="utf-8">
- <link rel="stylesheet" href="/webcal/css/required/tooltip.css" type="text/css" media="screen" charset="utf-8">
- <link rel="stylesheet" href="/webcal/css/required/paginator.css" type="text/css" media="screen" charset="utf-8">
- <script src="/webcal/calendar/temp_exported_locStrings.js" type="text/javascript" charset="utf-8"></script>
- <script src="/webcal/javascript/prototype.js" type="text/javascript" charset="utf-8"></script>
- <script src="/webcal/javascript/md5.js" type="text/javascript" charset="utf-8"></script>
- <script src="/webcal/javascript/effects.js" type="text/javascript" charset="utf-8"></script>
- <script src="/webcal/javascript/builder.js" type="text/javascript" charset="utf-8"></script>
- <script src="/webcal/javascript/locUtils.js" type="text/javascript" charset="utf-8"></script>
- <script src="/webcal/javascript/formatDate.js" type="text/javascript" charset="utf-8"></script>
- <script src="/webcal/javascript/widgets_core.js" type="text/javascript" charset="utf-8"></script>
- <script src="/webcal/javascript/widgets.js" type="text/javascript" charset="utf-8"></script>
- <script src="/webcal/javascript/caldav.js" type="text/javascript" charset="utf-8"></script>
- <script src="/webcal/javascript/calaccess.js" type="text/javascript" charset="utf-8"></script>
- <script type="text/javascript" charset="utf-8">gDebug = %(debug)s;</script>
- </head>
- <body>
- <div id="module_calendars"></div>
- <script type="text/javascript" charset="utf-8">
- setTimeout(function() { if (window.prepare) prepare() }, 10);
- </script>
- </body>
-</html>
-""" % {
- "tzid": tzid,
- "principalURL": authenticatedPrincipalURL,
- "debug": debug,
-}
-
response = Response()
- response.stream = MemoryStream(data, start=1)
+ response.stream = MemoryStream(htmlContent)
for (header, value) in (
("content-type", self.contentType()),
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20090227/d8a3d7fc/attachment-0001.html>
More information about the calendarserver-changes
mailing list