def userReport(sid): path = USER_PATH+os.path.basename(sid) test = Test() if not os.path.exists(path+'/test'): return {} test.readFromFile(path+'/test') answer = Answer() if not os.path.exists(path+'/answer'): return {} answer.readFromFile(path+'/answer') test.applyAnswers(answer) ret = {} qcount = test.questionsCount() ret['QUESTION_COUNT'] = str(qcount) aqcount = test.rightAnsweredQuestionsCount() ret['ANSWERED_QUESTION_COUNT'] = str(aqcount) ret['ANSWERED_QUESTION_COUNT_PERCENT'] = str(aqcount*100/qcount) ret['TEST_TITLE'] = escape(test.caption) db_conn = sqlite3.connect(USER_DB) db_cursor = db_conn.cursor() db_cursor.execute('SELECT `date`, `name`, `result`, `rank` FROM `users` WHERE `sid`=?', (sid,)) for row in db_cursor: try: date = datetime.fromtimestamp(int(row[0])).strftime("%d.%m.%Y %H:%m") except: date = "" ret['DATE'] = date user_names = row[1].split(' ') full_user_name = user_names[0] for user_name in user_names[1:]: if len(user_name): full_user_name += " "+user_name[0]+"." ret['USER_NAME'] = escape(full_user_name) ret['TEST_RESULT'] = str(row[2]) ret['USER_RANK'] = escape(row[3]) db_cursor.close() db_conn.close() return ret
class Storage: def __init__(self, sid, user_name, user_rank, test): self.sid = sid self.user_name = user_name self.user_rank = user_rank self.test = test self.answer = Answer() self.result = 0 self.path = USER_PATH+sid os.mkdir(self.path) self.saveTest() self.populateIndex() def populateIndex(self): db_conn = sqlite3.connect(USER_DB) db_cursor = db_conn.cursor() db_cursor.execute('INSERT INTO `users` (`name`, `rank`, `test`, `result`, `date`, `sid`)VALUES(?, ?, ?, ?, ?, ?)', (self.user_name, self.user_rank, self.test.caption, '0', str(int(time.mktime(datetime.now().timetuple()))), self.sid)) db_conn.commit() db_cursor.close() db_conn.close() def saveTest(self): test_file = open(self.path+'/test', 'wb') test_file.write(self.test.serializeForFile()) test_file.close() def saveResult(self): db_conn = sqlite3.connect(USER_DB) db_cursor = db_conn.cursor() self.result = self.test.getPoints() db_cursor.execute('UPDATE `users` SET `result`=? WHERE `sid`=?', ( str(self.result), self.sid) ) db_conn.commit() db_cursor.close() db_conn.close() def populateAnswers(self, post): self.answer.addFromPost(post) test_file = open(self.path+'/answer', 'ab') test_file.write(self.answer.serializePostForFile(post)) test_file.close()
def userControlTestHtml(sid): path = USER_PATH+os.path.basename(sid) test = Test() if not os.path.exists(path+'/test'): return u"Пользователь не проходил тест" test.readFromFile(path+'/test') answer = Answer() if not os.path.exists(path+'/answer'): return u"Пользователь не оправлял ответов" answer.readFromFile(path+'/answer') test.applyAnswers(answer) return test.serializeForHtml(show_hint=False)
def __init__(self, sid, user_name, user_rank, test): self.sid = sid self.user_name = user_name self.user_rank = user_rank self.test = test self.answer = Answer() self.result = 0 self.path = USER_PATH+sid os.mkdir(self.path) self.saveTest() self.populateIndex()