Einfacher Webserver zum Testen von Genshi-Templates

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
midan23
User
Beiträge: 116
Registriert: Sonntag 21. Mai 2006, 21:41
Wohnort: Müchen
Kontaktdaten:

Donnerstag 20. September 2007, 14:14

Hallo zusammen,

wie hier zu lesen ist, bechäftige ich mich derzeit etwas ausführlicher mit Genshi.

Dazu habe ich mir folgenden kleinen Webserver geschrieben:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os
from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler

from genshi.template import TemplateLoader, TemplateSyntaxError

loader = TemplateLoader(".", auto_reload=True)

class MyHandler(BaseHTTPRequestHandler):

    LIST_TEMPLATE = """<html><head><title>Files</title></head><body><h1 align="center">Files</h1><hr><ul>%s</ul></body></html>"""
    ERROR_TEMPLATE = """<html><head><title>TemplateSyntaxError</title></head><body><h1 align="center">TemplateSyntaxError</h1><hr>%s</body></html>"""

    def send_data(self, data, status=200, content_type="text/html"):
        self.send_response(status)
        self.send_header("Content-type", content_type)
        self.end_headers()
        self.wfile.write(data)

    def do_GET(self):
        if self.path == "/":
            file_list = (f for f in os.listdir(".") if f.endswith(".tmpl"))
            item_list = "\n".join(("""<li><a href="%s">%s</a></li>""" % (item, item) for item in file_list))
            result = MyHandler.LIST_TEMPLATE % item_list
            self.send_data(result)
        elif self.path.endswith(".tmpl"):
            try:
                tmpl = loader.load(self.path[1:])
                stream = tmpl.generate()
                output = stream.render(method="xhtml", doctype="xhtml")
            except TemplateSyntaxError, e:
                output = MyHandler.ERROR_TEMPLATE % e.msg
            self.send_data(output)
        else:
            self.send_error(404, "File not found ...")

def main():
    server = HTTPServer(("localhost", 8000), MyHandler)
    try:
        server.serve_forever()
    except KeyboardInterrupt:
        server.socket.close()

if "__main__" == __name__:
    main()
Der Server läuft und tut was ich will ...
Aber ... da wären noch zwei kleine Details, di mir irgendwie nicht gefallen wollen:
  • Die globale Variable loader:
  • Einfacheres Beenden des Servers ... (Bis jetzt darf ich im CLI-Fenster erst mal STRG-C drücken und im Browser die Seite neu laden damit der Server sich beendet
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Freitag 21. September 2007, 06:23

Warum nicht wsgiref?
TUFKAB – the user formerly known as blackbird
midan23
User
Beiträge: 116
Registriert: Sonntag 21. Mai 2006, 21:41
Wohnort: Müchen
Kontaktdaten:

Freitag 21. September 2007, 07:59

blackbird hat geschrieben:Warum nicht wsgiref?
Wäre es einfacher und/oder besser ?
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Freitag 21. September 2007, 09:30

Ja. Weil wsgiref verarbeitet WSGI Anwendungen und dann kannst du später immer noch mit dem Ding wo live gehen. Für mako hab ich das mal gemacht: http://dev.pocoo.org/hg/sandbox/file/-1/phplikepy
TUFKAB – the user formerly known as blackbird
midan23
User
Beiträge: 116
Registriert: Sonntag 21. Mai 2006, 21:41
Wohnort: Müchen
Kontaktdaten:

Freitag 21. September 2007, 12:14

Ich hab mal einen Blick darauf geworfen ...
Schaut ganz gut aus ... auch wenn ich den Code nicht verstehe
(Könnte aber daran liegen, das ich Werkzeug nicht kenne und von WSGI nicht besonders viel Ahnung habe ...;-) )

Ginge es auch mit Cherrypy ?
markus_u
User
Beiträge: 3
Registriert: Dienstag 9. Oktober 2007, 13:39

Dienstag 9. Oktober 2007, 13:45

yup und sogar sehr gut, siehe auch das Tutorial :)

http://genshi.edgewall.org/wiki/GenshiTutorial
midan23
User
Beiträge: 116
Registriert: Sonntag 21. Mai 2006, 21:41
Wohnort: Müchen
Kontaktdaten:

Dienstag 9. Oktober 2007, 22:10

Ich hab mir das Tutorial angeschaut ... Selbstverständlich erst, als mein eigener kleiner Webserver fertig war ... :wink:
Zum Glück brauch ich den nicht mehr ...

Aber es wäre eine nette kleine Übung, den Server mit CherryPy neu zu schreiben ...

Vielleicht komm ich ja mal dazu ...
Antworten