prompt: We are currently solving the following issue within our repository. Here is the issue text:
  --- BEGIN ISSUE ---
  New CSV imports use autogenerated column names.
  ## Description
  <!-- A clear and concise description of what the bug is. -->
  According to #459, newly imported CSVs are supposed to use the first row as headers by default. However, newly uploaded CSVs are showing autogenerated column names.
  
  ## Expected behavior
  <!-- A clear and concise description of what you expected to happen. -->
  The first row of the CSV should be used as header names by default.
  
  ## To Reproduce
  <!-- How can we recreate this bug? Please try to provide a Minimal, Complete, and Verifiable (http://stackoverflow.com/help/mcve) example if code-related. -->
  Upload a CSV from the Mathesar UI. Column names will be of the form `column_0`, etc.
  
  --- 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/serializers.py`
  Content:
  ```
  1 from django.urls import reverse
  2 from rest_framework import serializers
  3 
  4 from mathesar.models import Table, Schema, DataFile, Database
  5 
  6 
  7 class NestedTableSerializer(serializers.HyperlinkedModelSerializer):
  8     url = serializers.SerializerMethodField()
  9 
  10     class Meta:
  11         model = Table
  12         fields = ['id', 'name', 'url']
  13 
  14     def get_url(self, obj):
  15         request = self.context['request']
  16         return request.build_absolute_uri(reverse('table-detail', kwargs={'pk': obj.pk}))
  17 
  18 
  19 class ModelNameField(serializers.CharField):
  20     """
  21     De-serializes the request field as a string, but serializes the response field as
  22     `model.name`. Required to support passing and returing a model name from the
  23     endpoint, while also storing the model as a related field.
  24     """
  25     def to_representation(self, value):
  26         return value.name
  27 
  28 
  29 class SchemaSerializer(serializers.HyperlinkedModelSerializer):
  30     tables = NestedTableSerializer(many=True, read_only=True)
  31     name = serializers.CharField()
  32     database = ModelNameField(max_length=128)
  33 
  34     class Meta:
  35         model = Schema
  36         fields = ['id', 'name', 'tables', 'database', 'has_dependencies']
  37 
  38 
  39 class SimpleColumnSerializer(serializers.Serializer):
  40     name = serializers.CharField()
  41     type = serializers.CharField()
  42 
  43 
  44 class ColumnSerializer(SimpleColumnSerializer):
  45     index = serializers.IntegerField(source='column_index', read_only=True)
  46     nullable = serializers.BooleanField(default=True)
  47     primary_key = serializers.BooleanField(default=False)
  48     valid_target_types = serializers.ListField(read_only=True)
  49 
  50 
  51 class TableSerializer(serializers.ModelSerializer):
  52     columns = SimpleColumnSerializer(many=True, read_only=True, source='sa_columns')
  53     records = serializers.SerializerMethodField()
  54     name = serializers.CharField()
  55     data_files = serializers.PrimaryKeyRelatedField(required=False, many=True, queryset=DataFile.objects.all())
  56 
  57     class Meta:
  58         model = Table
  59         fields = ['id', 'name', 'schema', 'created_at', 'updated_at',
  60                   'columns', 'records', 'data_files', 'has_dependencies']
  61 
  62     def get_records(self, obj):
  63         if isinstance(obj, Table):
  64             # Only get records if we are serializing an existing table
  65             request = self.context['request']
  66             return request.build_absolute_uri(reverse('table-record-list', kwargs={'table_pk': obj.pk}))
  67         else:
  68             return None
  69 
  70 
  71 class RecordSerializer(serializers.BaseSerializer):
  72     def to_representation(self, instance):
  73         return instance._asdict()
  74 
  75 
  76 class RecordListParameterSerializer(serializers.Serializer):
  77     filters = serializers.JSONField(required=False, default=[])
  78     order_by = serializers.JSONField(required=False, default=[])
  79     group_count_by = serializers.JSONField(required=False, default=[])
  80 
  81 
  82 class DatabaseSerializer(serializers.ModelSerializer):
  83     supported_types = serializers.ListField(child=serializers.CharField())
  84 
  85     class Meta:
  86         model = Database
  87         fields = ['id', 'name', 'deleted', 'supported_types']
  88         read_only_fields = ['id', 'name', 'deleted', 'supported_types']
  89 
  90 
  91 class DataFileSerializer(serializers.ModelSerializer):
  92     user = serializers.PrimaryKeyRelatedField(
  93         default=serializers.CurrentUserDefault(), read_only=True
  94     )
  95 
  96     class Meta:
  97         model = DataFile
  98         fields = [
  99             'id', 'file', 'table_imported_to', 'user', 'header', 'delimiter', 'escapechar', 'quotechar'
  100         ]
  101         extra_kwargs = {'delimiter': {'trim_whitespace': False},
  102                         'escapechar': {'trim_whitespace': False},
  103                         'quotechar': {'trim_whitespace': False},
  104                         'header': {'required': True}}
  105         # We only currently support importing to a new table, so setting a table via API is invalid.
  106         # User should be set automatically, not submitted via the API.
  107         read_only_fields = ['table_imported_to']
  108 
  109     def save(self, **kwargs):
  110         """
  111         Set user to current user while saving the data file.
  112         """
  113         current_user = self.fields['user'].get_default()
  114         if current_user.is_authenticated:
  115             kwargs['user'] = current_user
  116         return super().save(**kwargs)
  117
  ```
  --- 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/serializers.py b/mathesar/serializers.py
  --- a/mathesar/serializers.py
  +++ b/mathesar/serializers.py
  @@ -92,6 +92,7 @@
       user = serializers.PrimaryKeyRelatedField(
           default=serializers.CurrentUserDefault(), read_only=True
       )
  +    header = serializers.BooleanField(default=True)
   
       class Meta:
           model = DataFile
  @@ -100,8 +101,8 @@
           ]
           extra_kwargs = {'delimiter': {'trim_whitespace': False},
                           'escapechar': {'trim_whitespace': False},
  -                        'quotechar': {'trim_whitespace': False},
  -                        'header': {'required': True}}
  +                        'quotechar': {'trim_whitespace': False}
  +                        }
           # We only currently support importing to a new table, so setting a table via API is invalid.
           # User should be set automatically, not submitted via the API.
           read_only_fields = ['table_imported_to']
  
verification_info: {"golden_diff": "diff --git a/mathesar/serializers.py b/mathesar/serializers.py\n--- a/mathesar/serializers.py\n+++ b/mathesar/serializers.py\n@@ -92,6 +92,7 @@\n     user = serializers.PrimaryKeyRelatedField(\n         default=serializers.CurrentUserDefault(), read_only=True\n     )\n+    header = serializers.BooleanField(default=True)\n \n     class Meta:\n         model = DataFile\n@@ -100,8 +101,8 @@\n         ]\n         extra_kwargs = {'delimiter': {'trim_whitespace': False},\n                         'escapechar': {'trim_whitespace': False},\n-                        'quotechar': {'trim_whitespace': False},\n-                        'header': {'required': True}}\n+                        'quotechar': {'trim_whitespace': False}\n+                        }\n         # We only currently support importing to a new table, so setting a table via API is invalid.\n         # User should be set automatically, not submitted via the API.\n         read_only_fields = ['table_imported_to']\n", "issue": "New CSV imports use autogenerated column names.\n## Description\r\n<!-- A clear and concise description of what the bug is. -->\r\nAccording to #459, newly imported CSVs are supposed to use the first row as headers by default. However, newly uploaded CSVs are showing autogenerated column names.\r\n\r\n## Expected behavior\r\n<!-- A clear and concise description of what you expected to happen. -->\r\nThe first row of the CSV should be used as header names by default.\r\n\r\n## To Reproduce\r\n<!-- How can we recreate this bug? Please try to provide a Minimal, Complete, and Verifiable (http://stackoverflow.com/help/mcve) example if code-related. -->\r\nUpload a CSV from the Mathesar UI. Column names will be of the form `column_0`, etc.\n", "before_files": [{"content": "from django.urls import reverse\nfrom rest_framework import serializers\n\nfrom mathesar.models import Table, Schema, DataFile, Database\n\n\nclass NestedTableSerializer(serializers.HyperlinkedModelSerializer):\n    url = serializers.SerializerMethodField()\n\n    class Meta:\n        model = Table\n        fields = ['id', 'name', 'url']\n\n    def get_url(self, obj):\n        request = self.context['request']\n        return request.build_absolute_uri(reverse('table-detail', kwargs={'pk': obj.pk}))\n\n\nclass ModelNameField(serializers.CharField):\n    \"\"\"\n    De-serializes the request field as a string, but serializes the response field as\n    `model.name`. Required to support passing and returing a model name from the\n    endpoint, while also storing the model as a related field.\n    \"\"\"\n    def to_representation(self, value):\n        return value.name\n\n\nclass SchemaSerializer(serializers.HyperlinkedModelSerializer):\n    tables = NestedTableSerializer(many=True, read_only=True)\n    name = serializers.CharField()\n    database = ModelNameField(max_length=128)\n\n    class Meta:\n        model = Schema\n        fields = ['id', 'name', 'tables', 'database', 'has_dependencies']\n\n\nclass SimpleColumnSerializer(serializers.Serializer):\n    name = serializers.CharField()\n    type = serializers.CharField()\n\n\nclass ColumnSerializer(SimpleColumnSerializer):\n    index = serializers.IntegerField(source='column_index', read_only=True)\n    nullable = serializers.BooleanField(default=True)\n    primary_key = serializers.BooleanField(default=False)\n    valid_target_types = serializers.ListField(read_only=True)\n\n\nclass TableSerializer(serializers.ModelSerializer):\n    columns = SimpleColumnSerializer(many=True, read_only=True, source='sa_columns')\n    records = serializers.SerializerMethodField()\n    name = serializers.CharField()\n    data_files = serializers.PrimaryKeyRelatedField(required=False, many=True, queryset=DataFile.objects.all())\n\n    class Meta:\n        model = Table\n        fields = ['id', 'name', 'schema', 'created_at', 'updated_at',\n                  'columns', 'records', 'data_files', 'has_dependencies']\n\n    def get_records(self, obj):\n        if isinstance(obj, Table):\n            # Only get records if we are serializing an existing table\n            request = self.context['request']\n            return request.build_absolute_uri(reverse('table-record-list', kwargs={'table_pk': obj.pk}))\n        else:\n            return None\n\n\nclass RecordSerializer(serializers.BaseSerializer):\n    def to_representation(self, instance):\n        return instance._asdict()\n\n\nclass RecordListParameterSerializer(serializers.Serializer):\n    filters = serializers.JSONField(required=False, default=[])\n    order_by = serializers.JSONField(required=False, default=[])\n    group_count_by = serializers.JSONField(required=False, default=[])\n\n\nclass DatabaseSerializer(serializers.ModelSerializer):\n    supported_types = serializers.ListField(child=serializers.CharField())\n\n    class Meta:\n        model = Database\n        fields = ['id', 'name', 'deleted', 'supported_types']\n        read_only_fields = ['id', 'name', 'deleted', 'supported_types']\n\n\nclass DataFileSerializer(serializers.ModelSerializer):\n    user = serializers.PrimaryKeyRelatedField(\n        default=serializers.CurrentUserDefault(), read_only=True\n    )\n\n    class Meta:\n        model = DataFile\n        fields = [\n            'id', 'file', 'table_imported_to', 'user', 'header', 'delimiter', 'escapechar', 'quotechar'\n        ]\n        extra_kwargs = {'delimiter': {'trim_whitespace': False},\n                        'escapechar': {'trim_whitespace': False},\n                        'quotechar': {'trim_whitespace': False},\n                        'header': {'required': True}}\n        # We only currently support importing to a new table, so setting a table via API is invalid.\n        # User should be set automatically, not submitted via the API.\n        read_only_fields = ['table_imported_to']\n\n    def save(self, **kwargs):\n        \"\"\"\n        Set user to current user while saving the data file.\n        \"\"\"\n        current_user = self.fields['user'].get_default()\n        if current_user.is_authenticated:\n            kwargs['user'] = current_user\n        return super().save(**kwargs)\n", "path": "mathesar/serializers.py"}], "after_files": [{"content": "from django.urls import reverse\nfrom rest_framework import serializers\n\nfrom mathesar.models import Table, Schema, DataFile, Database\n\n\nclass NestedTableSerializer(serializers.HyperlinkedModelSerializer):\n    url = serializers.SerializerMethodField()\n\n    class Meta:\n        model = Table\n        fields = ['id', 'name', 'url']\n\n    def get_url(self, obj):\n        request = self.context['request']\n        return request.build_absolute_uri(reverse('table-detail', kwargs={'pk': obj.pk}))\n\n\nclass ModelNameField(serializers.CharField):\n    \"\"\"\n    De-serializes the request field as a string, but serializes the response field as\n    `model.name`. Required to support passing and returing a model name from the\n    endpoint, while also storing the model as a related field.\n    \"\"\"\n    def to_representation(self, value):\n        return value.name\n\n\nclass SchemaSerializer(serializers.HyperlinkedModelSerializer):\n    tables = NestedTableSerializer(many=True, read_only=True)\n    name = serializers.CharField()\n    database = ModelNameField(max_length=128)\n\n    class Meta:\n        model = Schema\n        fields = ['id', 'name', 'tables', 'database', 'has_dependencies']\n\n\nclass SimpleColumnSerializer(serializers.Serializer):\n    name = serializers.CharField()\n    type = serializers.CharField()\n\n\nclass ColumnSerializer(SimpleColumnSerializer):\n    index = serializers.IntegerField(source='column_index', read_only=True)\n    nullable = serializers.BooleanField(default=True)\n    primary_key = serializers.BooleanField(default=False)\n    valid_target_types = serializers.ListField(read_only=True)\n\n\nclass TableSerializer(serializers.ModelSerializer):\n    columns = SimpleColumnSerializer(many=True, read_only=True, source='sa_columns')\n    records = serializers.SerializerMethodField()\n    name = serializers.CharField()\n    data_files = serializers.PrimaryKeyRelatedField(required=False, many=True, queryset=DataFile.objects.all())\n\n    class Meta:\n        model = Table\n        fields = ['id', 'name', 'schema', 'created_at', 'updated_at',\n                  'columns', 'records', 'data_files', 'has_dependencies']\n\n    def get_records(self, obj):\n        if isinstance(obj, Table):\n            # Only get records if we are serializing an existing table\n            request = self.context['request']\n            return request.build_absolute_uri(reverse('table-record-list', kwargs={'table_pk': obj.pk}))\n        else:\n            return None\n\n\nclass RecordSerializer(serializers.BaseSerializer):\n    def to_representation(self, instance):\n        return instance._asdict()\n\n\nclass RecordListParameterSerializer(serializers.Serializer):\n    filters = serializers.JSONField(required=False, default=[])\n    order_by = serializers.JSONField(required=False, default=[])\n    group_count_by = serializers.JSONField(required=False, default=[])\n\n\nclass DatabaseSerializer(serializers.ModelSerializer):\n    supported_types = serializers.ListField(child=serializers.CharField())\n\n    class Meta:\n        model = Database\n        fields = ['id', 'name', 'deleted', 'supported_types']\n        read_only_fields = ['id', 'name', 'deleted', 'supported_types']\n\n\nclass DataFileSerializer(serializers.ModelSerializer):\n    user = serializers.PrimaryKeyRelatedField(\n        default=serializers.CurrentUserDefault(), read_only=True\n    )\n    header = serializers.BooleanField(default=True)\n\n    class Meta:\n        model = DataFile\n        fields = [\n            'id', 'file', 'table_imported_to', 'user', 'header', 'delimiter', 'escapechar', 'quotechar'\n        ]\n        extra_kwargs = {'delimiter': {'trim_whitespace': False},\n                        'escapechar': {'trim_whitespace': False},\n                        'quotechar': {'trim_whitespace': False}\n                        }\n        # We only currently support importing to a new table, so setting a table via API is invalid.\n        # User should be set automatically, not submitted via the API.\n        read_only_fields = ['table_imported_to']\n\n    def save(self, **kwargs):\n        \"\"\"\n        Set user to current user while saving the data file.\n        \"\"\"\n        current_user = self.fields['user'].get_default()\n        if current_user.is_authenticated:\n            kwargs['user'] = current_user\n        return super().save(**kwargs)\n", "path": "mathesar/serializers.py"}]}