1 #!/usr/bin/env python 2 3 "A job candidate editing application." 4 5 import WebStack.Generic 6 import XSLForms.Resources.WebResources 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.WebResources.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 init_resources = { 27 "candidate" : ("candidate_template.xhtml", "candidate_input.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_initialiser("candidate") 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 # Ensure that an output stylesheet exists. 72 73 if in_page_resource in self.in_page_resources.keys(): 74 trans_xsl = self.prepare_fragment("candidate", in_page_resource) 75 stylesheet_parameters = self.prepare_parameters(parameters) 76 else: 77 trans_xsl = self.prepare_output("candidate") 78 stylesheet_parameters = {} 79 80 # Complete the response. 81 82 self.send_output(trans, [trans_xsl], candidate, stylesheet_parameters) 83 84 # Site map initialisation. 85 86 def get_site(): 87 88 "Return a simple Web site resource." 89 90 # Get the main resource and the directory used by the application. 91 92 candidate_resource = CandidateResource() 93 directory = candidate_resource.resource_dir 94 95 # Make a simple Web site. 96 97 resource = MapResource({ 98 # Static resources: 99 #"scripts" : DirectoryResource(os.path.join(directory, "scripts"), {"js" : "text/javascript"}), 100 # Main page and in-page resources: 101 None : candidate_resource 102 }) 103 104 return resource 105 106 # vim: tabstop=4 expandtab shiftwidth=4