예제 #1
0
def admin_addproblem():
    form = ProblemForm()
    error = None
    if request.method == 'POST' and form.validate():
        inputfile = request.files['inputfile']
        outputfile = request.files['outputfile']

        problem = Problem(form.title.data, form.description.data,
                          form.pinput.data, form.poutput.data,
                          form.sinput.data, form.soutput.data, form.hint.data,
                          form.time_limit.data, form.memory_limit.data)
        problem.save()

        inputfile.save(
            os.path.join(app.config['UPLOAD_FOLDER'],
                         '.'.join([str(problem.pid), 'in'])))
        outputfile.save(
            os.path.join(app.config['UPLOAD_FOLDER'],
                         '.'.join([str(problem.pid), 'out'])))

        print 'upload successfully!'
        return redirect(url_for('admin_problemset'))

    error = get_error(form)

    if error:
        flash(error)

    return render_template('admin_addproblem.html', form=form)
예제 #2
0
파일: views.py 프로젝트: codecola1/neauoj
def get_problem_info(req, oj, problem_id, index):
    problem_id = int(problem_id)
    data = {
        'pid': 0,
        'title': '',
        'index': index,
        'new': 0,
    }
    try:
        pinfo = Problem.objects.get(oj=oj, problem_id=problem_id)
    except:
        if oj != 'neau':
            c = Connect()
            title = c.test_problem(oj, problem_id).decode('UTF-8')
            if len(title):
                p = Problem(oj=oj, problem_id=problem_id, judge_type=1)
                p.save()
                c = Connect()
                c.download_problem(oj, problem_id, p.id)
                data['pid'] = p.id
                data['title'] = title
                data['new'] = 1
    else:
        data = {
            'pid': pinfo.id,
            'title': pinfo.title,
            'index': index,
            'new': 0
        }
    return JsonResponse(data)
예제 #3
0
파일: views.py 프로젝트: codecola1/neauoj
def test(req):
    p = None
    if req.method == 'POST':
        wait = True
        form = testform(req.POST)
        if form.is_valid():
            ind = form.cleaned_data['ind']
            oj = form.cleaned_data['oj']
            try:
                p = Problem.objects.get(oj=oj, problem_id=ind)
            except:
                p = Problem(oj=oj, problem_id=ind, judge_type=1)
                p.save()
                c = Connect()
                c.download_problem(oj, ind, p.id)
            else:
                if p.defunct <= 0:
                    c = Connect()
                    c.download_problem(oj, ind, p.id)
                else:
                    wait = False
        return render_to_response('problem_test.html', {
            'form': form,
            'path': req.path,
            'wait': wait,
            'p': p,
        }, context_instance=RequestContext(req))
    else:
        form = testform()
        return render_to_response('problem_test.html', {
            'form': form,
            'path': req.path,
            'wait': True,
            'p': p,
        }, context_instance=RequestContext(req))
예제 #4
0
파일: views.py 프로젝트: ryanjam4/core
def add_problem(request, patient_id):
    role = UserProfile.objects.get(user=request.user).role
    authenticated = True if (role == 'physician' or role == 'admin') else False
    if 'problem_name' in request.POST:
        problem = Problem(patient=User.objects.get(id=patient_id), problem_name=request.POST['problem_name'], concept_id=request.POST['concept_id'], authenticated=authenticated)
        problem.save()
    elif 'goal' in request.POST:
        goal = Goal(patient=User.objects.get(id=patient_id), goal=request.POST['goal'])
        goal.save()
    elif 'todo' in request.POST:
        print 'todo'
        print request.POST
        todo = ToDo(patient=User.objects.get(id=patient_id), todo=request.POST['todo'])
        todo.save()
    return HttpResponse('added')
예제 #5
0
파일: views.py 프로젝트: yumendy/present
def add(req):
	if req.POST:
		post = req.POST
		new = Problem()
		new.title = post['title']
		new.key = post['key']
		if req.FILES:
			uf = ImgForm(post,req.FILES)
			if uf.is_valid():
				if uf.cleaned_data['qimg']:
					new.qimg = uf.cleaned_data['qimg']
				if uf.cleaned_data['aimg']:
					new.aimg = uf.cleaned_data['aimg']
		new.save()
		return render_to_response('success.html',{},context_instance = RequestContext(req))
	else:
		return render_to_response('add.html',{},context_instance = RequestContext(req))
