X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=geekigeeki.py;h=5b26b553da7b344af20ce8d416693d95449f80de;hb=ebf4ddefb5f1eaf744c3919ad337b2ff43ff5e2c;hp=07365fdef0e0c1ffdf6aaa3d2c3660cbc4c569cc;hpb=8572b870b28b6ecaba354ab47a4dc016ad889c03;p=geekigeeki.git diff --git a/geekigeeki.py b/geekigeeki.py index 07365fd..5b26b55 100755 --- a/geekigeeki.py +++ b/geekigeeki.py @@ -14,7 +14,7 @@ __version__ = '4.0-' + '$Id$'[4:11] -from time import clock +from time import clock, localtime, gmtime, strftime start_time = clock() title_done = False @@ -36,6 +36,9 @@ def config_get(key, default=None): def script_name(): return os.environ.get('SCRIPT_NAME', '') +def script_path(): + return os.path.split(os.environ.get('SCRIPT_FILENAME', ''))[0] + def query_string(): path_info = os.environ.get('PATH_INFO', '') if len(path_info) and path_info[0] == '/': @@ -102,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): @@ -116,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('') @@ -337,12 +342,14 @@ def page_list(dirname=None, search_re=None): search_re = re.compile(r"^\b((([A-Z][a-z0-9]+){2,}/)*([A-Z][a-z0-9]+){2,})\b$") return sorted(filter(search_re.match, os.listdir(dirname or '.'))) -def send_footer(mod_string=None): +def send_footer(mtime=None): if config_get('debug_cgi', False): cgi.print_arguments() cgi.print_form(form) cgi.print_environ() - link_inline("sys/footer", kvargs = { 'LAST_MODIFIED': mod_string }) + link_inline("sys/footer", kvargs = { + 'LAST_MODIFIED': strftime(config_get('datetime_fmt', '%a %d %b %Y %I:%M %p'), localtime(mtime)) + }) print("") def _macro_ELAPSED_TIME(*args, **kvargs): @@ -414,7 +421,7 @@ class WikiFormatter: macro = globals().get('_macro_' + args[0]) return macro(*args, **kvargs) except Exception, e: - msg = cgi.escape(word) + ": " + cgi.escape(e.message) + msg = cgi.escape(word) + ": " + cgi.escape(str(e)) if not self.in_html: msg = '' + msg + '' return msg @@ -632,15 +639,19 @@ class Page: def _tmp_filename(self): return self.page_name + '.tmp' + 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() @@ -663,7 +674,7 @@ class Page: for filename in page_list(self._filename(), file_re): if image_re.match(filename): - maxwidth = config_get(image_maxwidth, '') + maxwidth = config_get('image_maxwidth', '400') if maxwidth: maxwidth = ' | maxwidth=' + str(maxwidth) out += '{{' + self.page_name + '/' + filename + ' | ' + humanlink(filename) + maxwidth + ' | class=thumbleft}}\n' @@ -726,19 +737,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(config_get(datetime_fmt, '%a %d %b %Y %I:%M %p'), 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) @@ -762,18 +763,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): @@ -787,7 +787,7 @@ class Page: except OSError, err: if err.errno != errno.ENOENT: raise err path = os.path.split(name)[0] - if not os.path.exists(path): + if path and not os.path.exists(path): os.makedirs(path) os.rename(tmp_filename, name)