1 #!/usr/bin/env python 2 3 "A job candidate editing application." 4 5 import WebStack.Generic 6 import XSLForms.Resources 7 import XSLForms.Utils 8 import os 9 10 # Site map imports. 11 12 from WebStack.Resources.ResourceMap import MapResource 13 from WebStack.Resources.Static import DirectoryResource 14 15 # Resource classes. 16 17 class CandidateResource(XSLForms.Resources.XSLFormsResource): 18 19 "A resource providing editing facilities for a job candidate profile." 20 21 resource_dir = os.path.join(os.path.split(__file__)[0], "Resources") 22 encoding = "utf-8" 23 template_resources = { 24 "candidate" : ["candidate_template.xhtml", "candidate_output.xsl"] 25 } 26 transform_resources = { 27 "init" : ["candidate_init.xsl"] 28 } 29 document_resources = { 30 "status" : "candidate_status.xml" 31 } 32 in_page_resources = { 33 } 34 35 def respond_to_form(self, trans, form): 36 37 """ 38 Respond to a request having the given transaction 'trans' and the given 39 'form' information. 40 """ 41 42 in_page_resource = self.get_in_page_resource(trans) 43 parameters = form.get_parameters() 44 documents = form.get_documents() 45 46 # Ensure the presence of a document. 47 48 if documents.has_key("candidate"): 49 candidate = documents["candidate"] 50 else: 51 candidate = form.new_instance("candidate") 52 53 # Add and remove elements according to the selectors found. 54 55 selectors = form.get_selectors() 56 XSLForms.Utils.remove_elements(selectors.get("remove")) 57 XSLForms.Utils.add_elements(selectors.get("add-skill"), "skill", "skills") 58 XSLForms.Utils.add_elements(selectors.get("add-qualification"), "qualification", "qualifications") 59 XSLForms.Utils.add_elements(selectors.get("add-employment"), "employment", "experience") 60 61 # Transform, adding enumerations/ranges. 62 63 init_xsl = self.prepare_transform("init") 64 status_xml = self.prepare_document("status") 65 candidate = self.get_result(init_xsl, candidate, references={"status" : status_xml}) 66 67 # Start the response. 68 69 trans.set_content_type(WebStack.Generic.ContentType("application/xhtml+xml", self.encoding)) 70 71 # Define the stylesheet parameters. 72 73 stylesheet_parameters = {} 74 75 # Ensure that an output stylesheet exists. 76 77 if in_page_resource in self.in_page_resources.keys(): 78 trans_xsl = self.prepare_fragment("candidate", in_page_resource) 79 element_path = parameters.get("element-path", [""])[0] 80 stylesheet_parameters["element-path"] = element_path 81 else: 82 trans_xsl = self.prepare_output("candidate") 83 84 # Complete the response. 85 86 self.send_output(trans, [trans_xsl], candidate, stylesheet_parameters) 87 88 # Site map initialisation. 89 90 def get_site(): 91 92 "Return a simple Web site resource." 93 94 # Get the main resource and the directory used by the application. 95 96 candidate_resource = CandidateResource() 97 directory = candidate_resource.resource_dir 98 99 # Make a simple Web site. 100 101 resource = MapResource({ 102 # Static resources: 103 #"scripts" : DirectoryResource(os.path.join(directory, "scripts"), {"js" : "text/javascript"}), 104 # Main page and in-page resources: 105 None : candidate_resource 106 }) 107 108 return resource 109 110 # vim: tabstop=4 expandtab shiftwidth=4