예제 #6
0
def create_profile(sender, **kw):

    user = kw["instance"]
    base = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    if kw["created"]:
        os.mkdir(os.path.join(base + '/documents/', user.username))
        os.mkdir(os.path.join(base + '/documents/' + user.username, 'models'))
        os.mkdir(os.path.join(base + '/documents/' + user.username, 'logs'))
        os.mkdir(os.path.join(base + '/documents/' + user.username, 'data'))

        profile = UserProfile(user=user)
        profile.save()
        problem = Problem(title='Problema_' + user.username,
                          status=Problem.EXPECTING_TRAINING_FILE)
        problem.save()
        profile.problem = problem
        profile.save()
예제 #7
0
def create_problems(request):
    group = False
    if request.method == 'POST':
        # загружаем данные POST из запроса в объект формы
        form = ProblemsForm(request.POST)
        # проверяем правильность загруженных данных
        if not form.is_valid(): # если данные не верны возвращаем форму с сообщением об ошибке
            return render_to_response("create_problems.html", { 'form': form })
        # извлекаем из формы данные в объекты
        name = form.cleaned_data["name"]
        engines = form.cleaned_data["engines"]
        groups = form.cleaned_data["groups"]
        # формируем список студентов по указанным в форме группам
        users = [profile.user for group in groups for profile in group.userprofile_set.all()]
        # равномерно расределяем задачи между студентами
        engine_names = [engine for engine in islice(cycle(engines), None, len(users))]
        # если имя группы заданий не задано, то будет использовано значение по умолчанию
        if not name: name = u"Без названия"
        # создаем объект группы и сохраняем его
        problems_group = ProblemGroup(name = name)
        problems_group.save()
        print users
        for user, engine_name in imap(None, users, engine_names):
            print user, engine_name
            # извлекаем заданный движок задачи и инстанцируем его
            ProblemEngine = settings.EngineManager.get_engine(engine_name)
            engine = ProblemEngine()
            # генерируем исходные данные задачи и выполняем их корректировку
            while True:
                try:
                    engine.randomize_in_params()
                    engine.adjust()
                    engine.calculate()
                except Exception:
                    pass
                else:
                    break
            # создаем объект задания и передаем ему все необходимые данные
            problem = Problem(user = user, problem_engine = engine_name,
                problem_in_params = engine.get_store_str(), # передаем в задание исходные данные 
                group = problems_group)
            problem.save()
        group = problems_group
    return render_to_response("create_problems.html", {'form': ProblemsForm(), 'group': group })
예제 #8
0
def create_problems(problem_group, engines, groups):
    # создаем ссылки на объекты логера и запроса
    request = create_problems.request
    log = create_problems.get_logger()
    # присваием группе id задания выполняеющего работу
    problem_group.task_id = request.id
    problem_group.save()
    # формируем список студентов по указанным в форме группам
    users = [profile.user for group in groups for profile in group.userprofile_set.all()]
    # равномерно расределяем задачи между студентами
    engine_names = [engine for engine in islice(cycle(engines), None, len(users))]
    # словарь уникальности заданий
    uniq_hash = {}
    for i, (user, engine_name) in enumerate(imap(None, users, engine_names)):
        # извлекаем заданный движок задачи и инстанцируем его
        ProblemEngine = settings.EngineManager.get_engine(engine_name)
        engine = ProblemEngine()
        # генерируем исходные данные задачи и выполняем их корректировку
        while True:
            try:
                engine.randomize_in_params()
                engine.adjust()
                engine.calculate()
            except Exception:
                log.debug("Error while createing problem for %s engine." % ProblemEngine.short_name)
            else:
                if uniq_hash.get("%s_%s" % (ProblemEngine.short_name, engine.get_store_str()), False):
                    continue
                else:
                    uniq_hash["%s_%s" % (ProblemEngine.short_name, engine.get_store_str())] = engine.get_store_str()
                    log.debug(u"Сгенерирована задача: %d" % i)
                    break
        # создаем объект задания и передаем ему все необходимые данные
        problem = Problem(user = user, problem_engine = engine_name,
            problem_in_params = engine.get_store_str(), # передаем в задание исходные данные 
            group = problem_group)
        problem.save()
        # обновляем состояние задания
        create_problems.update_state(state = "PROGRESS", meta = {"current": i, "total": len(users) })
    problem_group.created = True
    problem_group.save()
    return True
