From 637b5e74007d806f09cae0704fc356b8765919f1 Mon Sep 17 00:00:00 2001 From: Bernie Innocenti Date: Sat, 15 Aug 2009 03:15:01 +0200 Subject: [PATCH] Send Last-Modified HTTP header --- geekigeeki.py | 47 +++++++++++++++++++++-------------------------- 1 file changed, 21 insertions(+), 26 deletions(-) diff --git a/geekigeeki.py b/geekigeeki.py index 5a401ab..c5b5109 100755 --- a/geekigeeki.py +++ b/geekigeeki.py @@ -20,7 +20,7 @@ __version__ = '4.0-' + '$Id$'[4:11] -from time import clock +from time import clock, localtime, gmtime, strftime start_time = clock() title_done = False @@ -105,7 +105,9 @@ def url_args(kvargs): return '' # Formatting stuff -------------------------------------------------- -def emit_header(mime_type="text/html"): +def emit_header(mtime=None, mime_type="text/html"): + if mtime: + print("Last-Modified: " + strftime("%a, %d %b %Y %H:%M:%S GMT", gmtime(mtime))) print("Content-type: " + mime_type + "; charset=utf-8\n") def send_guru(msg_text, msg_type): @@ -119,12 +121,12 @@ def send_guru(msg_text, msg_type): print('' \ % relative_url('sys/GuruMeditation.js')) -def send_title(name, text="Limbo", msg_text=None, msg_type='error', writable=False): +def send_title(name, text="Limbo", msg_text=None, msg_type='error', writable=False, mtime=None): global title_done if title_done: return # Head - emit_header() + emit_header(mtime) print('') print('') @@ -332,7 +334,7 @@ def page_list(dirname=None, re=None): re = re.compile(r"^\b((([A-Z][a-z0-9]+){2,}/)*([A-Z][a-z0-9]+){2,})\b$") return sorted(filter(re.match, os.listdir(dirname or data_dir))) -def send_footer(mod_string=None): +def send_footer(mtime=None): if globals().get('debug_cgi', False): cgi.print_arguments() cgi.print_form(form) @@ -345,8 +347,8 @@ def send_footer(mod_string=None): generated in %0.3fs by GeekiGeeki version %s

''' % (relative_url('sys/cc-by-sa.png'), clock() - start_time, __version__)) - if mod_string: - print('

last modified %s

' % mod_string) + if mtime: + print('

last modified %s

' % strftime(datetime_fmt, localtime(mtime))) print('') class WikiFormatter: @@ -627,15 +629,19 @@ class Page: def _tmp_filename(self): return os.path.join(data_dir, ('#' + self.page_name.replace('/','_') + '.' + str(os.getpid()) + '#')) - def exists(self): + def _mtime(self): try: - os.stat(self._filename()) - return True + return os.stat(self._filename()).st_mtime except OSError, err: if err.errno == errno.ENOENT: - return False + return None raise err + def exists(self): + if self._mtime(): + return True + return False + def get_raw_body(self, default=None): try: return open(self._filename(), 'rb').read() @@ -720,19 +726,9 @@ class Page: link_urls += [ [ "stylesheet", value ] ] send_title(self.page_name, self.split_title(), - msg_text=self.msg_text, msg_type=self.msg_type, writable=self.can_write()) + msg_text=self.msg_text, msg_type=self.msg_type, writable=self.can_write(), mtime=self._mtime()) self.send_naked() - send_footer(self._last_modified()) - - def _last_modified(self): - try: - from time import localtime, strftime - modtime = localtime(os.stat(self._filename())[stat.ST_MTIME]) - except OSError, err: - if err.errno != errno.ENOENT: - raise err - return None - return strftime(datetime_fmt, modtime) + send_footer(mtime=self._mtime()) def send_editor(self, preview=None): send_title(None, 'Edit ' + self.split_title(), msg_text=self.msg_text, msg_type=self.msg_type) @@ -777,18 +773,17 @@ class Page: def send_raw(self, mimetype='text/plain', args=[]): if not self.can_read(): - send_title(None, msg_text='Read access denied by ACLs', msg_type='notice') + send_title(None, msg_text='Read access denied by ACLs', msg_type='notice', mtime=self._mtime()) return + emit_header(self._mtime(), mimetype) if 'maxwidth' in args: import subprocess - emit_header(mimetype) sys.stdout.flush() subprocess.check_call(['gm', 'convert', self._filename(), '-scale', args['maxwidth'].value + ' >', '-']) else: body = self.get_raw_body() - emit_header(mimetype) print(body) def _write_file(self, data): -- 2.25.1