def __cmp__(a, b): anum, astr = split_numal(a.number) bnum, bstr = split_numal(b.number) cmpnum = cmp(anum, bnum) return cmpnum or cmp(astr, bstr)
def show_questionnaire(request, runinfo, errors={}): """ Return the QuestionSet template Also add the javascript dependency code. """ questions = runinfo.questionset.questions() total = len(runinfo.questionset.questionnaire.questionsets()) qlist = [] jsinclude = [] # js files to include cssinclude = [] # css files to include jstriggers = [] qvalues = {} alignment=4 for question in questions: Type = question.get_type() _qnum, _qalpha = split_numal(question.number) if _qalpha: _qalpha_class = ord(_qalpha[-1]) % 2 and 'odd' or 'even' qdict = { 'template' : 'questionnaire/%s.html' % (Type), 'qnum' : _qnum, 'qalpha' : _qalpha, 'qtype' : Type, 'qnum_class' : (_qnum % 2 == 0) and " qeven" or " qodd", 'qalpha_class' : _qalpha and (ord(_qalpha[-1]) % 2 \ and ' alodd' or ' aleven') or '', } if not question.newline(): alignment = max(alignment, calc_alignment(question.text)) # add javascript dependency checks cd = question.getcheckdict() depon = cd.get('requiredif',None) or cd.get('dependent',None) if depon: # extra args to BooleanParser are not required for toString parser = BooleanParser(dep_check) qdict['checkstring'] = ' checks="%s"' % parser.toString(depon) jstriggers.append('qc_%s' % question.number) if 'default' in cd: qvalues[question.number] = cd['default'] if Type in QuestionProcessors: qdict.update(QuestionProcessors[Type](request, question)) if 'alignment' in qdict: alignment = max(alignment, qdict['alignment']) if 'jsinclude' in qdict: if qdict['jsinclude'] not in jsinclude: jsinclude.extend(qdict['jsinclude']) if 'cssinclude' in qdict: if qdict['cssinclude'] not in cssinclude: cssinclude.extend(qdict['jsinclude']) if 'jstriggers' in qdict: jstriggers.extend(qdict['jstriggers']) if 'qvalue' in qdict: qvalues[question.number] = qdict['qvalue'] qlist.append( (question, qdict) ) progress = None if runinfo.questionset.sortid != 0: progress = get_progress(runinfo.questionset.sortid / float(total)) # initialize qvalues for k,v in runinfo.get_cookiedict().items(): qvalues[k] = v if request.POST: for k,v in request.POST.items(): if k.startswith("question_"): s = k.split("_") if len(s) == 2: qvalues[s[1]] = v r = r2r("questionnaire/questionset.html", request, questionset=runinfo.questionset, runinfo=runinfo, errors=errors, qlist=qlist, progress=progress, triggers=jstriggers, qvalues=qvalues, alignment=alignment, jsinclude=jsinclude, cssinclude=cssinclude) r['Cache-Control'] = 'no-cache' r['Expires'] = "Thu, 24 Jan 1980 00:00:00 GMT" return r