def get_q_att_fname(qid, name): """ Return (mimetype, filename) with the relevant filename. If it's not found in question, look in questiontemplate. """ qtid = DB.get_q_parent(qid) variation = DB.get_q_variation(qid) version = DB.get_q_version(qid) # for the two biggies we hit the question first, # otherwise check the question template first if name == "image.gif" or name == "qtemplate.html": fname = DB.get_q_att_fname(qtid, name, variation, version) if fname: return DB.get_q_att_mimetype(qtid, name, variation, version), fname fname = DB.get_qt_att_fname(qtid, name, version) if fname: return DB.get_qt_att_mimetype(qtid, name, version), fname else: fname = DB.get_qt_att_fname(qtid, name, version) if fname: return DB.get_qt_att_mimetype(qtid, name, version), fname fname = DB.get_q_att_fname(qtid, name, variation, version) if fname: return DB.get_q_att_mimetype(qtid, name, variation, version), fname return None, None
def gen_q_from_var(qt_id, student, exam, position, version, variation): """ Generate a question given a specific variation. """ qvars = None q_id = DB.create_q(qt_id, DB.get_qt_name(qt_id), student, 1, variation, version, exam) try: q_id = int(q_id) assert (q_id > 0) except (ValueError, TypeError, AssertionError): L.error("OaDB.createQuestion(%s,...) FAILED" % qt_id) imageexists = DB.get_q_att_mimetype(qt_id, "image.gif", variation, version) if not imageexists: if not qvars: qvars = DB.get_qt_variation(qt_id, variation, version) qvars['Oasis_qid'] = q_id image = DB.get_qt_att(qt_id, "image.gif", version) if image: newimage = gen_q_image(qvars, image) DB.create_q_att(qt_id, variation, "image.gif", "image/gif", newimage, version) htmlexists = DB.get_q_att_mimetype(qt_id, "qtemplate.html", variation, version) if not htmlexists: if not qvars: qvars = DB.get_qt_variation(qt_id, variation, version) html = DB.get_qt_att(qt_id, "qtemplate.html", version) if html: qvars['Oasis_qid'] = q_id newhtml = gen_q_html(qvars, html) L.info("generating new qattach qtemplate.html for %s" % q_id) DB.create_q_att(qt_id, variation, "qtemplate.html", "application/oasis-html", newhtml, version) try: q_id = int(q_id) assert (q_id > 0) except (ValueError, TypeError, AssertionError): L.error("generateQuestionFromVar(%s,%s), can't find qid %s? " % (qt_id, student, q_id)) if exam >= 1: DB.add_exam_q(student, exam, q_id, position) return q_id
def q_att_details(qtid, version, variation, name): """ Find a question attachment and return its details. """ # for the two biggies we hit the question first, # otherwise check the question template first if name == "image.gif" or name == "qtemplate.html": fname = DB.get_q_att_fname(qtid, name, variation, version) if fname: return DB.get_q_att_mimetype(qtid, name, variation, version), fname fname = DB.get_qt_att_fname(qtid, name, version) if fname: return DB.get_qt_att_mimetype(qtid, name, version), fname else: fname = DB.get_qt_att_fname(qtid, name, version) if fname: return DB.get_qt_att_mimetype(qtid, name, version), fname fname = DB.get_q_att_fname(qtid, name, variation, version) if fname: return DB.get_q_att_mimetype(qtid, name, variation, version), fname return None, None
def get_q_att(qid, name): """ Return (mimetype, data) with the relevant attachment. If it's not found in question, look in questiontemplate. """ qtid = DB.get_q_parent(qid) variation = DB.get_q_variation(qid) version = DB.get_q_version(qid) # for the two biggies we hit the question first, # otherwise check the question template first if name == "image.gif" or name == "qtemplate.html": data = DB.get_q_att(qtid, name, variation, version) if data: return DB.get_q_att_mimetype(qtid, name, variation, version), data data = DB.get_qt_att(qtid, name, version) if data: return DB.get_qt_att_mimetype(qtid, name, version), data else: data = DB.get_qt_att(qtid, name, version) if data: return DB.get_qt_att_mimetype(qtid, name, version), data data = DB.get_q_att(qtid, name, variation, version) if data: return DB.get_q_att_mimetype(qtid, name, variation, version), data return None, None