Oups, add a lot of missing files
This commit is contained in:
parent
d234d83df8
commit
061e73722f
21 changed files with 937 additions and 2 deletions
31
modules/qcm/Course.py
Normal file
31
modules/qcm/Course.py
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
# coding=utf-8
|
||||
|
||||
COURSES = None
|
||||
|
||||
class Course:
|
||||
def __init__(self, iden):
|
||||
global COURSES
|
||||
if iden in COURSES.index:
|
||||
self.node = COURSES.index[iden]
|
||||
else:
|
||||
self.node = { "code":"N/A", "name":"N/A", "branch":"N/A" }
|
||||
|
||||
@property
|
||||
def id(self):
|
||||
return self.node["xml:id"]
|
||||
|
||||
@property
|
||||
def code(self):
|
||||
return self.node["code"]
|
||||
|
||||
@property
|
||||
def name(self):
|
||||
return self.node["name"]
|
||||
|
||||
@property
|
||||
def branch(self):
|
||||
return self.node["branch"]
|
||||
|
||||
@property
|
||||
def validated(self):
|
||||
return int(self.node["validated"]) > 0
|
||||
93
modules/qcm/Question.py
Normal file
93
modules/qcm/Question.py
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
# coding=utf-8
|
||||
|
||||
from datetime import datetime
|
||||
import hashlib
|
||||
import http.client
|
||||
import socket
|
||||
from urllib.parse import quote
|
||||
|
||||
from .Course import Course
|
||||
from .User import User
|
||||
|
||||
QUESTIONS = None
|
||||
|
||||
class Question:
|
||||
def __init__(self, node):
|
||||
self.node = node
|
||||
|
||||
@property
|
||||
def ident(self):
|
||||
return self.node["xml:id"]
|
||||
|
||||
@property
|
||||
def id(self):
|
||||
return self.node["xml:id"]
|
||||
|
||||
@property
|
||||
def question(self):
|
||||
return self.node["question"]
|
||||
|
||||
@property
|
||||
def course(self):
|
||||
return Course(self.node["course"])
|
||||
|
||||
@property
|
||||
def answers(self):
|
||||
return self.node.getNodes("answer")
|
||||
|
||||
@property
|
||||
def validator(self):
|
||||
return User(self.node["validator"])
|
||||
|
||||
@property
|
||||
def writer(self):
|
||||
return User(self.node["writer"])
|
||||
|
||||
@property
|
||||
def validated(self):
|
||||
return self.node["validated"]
|
||||
|
||||
@property
|
||||
def addedtime(self):
|
||||
return datetime.fromtimestamp(float(self.node["addedtime"]))
|
||||
|
||||
@property
|
||||
def author(self):
|
||||
return User(self.node["writer"])
|
||||
|
||||
def report(self, raison="Sans raison"):
|
||||
conn = http.client.HTTPConnection(CONF.getNode("server")["url"])
|
||||
try:
|
||||
conn.request("GET", "report.php?id=" + hashlib.md5(self.id.encode()).hexdigest() + "&raison=" + quote(raison))
|
||||
except socket.gaierror:
|
||||
print ("[%s] impossible de récupérer la page %s."%(s, p))
|
||||
return False
|
||||
res = conn.getresponse()
|
||||
conn.close()
|
||||
return (res.status == http.client.OK)
|
||||
|
||||
@property
|
||||
def tupleInfo(self):
|
||||
return (self.author.username, self.validator.username, self.addedtime)
|
||||
|
||||
@property
|
||||
def bestAnswer(self):
|
||||
best = self.answers[0]
|
||||
for answer in self.answers:
|
||||
if best.getInt("score") < answer.getInt("score"):
|
||||
best = answer
|
||||
return best["answer"]
|
||||
|
||||
def isCorrect(self, msg):
|
||||
msg = msg.lower().replace(" ", "")
|
||||
for answer in self.answers:
|
||||
if msg == answer["answer"].lower().replace(" ", ""):
|
||||
return True
|
||||
return False
|
||||
|
||||
def getScore(self, msg):
|
||||
msg = msg.lower().replace(" ", "")
|
||||
for answer in self.answers:
|
||||
if msg == answer["answer"].lower().replace(" ", ""):
|
||||
return answer.getInt("score")
|
||||
return 0
|
||||
16
modules/qcm/QuestionFile.py
Normal file
16
modules/qcm/QuestionFile.py
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
# coding=utf-8
|
||||
|
||||
import module_states_file as xmlparser
|
||||
|
||||
from .Question import Question
|
||||
|
||||
class QuestionFile:
|
||||
def __init__(self, filename):
|
||||
self.questions = xmlparser.parse_file(filename)
|
||||
self.questions.setIndex("xml:id")
|
||||
|
||||
def getQuestion(self, ident):
|
||||
if ident in self.questions.index:
|
||||
return Question(self.questions.index[ident])
|
||||
else:
|
||||
return None
|
||||
68
modules/qcm/Session.py
Normal file
68
modules/qcm/Session.py
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
# coding=utf-8
|
||||
|
||||
import threading
|
||||
|
||||
SESSIONS = dict()
|
||||
|
||||
from . import Question
|
||||
|
||||
class Session:
|
||||
def __init__(self, srv, chan, sender):
|
||||
self.questions = list()
|
||||
self.current = -1
|
||||
self.score = 0
|
||||
self.good = 0
|
||||
self.bad = 0
|
||||
self.trys = 0
|
||||
self.timer = None
|
||||
self.server = srv
|
||||
self.channel = chan
|
||||
self.sender = sender
|
||||
|
||||
def addQuestion(self, ident):
|
||||
if ident not in self.questions:
|
||||
self.questions.append(ident)
|
||||
return True
|
||||
return False
|
||||
|
||||
def next_question(self):
|
||||
self.trys = 0
|
||||
self.current += 1
|
||||
return self.question
|
||||
|
||||
@property
|
||||
def question(self):
|
||||
if self.current >= 0 and self.current < len(self.questions):
|
||||
return Question.Question(Question.QUESTIONS.index[self.questions[self.current]])
|
||||
else:
|
||||
return None
|
||||
|
||||
def askNext(self, bfr = ""):
|
||||
global SESSIONS
|
||||
self.timer = None
|
||||
nextQ = self.next_question()
|
||||
if nextQ is not None:
|
||||
if self.channel == self.server.nick:
|
||||
self.server.send_msg_final(self.sender, "%s%s" % (bfr, nextQ.question))
|
||||
elif self.sender != self.channel:
|
||||
self.server.send_msg_final(self.channel, "%s: %s%s" % (self.sender, bfr, nextQ.question))
|
||||
else:
|
||||
self.server.send_msg_final(self.channel, "%s%s" % (bfr, nextQ.question))
|
||||
else:
|
||||
if self.good > 1:
|
||||
goodS = "s"
|
||||
else:
|
||||
goodS = ""
|
||||
if self.channel == self.server.nick:
|
||||
self.server.send_msg_final(self.sender, "%sFini, tu as donné %d bonne%s réponse%s sur %d questions." % (self.sender, bfr, self.good, goodS, goodS, len(self.questions)))
|
||||
elif self.sender != self.channel:
|
||||
self.server.send_msg_final(self.channel, "%s: %sFini, tu as donné %d bonne%s réponse%s sur %d questions." % (self.sender, bfr, self.good, goodS, goodS, len(self.questions)))
|
||||
else:
|
||||
self.server.send_msg_final(self.channel, "%sFini, vous avez donné %d bonne%s réponse%s sur %d questions." % (bfr, self.good, goodS, goodS, len(self.questions)))
|
||||
del SESSIONS[self.sender]
|
||||
|
||||
def prepareNext(self, lag = 3):
|
||||
if self.timer is None:
|
||||
self.timer = threading.Timer(lag, self.askNext)
|
||||
self.timer.start()
|
||||
|
||||
27
modules/qcm/User.py
Normal file
27
modules/qcm/User.py
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
# coding=utf-8
|
||||
|
||||
USERS = None
|
||||
|
||||
class User:
|
||||
def __init__(self, iden):
|
||||
global USERS
|
||||
if iden in USERS.index:
|
||||
self.node = USERS.index[iden]
|
||||
else:
|
||||
self.node = { "username":"N/A", "email":"N/A" }
|
||||
|
||||
@property
|
||||
def id(self):
|
||||
return self.node["xml:id"]
|
||||
|
||||
@property
|
||||
def username(self):
|
||||
return self.node["username"]
|
||||
|
||||
@property
|
||||
def email(self):
|
||||
return self.node["email"]
|
||||
|
||||
@property
|
||||
def validated(self):
|
||||
return int(self.node["validated"]) > 0
|
||||
Loading…
Add table
Add a link
Reference in a new issue