示例#1
0
def build_survey(djsurvey_id):
    """Creates the SDAPS project and database for the survey.
    This process should be run on an already initialized survey that
    has a questionnaire written to it."""

    with models.LockedSurvey(djsurvey_id):
        djsurvey = models.Survey.objects.get(id=djsurvey_id)

        assert(djsurvey.initialized == False)

        import sdaps.setuptex as setup
        from sdaps.setuptex import sdapsfileparser
        survey = model.survey.Survey.new(djsurvey.path)

        setup.write_latex_override_file(survey, draft=True)
        if not utils.atomic_latex_compile(djsurvey.path, 'questionnaire.tex', need_sdaps=True):
            return False

        # We now have the .sdaps file that can be parsed
        # Defaults
        survey.defs.print_questionnaire_id = False
        survey.defs.print_survey_id = True

        survey.add_questionnaire(model.questionnaire.Questionnaire())

        # Parse qobjects
        try:
            sdapsfileparser.parse(survey)
        except Exception, e:
            sys.stderr.write("Caught an Exception while parsing the SDAPS file. The current state is:")
            sys.stderr.write(unicode(survey.questionnaire))
            sys.stderr.write("\n------------------------------------\n")

            raise e

        # Last but not least calculate the survey id
        survey.calculate_survey_id()

        if not survey.check_settings():
            sys.stderr.write(_("Some combination of options and project properties do not work. Aborted Setup."))
            shutil.rmtree(survey.path())
            return 1

        setup.write_latex_override_file(survey)

        if not utils.atomic_latex_compile(djsurvey.path, 'questionnaire.tex', need_sdaps=True):
            return False

        survey.save()

        djsurvey.initialized = True
        djsurvey.title = survey.title
        if 'Author' in survey.info:
            djsurvey.author = survey.info['Author']
        djsurvey.save()

        log.logfile.close()
示例#2
0
def render_questionnaire(djsurvey_id):
    djsurvey = models.Survey.objects.get(id=djsurvey_id)

    # Must not yet be initialized
    assert(djsurvey.initialized == False)

    if utils.atomic_latex_compile(djsurvey.path, 'questionnaire.tex'):
        return True
    else:
        return False