X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;ds=inline;f=geekigeeki.py;h=6e1ba6ea4a5a2c9ddd808ebe717d499d8cb8731e;hb=refs%2Fheads%2Fpython3;hp=dba75a28afe2493b8cf42f06ac92b5614a630d85;hpb=6ea5bc45761e688cc888c7a17a6399b31d04bcc7;p=geekigeeki.git
diff --git a/geekigeeki.py b/geekigeeki.py
index dba75a2..6e1ba6e 100755
--- a/geekigeeki.py
+++ b/geekigeeki.py
@@ -1,4 +1,4 @@
-#!/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(' . . . . ' + str(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))
@@ -212,28 +234,36 @@ 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
@@ -474,19 +516,19 @@ class WikiFormatter:
+ 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*)"
@@ -502,31 +544,31 @@ class WikiFormatter:
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(), 'utf-8')):
+ # 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)
+
+ def pragmas(self):
+ if not '_pragmas' in self.__dict__:
+ self._pragmas = {}
+ 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
@@ -627,25 +677,24 @@ class Page:
send_guru("Read access denied by ACLs", "notice")
def format(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)
+ #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(page_name, self._last_modified())
+ 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, er:
- if er.errno != errno.ENOENT:
- raise er
+ except OSError as err:
+ if err.errno != errno.ENOENT:
+ raise err
return None
return strftime(datetime_fmt, modtime)
@@ -655,41 +704,58 @@ 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 ('