prompt: We are currently solving the following issue within our repository. Here is the issue text:
  --- BEGIN ISSUE ---
  Configure flake8 & GitHub Action correctly
  Our flake8 setup has a couple of issues:
  - Failures on the GitHub Action don't actually block merge.
  - We need to set up our style guide for flake8.
  
  --- END ISSUE ---
  
  Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
  --- BEGIN FILES ---
  Path: `mathesar/forms/widgets.py`
  Content:
  ```
  1 from django.forms.widgets import TextInput
  2 
  3 class DataListInput(TextInput):
  4     """
  5     Widget that adds a <data_list> element to the standard text input widget.
  6     See TextInput for further details.
  7 
  8     Attributes:
  9         data_list: List of strings, where each string is a data_list value, or
  10         a callable that returns a list of the same form
  11         data_list_id: ID of the data_list, generated when render() is called.
  12         Of the form [widget_id | widget_name]_data_list
  13     """
  14     template_name = "mathesar/widgets/data_list.html"
  15 
  16     def __init__(self, data_list, attrs=None):
  17         super().__init__(attrs=attrs)
  18         self.data_list = data_list
  19         self.data_list_id = "_data_list"
  20 
  21     def get_context(self, name, value, attrs):
  22         context = super().get_context(name, value, attrs)
  23         if callable(self.data_list):
  24             context["widget"]["data_list"] = self.data_list()
  25         else:
  26             context["widget"]["data_list"] = self.data_list
  27         context["widget"]["data_list_id"] = self.data_list_id
  28         return context
  29 
  30     def render(self, name, value, attrs=None, renderer=None):
  31         # In practice, there should always be an ID attribute, but we fallback
  32         # to using widget name if ID is missing
  33         if attrs and "id" in attrs:
  34             self.data_list_id = attrs["id"] + "_data_list"
  35         else:
  36             self.data_list_id = name + "_data_list"
  37         attrs = {} if attrs is None else attrs
  38         attrs["list"] = self.data_list_id
  39         return super().render(name, value, attrs, renderer)
  40 
  41
  ```
  
  Path: `mathesar/forms/forms.py`
  Content:
  ```
  1 from django import forms
  2 from django.core.exceptions import ValidationError
  3 
  4 from mathesar.database.schemas import get_all_schemas
  5 from mathesar.forms.widgets import DataListInput
  6 
  7 def validate_csv(value):
  8     if not value.name.lower().endswith(".csv"):
  9         raise ValidationError(f"{value.name} is not a CSV file")
  10 
  11 class UploadFileForm(forms.Form):
  12     collection_name = forms.CharField(min_length=1, label="Collection Name")
  13 
  14     application_name = forms.CharField(
  15         min_length=1, label="Application Name",
  16         widget=DataListInput(get_all_schemas)
  17     )
  18 
  19     file = forms.FileField(validators=[validate_csv], label="CSV File")
  20
  ```
  --- 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/mathesar/forms/forms.py b/mathesar/forms/forms.py
  --- a/mathesar/forms/forms.py
  +++ b/mathesar/forms/forms.py
  @@ -4,10 +4,12 @@
   from mathesar.database.schemas import get_all_schemas
   from mathesar.forms.widgets import DataListInput
   
  +
   def validate_csv(value):
       if not value.name.lower().endswith(".csv"):
           raise ValidationError(f"{value.name} is not a CSV file")
   
  +
   class UploadFileForm(forms.Form):
       collection_name = forms.CharField(min_length=1, label="Collection Name")
   
  diff --git a/mathesar/forms/widgets.py b/mathesar/forms/widgets.py
  --- a/mathesar/forms/widgets.py
  +++ b/mathesar/forms/widgets.py
  @@ -1,5 +1,6 @@
   from django.forms.widgets import TextInput
   
  +
   class DataListInput(TextInput):
       """
       Widget that adds a <data_list> element to the standard text input widget.
  @@ -37,4 +38,3 @@
           attrs = {} if attrs is None else attrs
           attrs["list"] = self.data_list_id
           return super().render(name, value, attrs, renderer)
  -
  
verification_info: {"golden_diff": "diff --git a/mathesar/forms/forms.py b/mathesar/forms/forms.py\n--- a/mathesar/forms/forms.py\n+++ b/mathesar/forms/forms.py\n@@ -4,10 +4,12 @@\n from mathesar.database.schemas import get_all_schemas\n from mathesar.forms.widgets import DataListInput\n \n+\n def validate_csv(value):\n     if not value.name.lower().endswith(\".csv\"):\n         raise ValidationError(f\"{value.name} is not a CSV file\")\n \n+\n class UploadFileForm(forms.Form):\n     collection_name = forms.CharField(min_length=1, label=\"Collection Name\")\n \ndiff --git a/mathesar/forms/widgets.py b/mathesar/forms/widgets.py\n--- a/mathesar/forms/widgets.py\n+++ b/mathesar/forms/widgets.py\n@@ -1,5 +1,6 @@\n from django.forms.widgets import TextInput\n \n+\n class DataListInput(TextInput):\n     \"\"\"\n     Widget that adds a <data_list> element to the standard text input widget.\n@@ -37,4 +38,3 @@\n         attrs = {} if attrs is None else attrs\n         attrs[\"list\"] = self.data_list_id\n         return super().render(name, value, attrs, renderer)\n-\n", "issue": "Configure flake8 & GitHub Action correctly\nOur flake8 setup has a couple of issues:\r\n- Failures on the GitHub Action don't actually block merge.\r\n- We need to set up our style guide for flake8.\n", "before_files": [{"content": "from django.forms.widgets import TextInput\n\nclass DataListInput(TextInput):\n    \"\"\"\n    Widget that adds a <data_list> element to the standard text input widget.\n    See TextInput for further details.\n\n    Attributes:\n        data_list: List of strings, where each string is a data_list value, or\n        a callable that returns a list of the same form\n        data_list_id: ID of the data_list, generated when render() is called.\n        Of the form [widget_id | widget_name]_data_list\n    \"\"\"\n    template_name = \"mathesar/widgets/data_list.html\"\n\n    def __init__(self, data_list, attrs=None):\n        super().__init__(attrs=attrs)\n        self.data_list = data_list\n        self.data_list_id = \"_data_list\"\n\n    def get_context(self, name, value, attrs):\n        context = super().get_context(name, value, attrs)\n        if callable(self.data_list):\n            context[\"widget\"][\"data_list\"] = self.data_list()\n        else:\n            context[\"widget\"][\"data_list\"] = self.data_list\n        context[\"widget\"][\"data_list_id\"] = self.data_list_id\n        return context\n\n    def render(self, name, value, attrs=None, renderer=None):\n        # In practice, there should always be an ID attribute, but we fallback\n        # to using widget name if ID is missing\n        if attrs and \"id\" in attrs:\n            self.data_list_id = attrs[\"id\"] + \"_data_list\"\n        else:\n            self.data_list_id = name + \"_data_list\"\n        attrs = {} if attrs is None else attrs\n        attrs[\"list\"] = self.data_list_id\n        return super().render(name, value, attrs, renderer)\n\n", "path": "mathesar/forms/widgets.py"}, {"content": "from django import forms\nfrom django.core.exceptions import ValidationError\n\nfrom mathesar.database.schemas import get_all_schemas\nfrom mathesar.forms.widgets import DataListInput\n\ndef validate_csv(value):\n    if not value.name.lower().endswith(\".csv\"):\n        raise ValidationError(f\"{value.name} is not a CSV file\")\n\nclass UploadFileForm(forms.Form):\n    collection_name = forms.CharField(min_length=1, label=\"Collection Name\")\n\n    application_name = forms.CharField(\n        min_length=1, label=\"Application Name\",\n        widget=DataListInput(get_all_schemas)\n    )\n\n    file = forms.FileField(validators=[validate_csv], label=\"CSV File\")\n", "path": "mathesar/forms/forms.py"}], "after_files": [{"content": "from django.forms.widgets import TextInput\n\n\nclass DataListInput(TextInput):\n    \"\"\"\n    Widget that adds a <data_list> element to the standard text input widget.\n    See TextInput for further details.\n\n    Attributes:\n        data_list: List of strings, where each string is a data_list value, or\n        a callable that returns a list of the same form\n        data_list_id: ID of the data_list, generated when render() is called.\n        Of the form [widget_id | widget_name]_data_list\n    \"\"\"\n    template_name = \"mathesar/widgets/data_list.html\"\n\n    def __init__(self, data_list, attrs=None):\n        super().__init__(attrs=attrs)\n        self.data_list = data_list\n        self.data_list_id = \"_data_list\"\n\n    def get_context(self, name, value, attrs):\n        context = super().get_context(name, value, attrs)\n        if callable(self.data_list):\n            context[\"widget\"][\"data_list\"] = self.data_list()\n        else:\n            context[\"widget\"][\"data_list\"] = self.data_list\n        context[\"widget\"][\"data_list_id\"] = self.data_list_id\n        return context\n\n    def render(self, name, value, attrs=None, renderer=None):\n        # In practice, there should always be an ID attribute, but we fallback\n        # to using widget name if ID is missing\n        if attrs and \"id\" in attrs:\n            self.data_list_id = attrs[\"id\"] + \"_data_list\"\n        else:\n            self.data_list_id = name + \"_data_list\"\n        attrs = {} if attrs is None else attrs\n        attrs[\"list\"] = self.data_list_id\n        return super().render(name, value, attrs, renderer)\n", "path": "mathesar/forms/widgets.py"}, {"content": "from django import forms\nfrom django.core.exceptions import ValidationError\n\nfrom mathesar.database.schemas import get_all_schemas\nfrom mathesar.forms.widgets import DataListInput\n\n\ndef validate_csv(value):\n    if not value.name.lower().endswith(\".csv\"):\n        raise ValidationError(f\"{value.name} is not a CSV file\")\n\n\nclass UploadFileForm(forms.Form):\n    collection_name = forms.CharField(min_length=1, label=\"Collection Name\")\n\n    application_name = forms.CharField(\n        min_length=1, label=\"Application Name\",\n        widget=DataListInput(get_all_schemas)\n    )\n\n    file = forms.FileField(validators=[validate_csv], label=\"CSV File\")\n", "path": "mathesar/forms/forms.py"}]}