prompt: We are currently solving the following issue within our repository. Here is the issue text:
  --- BEGIN ISSUE ---
  API: allow remote repo full name query
  The new dashboard is still using the API v2 remote repo API, which does not allow for expansion on project results and doesn't have all of the fields that I'd like to use in the results listing. The API v3 needs the v2 API implementation for searching by full_name, the current pattern for searching `full_name` by icontains on the v2 API works okay for now.
  
  I didn't want to alter the v2 API further, as we should really be moving towards the v3 API, but if it's just easier to add expansion there for some reason, that is also fine.
  
  Note: this also gives expansion on the nested projects in the result, so we can get fields like the avatar_url, etc. The current v2 search only returns the project slug and a link to the project dashboard.
  
  --- END ISSUE ---
  
  Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
  --- BEGIN FILES ---
  Path: `readthedocs/api/v3/filters.py`
  Content:
  ```
  1 import django_filters.rest_framework as filters
  2 
  3 from readthedocs.builds.constants import BUILD_FINAL_STATES
  4 from readthedocs.builds.models import Build, Version
  5 from readthedocs.oauth.models import RemoteOrganization, RemoteRepository
  6 from readthedocs.projects.models import Project
  7 
  8 
  9 class ProjectFilter(filters.FilterSet):
  10 
  11     # TODO this is copying the patterns from other filter sets, where the fields
  12     # are all ``icontains`` lookups by default. We discussed reversing this
  13     # pattern in the future though, see:
  14     # https://github.com/readthedocs/readthedocs.org/issues/9862
  15     name = filters.CharFilter(lookup_expr="icontains")
  16     slug = filters.CharFilter(lookup_expr="icontains")
  17 
  18     class Meta:
  19         model = Project
  20         fields = [
  21             "name",
  22             "slug",
  23             "language",
  24             "programming_language",
  25         ]
  26 
  27 
  28 class VersionFilter(filters.FilterSet):
  29     slug = filters.CharFilter(lookup_expr='icontains')
  30     verbose_name = filters.CharFilter(lookup_expr='icontains')
  31 
  32     class Meta:
  33         model = Version
  34         fields = [
  35             'verbose_name',
  36             'privacy_level',
  37             'active',
  38             'built',
  39             'uploaded',
  40             'slug',
  41             'type',
  42         ]
  43 
  44 
  45 class BuildFilter(filters.FilterSet):
  46     running = filters.BooleanFilter(method='get_running')
  47 
  48     class Meta:
  49         model = Build
  50         fields = [
  51             'commit',
  52             'running',
  53         ]
  54 
  55     def get_running(self, queryset, name, value):
  56         if value:
  57             return queryset.exclude(state__in=BUILD_FINAL_STATES)
  58 
  59         return queryset.filter(state__in=BUILD_FINAL_STATES)
  60 
  61 
  62 class RemoteRepositoryFilter(filters.FilterSet):
  63     name = filters.CharFilter(field_name='name', lookup_expr='icontains')
  64     organization = filters.CharFilter(field_name='organization__slug')
  65 
  66     class Meta:
  67         model = RemoteRepository
  68         fields = [
  69             'name',
  70             'vcs_provider',
  71             'organization',
  72         ]
  73 
  74 
  75 class RemoteOrganizationFilter(filters.FilterSet):
  76     name = filters.CharFilter(field_name='name', lookup_expr='icontains')
  77 
  78     class Meta:
  79         model = RemoteOrganization
  80         fields = [
  81             'name',
  82             'vcs_provider',
  83         ]
  84
  ```
  --- 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/readthedocs/api/v3/filters.py b/readthedocs/api/v3/filters.py
  --- a/readthedocs/api/v3/filters.py
  +++ b/readthedocs/api/v3/filters.py
  @@ -60,15 +60,17 @@
   
   
   class RemoteRepositoryFilter(filters.FilterSet):
  -    name = filters.CharFilter(field_name='name', lookup_expr='icontains')
  -    organization = filters.CharFilter(field_name='organization__slug')
  +    name = filters.CharFilter(field_name="name", lookup_expr="icontains")
  +    full_name = filters.CharFilter(field_name="full_name", lookup_expr="icontains")
  +    organization = filters.CharFilter(field_name="organization__slug")
   
       class Meta:
           model = RemoteRepository
           fields = [
  -            'name',
  -            'vcs_provider',
  -            'organization',
  +            "name",
  +            "full_name",
  +            "vcs_provider",
  +            "organization",
           ]
  
