1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/examples/Common/QuestionPlayer/__init__.py Fri Nov 21 01:42:17 2008 +0100
1.3 @@ -0,0 +1,101 @@
1.4 +#!/usr/bin/env python
1.5 +
1.6 +"""
1.7 +A WebStack application for "playing" questionnaires designed by the
1.8 +questionnaire editor.
1.9 +"""
1.10 +
1.11 +import WebStack.Generic
1.12 +from XSLForms.Resources.WebResources import \
1.13 + XSLFormsResource, input, output, resources, prepare_resources as xslforms_prepare_resources
1.14 +import os
1.15 +import libxml2dom
1.16 +from WebStack.Repositories.Directory import DirectoryRepository
1.17 +import time
1.18 +
1.19 +# Site map imports.
1.20 +
1.21 +from WebStack.Resources.ResourceMap import MapResource
1.22 +from WebStack.Resources.Selectors import EncodingSelector
1.23 +from WebStack.Resources.Static import DirectoryResource
1.24 +
1.25 +# Configuration settings.
1.26 +
1.27 +encoding = "utf-8"
1.28 +storage_directory = os.path.join(os.getcwd(), "Responses")
1.29 +
1.30 +# Resource classes.
1.31 +
1.32 +class QuestionnairePlayerResource(XSLFormsResource):
1.33 +
1.34 + "A resource providing a questionnaire editor."
1.35 +
1.36 + resource_dir = resources(__file__)
1.37 + template_resources = {
1.38 + "questionnaire" : output("player_template.xhtml")
1.39 + }
1.40 + #init_resources = {
1.41 + # "questionnaire" : input("player_template.xhtml")
1.42 + # }
1.43 + document_resources = {
1.44 + "questions" : "questions.xml"
1.45 + }
1.46 +
1.47 + def select_activity(self, trans, form):
1.48 + form.set_activity("questionnaire")
1.49 +
1.50 + def create_document(self, trans, form):
1.51 + if XSLFormsResource.create_document(self, trans, form):
1.52 + questions_xml = self.prepare_document("questions")
1.53 + questions = libxml2dom.parse(questions_xml)
1.54 + doc = form.get_document()
1.55 + imported_questions = doc.importNode(questions.documentElement, 1)
1.56 + doc.replaceChild(imported_questions, doc.documentElement)
1.57 +
1.58 + def respond_to_input(self, trans, form):
1.59 +
1.60 + parameters = form.get_parameters()
1.61 + selectors = form.get_selectors()
1.62 + questionnaire = form.get_document()
1.63 +
1.64 + # Send a response according to certain parameters.
1.65 + # When saved, an XML version of the data is employed.
1.66 +
1.67 + if parameters.has_key("finish"):
1.68 + repository = DirectoryRepository(storage_directory)
1.69 + key = str(time.time())
1.70 + output_filename = repository.lock(key, 1)
1.71 + try:
1.72 + questionnaire.toStream(open(output_filename, "wb"), "utf-8", prettyprint=1)
1.73 + finally:
1.74 + repository.unlock(key)
1.75 +
1.76 +# Site map initialisation.
1.77 +
1.78 +def get_site():
1.79 +
1.80 + "Return a simple Web site resource."
1.81 +
1.82 + # Get the main resource and the directory used by the application.
1.83 +
1.84 + questionnaire_resource = QuestionnairePlayerResource()
1.85 + directory = questionnaire_resource.resource_dir
1.86 +
1.87 + # Make a simple Web site.
1.88 +
1.89 + resource = MapResource({
1.90 + # Static resources:
1.91 + "styles" : DirectoryResource(os.path.join(directory, "styles"), {"css" : "text/css"}),
1.92 + # Main page:
1.93 + "" : questionnaire_resource
1.94 + })
1.95 +
1.96 + return EncodingSelector(resource, encoding)
1.97 +
1.98 +# Resource preparation ahead of time - useful for making installations.
1.99 +
1.100 +def prepare_resources():
1.101 + for cls in [QuestionnairePlayerResource]:
1.102 + xslforms_prepare_resources(cls)
1.103 +
1.104 +# vim: tabstop=4 expandtab shiftwidth=4