本文整理汇总了Python中oasis.lib.Topics类的典型用法代码示例。如果您正苦于以下问题:Python Topics类的具体用法?Python Topics怎么用?Python Topics使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Topics类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: import_qts_from_zip
def import_qts_from_zip(data, topic_id):
""" Open the given OAQ file and import any qtemplates found.
Return False if it's not valid
Return 0 if it's valid but has no qtemplates
Return NUM of templates imported.
"""
# TODO: How do we protect against malicious uploads?
# At the moment they're allowed for trusted people only,
# but we'll eventually want this in the UI for end users.
# eg. unzip to huge size
# add digital signatures?
sdata = StringIO(data)
tmpd = tempfile.mkdtemp(prefix="oa")
qdir = os.path.join(tmpd, "oasisqe")
os.mkdir(qdir)
num = 0
try:
with zipfile.ZipFile(sdata, "r") as zfile:
zfile.extractall(qdir)
data = open("%s/info.json" % qdir, "r").read()
info = json.loads(data)
qtids = info['qtemplates'].keys()
qtids.sort()
for qtid in qtids:
qtemplate = info['qtemplates'][qtid]['qtemplate']
attachments = info['qtemplates'][qtid]['attachments']
if 'position' in info['qtemplates'][qtid]:
position = info['qtemplates'][qtid]['position']
else:
position = 0
newid = DB.create_qt(owner=1, # ownerid
title=qtemplate['title'],
desc=qtemplate['description'],
marker=qtemplate['marker'],
score_max=qtemplate['scoremax'],
status=qtemplate['status'],
topic_id=topic_id)
DB.update_qt_practice_pos(newid, position)
num += 1
# print "%s attachments" % len(attachments)
for att in attachments:
(att_name, att_type, att_size) = att
data = open("%s/%s/attach/%s" % (qdir, qtemplate['id'], att_name)).read()
DB.create_qt_att(newid, att_name, att_type, data, 1)
if att_name == "datfile.txt" or att_name == "datfile.dat" or att_name == "datfile" or att_name == "_datfile" or att_name == "__datfile":
qvars = QEditor.parse_datfile(data)
for row in range(0, len(qvars)):
DB.add_qt_variation(newid, row + 1, qvars[row], 1)
except zipfile.BadZipfile:
return False
Topics.flush_num_qs(topic_id)
return num
示例2: get_topics_all
def get_topics_all(course, archived=2, numq=True):
""" Return a summary of all topics in the course.
if archived=0, only return non archived courses
if archived=1, only return archived courses
if archived=2, return all courses
if numq is true then include the number of questions in the topic
"""
ret = None
if archived == 0:
ret = run_sql("""SELECT topic, title, position, visibility, archived
FROM topics
WHERE course=%s
AND (archived='0' OR archived IS NULL)
ORDER BY position, topic;""", (course,))
elif archived == 1:
ret = run_sql("""SELECT topic, title, position, visibility, archived
FROM topics
WHERE course=%s
AND archived='1'
ORDER BY position, topic;""", (course,))
elif archived == 2:
ret = run_sql("""SELECT topic, title, position, visibility, 0
FROM topics
WHERE course=%s
ORDER BY position, topic;""", (course,))
info = {}
if ret:
count = 0
for row in ret:
info[count] = {'id': int(row[0]),
'title': row[1],
'position': row[2],
'visibility': row[3],
'archived': row[4]}
if info[count]['position'] is None or info[count]['position'] is "None":
info[count]['position'] = 0
if numq:
info[count]['numquestions'] = Topics.get_num_qs(int(row[0]))
count += 1
else: # we probably don't have the archived flag in the Db yet
ret = run_sql(
"""SELECT topic, title, position, visibility
FROM topics
WHERE course=%s
ORDER BY position, topic;""", (course,))
if ret:
count = 0
for row in ret:
info[count] = {'id': int(row[0]),
'title': row[1],
'position': row[2],
'visibility': row[3]}
if info[count]['position'] is None or info[count]['position'] is "None":
info[count]['position'] = 0
if numq:
info[count]['numquestions'] = Topics.get_num_qs(int(row[0]))
count += 1
return info
示例3: practice_do_question
def practice_do_question(topic_id, qt_id):
""" Show them a question and allow them to fill in some answers """
user_id = session['user_id']
try:
course_id = Topics.get_course_id(topic_id)
except KeyError:
course_id = None
abort(404)
try:
course = Courses2.get_course(course_id)
except KeyError:
course = None
abort(404)
topictitle = "UNKNOWN"
try:
topictitle = Topics.get_name(topic_id)
except KeyError:
abort(404)
try:
qtemplate = DB.get_qtemplate(qt_id)
except KeyError:
qtemplate = None
abort(404)
questions = Practice.get_sorted_questions(course_id, topic_id, user_id)
q_title = qtemplate['title']
q_pos = DB.get_qtemplate_topic_pos(qt_id, topic_id)
blocked = Practice.is_q_blocked(user_id, course_id, topic_id, qt_id)
if blocked:
return render_template(
"practicequestionblocked.html",
mesg=blocked,
topictitle=topictitle,
topic_id=topic_id,
qt_id=qt_id,
course=course,
q_title=q_title,
questions=questions,
q_pos=q_pos,
)
try:
q_id = Practice.get_practice_q(qt_id, user_id)
except (ValueError, TypeError), err:
log(ERROR,
"ERROR 1001 (%s,%s) %s" % (qt_id, user_id, err))
return render_template(
"practicequestionerror.html",
mesg="Error generating question.",
topictitle=topictitle,
topic_id=topic_id,
qt_id=qt_id,
course=course,
q_title=q_title,
questions=questions,
q_pos="?",
)
示例4: topic_to_zip
def topic_to_zip(topic_id):
"""
:param topic_id: ID of the topic to export
:return: binary string containing ZIPped data
"""
topic = Topics.get_topic(topic_id)
qts = Topics.get_qts(topic_id)
return qts_to_zip(qts, extra_info={'topic': topic})
示例5: practice_mark_question
def practice_mark_question(topic_id, question_id):
""" Mark the submitted question answersjust wa """
user_id = session['user_id']
course_id = Topics.get_course_id(topic_id)
if not course_id:
abort(404)
course = Courses2.get_course(course_id)
if not course:
abort(404)
topictitle = "UNKNOWN"
try:
topictitle = Topics.get_name(topic_id)
except KeyError:
abort(404)
qt_id = DB.get_q_parent(question_id)
q_title = DB.get_qt_name(qt_id)
questions = Practice.get_sorted_questions(course_id, topic_id, user_id)
q_pos = DB.get_qtemplate_topic_pos(qt_id, topic_id)
blocked = Practice.is_q_blocked(user_id, course_id, topic_id, qt_id)
if blocked:
return render_template(
"practicequestionblocked.html",
mesg=blocked,
topictitle=topictitle,
topic_id=topic_id,
qt_id=qt_id,
course=course,
q_title=q_title,
questions=questions,
q_pos=q_pos,
)
marking = Practice.mark_q(user_id, topic_id, question_id, request)
prev_id, next_id = Practice.get_next_prev(qt_id, topic_id)
return render_template(
"practicemarkquestion.html",
topictitle=topictitle,
topic_id=topic_id,
qt_id=qt_id,
course=course,
q_title=q_title,
questions=questions,
q_pos=q_pos,
q_id=question_id,
marking=marking,
next_id=next_id,
prev_id=prev_id
)
示例6: topic_to_zip
def topic_to_zip(topic_id, fname='oa_export', suffix='oaq'):
"""
:param topic_id: ID of the topic to export
:param fname: filename to create
:param suffix: suffix
:return: binary string containing ZIPped data
"""
topic = Topics.get_topic(topic_id)
qts = Topics.get_qts(topic_id)
return qts_to_zip(qts, fname=fname, extra_info={'topic': topic})
示例7: cadmin_view_qtemplate_history
def cadmin_view_qtemplate_history(course_id, topic_id, qt_id):
""" Show the practice history of the question template. """
if not course_id:
abort(404)
course = Courses2.get_course(course_id)
topic = {"id": topic_id, "position": Topics.get_pos(topic_id), "name": Topics.get_name(topic_id)}
qtemplate = DB.get_qtemplate(qt_id)
year = datetime.now().year
years = range(year, year - 6, -1)
return render_template(
"courseadmin_viewqtemplate.html", course=course, topic=topic, qtemplate=qtemplate, years=years
)
示例8: test_topic_position
def test_topic_position(self):
""" Test putting qtemplates into topics and moving them around
"""
course_id = Courses.create("TEST101", "Test topic position logic", 1, 1)
topic1_id = Topics.create(course_id, "TESTTOPIC1", 1, 2)
topic2_id = Topics.create(course_id, "TESTTOPIC2", 3, 3)
qt1_id = DB.create_qt(1, "TESTQ1", "Test question 1", 0, 5.0, 1)
qt2_id = DB.create_qt(1, "TESTQ2", "Test question 2", 0, 4.1, 2, topic1_id)
DB.move_qt_to_topic(qt1_id, topic1_id)
self.assertEqual(DB.get_qtemplate_practice_pos(qt1_id), 0)
self.assertEqual(DB.get_qtemplate_practice_pos(qt2_id), 0)
self.assertEqual(DB.get_topic_for_qtemplate(qt1_id), topic1_id)
self.assertEqual(DB.get_topic_for_qtemplate(qt2_id), topic1_id)
DB.update_qt_practice_pos(qt1_id, 3)
DB.update_qt_practice_pos(qt2_id, 2)
self.assertEqual(DB.get_qtemplate_practice_pos(qt1_id), 3)
self.assertEqual(DB.get_qtemplate_practice_pos(qt2_id), 2)
self.assertEqual(DB.get_qtemplate_practice_pos(qt1_id), 3, "Broken cache?")
self.assertEqual(DB.get_qtemplate_practice_pos(qt2_id), 2, "Broken cache?")
DB.update_qt_practice_pos(qt1_id, 0)
DB.update_qt_practice_pos(qt2_id, -1)
self.assertEqual(DB.get_qtemplate_practice_pos(qt1_id), 0)
self.assertEqual(DB.get_qtemplate_practice_pos(qt2_id), -1)
self.assertEqual(DB.get_qtemplate_practice_pos(qt1_id), 0, "Broken cache?")
self.assertEqual(DB.get_qtemplate_practice_pos(qt2_id), -1, "Broken cache?")
qts = Topics.get_qts(topic1_id)
self.assertIn(qt1_id, qts)
self.assertIn(qt2_id, qts)
self.assertEqual(len(qts), 2)
DB.move_qt_to_topic(qt1_id, topic2_id)
qts = Topics.get_qts(topic1_id)
self.assertNotIn(qt1_id, qts)
self.assertIn(qt2_id, qts)
self.assertEqual(len(qts), 1)
示例9: cadmin_edit_topic
def cadmin_edit_topic(course_id, topic_id):
""" Present a page to view and edit a topic, including adding/editing
questions and setting some parameters.
"""
user_id = session['user_id']
if not course_id:
abort(404)
course = Courses2.get_course(course_id)
topic = {
'id': topic_id,
'position': Topics.get_pos(topic_id),
'name': Topics.get_name(topic_id)
}
questions = [question
for question in Topics.get_qts(topic_id).values()]
for question in questions:
question['embed_id'] = DB.get_qt_embedid(question['id'])
if question['embed_id']:
question['embed_url'] = "%s/embed/question/%s/question.html" % \
(OaConfig.parentURL, question['embed_id'])
else:
question['embed_url'] = None
question['editor'] = DB.get_qt_editor(question['id'])
all_courses = Courses2.get_course_list()
all_courses = [crse
for crse in all_courses
if satisfy_perms(user_id, int(crse['id']),
("questionedit", "courseadmin",
"sysadmin"))]
all_courses.sort(lambda f, s: cmp(f['name'], s['name']))
all_course_topics = []
for crse in all_courses:
topics = Courses.get_topics_all(crse['id'], numq=False)
if topics:
all_course_topics.append({'course': crse['name'], 'topics': topics})
questions.sort(key=lambda k: k['position'])
return render_template(
"courseadmin_edittopic.html",
course=course,
topic=topic,
questions=questions,
all_course_topics=all_course_topics
)
示例10: api_qedit2_get_qtemplate_json
def api_qedit2_get_qtemplate_json(qt_id):
""" Present a list of qtemplates that are available for use in the exam."""
if 'user_id' not in session:
abort(401)
user_id = session['user_id']
topic_id = DB.get_topic_for_qtemplate(qt_id)
course_id = Topics.get_course_id(topic_id)
if not satisfy_perms(user_id, course_id, ("questionedit",)):
abort(401)
# test data while we're building the frontend
return jsonify(result={
'type': "qtemplate data",
'title': "Test QE2 Question",
'embed_id': "aaaaaaaaa3",
'maxscore': 3,
'pre_vars': [
{'id': 1, 'name': "a", 'type': 'List', 'value': "2,3,4,5,6,7"},
{'id': 2, 'name': "b", 'type': 'Range', 'value': "1-10"},
{'id': 3, 'name': "a1", 'type': 'Calculation', 'value': "$a+$b"},
{'id': 4, 'name': "a2", 'type': 'Calculation', 'value': "$a*$b"},
],
'qtext': "What is $a + $b ? <answer1>\nWhat is $a * $b? <answer2> ",
'answers': [
{'id': 1, 'source': 'Variable', 'value': '$a1', 'tolerance': 0, 'score': 1},
{'id': 2, 'source': 'Variable', 'value': '$a2', 'tolerance': 0, 'score': 1}
]
})
示例11: test_assess_create
def test_assess_create(self):
""" Create an empty assessment"""
course_id = Courses.create("TESTCOURSE5", "unit tests for assessment", 1, 1)
Courses.create_config(course_id, "casual", 1)
Courses.set_active(course_id, True)
Courses.set_prac_vis(course_id, "none")
Courses.set_assess_vis(course_id, "none")
title = "Test Assessment 1"
atype = 2 # assignment
duration = 60
code = "123456"
instant = 1
instructions = "These are the instructions"
astart = datetime.datetime.utcnow()
aend = astart + datetime.timedelta(hours=2)
exam_id = Exams.create(course_id, 1, title, atype, duration, astart,
aend, instructions, code=code, instant=instant)
self.assertGreater(exam_id, 0)
topic1_id = Topics.create(course_id, "TESTASSESS1", 1, 1)
self.assertGreater(topic1_id, 0)
data = open(self.test_question_fname).read()
numread = External.import_qts_from_zip(data, topic1_id)
self.assertEqual(numread, 3)
示例12: test_create_qtemplate
def test_create_qtemplate(self):
""" Test qtemplates creation
"""
qt1_id = DB.create_qt(1, "TESTQ1", "Test question 1", 0, 5.0, 1)
qt2_id = DB.create_qt(1, "TESTQ2", "Test question 2", 0, 4.1, 2)
self.assertIsInstance(qt1_id, int)
self.assertIsInstance(qt2_id, int)
qt1 = DB.get_qtemplate(qt1_id)
qt2 = DB.get_qtemplate(qt2_id)
self.assertEqual(qt1['title'], "TESTQ1")
self.assertEqual(qt2['title'], "TESTQ2")
self.assertEqual(qt1['description'], "Test question 1")
self.assertEqual(qt2['description'], "Test question 2")
course_id = Courses.create("TEST107", "Test create qtemplate", 1, 1)
topic1_id = Topics.create(course_id, "TESTTOPIC9", 1, 2)
qt3_id = DB.create_qt(1, "TESTQ3", "Test question 3", 0, 5.0, 1, topic1_id)
self.assertIsInstance(qt3_id, int)
qt3 = DB.get_qtemplate(qt3_id)
self.assertEqual(qt3['title'], "TESTQ3")
self.assertEqual(qt3['description'], "Test question 3")
self.assertEqual(DB.get_topic_for_qtemplate(qt3_id), topic1_id)
示例13: test_do_question
def test_do_question(self):
""" Do a question"""
course_id = Courses.create("TEST102", "Test question logic", 1, 1)
self.assertGreater(course_id, 0)
topic1_id = Topics.create(course_id, "TESTQUESTIONS1", 1, 2)
self.assertGreater(topic1_id, 0)
qt1_id = DB.create_qt(1, "TESTQ9", "Test question 9", 0, 5.0, 1, topic_id=topic1_id)
self.assertIsNotNone(qt1_id)
ver = DB.get_qt_version(qt1_id)
self.assertGreater(ver, 0)
data = "2\n|1\n|2\n"
qvars = [{'A1': "2"}, {'A1': "3"}]
for row in range(0, len(qvars)):
DB.add_qt_variation(qt1_id, row + 1, qvars[row], ver)
DB.create_qt_att(qt1_id, "datfile.dat", "text/plain", data , ver)
DB.create_qt_att(qt1_id, "qtemplate.html", "text/html", "What is <VAL A1>? <ANSWER 1>", ver)
q_id = DB.get_q_by_qt_student(qt1_id, 1)
self.assertFalse(q_id) # Not generated yet
q_id = General.gen_q(qt1_id, 1)
self.assertGreater(q_id, 0)
q_id = DB.get_q_by_qt_student(qt1_id, 1)
self.assertTrue(qt1_id) # Better be there now
DB.update_qt_maxscore(qt1_id, 7.0)
score = DB.get_qt_maxscore(qt1_id)
self.assertEqual(score, 7.0)
DB.set_q_viewtime(q_id)
self.assertIsNotNone(DB.get_q_viewtime(q_id))
示例14: test_topic_nextprev
def test_topic_nextprev(self):
""" Do the "next/previous" options in practice work?
"""
course_id = Courses.create("TEST101", "Test topic next/prev logic", 1, 1)
topic1_id = Topics.create(course_id, "TESTTOPIC1", 1, 2)
qt1_id = DB.create_qt(1, "TESTQ1", "Test question 1", 0, 5.0, 1)
qt2_id = DB.create_qt(1, "TESTQ2", "Test question 2", 0, 4.1, 2)
qt3_id = DB.create_qt(1, "TESTQ3", "Test question 3", 0, 0.0, 2)
qt4_id = DB.create_qt(1, "TESTQ4", "Test question 4", 0, 2.0, 2)
DB.move_qt_to_topic(qt1_id, topic1_id)
DB.move_qt_to_topic(qt2_id, topic1_id)
DB.move_qt_to_topic(qt3_id, topic1_id)
DB.move_qt_to_topic(qt4_id, topic1_id)
DB.update_qt_practice_pos(qt1_id, 1)
DB.update_qt_practice_pos(qt2_id, 2)
DB.update_qt_practice_pos(qt3_id, 3)
DB.update_qt_practice_pos(qt4_id, 4)
qts = Topics.get_qts(topic1_id)
self.assertIn(qt1_id, qts)
self.assertIn(qt2_id, qts)
self.assertIn(qt3_id, qts)
self.assertIn(qt4_id, qts)
self.assertEqual(len(qts), 4)
self.assertTupleEqual(Practice.get_next_prev_pos(qt1_id, topic1_id), (None, 2))
self.assertTupleEqual(Practice.get_next_prev_pos(qt2_id, topic1_id), (1, 3))
self.assertTupleEqual(Practice.get_next_prev_pos(qt3_id, topic1_id), (2, 4))
self.assertTupleEqual(Practice.get_next_prev_pos(qt4_id, topic1_id), (3, None))
DB.update_qt_practice_pos(qt2_id, 3)
self.assertEqual(DB.get_qtemplate_practice_pos(qt1_id), 1)
self.assertEqual(DB.get_qtemplate_practice_pos(qt2_id), 3)
self.assertEqual(DB.get_qtemplate_practice_pos(qt3_id), 3)
self.assertEqual(DB.get_qtemplate_practice_pos(qt4_id), 4)
self.assertTupleEqual(Practice.get_next_prev_pos(qt1_id, topic1_id), (None, 3))
self.assertTupleEqual(Practice.get_next_prev_pos(qt2_id, topic1_id), (1, 4))
self.assertTupleEqual(Practice.get_next_prev_pos(qt3_id, topic1_id), (1, 4))
self.assertTupleEqual(Practice.get_next_prev_pos(qt4_id, topic1_id), (3, None))
self.assertTupleEqual(Practice.get_next_prev_pos(qt4_id, None), (None, None))
示例15: practice_choose_question
def practice_choose_question(topic_id):
""" Present a list of questions for them to choose from the given topic """
user_id = session['user_id']
try:
course_id = Topics.get_course_id(topic_id)
except KeyError:
course_id = None
abort(404)
topics = []
try:
topics = Courses2.get_topics_list(course_id)
except KeyError:
abort(404)
try:
course = Courses2.get_course(course_id)
except KeyError:
course = None
abort(404)
topictitle = Topics.get_name(topic_id)
questions = Practice.get_sorted_questions(course_id, topic_id, user_id)
thistopic = Topics.get_topic(topic_id)
members = []
if thistopic['visibility'] == 2: # course only
if not members:
members = Courses.get_users(course_id)
if not user_id in members:
abort(404)
for topic in topics:
if topic['visibility'] == 2: # course only
if not members:
members = Courses.get_users(course_id)
if not user_id in members:
topics.remove(topic)
return render_template(
"practicetopic.html",
canpreview=check_perm(user_id, course_id, "questionpreview"),
topics=topics,
topic_id=topic_id,
course=course,
topictitle=topictitle,
questions=questions
)