verification_info: {"golden_diff": "diff --git a/readthedocs/api/v3/filters.py b/readthedocs/api/v3/filters.py\n--- a/readthedocs/api/v3/filters.py\n+++ b/readthedocs/api/v3/filters.py\n@@ -60,15 +60,17 @@\n \n \n class RemoteRepositoryFilter(filters.FilterSet):\n-    name = filters.CharFilter(field_name='name', lookup_expr='icontains')\n-    organization = filters.CharFilter(field_name='organization__slug')\n+    name = filters.CharFilter(field_name=\"name\", lookup_expr=\"icontains\")\n+    full_name = filters.CharFilter(field_name=\"full_name\", lookup_expr=\"icontains\")\n+    organization = filters.CharFilter(field_name=\"organization__slug\")\n \n     class Meta:\n         model = RemoteRepository\n         fields = [\n-            'name',\n-            'vcs_provider',\n-            'organization',\n+            \"name\",\n+            \"full_name\",\n+            \"vcs_provider\",\n+            \"organization\",\n         ]\n", "issue": "API: allow remote repo full name query\nThe new dashboard is still using the API v2 remote repo API, which does not allow for expansion on project results and doesn't have all of the fields that I'd like to use in the results listing. The API v3 needs the v2 API implementation for searching by full_name, the current pattern for searching `full_name` by icontains on the v2 API works okay for now.\r\n\r\nI didn't want to alter the v2 API further, as we should really be moving towards the v3 API, but if it's just easier to add expansion there for some reason, that is also fine.\r\n\r\nNote: this also gives expansion on the nested projects in the result, so we can get fields like the avatar_url, etc. The current v2 search only returns the project slug and a link to the project dashboard.\n", "before_files": [{"content": "import django_filters.rest_framework as filters\n\nfrom readthedocs.builds.constants import BUILD_FINAL_STATES\nfrom readthedocs.builds.models import Build, Version\nfrom readthedocs.oauth.models import RemoteOrganization, RemoteRepository\nfrom readthedocs.projects.models import Project\n\n\nclass ProjectFilter(filters.FilterSet):\n\n    # TODO this is copying the patterns from other filter sets, where the fields\n    # are all ``icontains`` lookups by default. We discussed reversing this\n    # pattern in the future though, see:\n    # https://github.com/readthedocs/readthedocs.org/issues/9862\n    name = filters.CharFilter(lookup_expr=\"icontains\")\n    slug = filters.CharFilter(lookup_expr=\"icontains\")\n\n    class Meta:\n        model = Project\n        fields = [\n            \"name\",\n            \"slug\",\n            \"language\",\n            \"programming_language\",\n        ]\n\n\nclass VersionFilter(filters.FilterSet):\n    slug = filters.CharFilter(lookup_expr='icontains')\n    verbose_name = filters.CharFilter(lookup_expr='icontains')\n\n    class Meta:\n        model = Version\n        fields = [\n            'verbose_name',\n            'privacy_level',\n            'active',\n            'built',\n            'uploaded',\n            'slug',\n            'type',\n        ]\n\n\nclass BuildFilter(filters.FilterSet):\n    running = filters.BooleanFilter(method='get_running')\n\n    class Meta:\n        model = Build\n        fields = [\n            'commit',\n            'running',\n        ]\n\n    def get_running(self, queryset, name, value):\n        if value:\n            return queryset.exclude(state__in=BUILD_FINAL_STATES)\n\n        return queryset.filter(state__in=BUILD_FINAL_STATES)\n\n\nclass RemoteRepositoryFilter(filters.FilterSet):\n    name = filters.CharFilter(field_name='name', lookup_expr='icontains')\n    organization = filters.CharFilter(field_name='organization__slug')\n\n    class Meta:\n        model = RemoteRepository\n        fields = [\n            'name',\n            'vcs_provider',\n            'organization',\n        ]\n\n\nclass RemoteOrganizationFilter(filters.FilterSet):\n    name = filters.CharFilter(field_name='name', lookup_expr='icontains')\n\n    class Meta:\n        model = RemoteOrganization\n        fields = [\n            'name',\n            'vcs_provider',\n        ]\n", "path": "readthedocs/api/v3/filters.py"}], "after_files": [{"content": "import django_filters.rest_framework as filters\n\nfrom readthedocs.builds.constants import BUILD_FINAL_STATES\nfrom readthedocs.builds.models import Build, Version\nfrom readthedocs.oauth.models import RemoteOrganization, RemoteRepository\nfrom readthedocs.projects.models import Project\n\n\nclass ProjectFilter(filters.FilterSet):\n\n    # TODO this is copying the patterns from other filter sets, where the fields\n    # are all ``icontains`` lookups by default. We discussed reversing this\n    # pattern in the future though, see:\n    # https://github.com/readthedocs/readthedocs.org/issues/9862\n    name = filters.CharFilter(lookup_expr=\"icontains\")\n    slug = filters.CharFilter(lookup_expr=\"icontains\")\n\n    class Meta:\n        model = Project\n        fields = [\n            \"name\",\n            \"slug\",\n            \"language\",\n            \"programming_language\",\n        ]\n\n\nclass VersionFilter(filters.FilterSet):\n    slug = filters.CharFilter(lookup_expr='icontains')\n    verbose_name = filters.CharFilter(lookup_expr='icontains')\n\n    class Meta:\n        model = Version\n        fields = [\n            'verbose_name',\n            'privacy_level',\n            'active',\n            'built',\n            'uploaded',\n            'slug',\n            'type',\n        ]\n\n\nclass BuildFilter(filters.FilterSet):\n    running = filters.BooleanFilter(method='get_running')\n\n    class Meta:\n        model = Build\n        fields = [\n            'commit',\n            'running',\n        ]\n\n    def get_running(self, queryset, name, value):\n        if value:\n            return queryset.exclude(state__in=BUILD_FINAL_STATES)\n\n        return queryset.filter(state__in=BUILD_FINAL_STATES)\n\n\nclass RemoteRepositoryFilter(filters.FilterSet):\n    name = filters.CharFilter(field_name=\"name\", lookup_expr=\"icontains\")\n    full_name = filters.CharFilter(field_name=\"full_name\", lookup_expr=\"icontains\")\n    organization = filters.CharFilter(field_name=\"organization__slug\")\n\n    class Meta:\n        model = RemoteRepository\n        fields = [\n            \"name\",\n            \"full_name\",\n            \"vcs_provider\",\n            \"organization\",\n        ]\n\n\nclass RemoteOrganizationFilter(filters.FilterSet):\n    name = filters.CharFilter(field_name='name', lookup_expr='icontains')\n\n    class Meta:\n        model = RemoteOrganization\n        fields = [\n            'name',\n            'vcs_provider',\n        ]\n", "path": "readthedocs/api/v3/filters.py"}]}