X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=geekigeeki.py;h=84f1db5f3a0305e5f9ef8a39ca101335b75356f6;hb=cb4160fc9e77f9fe29bca28ed504ca38dac94089;hp=46c61c55ad5343f95bbf6541eb959a6cab0f0638;hpb=25befe4147c23d55b1ef3fc8af45c719e2e39f8c;p=geekigeeki.git
diff --git a/geekigeeki.py b/geekigeeki.py
index 46c61c5..84f1db5 100755
--- a/geekigeeki.py
+++ b/geekigeeki.py
@@ -1,10 +1,9 @@
-#! /usr/bin/env python
-"""Quick-quick implementation of WikiWikiWeb in Python
-"""
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
#
-# Copyright (C) 1999, 2000 Martin Pool
-# This version includes additional changes by Gerardo Poggiali (2002)
-# This version includes additional changes by Bernardo Innocenti (2007)
+# Copyright 1999, 2000 Martin Pool
+# Copyright 2002 Gerardo Poggiali
+# Copyright 2007, 2008 Bernardo Innocenti
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -19,15 +18,18 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-__version__ = '$Revision: 1.63+gerry+bernie $'[11:-2]
+__version__ = '$Id$'[4:12]
-import cgi, sys, string, os, re, errno, time, stat
+from time import clock
+start_time = clock()
+
+import cgi, sys, string, os, re, errno, stat
from os import path, environ
# Regular expression defining a WikiWord
# (but this definition is also assumed in other places)
-file_re = re.compile(r"^\b([A-Za-z0-9_\.\-]+)\b$")
-word_re = re.compile(r"^\b([A-Z][a-z]+){2,}\b$")
+file_re = re.compile(r"^\b([A-Za-z0-9_\.\-/]+)\b$")
+word_re = re.compile(r"^\b((([A-Z][a-z]+){2,}/)*([A-Z][a-z]+){2,})\b$")
img_re = re.compile(r"^.*\.(png|gif|jpg|jpeg)$", re.IGNORECASE)
url_re = re.compile(r"^[a-z]{3,8}://[^\s'\"]+\S$")
@@ -58,6 +60,15 @@ def get_hostname(addr):
except:
return addr
+def relative_url(path, privileged=False):
+ if not (url_re.match(path) or path.startswith('/')):
+ if privileged:
+ url = privileged_path()
+ else:
+ url = script_name()
+ path = url + '/' + path
+ return path
+
# Formatting stuff --------------------------------------------------
def emit_header(type="text/html"):
@@ -102,16 +113,17 @@ def send_title(name, text="Limbo", msg=None, msg_type='error'):
# Head
emit_header()
- print """
-
-"""
+ print ''
+ print ''
+
+ site_name = globals().get('site_name', 'Unconfigured Site')
print "%s: %s" % (site_name, text)
print ' '
if not name:
print ' '
- if css_url:
- print ' ' % css_url
+ for css in css_url:
+ print ' ' % relative_url(css)
print ''
# Body
@@ -127,18 +139,20 @@ def send_title(name, text="Limbo", msg=None, msg_type='error'):
print '
'
print ""
print_search_stats(len(hits), len(all_pages))
-
def do_titlesearch(needle):
# TODO: check needle is legal -- but probably we can just accept any RE
send_title(None, "Title search for \"" + needle + '"')
@@ -209,10 +219,10 @@ def do_titlesearch(needle):
print_search_stats(len(hits), len(all_pages))
-
def print_search_stats(hits, searched):
print "
%d hits out of %d pages searched.
" % (hits, searched)
+#TODO: merge into do_savepage()
def do_edit(pagename):
Page(pagename).send_editor()
@@ -220,9 +230,6 @@ def do_raw(pagename):
Page(pagename).send_raw()
def do_savepage(pagename):
- if privileged_url is None:
- raise 'editing disallowed for ' + pagename
-
global form
pg = Page(pagename)
if 'preview' in form:
@@ -231,7 +238,7 @@ def do_savepage(pagename):
pg.save_text(form['savetext'].value)
pg.send_page()
elif 'cancel' in form:
- pg.msg = 'Editing cancelled'
+ pg.msg = 'Editing canceled'
pg.msg_type = 'notice'
pg.send_page()
else:
@@ -245,23 +252,23 @@ def make_index_key():
s = s + '
'
return s
-
def page_list():
- return filter(word_re.match, os.listdir(text_dir))
-
+ return filter(word_re.match, os.listdir(data_dir))
def send_footer(name, mod_string=None):
- if debug_cgi:
+ if globals().get('debug_cgi', False):
cgi.print_arguments()
cgi.print_form(cgi.FieldStorage())
cgi.print_environ()
+ global __version__
print ''
-
# ----------------------------------------------------------
# Macros
def _macro_TitleSearch(*vargs):
@@ -295,7 +302,7 @@ def _macro_WordIndex(*vargs):
# set title
for word in all_words:
letter = string.lower(word[0])
- if letter <> last_letter:
+ if letter != last_letter:
s = s + ';
' % (letter, letter)
last_letter = letter
@@ -317,7 +324,7 @@ def _macro_TitleIndex(*vargs):
current_letter = None
for name in pages:
letter = string.lower(name[0])
- if letter <> current_letter:
+ if letter != current_letter:
s = s + '