X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=geekigeeki.py;h=263c4829187a28dd11e3fd3cd0eff068eabedaf1;hb=488a02407fffcc35f0ec91dbe6a44eb13730df91;hp=07365fdef0e0c1ffdf6aaa3d2c3660cbc4c569cc;hpb=8572b870b28b6ecaba354ab47a4dc016ad889c03;p=geekigeeki.git diff --git a/geekigeeki.py b/geekigeeki.py index 07365fd..263c482 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('') @@ -141,7 +146,7 @@ def send_title(name, text="Limbo", msg_text=None, msg_type='error', writable=Fal editable = name and writable and config_get('privileged_url') is not None if editable: print(' ' \ - % (privileged_path() + '?a=edit&q=' + name)) + % relative_url('?a=edit&q=' + name, privileged=True)) history = config_get('history_url') if history is not None: @@ -152,7 +157,7 @@ def send_title(name, text="Limbo", msg_text=None, msg_type='error', writable=Fal # Body if editable: - print('
') + print('') else: print('') @@ -232,10 +237,13 @@ def link_inline(name, descr=None, kvargs={}): % (url, url, name) def link_inline_glob(pattern, descr=None, kvargs={}): - s = '' - for name in glob.glob(pattern): - s += link_inline(name, descr, kvargs) - return s + if not url_re.match(pattern) and bool(set(pattern) & set('?*[')): + s = '' + for name in glob.glob(pattern): + s += link_inline(name, descr, kvargs) + return s + else: + return link_inline(pattern, descr, kvargs) # Search --------------------------------------------------- @@ -337,12 +345,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): @@ -363,7 +373,7 @@ class WikiFormatter: self.h_level = 0 self.in_pre = self.in_html = self.in_table = self.in_li = False self.in_header = True - self.list_indents = [] + self.list_indents = [] # a list of pairs (indent_level, list_type) to track nested lists self.tr_cnt = 0 self.styles = { #wiki html enabled? @@ -401,7 +411,7 @@ class WikiFormatter: return '' return s - def _undent(self): - res = '
' - res += ''
- self.list_indents = []
- return res
-
def replace(self, match):
for rule, hit in list(match.groupdict().items()):
if hit:
@@ -584,7 +589,7 @@ class WikiFormatter:
| (?P ')
- print(self._undent())
+ print(self._indent_to(0))
print('
\n"
except IOError, err:
if err.errno != errno.ENOENT and err.errno != errno.EISDIR:
- raise er
+ raise err
return self._pragmas
def pragma(self, name, default):
@@ -726,19 +735,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 +761,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 +785,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)