prompt: We are currently solving the following issue within our repository. Here is the issue text:
  --- BEGIN ISSUE ---
  updating progress doesn't work
  Warning : i see this bug as unlinked with instance, because i saw it on my instance and on bookwyrm.social. 
  
  When i go to the book view, i have a block with two progress, but without any print of the pages i've read. 
  ![bookwyrm1](https://user-images.githubusercontent.com/40766799/156523379-53341dc3-cb0a-4213-989b-e62ec0cd4b38.png)
  
  If i want to edit the progress to add pages number read, i have the choice between two dates and the number input. So i fill in the form. with only page number filled.
  ![bookwyrm2](https://user-images.githubusercontent.com/40766799/156523381-37a613ff-bcad-4bd3-81c2-b9667b77c4c9.png)
  
  Then i'm going back to the book view, but with 3 entries instead of two. page number hasn't been saved/printed and it added a new progress instead of editing it.
  ![bookwyrm3](https://user-images.githubusercontent.com/40766799/156523383-ed2789cb-d6b5-4d04-ae59-c5f65ff82625.png)
  
  One problem is you can't save a progress without a comment, but even with that fix, i think progress should indicate the pages read and the pages left to be read. a more "graphic' layout could be very cool ;)
  
  --- 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/forms/forms.py`
  Content:
  ```
  1 """ using django model forms """
  2 from django import forms
  3 from django.forms import widgets
  4 from django.utils.translation import gettext_lazy as _
  5 
  6 from bookwyrm import models
  7 from bookwyrm.models.user import FeedFilterChoices
  8 from .custom_form import CustomForm
  9 
  10 
  11 # pylint: disable=missing-class-docstring
  12 class FeedStatusTypesForm(CustomForm):
  13     class Meta:
  14         model = models.User
  15         fields = ["feed_status_types"]
  16         help_texts = {f: None for f in fields}
  17         widgets = {
  18             "feed_status_types": widgets.CheckboxSelectMultiple(
  19                 choices=FeedFilterChoices,
  20             ),
  21         }
  22 
  23 
  24 class ImportForm(forms.Form):
  25     csv_file = forms.FileField()
  26 
  27 
  28 class ShelfForm(CustomForm):
  29     class Meta:
  30         model = models.Shelf
  31         fields = ["user", "name", "privacy", "description"]
  32 
  33 
  34 class GoalForm(CustomForm):
  35     class Meta:
  36         model = models.AnnualGoal
  37         fields = ["user", "year", "goal", "privacy"]
  38 
  39 
  40 class ReportForm(CustomForm):
  41     class Meta:
  42         model = models.Report
  43         fields = ["user", "reporter", "status", "links", "note"]
  44 
  45 
  46 class ReadThroughForm(CustomForm):
  47     def clean(self):
  48         """make sure the email isn't in use by a registered user"""
  49         cleaned_data = super().clean()
  50         start_date = cleaned_data.get("start_date")
  51         finish_date = cleaned_data.get("finish_date")
  52         if start_date and finish_date and start_date > finish_date:
  53             self.add_error(
  54                 "finish_date", _("Reading finish date cannot be before start date.")
  55             )
  56 
  57     class Meta:
  58         model = models.ReadThrough
  59         fields = ["user", "book", "start_date", "finish_date"]
  60
  ```
  --- 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/forms/forms.py b/bookwyrm/forms/forms.py
  --- a/bookwyrm/forms/forms.py
  +++ b/bookwyrm/forms/forms.py
  @@ -45,7 +45,7 @@
   
   class ReadThroughForm(CustomForm):
       def clean(self):
  -        """make sure the email isn't in use by a registered user"""
  +        """don't let readthroughs end before they start"""
           cleaned_data = super().clean()
           start_date = cleaned_data.get("start_date")
           finish_date = cleaned_data.get("finish_date")
  
verification_info: {"golden_diff": "diff --git a/bookwyrm/forms/forms.py b/bookwyrm/forms/forms.py\n--- a/bookwyrm/forms/forms.py\n+++ b/bookwyrm/forms/forms.py\n@@ -45,7 +45,7 @@\n \n class ReadThroughForm(CustomForm):\n     def clean(self):\n-        \"\"\"make sure the email isn't in use by a registered user\"\"\"\n+        \"\"\"don't let readthroughs end before they start\"\"\"\n         cleaned_data = super().clean()\n         start_date = cleaned_data.get(\"start_date\")\n         finish_date = cleaned_data.get(\"finish_date\")\n", "issue": "updating progress doesn't work\nWarning : i see this bug as unlinked with instance, because i saw it on my instance and on bookwyrm.social. \r\n\r\nWhen i go to the book view, i have a block with two progress, but without any print of the pages i've read. \r\n![bookwyrm1](https://user-images.githubusercontent.com/40766799/156523379-53341dc3-cb0a-4213-989b-e62ec0cd4b38.png)\r\n\r\nIf i want to edit the progress to add pages number read, i have the choice between two dates and the number input. So i fill in the form. with only page number filled.\r\n![bookwyrm2](https://user-images.githubusercontent.com/40766799/156523381-37a613ff-bcad-4bd3-81c2-b9667b77c4c9.png)\r\n\r\nThen i'm going back to the book view, but with 3 entries instead of two. page number hasn't been saved/printed and it added a new progress instead of editing it.\r\n![bookwyrm3](https://user-images.githubusercontent.com/40766799/156523383-ed2789cb-d6b5-4d04-ae59-c5f65ff82625.png)\r\n\r\nOne problem is you can't save a progress without a comment, but even with that fix, i think progress should indicate the pages read and the pages left to be read. a more \"graphic' layout could be very cool ;)\n", "before_files": [{"content": "\"\"\" using django model forms \"\"\"\nfrom django import forms\nfrom django.forms import widgets\nfrom django.utils.translation import gettext_lazy as _\n\nfrom bookwyrm import models\nfrom bookwyrm.models.user import FeedFilterChoices\nfrom .custom_form import CustomForm\n\n\n# pylint: disable=missing-class-docstring\nclass FeedStatusTypesForm(CustomForm):\n    class Meta:\n        model = models.User\n        fields = [\"feed_status_types\"]\n        help_texts = {f: None for f in fields}\n        widgets = {\n            \"feed_status_types\": widgets.CheckboxSelectMultiple(\n                choices=FeedFilterChoices,\n            ),\n        }\n\n\nclass ImportForm(forms.Form):\n    csv_file = forms.FileField()\n\n\nclass ShelfForm(CustomForm):\n    class Meta:\n        model = models.Shelf\n        fields = [\"user\", \"name\", \"privacy\", \"description\"]\n\n\nclass GoalForm(CustomForm):\n    class Meta:\n        model = models.AnnualGoal\n        fields = [\"user\", \"year\", \"goal\", \"privacy\"]\n\n\nclass ReportForm(CustomForm):\n    class Meta:\n        model = models.Report\n        fields = [\"user\", \"reporter\", \"status\", \"links\", \"note\"]\n\n\nclass ReadThroughForm(CustomForm):\n    def clean(self):\n        \"\"\"make sure the email isn't in use by a registered user\"\"\"\n        cleaned_data = super().clean()\n        start_date = cleaned_data.get(\"start_date\")\n        finish_date = cleaned_data.get(\"finish_date\")\n        if start_date and finish_date and start_date > finish_date:\n            self.add_error(\n                \"finish_date\", _(\"Reading finish date cannot be before start date.\")\n            )\n\n    class Meta:\n        model = models.ReadThrough\n        fields = [\"user\", \"book\", \"start_date\", \"finish_date\"]\n", "path": "bookwyrm/forms/forms.py"}], "after_files": [{"content": "\"\"\" using django model forms \"\"\"\nfrom django import forms\nfrom django.forms import widgets\nfrom django.utils.translation import gettext_lazy as _\n\nfrom bookwyrm import models\nfrom bookwyrm.models.user import FeedFilterChoices\nfrom .custom_form import CustomForm\n\n\n# pylint: disable=missing-class-docstring\nclass FeedStatusTypesForm(CustomForm):\n    class Meta:\n        model = models.User\n        fields = [\"feed_status_types\"]\n        help_texts = {f: None for f in fields}\n        widgets = {\n            \"feed_status_types\": widgets.CheckboxSelectMultiple(\n                choices=FeedFilterChoices,\n            ),\n        }\n\n\nclass ImportForm(forms.Form):\n    csv_file = forms.FileField()\n\n\nclass ShelfForm(CustomForm):\n    class Meta:\n        model = models.Shelf\n        fields = [\"user\", \"name\", \"privacy\", \"description\"]\n\n\nclass GoalForm(CustomForm):\n    class Meta:\n        model = models.AnnualGoal\n        fields = [\"user\", \"year\", \"goal\", \"privacy\"]\n\n\nclass ReportForm(CustomForm):\n    class Meta:\n        model = models.Report\n        fields = [\"user\", \"reporter\", \"status\", \"links\", \"note\"]\n\n\nclass ReadThroughForm(CustomForm):\n    def clean(self):\n        \"\"\"don't let readthroughs end before they start\"\"\"\n        cleaned_data = super().clean()\n        start_date = cleaned_data.get(\"start_date\")\n        finish_date = cleaned_data.get(\"finish_date\")\n        if start_date and finish_date and start_date > finish_date:\n            self.add_error(\n                \"finish_date\", _(\"Reading finish date cannot be before start date.\")\n            )\n\n    class Meta:\n        model = models.ReadThrough\n        fields = [\"user\", \"book\", \"start_date\", \"finish_date\"]\n", "path": "bookwyrm/forms/forms.py"}]}