Beispiel #1
0
def index(request):
    if request.POST:
        issue = Issue()
        form = IssueForm(request.POST, instance=issue)
        if (form.is_valid()):
            #send issue to GitHub
            title = form.cleaned_data.get('title')
            body = form.cleaned_data.get('body')
            url = 'https://api.github.com/repos/mcdermott-scholars/mcdermott/issues'
            auth = (settings.GITHUB_USERNAME, settings.GITHUB_PASSWORD)
            data = {'title': title, 'body': body}
            r = requests.post(url, auth=auth, data=json.dumps(data))
            messages.add_message(
                request,
                messages.SUCCESS if r.status_code == 201 else messages.ERROR,
                'Issue submitted'
                if r.status_code == 201 else 'Error submitting issue',
            )
            return redirect(reverse('issues:index'))
        else:
            form = IssueForm(request.POST, instance=issue)
    else:
        form = IssueForm()
    context = {
        'form': form,
    }
    return render(request, 'issues/index.html', context)
def add_edit_issue(request, *args, **kwargs):
    """Adds/Edits issues"""
    
    project_name = kwargs['project_name']
    project = get_object_or_404(CollabProject, slug=project_name)
    project_id = project.id
    
    issueset_id = kwargs['issueset_id']
    issueset = get_object_or_404(IssueSet, id__exact=issueset_id)

    if not is_allowed(request,  project_id,  Issue._meta.verbose_name,  'Editable'):
        return handle_privilege(request, "You do not have privileges to edit issues!", issueset.get_absolute_url())

    if 'issue_id' in kwargs:
        issue_id = kwargs['issue_id']
        issue = get_object_or_404(Issue, id=issue_id)
        # Check if the issue exists in that project AND issue set!
        if issue.issueset.project.id != project.id or issue.issueset.id != issueset.id:
            return handle_privilege(request, "The issue does not match the project or issue list!", project.get_absolute_url())
        edit = True
        instance=issue
    else:
        edit = False
        instance=None

    if request.method == 'POST':
        form = IssueForm(request.POST, instance=instance, issueset=issueset)
        if form.is_valid():
            if not edit:
                issue = Issue()
                message = "The issue was added."
            else:
                message = "The issue was modified."
            issue = form.save(commit=False)
            
            if not edit:
                issue.reporter = request.user

#            issue.issueset = issueset
            issue.save()
            request.user.message_set.create(message=message)
            return HttpResponseRedirect(issue.get_absolute_url())
    else:
        form = IssueForm(initial={'issueset': issueset.pk},  instance=instance, issueset=issueset)
    return render_to_response('issues/add_edit_issue.html', {'form': form,  'edit': edit,  'project': project, 'issueset': issueset, 'issue': instance}, context_instance=RequestContext(request))
Beispiel #3
0
def issueCall():
    form = IssueForm()
    if not ('username' in session):
        return redirect(url_for('login'))

    problemsdb = mongo.db.problems
    existing_posts = problemsdb.find({}).sort('name')
    i = 0;
    list = []
    problem_id_array = []
    pair = (i, 'None')
    list.append(pair)
    problem_id_array.append('CodeFlask')
    for existing_post in existing_posts:
        i = i + 1
        pair1 = (i, existing_post['name'])
        list.append(pair1)
        problem_id_array.append(existing_post['myid'])

    form.problemName.choices = list

    if form.validate_on_submit():
        title = form.title.data
        problemName = form.problemName.data
        problemID = problem_id_array[problemName]
        print(problemID)
        text = form.text.data
        user_name = session['username']
        issueID = uuid.uuid1().__str__()

        issue = mongo.db.Issues
        issue.insert({'IssueID': issueID,
                      'UserName': user_name,
                      'Title': title,
                      'ProblemID': problemID,
                      'text': text,
                      'date': datetime.datetime.now().strftime("%Y-%m-%d %H:%M"),
                      'commentNumber': 0})
        # return redirect(url_for('issues'))

    issue_array = []
    i = mongo.db.Issues
    issuelist = i.find({}).sort('date', -1)
    for issue in issuelist:
        if issue['ProblemID'] != 'CodeFlask':
            pb = problemsdb.find_one({'myid': issue['ProblemID']})
            issue_array.append(
                Issue(issue['IssueID'], issue['UserName'], issue['Title'], issue['ProblemID'], pb['name'],
                      issue['text'], issue['date'] , issue['commentNumber']))
        else:
            issue_array.append(
                Issue(issue['IssueID'], issue['UserName'], issue['Title'], issue['ProblemID'], 'CodeFlask',
                      issue['text'], issue['date'],issue['commentNumber']))

    return form,issue_array
