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 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
def qts_to_zip(qt_ids, fname="oa_export", extra_info = None): """ Take a list of QTemplate IDs and return a binary string containing them as an .oaq file. (a zip file in special format) """ fname = os.path.basename(fname) qdir = tempfile.mkdtemp(prefix="oa") info = { 'oasis': { 'oa_version': "3.9.4", 'qt_version': '0.9', 'url': OaConfig.parentURL }, 'qtemplates': {}, 'extra': extra_info } arc = zipfile.ZipFile(os.path.join(qdir, "oasisqe.zip"), 'w', zipfile.ZIP_DEFLATED) for qt_id in qt_ids: qtemplate = DB.get_qtemplate(qt_id) qtdir = os.path.join(qdir, str(qt_id)) attachments = DB.get_qt_atts(qt_id) if not 'qtemplate.html' in attachments: attachments.append('qtemplate.html') if not 'datfile.txt' in attachments: attachments.append('datfile.txt') if not 'image.gif' in attachments: attachments.append('image.gif') os.mkdir(qtdir) os.mkdir(os.path.join(qtdir, "attach")) info["qtemplates"][qt_id] = {'qtemplate': qtemplate} info["qtemplates"][qt_id]["attachments"] = [] for name in attachments: if not name: name='UNKNOWN' mtype = DB.get_qt_att_mimetype(qt_id, name) if not mtype: mtype = "" data = DB.get_qt_att(qt_id, name) if not data: data = "" info["qtemplates"][qt_id]["attachments"].append([name, mtype, len(data)]) subdir = os.path.join(qtdir, "attach", name) outf = open(subdir, "wb") outf.write(data) outf.close() arc.write(subdir, os.path.join("%s" % qt_id, "attach", name), zipfile.ZIP_DEFLATED) infof = open(os.path.join(qdir, "info.json"), "wb") infof.write(json.dumps(info)) infof.close() arc.write(os.path.join(qdir, "info.json"), os.path.join("info.json"), zipfile.ZIP_DEFLATED) arc.close() readback = open(os.path.join(qdir, "oasisqe.zip"), "rb") data = readback.read() readback.close() shutil.rmtree(qdir) return data
def qts_to_zip(qt_ids, extra_info=None): """ Take a list of QTemplate IDs and return a binary string containing them as an .oaq file. (a zip file in special format) """ qdir = tempfile.mkdtemp(prefix="oa") info = { 'oasis': { 'oa_version': "3.9.4", 'qt_version': '0.9', 'url': OaConfig.parentURL }, 'qtemplates': {}, 'extra': extra_info } arc = zipfile.ZipFile(os.path.join(qdir, "oasisqe.zip"), 'w', zipfile.ZIP_DEFLATED) for qt_id in qt_ids: qtemplate = DB.get_qtemplate(qt_id) qtdir = os.path.join(qdir, str(qt_id)) attachments = DB.get_qt_atts(qt_id) if 'qtemplate.html' not in attachments: attachments.append('qtemplate.html') if 'datfile.txt' not in attachments: attachments.append('datfile.txt') if 'image.gif' not in attachments: attachments.append('image.gif') os.mkdir(qtdir) os.mkdir(os.path.join(qtdir, "attach")) info["qtemplates"][qt_id] = {'qtemplate': qtemplate} info["qtemplates"][qt_id]["attachments"] = [] for name in attachments: if not name: name = 'UNKNOWN' mtype = DB.get_qt_att_mimetype(qt_id, name) if not mtype: mtype = "" data = DB.get_qt_att(qt_id, name) if not data: data = "" info["qtemplates"][qt_id]["attachments"].append([name, mtype, len(data)]) subdir = os.path.join(qtdir, "attach", name) outf = open(subdir, "wb") outf.write(data) outf.close() arc.write(subdir, os.path.join("%s" % qt_id, "attach", name), zipfile.ZIP_DEFLATED) infof = open(os.path.join(qdir, "info.json"), "wb") infof.write(json.dumps(info)) infof.close() arc.write(os.path.join(qdir, "info.json"), os.path.join("info.json"), zipfile.ZIP_DEFLATED) arc.close() readback = open(os.path.join(qdir, "oasisqe.zip"), "rb") data = readback.read() readback.close() shutil.rmtree(qdir) return data