# HG changeset patch # User paulb # Date 1103568972 0 # Node ID aea4c12cebfd800a3278c5eae4290f032da31285 # Parent 5cde59bd9f4764bdf800f58070ccb34b73ebc685 [project @ 2004-12-20 18:56:12 by paulb] Added an example application. diff -r 5cde59bd9f47 -r aea4c12cebfd examples/Common/PEP241/__init__.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/Common/PEP241/__init__.py Mon Dec 20 18:56:12 2004 +0000 @@ -0,0 +1,76 @@ +#!/usr/bin/env python + +"A WebStack application for a PEP 241 repository." + +import WebStack.Generic +import XSLForms.Fields +import XSLForms.Output +import XSLOutput +import os + +class PEP241Resource: + + "A resource providing repository browsing." + + resource_dir = os.path.join(os.path.split(__file__)[0], "Resources") + encoding = "utf-8" + + def respond(self, trans): + + # Produce stylesheet. + + if trans.get_path_info().split("/")[-1] == "styles.css": + trans.set_content_type(WebStack.Generic.ContentType("text/css", self.encoding)) + out = trans.get_response_stream() + f = open(os.path.join(self.resource_dir, "styles.css"), "rb") + out.write(f.read()) + f.close() + raise WebStack.Generic.EndOfResponse + + # Handle other requests. + + global XSLForms # NOTE: Strangely required to avoid UnboundLocalError! + method = trans.get_request_method() + if method == "GET": + fields = XSLForms.Fields.Fields(encoding="iso-8859-1", values_are_lists=1) + documents = fields.make_documents(trans.get_fields_from_path().items()) + elif method == "POST": + fields = XSLForms.Fields.Fields(encoding=self.encoding, values_are_lists=1) + documents = fields.make_documents(trans.get_fields_from_body(self.encoding).items()) + else: + trans.set_response_code(405) + raise WebStack.Generic.EndOfResponse + + # Ensure the presence of a document. + + if documents.has_key("package"): + package = documents["package"] + else: + package = fields.new_instance("package") + + import libxml2dom, sys + libxml2dom.toStream(package, sys.stderr) + + # Start the response. + + trans.set_content_type(WebStack.Generic.ContentType("text/html", self.encoding)) + + # Ensure that an output stylesheet exists. + + trans_xsl = os.path.join(self.resource_dir, "pep241_output.xsl") + template_xml = os.path.join(self.resource_dir, "pep241_template.xhtml") + + if not os.path.exists(trans_xsl) or \ + os.path.getmtime(trans_xsl) < os.path.getmtime(template_xml): + + import XSLForms.Prepare + template_xml = os.path.join(self.resource_dir, "pep241_template.xhtml") + XSLForms.Prepare.make_stylesheet(template_xml, trans_xsl) + + # Complete the response. + + proc = XSLOutput.Processor([trans_xsl]) + proc.send_output(trans.get_response_stream(), trans.get_response_stream_encoding(), + package) + +# vim: tabstop=4 expandtab shiftwidth=4