X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=geekigeeki.py;h=ca16283d5ea2f2c78c573b3863a371add9c15aef;hb=7ce906e26b7c2c91e232508ccd0af6fe9ec4aeec;hp=ca59dcc8a150d690b92ca4c1f43ff68b25e15666;hpb=4b7dd02a651033602a4e092a981a973dd20573e7;p=geekigeeki.git
diff --git a/geekigeeki.py b/geekigeeki.py
index ca59dcc..ca16283 100755
--- a/geekigeeki.py
+++ b/geekigeeki.py
@@ -1,9 +1,9 @@
-#!/usr/bin/python
+#!/usr/bin/python3.0
# -*- coding: utf-8 -*-
#
# Copyright 1999, 2000 Martin Pool ' + Page(page_name).link_to()
- print ' . . . . ' + `count`
- print ['match', 'matches'][count != 1]
- print ' ' + Page(page_name).link_to())
+ print(' . . . . ' + repr(count))
+ print(['match', 'matches'][count != 1])
+ print(' ' + Page(filename).link_to() + " ' + Page(filename).link_to() + " %d hits out of %d pages searched. %d hits out of %d pages searched.'
+ print('
')
# FIXME: This little JS snippet is harder to pass than ACID 3.0
- print """
+ print("""
"""
+ """)
-def send_title(name, text="Limbo", msg_text=None, msg_type='error'):
+def send_title(name, text="Limbo", msg_text=None, msg_type='error', writable=False):
global title_done
if title_done: return
# Head
emit_header()
- print ''
- print ''
+ print('')
+ print('')
- site_name = globals().get('site_name', 'Unconfigured Site')
- print "')
if msg_type == 'error':
- print ' Software Failure. Press left mouse button to continue.\n'
- print msg_text
+ print(' Software Failure. Press left mouse button to continue.\n')
+ print(msg_text)
if msg_type == 'error':
- print ' Guru Meditation #DEADBEEF.ABADC0DE'
- print '
'
+ print('\n Guru Meditation #DEADBEEF.ABADC0DE')
+ print('"
+ print("
")
print_search_stats(len(hits), len(all_pages))
@@ -211,33 +234,41 @@ def handle_titlesearch(needle):
needle_re = re.compile(needle, re.IGNORECASE)
all_pages = page_list()
- hits = filter(needle_re.search, all_pages)
+ hits = list(filter(needle_re.search, all_pages))
- print "")
for (count, page_name) in hits:
- print '
"
+ print('"
+ print("
")
print_search_stats(len(hits), len(all_pages))
def print_search_stats(hits, searched):
- print "")
for filename in hits:
- print '
"
+ print('
' + print('
')
# For each line, we scan through looking for magic
# strings, outputting verbatim any intervening text
@@ -515,19 +516,19 @@ class PageFormatter:
+ r"|(?P '
+ print(' ')
if blank_re.match(self.line):
- print ' '
+ print(' ')
else:
indent = indent_re.match(self.line)
- print self._indent_to(len(indent.group(0)))
- print re.sub(scan_re, self.replace, self.line)
+ print(self._indent_to(len(indent.group(0))), end=' ')
+ print(re.sub(scan_re, self.replace, self.line))
- if self.in_pre: print ''
- if self.in_table: print ' '
- print self._undent()
- print ' ')
+ print(self._undent())
+ print(' Editing ' + self.page_name
+ print((' Editing ' + self.page_name
+ ' for ' + cgi.escape(remote_user())
+ ' from ' + cgi.escape(get_hostname(remote_host()))
- + ' " + Page('EditingTips').link_to() + "\{\{\{|\s*\}\}\})"
- + r"|(?P
^\s*\|\|(=|)\s*)"
@@ -543,31 +544,31 @@ class PageFormatter:
indent_re = re.compile(r"^\s*")
tr_re = re.compile(r"^\s*\|\|")
eol_re = re.compile(r"\r?\n")
- for self.line in eol_re.split(self.raw.expandtabs()):
- # Skip ACLs
+ for self.line in eol_re.split(str(self.raw.expandtabs())):
+ # Skip pragmas
if self.in_header:
if self.line.startswith('#'):
continue
self.in_header = False
if self.in_pre:
- print re.sub(pre_re, self.replace, self.line)
+ print(re.sub(pre_re, self.replace, self.line))
else:
if self.in_table and not tr_re.match(self.line):
self.in_table = False
- print '
\n"
- except IOError, er:
- if er.errno != errno.ENOENT:
- raise er
- return self.attrs
-
- def get_attr(self, name, default):
- return self.get_attrs().get(name, default)
+ if err.errno == errno.EISDIR:
+ return self.format_dir()
+ raise err
+
+ def format_dir(self):
+ out = '== '
+ pathname = ''
+ for dirname in self.page_name.split('/'):
+ pathname = (pathname + '/' + dirname) if pathname else dirname
+ out += '[[' + pathname + '|' + dirname + ']]/'
+ out += ' ==\n'
+
+ for filename in page_list(self._filename(), file_re):
+ if img_re.match(filename):
+ if image_maxwidth:
+ maxwidth_arg = '|maxwidth=' + str(image_maxwidth)
+ out += '{{' + self.page_name + '/' + filename + '|' + filename + maxwidth_arg + '}}\n'
+ else:
+ out += ' * [[' + self.page_name + '/' + filename + ']]\n'
+ return out
+
+ def pragmas(self):
+ if not '_pragmas' in self.__dict__:
+ try:
+ file = open(self._filename(), 'rt')
+ attr_re = re.compile(r"^#(\S*)(.*)$")
+ for line in file:
+ m = attr_re.match(line)
+ if not m:
+ break
+ self._pragmas[m.group(1)] = m.group(2).strip()
+ #print "bernie: pragmas[" + m.group(1) + "] = " + m.group(2) + "
\n"
+ except IOError as err:
+ if err.errno != errno.ENOENT and err.errno != errno.EISDIR:
+ raise er
+ return self._pragmas
+
+ def pragma(self, name, default):
+ return self.pragmas().get(name, default)
def can(self, action, default=True):
acl = None
try:
#acl SomeUser:read,write All:read
- acl = self.get_attr("acl", None)
+ acl = self.pragma("acl", None)
for rule in acl.split():
(user, perms) = rule.split(':')
if user == remote_user() or user == "All":
return action in perms.split(',')
return False
- except Exception, er:
+ except Exception:
if acl:
self.msg_text = 'Illegal acl line: ' + acl
return default
@@ -653,29 +669,31 @@ class Page:
def can_read(self):
return self.can("read", True)
- def send_page(self):
- page_name = None
- if self.can_write():
- page_name = self.page_name
-
- #css foo.css bar.css
- global css_url
- css_url = self.get_attr("css", "").split() + css_url
-
- send_title(page_name, self.split_title(), msg_text=self.msg_text, msg_type=self.msg_type)
+ def send_naked(self):
if self.can_read():
- PageFormatter(self.get_raw_body()).print_html()
+ WikiFormatter(self.get_raw_body()).print_html()
else:
send_guru("Read access denied by ACLs", "notice")
- send_footer(page_name, self._last_modified())
+
+ def format(self):
+ #css foo.css
+ value = self.pragma("css", None)
+ if value:
+ global link_urls
+ 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())
+ self.send_naked()
+ send_footer(self._last_modified())
def _last_modified(self):
try:
from time import localtime, strftime
- modtime = localtime(os.stat(self._text_filename())[stat.ST_MTIME])
- except OSError, er:
- if er.errno != errno.ENOENT:
- raise er
+ modtime = localtime(os.stat(self._filename())[stat.ST_MTIME])
+ except OSError as err:
+ if err.errno != errno.ENOENT:
+ raise err
return None
return strftime(datetime_fmt, modtime)
@@ -685,54 +703,71 @@ class Page:
send_guru("Write access denied by ACLs", "error")
return
- file = ''
+ filename = ''
if 'file' in form:
- file = form['file'].value
+ filename = form['file'].value
- print ('