# HG changeset patch # User paulb # Date 1121357045 0 # Node ID 666a1c437535b36ad18348d5b56559c70a4eb5cd # Parent 2dc3db5f3ce7785d861030c60ad8793734ec5827 [project @ 2005-07-14 16:04:05 by paulb] Tidied up the code and made use of the XSLForms.Utils convenience functions. diff -r 2dc3db5f3ce7 -r 666a1c437535 examples/Common/Configurator/__init__.py --- a/examples/Common/Configurator/__init__.py Thu Jul 14 16:03:24 2005 +0000 +++ b/examples/Common/Configurator/__init__.py Thu Jul 14 16:04:05 2005 +0000 @@ -6,39 +6,36 @@ import XSLForms.Fields import XSLForms.Output import XSLForms.Prepare +import XSLForms.Utils import XSLOutput import libxml2dom import os -# NOTE: Move these functions into a common utility library. - -def add_elements(positions, element_name, element_parent_name=None): - if not positions: - return - for position in positions: - if element_parent_name: - parent_elements = position.xpath(element_parent_name) - if not parent_elements: - parent_element = position.ownerDocument.createElementNS(None, element_parent_name) - position.appendChild(parent_element) - else: - parent_element = parent_elements[0] - else: - parent_element = position - parent_element.appendChild(position.ownerDocument.createElementNS(None, element_name)) - -def remove_elements(positions): - if not positions: - return - for position in positions: - position.parentNode.removeChild(position) - class ConfiguratorResource: "A resource providing a system configurator." resource_dir = os.path.join(os.path.split(__file__)[0], "Resources") encoding = "utf-8" + in_page_resources = { + "/cpu" : ("config_output_cpu.xsl", "cpu-node"), + "/memory" : ("config_output_memory.xsl", "memory-node"), + "/hard-disks" : ("config_output_harddisks.xsl", "hard-disks-node") + } + + def get_fields_from_body(self, trans, encoding): + text = trans.get_request_stream().read() + parameters = {} + for text_line in text.split("\r\n"): + text_parts = text_line.split("=") + text_name, text_value = text_parts[0], "=".join(text_parts[1:]) + if not parameters.has_key(text_name): + parameters[text_name] = [] + # NOTE: Workaround from posted text. + if text_value[-1] == "\x00": + text_value = text_value[:-1] + parameters[text_name].append(text_value) + return parameters def respond(self, trans): @@ -58,15 +55,8 @@ # Handle requests for fragments. - if path_info in ("/cpu", "/memory", "/hard-disks"): - text = trans.get_request_stream().read() - parameters = {} - for text_line in text.split("\r\n"): - text_parts = text_line.split("=") - text_name, text_value = text_parts[0], "=".join(text_parts[1:]) - if not parameters.has_key(text_name): - parameters[text_name] = [] - parameters[text_name].append(text_value) + if path_info in self.in_page_resources.keys(): + parameters = self.get_fields_from_body(trans, self.encoding) else: parameters = trans.get_fields_from_body(self.encoding) @@ -88,12 +78,12 @@ # Add and remove elements according to the selectors found. selectors = fields.get_selectors(parameters.items(), documents) - add_elements(selectors.get("add-memory-unit"), "memory-unit") - remove_elements(selectors.get("remove-memory-unit")) - add_elements(selectors.get("add-storage-unit"), "storage-unit") - remove_elements(selectors.get("remove-storage-unit")) - add_elements(selectors.get("add-hard-disk"), "hard-disk") - remove_elements(selectors.get("remove-hard-disk")) + XSLForms.Utils.add_elements(selectors.get("add-memory-unit"), "memory-unit") + XSLForms.Utils.remove_elements(selectors.get("remove-memory-unit")) + XSLForms.Utils.add_elements(selectors.get("add-storage-unit"), "storage-unit") + XSLForms.Utils.remove_elements(selectors.get("remove-storage-unit")) + XSLForms.Utils.add_elements(selectors.get("add-hard-disk"), "hard-disk") + XSLForms.Utils.remove_elements(selectors.get("remove-hard-disk")) # Send a response according to certain parameters. # When exported, an XML version of the data is returned. @@ -124,24 +114,18 @@ # Ensure that an output stylesheet exists. - trans_xsl = os.path.join(self.resource_dir, "config_output.xsl") - template_xml = os.path.join(self.resource_dir, "config_template.xhtml") - XSLForms.Prepare.ensure_stylesheet(template_xml, trans_xsl) - - if path_info in ("/cpu", "/memory", "/hard-disks"): + if path_info in self.in_page_resources.keys(): + trans_xsl_filename, trans_xsl_region = self.in_page_resources[path_info] template_xml = os.path.join(self.resource_dir, "config_output.xsl") - if path_info == "/cpu": - trans_xsl = os.path.join(self.resource_dir, "config_output_cpu.xsl") - XSLForms.Prepare.ensure_stylesheet_fragment(template_xml, trans_xsl, "cpu-node") - elif path_info == "/memory": - trans_xsl = os.path.join(self.resource_dir, "config_output_memory.xsl") - XSLForms.Prepare.ensure_stylesheet_fragment(template_xml, trans_xsl, "memory-node") - elif path_info == "/hard-disks": - trans_xsl = os.path.join(self.resource_dir, "config_output_harddisks.xsl") - XSLForms.Prepare.ensure_stylesheet_fragment(template_xml, trans_xsl, "hard-disks-node") + trans_xsl = os.path.join(self.resource_dir, trans_xsl_filename) + XSLForms.Prepare.ensure_stylesheet_fragment(template_xml, trans_xsl, trans_xsl_region) element_path = parameters.get("element-path", [""])[0] stylesheet_parameters["element-path"] = element_path - #print "*", stylesheet_parameters["element-path"] + #print "*", repr(stylesheet_parameters["element-path"]) + else: + trans_xsl = os.path.join(self.resource_dir, "config_output.xsl") + template_xml = os.path.join(self.resource_dir, "config_template.xhtml") + XSLForms.Prepare.ensure_stylesheet(template_xml, trans_xsl) stylesheet_parameters["application-url"] = \ "http://%s:%s%s" % (trans.get_server_name(), trans.get_server_port(), trans.get_path_without_query()) @@ -152,8 +136,8 @@ proc.send_output(trans.get_response_stream(), trans.get_response_stream_encoding(), configuration) - import sys - proc = XSLOutput.Processor([trans_xsl], parameters=stylesheet_parameters) - proc.send_output(sys.stderr, "iso-8859-1", configuration) + #import sys + #proc = XSLOutput.Processor([trans_xsl], parameters=stylesheet_parameters) + #proc.send_output(sys.stderr, "iso-8859-1", configuration) # vim: tabstop=4 expandtab shiftwidth=4