Add Last-Modified HTTP header for GET requests.

This commit is contained in:
Guillaume Ayoub 2010-06-24 01:50:21 +02:00
parent 97dd530bb6
commit 391037c24c
3 changed files with 17 additions and 0 deletions

2
NEWS
View File

@ -9,6 +9,8 @@
0.5 - **Not released yet** 0.5 - **Not released yet**
========================== ==========================
* Last-Modified HTTP header
0.3 - Dancing Flowers 0.3 - Dancing Flowers
===================== =====================

View File

@ -169,6 +169,7 @@ class CalendarHTTPHandler(server.BaseHTTPRequestHandler):
self.send_response(client.OK) self.send_response(client.OK)
self.send_header("Content-Length", len(answer)) self.send_header("Content-Length", len(answer))
self.send_header("Content-Type", "text/calendar") self.send_header("Content-Type", "text/calendar")
self.send_header("Last-Modified", self._calendar.last_modified)
self.send_header("ETag", etag) self.send_header("ETag", etag)
self.end_headers() self.end_headers()
self.wfile.write(answer) self.wfile.write(answer)

View File

@ -27,6 +27,7 @@ Define the main classes of a calendar as seen from the server.
import os import os
import codecs import codecs
import time
from radicale import config from radicale import config
@ -136,6 +137,9 @@ class Calendar(object):
self.encoding = "utf-8" self.encoding = "utf-8"
self.owner = path.split("/")[0] self.owner = path.split("/")[0]
self.path = os.path.join(FOLDER, path.replace("/", os.path.sep)) self.path = os.path.join(FOLDER, path.replace("/", os.path.sep))
# Create calendar if needed, useful for ``self.last_modified``
if not os.path.exists(self.path):
self.write()
@staticmethod @staticmethod
def _parse(text, item_types, name=None): def _parse(text, item_types, name=None):
@ -267,3 +271,13 @@ class Calendar(object):
def timezones(self): def timezones(self):
"""Get list of ``Timezome`` items in calendar.""" """Get list of ``Timezome`` items in calendar."""
return self._parse(self.text, (Timezone,)) return self._parse(self.text, (Timezone,))
@property
def last_modified(self):
"""Get the last time the calendar has been modified.
The date is formatted according to rfc1123-5.2.14.
"""
modification_time = time.localtime(os.path.getmtime(self.path))
return time.strftime("%a, %d %b %Y %H:%M:%S %Z", modification_time)