Пример #1
0
def add_problem(title,
                category,
                description,
                value,
                grader_contents,
                pid=utils.generate_string(),
                hint="",
                bonus=0,
                autogen=0):
    grader_contents = str(grader_contents)
    pid = str(pid)
    value = int(value)

    title_exists = Problems.query.filter_by(title=title).first()
    if title_exists:
        raise WebException("Problem name already taken.")
    while Problems.query.filter_by(pid=pid).first():
        pid = utils.generate_string()
    if category == "Programming":
        programming.validate_judge(grader_contents)
    else:
        validate_grader(grader_contents, autogen=int(autogen))

    grader_folder = os.path.join(app.config["GRADER_FOLDER"], pid)
    if not os.path.exists(grader_folder):
        os.makedirs(grader_folder)
    grader_path = os.path.join(grader_folder, "grader.py")
    grader_file = open(grader_path, "w")
    grader_file.write(grader_contents)
    grader_file.close()

    problem = Problems(pid,
                       title,
                       category,
                       description,
                       value,
                       grader_path,
                       bonus=bonus,
                       hint=hint,
                       autogen=autogen)
    db.session.add(problem)

    files = request.files.getlist("files[]")
    for _file in files:
        filename = secure_filename(_file.filename)
        if len(filename) == 0:
            continue
        file_path = os.path.join(app.config["UPLOAD_FOLDER"], filename)
        _file.save(file_path)
        db_file = Files(problem.pid, "/".join(file_path.split("/")[2:]))
        db.session.add(db_file)
    db.session.commit()
    db.session.close()
Пример #2
0
def problem_update():
	params = utils.flat_multi(request.form)
	pid = params.get("pid", "")
	title = params.get("title", "")
	category = params.get("category", "")
	description = params.get("description", "")
	hint = params.get("hint", "")
	value = params.get("value", 0)
	bonus = params.get("bonus", 0)
	grader_contents = params.get("grader_contents", "")
	autogen = params.get("autogen", 0)
	try:
		weightmap = json.loads(params.get("weightmap", "{}"))
	except:
		weightmap = {}
	threshold = params.get("threshold", 0)

	problem = Problems.query.filter_by(pid=pid).first()
	if problem:
		problem.pid = title.lower().replace(" ", "-")
		problem.title = title
		problem.category = category
		problem.description = description
		problem.hint = hint
		problem.value = value
		problem.bonus = bonus
		problem.autogen = autogen
		problem.weightmap = weightmap
		problem.threshold = threshold

		if category == "Programming":
			programming.validate_judge(grader_contents)
		else:
			validate_grader(grader_contents, autogen=int(autogen))

		with open(problem.grader, "w") as grader:
			grader.write(grader_contents)
			grader.close()

		db.session.add(problem)
		db.session.commit()
		db.session.close()

		return { "success": 1, "message": "Success!" }
	raise WebException("Problem does not exist!")
Пример #3
0
def add_problem(title, category, description, value, grader_contents, pid=utils.generate_string(), hint="", bonus=0, autogen=0):
	grader_contents = str(grader_contents)
	pid = str(pid)
	value = int(value)

	title_exists = Problems.query.filter_by(title=title).first()
	if title_exists:
		raise WebException("Problem name already taken.")
	while Problems.query.filter_by(pid=pid).first():
		pid = utils.generate_string()
	if category == "Programming":
		programming.validate_judge(grader_contents)
	else:
		validate_grader(grader_contents, autogen=int(autogen))

	grader_folder = os.path.join(app.config["GRADER_FOLDER"], pid)
	if not os.path.exists(grader_folder):
		os.makedirs(grader_folder)
	grader_path = os.path.join(grader_folder, "grader.py")
	grader_file = open(grader_path, "w")
	grader_file.write(grader_contents)
	grader_file.close()

	problem = Problems(pid, title, category, description, value, grader_path, bonus=bonus, hint=hint, autogen=autogen)
	db.session.add(problem)

	files = request.files.getlist("files[]")
	for _file in files:
		filename = secure_filename(_file.filename)
		if len(filename) == 0:
			continue
		file_path = os.path.join(app.config["UPLOAD_FOLDER"], filename)
		_file.save(file_path)
		db_file = Files(problem.pid, "/".join(file_path.split("/")[2:]))
		db.session.add(db_file)
	db.session.commit()
	db.session.close()
Пример #4
0
def problem_update():
	params = utils.flat_multi(request.form)
	pid = params.get("pid")
	title = params.get("title")
	category = params.get("category")
	description = params.get("description")
	hint = params.get("hint")
	value = params.get("value")
	bonus = params.get("bonus")
	grader_contents = params.get("grader_contents")
	autogen = params.get("autogen")

	problem = Problems.query.filter_by(pid=pid).first()
	if problem:
		problem.title = title
		problem.category = category
		problem.description = description
		problem.hint = hint
		problem.value = value
		problem.bonus = bonus
		problem.autogen = autogen

		if category == "Programming":
			programming.validate_judge(grader_contents)
		else:
			validate_grader(grader_contents, autogen=int(autogen))

		with open(problem.grader, "w") as grader:
			grader.write(grader_contents)
			grader.close()

		db.session.add(problem)
		db.session.commit()

		return { "success": 1, "message": "Success!" }
	raise WebException("Problem does not exist!")
Пример #5
0
def problem_update():
    params = utils.flat_multi(request.form)
    pid = params.get("pid")
    title = params.get("title")
    category = params.get("category")
    description = params.get("description")
    hint = params.get("hint")
    value = params.get("value")
    bonus = params.get("bonus")
    grader_contents = params.get("grader_contents")
    autogen = params.get("autogen")

    problem = Problems.query.filter_by(pid=pid).first()
    if problem:
        problem.title = title
        problem.category = category
        problem.description = description
        problem.hint = hint
        problem.value = value
        problem.bonus = bonus
        problem.autogen = autogen

        if category == "Programming":
            programming.validate_judge(grader_contents)
        else:
            validate_grader(grader_contents, autogen=int(autogen))

        with open(problem.grader, "w") as grader:
            grader.write(grader_contents)
            grader.close()

        db.session.add(problem)
        db.session.commit()

        return {"success": 1, "message": "Success!"}
    raise WebException("Problem does not exist!")