diff --git a/config/wsgi.py b/config/wsgi.py index 9642109ba..d246049de 100755 --- a/config/wsgi.py +++ b/config/wsgi.py @@ -13,6 +13,7 @@ framework. """ + import os from django.core.wsgi import get_wsgi_application diff --git a/data/v2/build.py b/data/v2/build.py index 4c3eae767..9e6459eb7 100644 --- a/data/v2/build.py +++ b/data/v2/build.py @@ -1242,9 +1242,11 @@ def csv_record_to_objects(info): id=int(info[0]), location_id=int(info[1]), game_index=int(info[2]), - name="{}-{}".format(location.name, info[3]) - if info[3] - else "{}-{}".format(location.name, "area"), + name=( + "{}-{}".format(location.name, info[3]) + if info[3] + else "{}-{}".format(location.name, "area") + ), ) build_generic((LocationArea,), "location_areas.csv", csv_record_to_objects) diff --git a/pokemon_v2/api.py b/pokemon_v2/api.py index 7154aeead..4d27e2479 100644 --- a/pokemon_v2/api.py +++ b/pokemon_v2/api.py @@ -4,6 +4,7 @@ from rest_framework.views import APIView from django.shortcuts import get_object_or_404 from django.http import Http404 +from django.db.models import Q from drf_spectacular.utils import extend_schema, extend_schema_view, OpenApiParameter from drf_spectacular.types import OpenApiTypes @@ -40,6 +41,15 @@ class NameOrIdRetrieval: idPattern = re.compile(r"^-?[0-9]+$") namePattern = re.compile(r"^[0-9A-Za-z\-\+]+$") + def get_queryset(self): + queryset = super().get_queryset() + filter = self.request.GET.get("q", "") + + if filter: + queryset = queryset.filter(Q(name__icontains=filter)) + + return queryset + @extend_schema( parameters=[ OpenApiParameter( diff --git a/pokemon_v2/tests.py b/pokemon_v2/tests.py index e458f467c..efa42567d 100644 --- a/pokemon_v2/tests.py +++ b/pokemon_v2/tests.py @@ -1679,42 +1679,46 @@ def setup_pokemon_sprites_data( showdown = { "front_default": showdown_path % pokemon.id if front_default else None, - "front_female": showdown_path % f"female/{pokemon.id}" - if front_female - else None, - "front_shiny": showdown_path % f"shiny/{pokemon.id}" - if front_shiny - else None, - "front_shiny_female": showdown_path % f"shiny/female/{pokemon.id}" - if front_shiny_female - else None, - "back_default": showdown_path % f"back/{pokemon.id}" - if back_default - else None, - "back_female": showdown_path % f"back/female/{pokemon.id}" - if back_female - else None, - "back_shiny": showdown_path % f"back/shiny/{pokemon.id}" - if back_shiny - else None, - "back_shiny_female": showdown_path % f"back/shiny/female/{pokemon.id}" - if back_shiny_female - else None, + "front_female": ( + showdown_path % f"female/{pokemon.id}" if front_female else None + ), + "front_shiny": ( + showdown_path % f"shiny/{pokemon.id}" if front_shiny else None + ), + "front_shiny_female": ( + showdown_path % f"shiny/female/{pokemon.id}" + if front_shiny_female + else None + ), + "back_default": ( + showdown_path % f"back/{pokemon.id}" if back_default else None + ), + "back_female": ( + showdown_path % f"back/female/{pokemon.id}" if back_female else None + ), + "back_shiny": ( + showdown_path % f"back/shiny/{pokemon.id}" if back_shiny else None + ), + "back_shiny_female": ( + showdown_path % f"back/shiny/female/{pokemon.id}" + if back_shiny_female + else None + ), } sprites = { "front_default": sprite_path % pokemon.id if front_default else None, "front_female": sprite_path % pokemon.id if front_female else None, "front_shiny": sprite_path % pokemon.id if front_shiny else None, - "front_shiny_female": sprite_path % pokemon.id - if front_shiny_female - else None, + "front_shiny_female": ( + sprite_path % pokemon.id if front_shiny_female else None + ), "back_default": sprite_path % pokemon.id if back_default else None, "back_female": sprite_path % pokemon.id if back_female else None, "back_shiny": sprite_path % pokemon.id if back_shiny else None, - "back_shiny_female": sprite_path % pokemon.id - if back_shiny_female - else None, + "back_shiny_female": ( + sprite_path % pokemon.id if back_shiny_female else None + ), } pokemon_sprites = PokemonSprites.objects.create( @@ -5099,6 +5103,25 @@ def test_pokemon_api(self): "{}".format(cries_data["legacy"]), ) + # test search pokemon using search query param `q=partial_name` + + response = self.client.get( + "{}/pokemon/?q={}".format(API_V2, pokemon.name[:2]), + HTTP_HOST="testserver", + ) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual(response.data["count"], 1) + self.assertEqual(response.data["results"][0]["name"], pokemon.name) + + response = self.client.get( + "{}/pokemon/?q={}".format(API_V2, pokemon.name[-3:]), + ) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual(response.data["count"], 1) + self.assertEqual(response.data["results"][0]["name"], pokemon.name) + def test_pokemon_form_api(self): pokemon_species = self.setup_pokemon_species_data() pokemon = self.setup_pokemon_data(pokemon_species=pokemon_species)