예제 #9
0
def add_problem(request, patient_id):
    role = UserProfile.objects.get(user=request.user).role
    authenticated = True if (role == 'physician' or role == 'admin') else False
    if 'problem_name' in request.POST:
        problem = Problem(patient=User.objects.get(id=patient_id),
                          problem_name=request.POST['problem_name'],
                          concept_id=request.POST['concept_id'],
                          authenticated=authenticated)
        problem.save()
    elif 'goal' in request.POST:
        goal = Goal(patient=User.objects.get(id=patient_id),
                    goal=request.POST['goal'])
        goal.save()
    elif 'todo' in request.POST:
        # print 'todo'
        # print request.POST
        todo = ToDo(patient=User.objects.get(id=patient_id),
                    todo=request.POST['todo'])
        todo.save()
    return HttpResponse('added')
예제 #10
0
def admin_addproblem():
    form = ProblemForm()
    error = None
    if request.method == 'POST' and form.validate():
        inputfile = request.files['inputfile']
        outputfile = request.files['outputfile']

        problem = Problem(form.title.data, form.description.data, form.pinput.data, form.poutput.data, form.sinput.data, form.soutput.data, form.hint.data, form.time_limit.data, form.memory_limit.data)
        problem.save()

        inputfile.save(os.path.join(app.config['UPLOAD_FOLDER'], '.'.join([str(problem.pid),'in'])))
        outputfile.save(os.path.join(app.config['UPLOAD_FOLDER'], '.'.join([str(problem.pid),'out'])))

        print 'upload successfully!'
        return redirect(url_for('admin_problemset'))

    error = get_error(form)

    if error:
        flash(error)

    return render_template('admin_addproblem.html',form = form)
예제 #11
0
파일: parse_tex.py 프로젝트: dmsm/DibTeX
import re
from models import Assignment, Problem

file = open("management/commands/sample.tex", "r")
data = file.read()

m = re.search(r"assignment{(.*)}", data)
name = m.group(1)

m = re.search(r"duedate{(.*)}", data)
due_date = m.group(1)

asgt = Assignment(name=name, due_date=due_date)
asgt.save()

problems = []

problem_locs = [m.end() for m in re.finditer("begin{problem}", data)]

for loc in problem_locs:
    p = Problem()
    m = re.search(r"\[(.*)\]", data[loc:])
    p.name = m.group(1)
    n = re.search(r"\[(.*)\]", data[loc+m.end():])
    p.points = n.group(1)
    o = re.search(r"([^]]*)\\end{problem}", data[loc + m.end() + n.end():])
    p.solution = o.group(1)
    p.save()
    asgt.problems.add(p)
예제 #12
0
파일: views.py 프로젝트: karthip26/core
def add_problem(request, patient_id):
    role = UserProfile.objects.get(user=request.user).role
    authenticated = True if (role == 'physician' or role == 'admin') else False
    problem = Problem(patient=User.objects.get(id=patient_id), problem_name=request.POST['problem_name'], concept_id=request.POST['concept_id'], authenticated=authenticated)
    problem.save()
    return HttpResponse('added')
예제 #13
0
파일: parse_tex.py 프로젝트: dmsm/DibTeX
import re
from models import Assignment, Problem

file = open("management/commands/sample.tex", "r")
data = file.read()

m = re.search(r"assignment{(.*)}", data)
name = m.group(1)

m = re.search(r"duedate{(.*)}", data)
due_date = m.group(1)

asgt = Assignment(name=name, due_date=due_date)
asgt.save()

problems = []

problem_locs = [m.end() for m in re.finditer("begin{problem}", data)]

for loc in problem_locs:
    p = Problem()
    m = re.search(r"\[(.*)\]", data[loc:])
    p.name = m.group(1)
    n = re.search(r"\[(.*)\]", data[loc + m.end():])
    p.points = n.group(1)
    o = re.search(r"([^]]*)\\end{problem}", data[loc + m.end() + n.end():])
    p.solution = o.group(1)
    p.save()
    asgt.problems.add(p)