1 #!/usr/bin/env python 2 3 "A WebStack application for a PEP 241 repository." 4 5 import WebStack.Generic 6 import XSLForms.Resources 7 import XSLForms.Utils 8 import XSLOutput 9 import os 10 11 class PEP241Resource(XSLForms.Resources.XSLFormsResource): 12 13 "A resource providing repository browsing." 14 15 resource_dir = os.path.join(os.path.split(__file__)[0], "Resources") 16 encoding = "utf-8" 17 template_resources = { 18 "pep241" : ("pep241_template.xhtml", "pep241_output.xsl") 19 } 20 21 def respond_to_form(self, trans, form): 22 23 """ 24 Respond to a request having the given transaction 'trans' and the given 25 'form' information. 26 """ 27 28 parameters = form.get_parameters() 29 documents = form.get_documents() 30 selectors = form.get_selectors() 31 32 # Ensure the presence of a document. 33 34 if documents.has_key("package"): 35 package = documents["package"] 36 else: 37 package = form.new_instance("package") 38 39 # Add and remove elements according to the selectors found. 40 41 XSLForms.Utils.add_elements(selectors.get("add_platform"), "platform", "platforms") 42 XSLForms.Utils.remove_elements(selectors.get("remove_platform")) 43 XSLForms.Utils.add_elements(selectors.get("add_supported_platform"), "supported-platform", "supported-platforms") 44 XSLForms.Utils.remove_elements(selectors.get("remove_supported_platform")) 45 XSLForms.Utils.add_elements(selectors.get("add_keyword"), "keyword", "keywords") 46 XSLForms.Utils.remove_elements(selectors.get("remove_keyword")) 47 XSLForms.Utils.add_elements(selectors.get("add_author"), "author", "authors") 48 XSLForms.Utils.remove_elements(selectors.get("remove_author")) 49 XSLForms.Utils.add_elements(selectors.get("add_dependency"), "dependency", "dependencies") 50 XSLForms.Utils.remove_elements(selectors.get("remove_dependency")) 51 52 # Send a response according to certain parameters. 53 # When exported, an XML version of the data is returned. 54 55 if parameters.has_key("export"): 56 trans.set_content_type(WebStack.Generic.ContentType("text/xml", self.encoding)) 57 package.toStream(trans.get_response_stream(), trans.get_response_stream_encoding()) 58 59 # When not exported, the data is transformed to produce a normal Web 60 # page. 61 62 else: 63 64 # Transform, adding enumerations/ranges. 65 66 categories_xsl = os.path.join(self.resource_dir, "pep241_categories.xsl") 67 categories_xml = os.path.join(self.resource_dir, "pep241_categories.xml") 68 proc = XSLOutput.Processor([categories_xsl], {"categories" : categories_xml}) 69 package = proc.get_result(package) 70 71 # Start the response. 72 73 trans.set_content_type(WebStack.Generic.ContentType("application/xhtml+xml", self.encoding)) 74 75 # Ensure that an output stylesheet exists. 76 77 trans_xsl = self.prepare_output("pep241") 78 79 # Complete the response. 80 81 self.send_output(trans, [trans_xsl], package) 82 83 # vim: tabstop=4 expandtab shiftwidth=4