prompt: We are currently solving the following issue within our repository. Here is the issue text:
  --- BEGIN ISSUE ---
  Reading goal status doesn't set plurals correctly
  When someone is only planning to read 1 book, the status should say "1 book" not "1 books"
  
  --- END ISSUE ---
  
  Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
  --- BEGIN FILES ---
  Path: `bookwyrm/views/goal.py`
  Content:
  ```
  1 ''' non-interactive pages '''
  2 from django.contrib.auth.decorators import login_required
  3 from django.http import HttpResponseNotFound
  4 from django.shortcuts import redirect
  5 from django.template.response import TemplateResponse
  6 from django.utils.decorators import method_decorator
  7 from django.views import View
  8 
  9 from bookwyrm import forms, models
  10 from bookwyrm.status import create_generated_note
  11 from .helpers import get_user_from_username, object_visible_to_user
  12 
  13 
  14 # pylint: disable= no-self-use
  15 @method_decorator(login_required, name='dispatch')
  16 class Goal(View):
  17     ''' track books for the year '''
  18     def get(self, request, username, year):
  19         ''' reading goal page '''
  20         user = get_user_from_username(username)
  21         year = int(year)
  22         goal = models.AnnualGoal.objects.filter(
  23             year=year, user=user
  24         ).first()
  25         if not goal and user != request.user:
  26             return HttpResponseNotFound()
  27 
  28         if goal and not object_visible_to_user(request.user, goal):
  29             return HttpResponseNotFound()
  30 
  31         data = {
  32             'title': '%s\'s %d Reading' % (user.display_name, year),
  33             'goal_form': forms.GoalForm(instance=goal),
  34             'goal': goal,
  35             'user': user,
  36             'year': year,
  37             'is_self': request.user == user,
  38         }
  39         return TemplateResponse(request, 'goal.html', data)
  40 
  41 
  42     def post(self, request, username, year):
  43         ''' update or create an annual goal '''
  44         user = get_user_from_username(username)
  45         if user != request.user:
  46             return HttpResponseNotFound()
  47 
  48         year = int(year)
  49         goal = models.AnnualGoal.objects.filter(
  50             year=year, user=request.user
  51         ).first()
  52         form = forms.GoalForm(request.POST, instance=goal)
  53         if not form.is_valid():
  54             data = {
  55                 'title': '%s\'s %d Reading' % (request.user.display_name, year),
  56                 'goal_form': form,
  57                 'goal': goal,
  58                 'year': year,
  59             }
  60             return TemplateResponse(request, 'goal.html', data)
  61         goal = form.save()
  62 
  63         if request.POST.get('post-status'):
  64             # create status, if appropraite
  65             create_generated_note(
  66                 request.user,
  67                 'set a goal to read %d books in %d' % (goal.goal, goal.year),
  68                 privacy=goal.privacy
  69             )
  70 
  71         return redirect(request.headers.get('Referer', '/'))
  72
  ```
  --- 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()
  
  ```
  
golden_diff: diff --git a/bookwyrm/views/goal.py b/bookwyrm/views/goal.py
  --- a/bookwyrm/views/goal.py
  +++ b/bookwyrm/views/goal.py
  @@ -2,6 +2,7 @@
   from django.contrib.auth.decorators import login_required
   from django.http import HttpResponseNotFound
   from django.shortcuts import redirect
  +from django.template.loader import get_template
   from django.template.response import TemplateResponse
   from django.utils.decorators import method_decorator
   from django.views import View
  @@ -62,9 +63,10 @@
   
           if request.POST.get('post-status'):
               # create status, if appropraite
  +            template = get_template('snippets/generated_status/goal.html')
               create_generated_note(
                   request.user,
  -                'set a goal to read %d books in %d' % (goal.goal, goal.year),
  +                template.render({'goal': goal, 'user': request.user}).strip(),
                   privacy=goal.privacy
               )
  
verification_info: {"golden_diff": "diff --git a/bookwyrm/views/goal.py b/bookwyrm/views/goal.py\n--- a/bookwyrm/views/goal.py\n+++ b/bookwyrm/views/goal.py\n@@ -2,6 +2,7 @@\n from django.contrib.auth.decorators import login_required\n from django.http import HttpResponseNotFound\n from django.shortcuts import redirect\n+from django.template.loader import get_template\n from django.template.response import TemplateResponse\n from django.utils.decorators import method_decorator\n from django.views import View\n@@ -62,9 +63,10 @@\n \n         if request.POST.get('post-status'):\n             # create status, if appropraite\n+            template = get_template('snippets/generated_status/goal.html')\n             create_generated_note(\n                 request.user,\n-                'set a goal to read %d books in %d' % (goal.goal, goal.year),\n+                template.render({'goal': goal, 'user': request.user}).strip(),\n                 privacy=goal.privacy\n             )\n", "issue": "Reading goal status doesn't set plurals correctly\nWhen someone is only planning to read 1 book, the status should say \"1 book\" not \"1 books\"\n", "before_files": [{"content": "''' non-interactive pages '''\nfrom django.contrib.auth.decorators import login_required\nfrom django.http import HttpResponseNotFound\nfrom django.shortcuts import redirect\nfrom django.template.response import TemplateResponse\nfrom django.utils.decorators import method_decorator\nfrom django.views import View\n\nfrom bookwyrm import forms, models\nfrom bookwyrm.status import create_generated_note\nfrom .helpers import get_user_from_username, object_visible_to_user\n\n\n# pylint: disable= no-self-use\n@method_decorator(login_required, name='dispatch')\nclass Goal(View):\n    ''' track books for the year '''\n    def get(self, request, username, year):\n        ''' reading goal page '''\n        user = get_user_from_username(username)\n        year = int(year)\n        goal = models.AnnualGoal.objects.filter(\n            year=year, user=user\n        ).first()\n        if not goal and user != request.user:\n            return HttpResponseNotFound()\n\n        if goal and not object_visible_to_user(request.user, goal):\n            return HttpResponseNotFound()\n\n        data = {\n            'title': '%s\\'s %d Reading' % (user.display_name, year),\n            'goal_form': forms.GoalForm(instance=goal),\n            'goal': goal,\n            'user': user,\n            'year': year,\n            'is_self': request.user == user,\n        }\n        return TemplateResponse(request, 'goal.html', data)\n\n\n    def post(self, request, username, year):\n        ''' update or create an annual goal '''\n        user = get_user_from_username(username)\n        if user != request.user:\n            return HttpResponseNotFound()\n\n        year = int(year)\n        goal = models.AnnualGoal.objects.filter(\n            year=year, user=request.user\n        ).first()\n        form = forms.GoalForm(request.POST, instance=goal)\n        if not form.is_valid():\n            data = {\n                'title': '%s\\'s %d Reading' % (request.user.display_name, year),\n                'goal_form': form,\n                'goal': goal,\n                'year': year,\n            }\n            return TemplateResponse(request, 'goal.html', data)\n        goal = form.save()\n\n        if request.POST.get('post-status'):\n            # create status, if appropraite\n            create_generated_note(\n                request.user,\n                'set a goal to read %d books in %d' % (goal.goal, goal.year),\n                privacy=goal.privacy\n            )\n\n        return redirect(request.headers.get('Referer', '/'))\n", "path": "bookwyrm/views/goal.py"}], "after_files": [{"content": "''' non-interactive pages '''\nfrom django.contrib.auth.decorators import login_required\nfrom django.http import HttpResponseNotFound\nfrom django.shortcuts import redirect\nfrom django.template.loader import get_template\nfrom django.template.response import TemplateResponse\nfrom django.utils.decorators import method_decorator\nfrom django.views import View\n\nfrom bookwyrm import forms, models\nfrom bookwyrm.status import create_generated_note\nfrom .helpers import get_user_from_username, object_visible_to_user\n\n\n# pylint: disable= no-self-use\n@method_decorator(login_required, name='dispatch')\nclass Goal(View):\n    ''' track books for the year '''\n    def get(self, request, username, year):\n        ''' reading goal page '''\n        user = get_user_from_username(username)\n        year = int(year)\n        goal = models.AnnualGoal.objects.filter(\n            year=year, user=user\n        ).first()\n        if not goal and user != request.user:\n            return HttpResponseNotFound()\n\n        if goal and not object_visible_to_user(request.user, goal):\n            return HttpResponseNotFound()\n\n        data = {\n            'title': '%s\\'s %d Reading' % (user.display_name, year),\n            'goal_form': forms.GoalForm(instance=goal),\n            'goal': goal,\n            'user': user,\n            'year': year,\n            'is_self': request.user == user,\n        }\n        return TemplateResponse(request, 'goal.html', data)\n\n\n    def post(self, request, username, year):\n        ''' update or create an annual goal '''\n        user = get_user_from_username(username)\n        if user != request.user:\n            return HttpResponseNotFound()\n\n        year = int(year)\n        goal = models.AnnualGoal.objects.filter(\n            year=year, user=request.user\n        ).first()\n        form = forms.GoalForm(request.POST, instance=goal)\n        if not form.is_valid():\n            data = {\n                'title': '%s\\'s %d Reading' % (request.user.display_name, year),\n                'goal_form': form,\n                'goal': goal,\n                'year': year,\n            }\n            return TemplateResponse(request, 'goal.html', data)\n        goal = form.save()\n\n        if request.POST.get('post-status'):\n            # create status, if appropraite\n            template = get_template('snippets/generated_status/goal.html')\n            create_generated_note(\n                request.user,\n                template.render({'goal': goal, 'user': request.user}).strip(),\n                privacy=goal.privacy\n            )\n\n        return redirect(request.headers.get('Referer', '/'))\n", "path": "bookwyrm/views/goal.py"}]}