changeset 0:02b305e24667

Initial import
author sheep@atos.wmid.amu.edu.pl
date Wed, 28 Nov 2007 16:47:02 +0100
parents
children c2b4ae695ed4
files wiki00.py wiki01.py wiki02.py wiki03.py wiki04.py wiki05.py wiki06.py
diffstat 7 files changed, 338 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wiki00.py	Wed Nov 28 16:47:02 2007 +0100
@@ -0,0 +1,17 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+import BaseHTTPServer
+
+
+class Handler(BaseHTTPServer.BaseHTTPRequestHandler):
+
+    def do_GET(self):
+        self.send_response(200)
+        self.send_header("Content-Type", "text/plain")
+        self.end_headers()
+        self.wfile.write("Hello world!")
+
+
+server = BaseHTTPServer.HTTPServer(("127.0.0.1", 8080), Handler)
+server.serve_forever()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wiki01.py	Wed Nov 28 16:47:02 2007 +0100
@@ -0,0 +1,34 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+import BaseHTTPServer
+import urllib
+
+
+def esc(text):
+    return text.replace("&", "&amp;").replace(">", "&gt;").replace("<", "&lt;")
+
+
+class Handler(BaseHTTPServer.BaseHTTPRequestHandler):
+
+    def current_page(self):
+        return urllib.unquote(self.path.strip('/')) or "FrontPage"
+
+    def do_GET(self):
+        self.send_response(200)
+        self.send_header("Content-Type", "text/html;charset=utf-8")
+        self.end_headers()
+        page = self.current_page()
+        title = unicode(esc(page), "utf-8")
+        head = u"""<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
+"http://www.w3.org/TR/html4/strict.dtd"><html><head><title>%s</title>
+<style><!--body {width:40em;margin:1em auto;} textarea {border:1px solid
+#999;display:block;width:100%%;height:18em;}--></style></head>
+<body><h1>%s</h1>""" % (title, title)
+        self.wfile.write(head.encode("utf-8"))
+        html = u"<pre>Hello world!</pre></body></html>"
+        self.wfile.write(html.encode("utf-8"))
+
+
+server = BaseHTTPServer.HTTPServer(("127.0.0.1", 8080), Handler)
+server.serve_forever()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wiki02.py	Wed Nov 28 16:47:02 2007 +0100
@@ -0,0 +1,43 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+import BaseHTTPServer
+import urllib
+import re
+import shelve
+
+def esc(text):
+    return text.replace("&", "&amp;").replace(">", "&gt;").replace("<", "&lt;")
+
+def link(page):
+    return esc(urllib.quote(page)).replace('"', "&quot;")
+
+class Handler(BaseHTTPServer.BaseHTTPRequestHandler):
+
+    def current_page(self):
+        return urllib.unquote(self.path.strip('/')) or "FrontPage"
+
+    def do_GET(self):
+        page = self.current_page()
+        if page in server.pages:
+            self.send_response(200)
+        else:
+            self.send_response(404)
+        self.send_header("Content-Type", "text/html;charset=utf-8")
+        self.end_headers()
+        text = self.server.pages.get(page, "Empty page.")
+        title = unicode(esc(page), "utf-8")
+        head = u"""<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
+"http://www.w3.org/TR/html4/strict.dtd"><html><head><title>%s</title>
+<style><!--body {width:40em;margin:1em auto;} textarea {border:1px solid
+#999;display:block;width:100%%;height:18em;}--></style></head>
+<body><h1>%s</h1>""" % (title, title)
+        url = link(page)
+        html = u"""<pre>%s</pre><p><hr><a
+href="%s/edit">Edit text of this page</a></p>""" % (esc(text), url)
+        self.wfile.write((head + html + "</body></html>").encode("utf-8"))
+
+server = BaseHTTPServer.HTTPServer(("127.0.0.1", 8080), Handler)
+server.pages = shelve.open("pages")
+server.pages["FrontPage"] = "Hello world!"
+server.serve_forever()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wiki03.py	Wed Nov 28 16:47:02 2007 +0100
@@ -0,0 +1,50 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+import BaseHTTPServer
+import urllib
+import re
+import shelve
+
+def esc(text):
+    return text.replace("&", "&amp;").replace(">", "&gt;").replace("<", "&lt;")
+
+def link(page):
+    return esc(urllib.quote(page)).replace('"', "&quot;")
+
+class Handler(BaseHTTPServer.BaseHTTPRequestHandler):
+    link_re = re.compile(r"\[\[([^]]+)\]\]")
+
+    def link_repl(self, match):
+        title = match.group(1)
+        page = title.encode('utf-8')
+        url = link(page)
+        if page in self.server.pages:
+            return u"""<a href="%s">%s</a>""" % (url, title)
+        return u"""%s<a href="%s">?</a>""" % (title, url)
+
+    def current_page(self):
+        return urllib.unquote(self.path.strip('/')) or "FrontPage"
+
+    def do_GET(self):
+        page = self.current_page()
+        self.send_response(200)
+        self.send_header("Content-Type", "text/html;charset=utf-8")
+        self.end_headers()
+        text = self.server.pages.get(page, "Empty page.")
+        title = unicode(esc(page), "utf-8")
+        head = u"""<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
+"http://www.w3.org/TR/html4/strict.dtd"><html><head><title>%s</title>
+<style><!--body {width:40em;margin:1em auto;} textarea {border:1px solid
+#999;display:block;width:100%%;height:18em;}--></style></head>
+<body><h1>%s</h1>""" % (title, title)
+        url = link(page)
+        parsed = self.link_re.sub(self.link_repl, esc(text))
+        html = u"""<pre>%s</pre><p><hr><a
+href="%s/edit">Edit text of this page</a></p>""" % (parsed, url)
+        self.wfile.write((head + html + "</body></html>").encode("utf-8"))
+
+server = BaseHTTPServer.HTTPServer(("127.0.0.1", 8080), Handler)
+server.pages = shelve.open("pages")
+server.pages["FrontPage"] = "Hello [[world]]!"
+server.serve_forever()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wiki04.py	Wed Nov 28 16:47:02 2007 +0100
@@ -0,0 +1,58 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+import BaseHTTPServer
+import urllib
+import re
+import shelve
+
+def esc(text):
+    return text.replace("&", "&amp;").replace(">", "&gt;").replace("<", "&lt;")
+
+def link(page):
+    return esc(urllib.quote(page)).replace('"', "&quot;")
+
+class Handler(BaseHTTPServer.BaseHTTPRequestHandler):
+    link_re = re.compile(r"\[\[([^]]+)\]\]")
+
+    def link_repl(self, match):
+        title = match.group(1)
+        page = title.encode('utf-8')
+        url = link(page)
+        if page in self.server.pages:
+            return u"""<a href="%s">%s</a>""" % (url, title)
+        return u"""%s<a href="%s/edit">?</a>""" % (title, url)
+
+    def current_page(self):
+        return urllib.unquote(self.path.strip('/').split("/",1)[0]) or "FrontPage"
+
+    def do_GET(self):
+        page = self.current_page()
+        if page in self.server.pages:
+            self.send_response(200)
+        else:
+            self.send_response(404)
+        self.send_header("Content-Type", "text/html;charset=utf-8")
+        self.end_headers()
+        text = self.server.pages.get(page, "Empty page.")
+        title = unicode(esc(page), "utf-8")
+        head = u"""<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
+"http://www.w3.org/TR/html4/strict.dtd"><html><head><title>%s</title>
+<style><!--body {width:40em;margin:1em auto;} textarea {border:1px solid
+#999;display:block;width:100%%;height:18em;}--></style></head>
+<body><h1>%s</h1>""" % (title, title)
+        url = link(page)
+        if self.path.strip("/").endswith("/edit"):
+            html = u"""<form action="/%s" method="POST">
+<textarea name="text">%s</textarea>
+<input type="submit" value="Save"></form>""" % (url, esc(text))
+        else:
+            parsed = self.link_re.sub(self.link_repl, esc(text))
+            html = u"""<pre>%s</pre><p><hr>
+<a href="%s/edit">Edit text of this page</a></p>""" % (parsed, url)
+        self.wfile.write((head + html + "</body></html>").encode("utf-8"))
+
+server = BaseHTTPServer.HTTPServer(("127.0.0.1", 8080), Handler)
+server.pages = shelve.open("pages")
+server.pages["FrontPage"] = "Hello [[world]]!"
+server.serve_forever()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wiki05.py	Wed Nov 28 16:47:02 2007 +0100
@@ -0,0 +1,66 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+import BaseHTTPServer
+import urllib
+import re
+import shelve
+
+def esc(text):
+    return text.replace("&", "&amp;").replace(">", "&gt;").replace("<", "&lt;")
+
+def link(page):
+    return esc(urllib.quote(page)).replace('"', "&quot;")
+
+class Handler(BaseHTTPServer.BaseHTTPRequestHandler):
+    link_re = re.compile(r"\[\[([^]]+)\]\]")
+
+    def link_repl(self, match):
+        title = match.group(1)
+        page = title.encode('utf-8')
+        url = link(page)
+        if page in self.server.pages:
+            return u"""<a href="%s">%s</a>""" % (url, title)
+        return u"""%s<a href="%s">?</a>""" % (title, url)
+
+    def current_page(self):
+        return urllib.unquote(self.path.strip('/').split("/",1)[0]) or "FrontPage"
+
+    def do_GET(self):
+        page = self.current_page()
+        self.send_response(200)
+        self.send_header("Content-Type", "text/html;charset=utf-8")
+        self.end_headers()
+        text = self.server.pages.get(page, "Empty page.")
+        title = unicode(esc(page), "utf-8")
+        head = u"""<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
+"http://www.w3.org/TR/html4/strict.dtd"><html><head><title>%s</title>
+<style><!--body {width:40em;margin:1em auto;} textarea {border:1px solid
+#999;display:block;width:100%%;height:18em;}--></style></head>
+<body><h1>%s</h1>""" % (title, title)
+        url = link(page)
+        if self.path.strip("/").endswith("/edit"):
+            html = u"""<form action="/%s" method="POST">
+<textarea name="text">%s</textarea>
+<input type="submit" value="Save"></form>""" % (url, esc(text))
+        else:
+            parsed = self.link_re.sub(self.link_repl, esc(text))
+            html = u"""<pre>%s</pre><p><hr>
+<a href="%s/edit">Edit text of this page</a></p>""" % (parsed, url)
+        self.wfile.write((head + html + "</body></html>").encode("utf-8"))
+
+    def do_POST(self):
+        data = self.rfile.read(int(self.headers.getheader('content-length')))
+        fields = {}
+        for field in data.split("&"):
+            key, value = field.split("=",1)
+            fields[key] = unicode(urllib.unquote_plus(value), "utf-8")
+        text = fields["text"]
+        page = self.current_page()
+        self.server.pages[page] = text
+        self.server.pages.sync()
+        self.do_GET()
+
+server = BaseHTTPServer.HTTPServer(("127.0.0.1", 8080), Handler)
+server.pages = shelve.open("pages")
+server.serve_forever()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wiki06.py	Wed Nov 28 16:47:02 2007 +0100
@@ -0,0 +1,70 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+import BaseHTTPServer
+import urllib
+import re
+import shelve
+
+def esc(text):
+    return text.replace("&", "&amp;").replace(">", "&gt;").replace("<", "&lt;")
+
+def link(page):
+    return esc(urllib.quote(page)).replace('"', "&quot;")
+
+class Handler(BaseHTTPServer.BaseHTTPRequestHandler):
+    link_re = re.compile(r"\[\[([^]]+)\]\]")
+
+    def link_repl(self, match):
+        title = match.group(1)
+        page = title.encode('utf-8')
+        url = link(page)
+        if page in self.server.pages:
+            return u"""<a href="%s">%s</a>""" % (url, title)
+        return u"""%s<a href="%s">?</a>""" % (title, url)
+
+    def current_page(self):
+        return urllib.unquote(self.path.strip('/').split("/",1)[0]) or "FrontPage"
+
+    def do_GET(self):
+        page = self.current_page()
+        self.send_response(200)
+        self.send_header("Content-Type", "text/html;charset=utf-8")
+        self.end_headers()
+        text = self.server.pages.get(page, "Empty page.")
+        title = unicode(esc(page), "utf-8")
+        head = u"""<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
+"http://www.w3.org/TR/html4/strict.dtd"><html><head><title>%s</title>
+<style><!--body {width:40em;margin:1em auto;} textarea {border:1px solid
+#999;display:block;width:100%%;height:18em;}--></style></head>
+<body><h1>%s</h1>""" % (title, title)
+        url = link(page)
+        if self.path.strip("/").endswith("/edit"):
+            html = u"""<form action="/%s" method="POST">
+<textarea name="text">%s</textarea>
+<input type="submit" value="Save"></form>""" % (url, esc(text))
+        else:
+            parsed = self.link_re.sub(self.link_repl, esc(text))
+            html = u"""<pre>%s</pre><p><hr>
+<a href="%s/edit">Edit text of this page</a></p>""" % (parsed, url)
+        self.wfile.write((head + html + "</body></html>").encode("utf-8"))
+
+    def do_POST(self):
+        data = self.rfile.read(int(self.headers.getheader('content-length')))
+        fields = {}
+        for field in data.split("&"):
+            key, value = field.split("=",1)
+            fields[key] = unicode(urllib.unquote_plus(value), "utf-8")
+        text = fields["text"]
+        page = self.current_page()
+        self.server.pages[page] = text
+        logline = u"%s - %s . . . [[%s]]" % (self.date_time_string(), address_string(), unicode(page, "utf-8"))
+        self.server.pages["RecentChanges"] = logline + self.server.pages.get("RecentChanges", "")
+        self.server.pages.sync()
+        self.send_response(303)
+        self.send_header("Location", "/%s" % urllib.quote(page))
+        self.end_headers()
+
+server = BaseHTTPServer.HTTPServer(("127.0.0.1", 8080), Handler)
+server.pages = shelve.open("pages")
+server.serve_forever()