We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Misguiding messages on contributor's course edit page
When a course is already approved, the contributor course edit page shows a message saying you can't edit this course anymore (introduced in #1076).
Also, a message instructing the user to edit the data is shown. This is misleading. The second message shouldn't be there.

![grafik](https://user-images.githubusercontent.com/13838962/37304966-601f88f0-2633-11e8-8ca8-e49b3c07dc29.png)

@janno42 please make sure I'm not missing out anything here.


--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `evap/contributor/views.py`
Content:
```
1 from django.contrib import messages
2 from django.core.exceptions import PermissionDenied, SuspiciousOperation
3 from django.forms.models import inlineformset_factory
4 from django.shortcuts import get_object_or_404, redirect, render
5 from django.utils.translation import ugettext as _
6 from django.db import IntegrityError, transaction
7 
8 from evap.contributor.forms import CourseForm, DelegatesForm, EditorContributionForm
9 from evap.evaluation.auth import contributor_or_delegate_required, editor_or_delegate_required, editor_required
10 from evap.evaluation.models import Contribution, Course, Semester
11 from evap.evaluation.tools import STATES_ORDERED, sort_formset
12 from evap.results.tools import calculate_average_grades_and_deviation
13 from evap.staff.forms import ContributionFormSet
14 from evap.student.views import get_valid_form_groups_or_render_vote_page
15 
16 
17 @contributor_or_delegate_required
18 def index(request):
19     user = request.user
20 
21     contributor_visible_states = ['prepared', 'editor_approved', 'approved', 'in_evaluation', 'evaluated', 'reviewed', 'published']
22     own_courses = Course.objects.filter(contributions__contributor=user, state__in=contributor_visible_states)
23 
24     represented_users = user.represented_users.all()
25     delegated_courses = Course.objects.exclude(id__in=own_courses).filter(contributions__can_edit=True, contributions__contributor__in=represented_users, state__in=contributor_visible_states)
26 
27     all_courses = list(own_courses) + list(delegated_courses)
28     all_courses.sort(key=lambda course: list(STATES_ORDERED.keys()).index(course.state))
29 
30     for course in all_courses:
31         if course.state == 'published':
32             course.avg_grade, course.avg_deviation = calculate_average_grades_and_deviation(course)
33 
34     semesters = Semester.objects.all()
35     semester_list = [dict(
36         semester_name=semester.name,
37         id=semester.id,
38         is_active_semester=semester.is_active_semester,
39         courses=[course for course in all_courses if course.semester_id == semester.id]
40     ) for semester in semesters]
41 
42     template_data = dict(semester_list=semester_list, delegated_courses=delegated_courses)
43     return render(request, "contributor_index.html", template_data)
44 
45 
46 @editor_required
47 def settings_edit(request):
48     user = request.user
49     form = DelegatesForm(request.POST or None, request.FILES or None, instance=user)
50 
51     if form.is_valid():
52         form.save()
53 
54         messages.success(request, _("Successfully updated your settings."))
55         return redirect('contributor:settings_edit')
56     else:
57         return render(request, "contributor_settings.html", dict(
58             form=form,
59             delegate_of=user.represented_users.all(),
60             cc_users=user.cc_users.all(),
61             ccing_users=user.ccing_users.all(),
62         ))
63 
64 
65 @editor_or_delegate_required
66 def course_view(request, course_id):
67     user = request.user
68     course = get_object_or_404(Course, id=course_id)
69 
70     # check rights
71     if not (course.is_user_editor_or_delegate(user) and course.state in ['prepared', 'editor_approved', 'approved', 'in_evaluation', 'evaluated', 'reviewed']):
72         raise PermissionDenied
73 
74     if course.is_user_editor_or_delegate(user):
75         messages.info(request, _('You cannot edit this course because it has already been approved.'))
76 
77     InlineContributionFormset = inlineformset_factory(Course, Contribution, formset=ContributionFormSet, form=EditorContributionForm, extra=0)
78 
79     form = CourseForm(request.POST or None, instance=course)
80     formset = InlineContributionFormset(request.POST or None, instance=course)
81 
82     # make everything read-only
83     for cform in formset.forms + [form]:
84         for field in cform.fields.values():
85             field.disabled = True
86 
87     template_data = dict(form=form, formset=formset, course=course, editable=False,
88                         responsibles=[contributor.username for contributor in course.responsible_contributors])
89     return render(request, "contributor_course_form.html", template_data)
90 
91 
92 def render_preview(request, formset, course_form, course):
93     # open transaction to not let any other requests see anything of what we're doing here
94     try:
95         with transaction.atomic():
96             course_form.save(user=request.user)
97             formset.save()
98             request.POST = None  # this prevents errors rendered in the vote form
99 
100             preview_response = get_valid_form_groups_or_render_vote_page(request, course, preview=True, for_rendering_in_modal=True)[1].content.decode()
101             raise IntegrityError  # rollback transaction to discard the database writes
102     except IntegrityError:
103         pass
104 
105     return preview_response
106 
107 
108 @editor_or_delegate_required
109 def course_edit(request, course_id):
110     user = request.user
111     course = get_object_or_404(Course, id=course_id)
112 
113     # check rights
114     if not (course.is_user_editor_or_delegate(user) and course.state == 'prepared'):
115         raise PermissionDenied
116 
117     post_operation = request.POST.get('operation') if request.POST else None
118     preview = post_operation == 'preview'
119 
120     InlineContributionFormset = inlineformset_factory(Course, Contribution, formset=ContributionFormSet, form=EditorContributionForm, extra=1)
121     course_form = CourseForm(request.POST or None, instance=course)
122     formset = InlineContributionFormset(request.POST or None, instance=course, can_change_responsible=False, form_kwargs={'course': course})
123 
124     forms_are_valid = course_form.is_valid() and formset.is_valid()
125 
126     if forms_are_valid and not preview:
127         if post_operation not in ('save', 'approve'):
128             raise SuspiciousOperation("Invalid POST operation")
129 
130         course_form.save(user=user)
131         formset.save()
132 
133         if post_operation == 'approve':
134             course.editor_approve()
135             course.save()
136             messages.success(request, _("Successfully updated and approved course."))
137         else:
138             messages.success(request, _("Successfully updated course."))
139 
140         return redirect('contributor:index')
141     else:
142         preview_html = None
143         if preview and forms_are_valid:
144             preview_html = render_preview(request, formset, course_form, course)
145 
146         if not forms_are_valid and (course_form.errors or formset.errors):
147             if preview:
148                 messages.error(request, _("The preview could not be rendered. Please resolve the errors shown below."))
149             else:
150                 messages.error(request, _("The form was not saved. Please resolve the errors shown below."))
151 
152         sort_formset(request, formset)
153         template_data = dict(form=course_form, formset=formset, course=course, editable=True, preview_html=preview_html,
154                              responsibles=[contributor.username for contributor in course.responsible_contributors])
155         return render(request, "contributor_course_form.html", template_data)
156 
157 
158 @contributor_or_delegate_required
159 def course_preview(request, course_id):
160     user = request.user
161     course = get_object_or_404(Course, id=course_id)
162 
163     # check rights
164     if not (course.is_user_contributor_or_delegate(user) and course.state in ['prepared', 'editor_approved', 'approved', 'in_evaluation', 'evaluated', 'reviewed']):
165         raise PermissionDenied
166 
167     return get_valid_form_groups_or_render_vote_page(request, course, preview=True)[1]
168
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/evap/contributor/views.py b/evap/contributor/views.py
--- a/evap/contributor/views.py
+++ b/evap/contributor/views.py
@@ -68,12 +68,9 @@
     course = get_object_or_404(Course, id=course_id)
 
     # check rights
-    if not (course.is_user_editor_or_delegate(user) and course.state in ['prepared', 'editor_approved', 'approved', 'in_evaluation', 'evaluated', 'reviewed']):
+    if not course.is_user_editor_or_delegate(user) or course.state not in ['prepared', 'editor_approved', 'approved', 'in_evaluation', 'evaluated', 'reviewed']:
         raise PermissionDenied
 
-    if course.is_user_editor_or_delegate(user):
-        messages.info(request, _('You cannot edit this course because it has already been approved.'))
-
     InlineContributionFormset = inlineformset_factory(Course, Contribution, formset=ContributionFormSet, form=EditorContributionForm, extra=0)
 
     form = CourseForm(request.POST or None, instance=course)
@@ -85,7 +82,7 @@
             field.disabled = True
 
     template_data = dict(form=form, formset=formset, course=course, editable=False,
-                        responsibles=[contributor.username for contributor in course.responsible_contributors])
+                         responsibles=[contributor.username for contributor in course.responsible_contributors])
     return render(request, "contributor_course_form.html", template_data)

{"golden_diff": "diff --git a/evap/contributor/views.py b/evap/contributor/views.py\n--- a/evap/contributor/views.py\n+++ b/evap/contributor/views.py\n@@ -68,12 +68,9 @@\n     course = get_object_or_404(Course, id=course_id)\n \n     # check rights\n-    if not (course.is_user_editor_or_delegate(user) and course.state in ['prepared', 'editor_approved', 'approved', 'in_evaluation', 'evaluated', 'reviewed']):\n+    if not course.is_user_editor_or_delegate(user) or course.state not in ['prepared', 'editor_approved', 'approved', 'in_evaluation', 'evaluated', 'reviewed']:\n         raise PermissionDenied\n \n-    if course.is_user_editor_or_delegate(user):\n-        messages.info(request, _('You cannot edit this course because it has already been approved.'))\n-\n     InlineContributionFormset = inlineformset_factory(Course, Contribution, formset=ContributionFormSet, form=EditorContributionForm, extra=0)\n \n     form = CourseForm(request.POST or None, instance=course)\n@@ -85,7 +82,7 @@\n             field.disabled = True\n \n     template_data = dict(form=form, formset=formset, course=course, editable=False,\n-                        responsibles=[contributor.username for contributor in course.responsible_contributors])\n+                         responsibles=[contributor.username for contributor in course.responsible_contributors])\n     return render(request, \"contributor_course_form.html\", template_data)\n", "issue": "Misguiding messages on contributor's course edit page\nWhen a course is already approved, the contributor course edit page shows a message saying you can't edit this course anymore (introduced in #1076).\r\nAlso, a message instructing the user to edit the data is shown. This is misleading. The second message shouldn't be there.\r\n\r\n![grafik](https://user-images.githubusercontent.com/13838962/37304966-601f88f0-2633-11e8-8ca8-e49b3c07dc29.png)\r\n\r\n@janno42 please make sure I'm not missing out anything here.\r\n\n", "before_files": [{"content": "from django.contrib import messages\nfrom django.core.exceptions import PermissionDenied, SuspiciousOperation\nfrom django.forms.models import inlineformset_factory\nfrom django.shortcuts import get_object_or_404, redirect, render\nfrom django.utils.translation import ugettext as _\nfrom django.db import IntegrityError, transaction\n\nfrom evap.contributor.forms import CourseForm, DelegatesForm, EditorContributionForm\nfrom evap.evaluation.auth import contributor_or_delegate_required, editor_or_delegate_required, editor_required\nfrom evap.evaluation.models import Contribution, Course, Semester\nfrom evap.evaluation.tools import STATES_ORDERED, sort_formset\nfrom evap.results.tools import calculate_average_grades_and_deviation\nfrom evap.staff.forms import ContributionFormSet\nfrom evap.student.views import get_valid_form_groups_or_render_vote_page\n\n\n@contributor_or_delegate_required\ndef index(request):\n    user = request.user\n\n    contributor_visible_states = ['prepared', 'editor_approved', 'approved', 'in_evaluation', 'evaluated', 'reviewed', 'published']\n    own_courses = Course.objects.filter(contributions__contributor=user, state__in=contributor_visible_states)\n\n    represented_users = user.represented_users.all()\n    delegated_courses = Course.objects.exclude(id__in=own_courses).filter(contributions__can_edit=True, contributions__contributor__in=represented_users, state__in=contributor_visible_states)\n\n    all_courses = list(own_courses) + list(delegated_courses)\n    all_courses.sort(key=lambda course: list(STATES_ORDERED.keys()).index(course.state))\n\n    for course in all_courses:\n        if course.state == 'published':\n            course.avg_grade, course.avg_deviation = calculate_average_grades_and_deviation(course)\n\n    semesters = Semester.objects.all()\n    semester_list = [dict(\n        semester_name=semester.name,\n        id=semester.id,\n        is_active_semester=semester.is_active_semester,\n        courses=[course for course in all_courses if course.semester_id == semester.id]\n    ) for semester in semesters]\n\n    template_data = dict(semester_list=semester_list, delegated_courses=delegated_courses)\n    return render(request, \"contributor_index.html\", template_data)\n\n\n@editor_required\ndef settings_edit(request):\n    user = request.user\n    form = DelegatesForm(request.POST or None, request.FILES or None, instance=user)\n\n    if form.is_valid():\n        form.save()\n\n        messages.success(request, _(\"Successfully updated your settings.\"))\n        return redirect('contributor:settings_edit')\n    else:\n        return render(request, \"contributor_settings.html\", dict(\n            form=form,\n            delegate_of=user.represented_users.all(),\n            cc_users=user.cc_users.all(),\n            ccing_users=user.ccing_users.all(),\n        ))\n\n\n@editor_or_delegate_required\ndef course_view(request, course_id):\n    user = request.user\n    course = get_object_or_404(Course, id=course_id)\n\n    # check rights\n    if not (course.is_user_editor_or_delegate(user) and course.state in ['prepared', 'editor_approved', 'approved', 'in_evaluation', 'evaluated', 'reviewed']):\n        raise PermissionDenied\n\n    if course.is_user_editor_or_delegate(user):\n        messages.info(request, _('You cannot edit this course because it has already been approved.'))\n\n    InlineContributionFormset = inlineformset_factory(Course, Contribution, formset=ContributionFormSet, form=EditorContributionForm, extra=0)\n\n    form = CourseForm(request.POST or None, instance=course)\n    formset = InlineContributionFormset(request.POST or None, instance=course)\n\n    # make everything read-only\n    for cform in formset.forms + [form]:\n        for field in cform.fields.values():\n            field.disabled = True\n\n    template_data = dict(form=form, formset=formset, course=course, editable=False,\n                        responsibles=[contributor.username for contributor in course.responsible_contributors])\n    return render(request, \"contributor_course_form.html\", template_data)\n\n\ndef render_preview(request, formset, course_form, course):\n    # open transaction to not let any other requests see anything of what we're doing here\n    try:\n        with transaction.atomic():\n            course_form.save(user=request.user)\n            formset.save()\n            request.POST = None  # this prevents errors rendered in the vote form\n\n            preview_response = get_valid_form_groups_or_render_vote_page(request, course, preview=True, for_rendering_in_modal=True)[1].content.decode()\n            raise IntegrityError  # rollback transaction to discard the database writes\n    except IntegrityError:\n        pass\n\n    return preview_response\n\n\n@editor_or_delegate_required\ndef course_edit(request, course_id):\n    user = request.user\n    course = get_object_or_404(Course, id=course_id)\n\n    # check rights\n    if not (course.is_user_editor_or_delegate(user) and course.state == 'prepared'):\n        raise PermissionDenied\n\n    post_operation = request.POST.get('operation') if request.POST else None\n    preview = post_operation == 'preview'\n\n    InlineContributionFormset = inlineformset_factory(Course, Contribution, formset=ContributionFormSet, form=EditorContributionForm, extra=1)\n    course_form = CourseForm(request.POST or None, instance=course)\n    formset = InlineContributionFormset(request.POST or None, instance=course, can_change_responsible=False, form_kwargs={'course': course})\n\n    forms_are_valid = course_form.is_valid() and formset.is_valid()\n\n    if forms_are_valid and not preview:\n        if post_operation not in ('save', 'approve'):\n            raise SuspiciousOperation(\"Invalid POST operation\")\n\n        course_form.save(user=user)\n        formset.save()\n\n        if post_operation == 'approve':\n            course.editor_approve()\n            course.save()\n            messages.success(request, _(\"Successfully updated and approved course.\"))\n        else:\n            messages.success(request, _(\"Successfully updated course.\"))\n\n        return redirect('contributor:index')\n    else:\n        preview_html = None\n        if preview and forms_are_valid:\n            preview_html = render_preview(request, formset, course_form, course)\n\n        if not forms_are_valid and (course_form.errors or formset.errors):\n            if preview:\n                messages.error(request, _(\"The preview could not be rendered. Please resolve the errors shown below.\"))\n            else:\n                messages.error(request, _(\"The form was not saved. Please resolve the errors shown below.\"))\n\n        sort_formset(request, formset)\n        template_data = dict(form=course_form, formset=formset, course=course, editable=True, preview_html=preview_html,\n                             responsibles=[contributor.username for contributor in course.responsible_contributors])\n        return render(request, \"contributor_course_form.html\", template_data)\n\n\n@contributor_or_delegate_required\ndef course_preview(request, course_id):\n    user = request.user\n    course = get_object_or_404(Course, id=course_id)\n\n    # check rights\n    if not (course.is_user_contributor_or_delegate(user) and course.state in ['prepared', 'editor_approved', 'approved', 'in_evaluation', 'evaluated', 'reviewed']):\n        raise PermissionDenied\n\n    return get_valid_form_groups_or_render_vote_page(request, course, preview=True)[1]\n", "path": "evap/contributor/views.py"}], "after_files": [{"content": "from django.contrib import messages\nfrom django.core.exceptions import PermissionDenied, SuspiciousOperation\nfrom django.forms.models import inlineformset_factory\nfrom django.shortcuts import get_object_or_404, redirect, render\nfrom django.utils.translation import ugettext as _\nfrom django.db import IntegrityError, transaction\n\nfrom evap.contributor.forms import CourseForm, DelegatesForm, EditorContributionForm\nfrom evap.evaluation.auth import contributor_or_delegate_required, editor_or_delegate_required, editor_required\nfrom evap.evaluation.models import Contribution, Course, Semester\nfrom evap.evaluation.tools import STATES_ORDERED, sort_formset\nfrom evap.results.tools import calculate_average_grades_and_deviation\nfrom evap.staff.forms import ContributionFormSet\nfrom evap.student.views import get_valid_form_groups_or_render_vote_page\n\n\n@contributor_or_delegate_required\ndef index(request):\n    user = request.user\n\n    contributor_visible_states = ['prepared', 'editor_approved', 'approved', 'in_evaluation', 'evaluated', 'reviewed', 'published']\n    own_courses = Course.objects.filter(contributions__contributor=user, state__in=contributor_visible_states)\n\n    represented_users = user.represented_users.all()\n    delegated_courses = Course.objects.exclude(id__in=own_courses).filter(contributions__can_edit=True, contributions__contributor__in=represented_users, state__in=contributor_visible_states)\n\n    all_courses = list(own_courses) + list(delegated_courses)\n    all_courses.sort(key=lambda course: list(STATES_ORDERED.keys()).index(course.state))\n\n    for course in all_courses:\n        if course.state == 'published':\n            course.avg_grade, course.avg_deviation = calculate_average_grades_and_deviation(course)\n\n    semesters = Semester.objects.all()\n    semester_list = [dict(\n        semester_name=semester.name,\n        id=semester.id,\n        is_active_semester=semester.is_active_semester,\n        courses=[course for course in all_courses if course.semester_id == semester.id]\n    ) for semester in semesters]\n\n    template_data = dict(semester_list=semester_list, delegated_courses=delegated_courses)\n    return render(request, \"contributor_index.html\", template_data)\n\n\n@editor_required\ndef settings_edit(request):\n    user = request.user\n    form = DelegatesForm(request.POST or None, request.FILES or None, instance=user)\n\n    if form.is_valid():\n        form.save()\n\n        messages.success(request, _(\"Successfully updated your settings.\"))\n        return redirect('contributor:settings_edit')\n    else:\n        return render(request, \"contributor_settings.html\", dict(\n            form=form,\n            delegate_of=user.represented_users.all(),\n            cc_users=user.cc_users.all(),\n            ccing_users=user.ccing_users.all(),\n        ))\n\n\n@editor_or_delegate_required\ndef course_view(request, course_id):\n    user = request.user\n    course = get_object_or_404(Course, id=course_id)\n\n    # check rights\n    if not course.is_user_editor_or_delegate(user) or course.state not in ['prepared', 'editor_approved', 'approved', 'in_evaluation', 'evaluated', 'reviewed']:\n        raise PermissionDenied\n\n    InlineContributionFormset = inlineformset_factory(Course, Contribution, formset=ContributionFormSet, form=EditorContributionForm, extra=0)\n\n    form = CourseForm(request.POST or None, instance=course)\n    formset = InlineContributionFormset(request.POST or None, instance=course)\n\n    # make everything read-only\n    for cform in formset.forms + [form]:\n        for field in cform.fields.values():\n            field.disabled = True\n\n    template_data = dict(form=form, formset=formset, course=course, editable=False,\n                         responsibles=[contributor.username for contributor in course.responsible_contributors])\n    return render(request, \"contributor_course_form.html\", template_data)\n\n\ndef render_preview(request, formset, course_form, course):\n    # open transaction to not let any other requests see anything of what we're doing here\n    try:\n        with transaction.atomic():\n            course_form.save(user=request.user)\n            formset.save()\n            request.POST = None  # this prevents errors rendered in the vote form\n\n            preview_response = get_valid_form_groups_or_render_vote_page(request, course, preview=True, for_rendering_in_modal=True)[1].content.decode()\n            raise IntegrityError  # rollback transaction to discard the database writes\n    except IntegrityError:\n        pass\n\n    return preview_response\n\n\n@editor_or_delegate_required\ndef course_edit(request, course_id):\n    user = request.user\n    course = get_object_or_404(Course, id=course_id)\n\n    # check rights\n    if not (course.is_user_editor_or_delegate(user) and course.state == 'prepared'):\n        raise PermissionDenied\n\n    post_operation = request.POST.get('operation') if request.POST else None\n    preview = post_operation == 'preview'\n\n    InlineContributionFormset = inlineformset_factory(Course, Contribution, formset=ContributionFormSet, form=EditorContributionForm, extra=1)\n    course_form = CourseForm(request.POST or None, instance=course)\n    formset = InlineContributionFormset(request.POST or None, instance=course, can_change_responsible=False, form_kwargs={'course': course})\n\n    forms_are_valid = course_form.is_valid() and formset.is_valid()\n\n    if forms_are_valid and not preview:\n        if post_operation not in ('save', 'approve'):\n            raise SuspiciousOperation(\"Invalid POST operation\")\n\n        course_form.save(user=user)\n        formset.save()\n\n        if post_operation == 'approve':\n            course.editor_approve()\n            course.save()\n            messages.success(request, _(\"Successfully updated and approved course.\"))\n        else:\n            messages.success(request, _(\"Successfully updated course.\"))\n\n        return redirect('contributor:index')\n    else:\n        preview_html = None\n        if preview and forms_are_valid:\n            preview_html = render_preview(request, formset, course_form, course)\n\n        if not forms_are_valid and (course_form.errors or formset.errors):\n            if preview:\n                messages.error(request, _(\"The preview could not be rendered. Please resolve the errors shown below.\"))\n            else:\n                messages.error(request, _(\"The form was not saved. Please resolve the errors shown below.\"))\n\n        sort_formset(request, formset)\n        template_data = dict(form=course_form, formset=formset, course=course, editable=True, preview_html=preview_html,\n                             responsibles=[contributor.username for contributor in course.responsible_contributors])\n        return render(request, \"contributor_course_form.html\", template_data)\n\n\n@contributor_or_delegate_required\ndef course_preview(request, course_id):\n    user = request.user\n    course = get_object_or_404(Course, id=course_id)\n\n    # check rights\n    if not (course.is_user_contributor_or_delegate(user) and course.state in ['prepared', 'editor_approved', 'approved', 'in_evaluation', 'evaluated', 'reviewed']):\n        raise PermissionDenied\n\n    return get_valid_form_groups_or_render_vote_page(request, course, preview=True)[1]\n", "path": "evap/contributor/views.py"}]}