Beispiel #4
0
def raise_issue():
    form = IssueForm()
    if form.validate_on_submit():
        issue = Issue(subject=form.subject.data,
                      description=form.description.data,
                      priority=form.priority.data,
                      department_id=form.department.data,
                      user=current_user._get_current_object())
        db.session.add(issue)
        db.session.commit()
        return redirect(url_for('issues.view'))
    return render_template('issues/raise.html', form=form, title="Raise Issue")
Beispiel #5
0
def project_issue_new(slug):
	form = IssueForm()
	project = Project.query.filter_by(slug=slug).first_or_404()
	if form.validate_on_submit():
		issue = Issue(project, current_user, form.urgency.data,
						form.title.data, form.text.data)
		db.session.add(issue)
		db.session.commit()
		flash("Created issue <a href=\"%s\">#%s</a>" %
				(url_for('project_issue', slug=project.slug, iid=issue.id), issue.id))
		return redirect(url_for('project_issue_new', slug=slug))
	return render_template('issue_new.html', project=project, form=form)
Beispiel #6
0
def edit(id):
    issue = Issue.query.get_or_404(id)
    if current_user.id != issue.user_id:
        abort(403)
    form = IssueForm(obj=issue)
    if form.validate_on_submit():
        issue.subject = form.subject.data
        issue.description = form.description.data
        issue.priority = form.priority.data
        issue.department_id = form.department.data
        issue.user = current_user._get_current_object()
        db.session.add(issue)
        db.session.commit()
        return redirect(url_for('issues.view'))
    form.description.data = issue.description
    form.subject.data = issue.subject
    return render_template('issues/edit.html', form=form, title="Edit Issue")
Beispiel #7
0
def view_project(id):
    project = Project.query.get_or_404(id)

    form = IssueForm()
    feedback_form = FeedbackForm()
    predictions = []
    model_path = os.path.join(app.config['MODEL_FOLDER'], '%s/svm.pkl' % id)
    trained = project.train_status != TS.NOT_TRAINED \
        and os.path.isfile(model_path)
    summary_or_description = form.summary.data or form.description.data

    if trained and form.validate_on_submit() and summary_or_description:
        issue = Document(form.summary.data, form.description.data)
        model = joblib.load(model_path)
        try:
            predictions = model.predict(issue, n=10)
        except ValueError:
            flash(
                "There is too little information provided. "
                "You need to add more text to the description or summary.",
                "error")

        feedback_form.summary.data = form.summary.data
        feedback_form.description.data = form.description.data
        existing_feedback = Feedback.query.get(
            Feedback.get_id_from_doc(issue, project=project))
        if existing_feedback:
            feedback_form.confirmed_recommendation.data = \
                existing_feedback.confirmed_recommendation

    if request.method == "POST" and not summary_or_description:
        err_msg = "Summary or description must not be empty."
        form.summary.errors.append(err_msg)
        form.description.errors.append(err_msg)

    fscore = tests.fscore(project.precision, project.recall)
    return render_template("project/view.html",
                           project=project,
                           fscore=fscore,
                           form=form,
                           predictions=predictions,
                           trained=trained,
                           feedback_form=feedback_form)
Beispiel #8
0
def projects_childissue(num):
    base_issue = Issue.objects(number=num)[0]
    project = Project.objects(id=base_issue.project_id)[0]
    issue = Issue()
    form = IssueForm(request.form, issue)
    if form.validate_on_submit():
        form.populate_obj(issue)
        counter = Counter.objects(id_for="issue")[0]
        counter.set_next_id()
        counter.save()
        issue.number = counter.number
        issue.author = session['user_id']
        issue.base_issue = num
        issue.save()
        return redirect('projects/issues/' + str(num))
    return render_template('projects_childissue.html',
                           project=project,
                           base_issue=base_issue,
                           issue=issue,
                           form=form)
Beispiel #9
0
def project_show(num):
    project = Project.objects(number=num)[0]
    issues = Issue.objects(project_id=str(project.id))
    for issue in issues:
        issue.comments_count = len(issue.comments)
    issue = Issue()
    form = IssueForm(request.form, issue)
    if form.validate_on_submit():
        counter = Counter.objects(id_for="issue")[0]
        counter.set_next_id()
        counter.save()
        form.populate_obj(issue)
        issue.number = counter.number
        issue.author = session['user_id']
        issue.save()
        return redirect('/projects/' + str(project.number))
    return render_template('projects_show.html',
                           project=project,
                           issues=issues,
                           form=form)