1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/examples/Common/PEP241/__init__.py Mon Dec 20 18:56:12 2004 +0000
1.3 @@ -0,0 +1,76 @@
1.4 +#!/usr/bin/env python
1.5 +
1.6 +"A WebStack application for a PEP 241 repository."
1.7 +
1.8 +import WebStack.Generic
1.9 +import XSLForms.Fields
1.10 +import XSLForms.Output
1.11 +import XSLOutput
1.12 +import os
1.13 +
1.14 +class PEP241Resource:
1.15 +
1.16 + "A resource providing repository browsing."
1.17 +
1.18 + resource_dir = os.path.join(os.path.split(__file__)[0], "Resources")
1.19 + encoding = "utf-8"
1.20 +
1.21 + def respond(self, trans):
1.22 +
1.23 + # Produce stylesheet.
1.24 +
1.25 + if trans.get_path_info().split("/")[-1] == "styles.css":
1.26 + trans.set_content_type(WebStack.Generic.ContentType("text/css", self.encoding))
1.27 + out = trans.get_response_stream()
1.28 + f = open(os.path.join(self.resource_dir, "styles.css"), "rb")
1.29 + out.write(f.read())
1.30 + f.close()
1.31 + raise WebStack.Generic.EndOfResponse
1.32 +
1.33 + # Handle other requests.
1.34 +
1.35 + global XSLForms # NOTE: Strangely required to avoid UnboundLocalError!
1.36 + method = trans.get_request_method()
1.37 + if method == "GET":
1.38 + fields = XSLForms.Fields.Fields(encoding="iso-8859-1", values_are_lists=1)
1.39 + documents = fields.make_documents(trans.get_fields_from_path().items())
1.40 + elif method == "POST":
1.41 + fields = XSLForms.Fields.Fields(encoding=self.encoding, values_are_lists=1)
1.42 + documents = fields.make_documents(trans.get_fields_from_body(self.encoding).items())
1.43 + else:
1.44 + trans.set_response_code(405)
1.45 + raise WebStack.Generic.EndOfResponse
1.46 +
1.47 + # Ensure the presence of a document.
1.48 +
1.49 + if documents.has_key("package"):
1.50 + package = documents["package"]
1.51 + else:
1.52 + package = fields.new_instance("package")
1.53 +
1.54 + import libxml2dom, sys
1.55 + libxml2dom.toStream(package, sys.stderr)
1.56 +
1.57 + # Start the response.
1.58 +
1.59 + trans.set_content_type(WebStack.Generic.ContentType("text/html", self.encoding))
1.60 +
1.61 + # Ensure that an output stylesheet exists.
1.62 +
1.63 + trans_xsl = os.path.join(self.resource_dir, "pep241_output.xsl")
1.64 + template_xml = os.path.join(self.resource_dir, "pep241_template.xhtml")
1.65 +
1.66 + if not os.path.exists(trans_xsl) or \
1.67 + os.path.getmtime(trans_xsl) < os.path.getmtime(template_xml):
1.68 +
1.69 + import XSLForms.Prepare
1.70 + template_xml = os.path.join(self.resource_dir, "pep241_template.xhtml")
1.71 + XSLForms.Prepare.make_stylesheet(template_xml, trans_xsl)
1.72 +
1.73 + # Complete the response.
1.74 +
1.75 + proc = XSLOutput.Processor([trans_xsl])
1.76 + proc.send_output(trans.get_response_stream(), trans.get_response_stream_encoding(),
1.77 + package)
1.78 +
1.79 +# vim: tabstop=4 expandtab shiftwidth=4