mirror of
https://github.com/PokeAPI/pokeapi
synced 2024-11-10 06:04:18 +00:00
Merge branch 'master' into compose-v2
This commit is contained in:
commit
79a8d2bfaf
27 changed files with 12783 additions and 3372 deletions
|
@ -20,6 +20,9 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: Run tests
|
name: Run tests
|
||||||
command: make test
|
command: make test
|
||||||
|
- run:
|
||||||
|
name: Generate OpenAPI schema
|
||||||
|
command: make openapi-generate
|
||||||
build:
|
build:
|
||||||
docker:
|
docker:
|
||||||
- image: cimg/python:3.10.9
|
- image: cimg/python:3.10.9
|
||||||
|
|
2
.github/workflows/docker-build.yml
vendored
2
.github/workflows/docker-build.yml
vendored
|
@ -35,7 +35,7 @@ jobs:
|
||||||
context: .
|
context: .
|
||||||
file: ./Resources/docker/app/Dockerfile
|
file: ./Resources/docker/app/Dockerfile
|
||||||
push: false
|
push: false
|
||||||
platforms: local
|
platforms: local,linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6
|
||||||
tags: ${{ steps.meta.outputs.tags }}
|
tags: ${{ steps.meta.outputs.tags }}
|
||||||
labels: ${{ steps.meta.outputs.labels }}
|
labels: ${{ steps.meta.outputs.labels }}
|
||||||
- name: Image digest
|
- name: Image digest
|
||||||
|
|
12
.github/workflows/docker-image.yml
vendored
12
.github/workflows/docker-image.yml
vendored
|
@ -13,21 +13,21 @@ jobs:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
- name: Docker meta
|
- name: Docker meta
|
||||||
id: meta
|
id: meta
|
||||||
uses: docker/metadata-action@v3
|
uses: docker/metadata-action@v5
|
||||||
with:
|
with:
|
||||||
# list of Docker images to use as base name for tags
|
# list of Docker images to use as base name for tags
|
||||||
images: |
|
images: |
|
||||||
pokeapi/pokeapi
|
pokeapi/pokeapi
|
||||||
- name: Set up QEMU
|
- name: Set up QEMU
|
||||||
uses: docker/setup-qemu-action@v1
|
uses: docker/setup-qemu-action@v3
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
id: buildx
|
id: buildx
|
||||||
uses: docker/setup-buildx-action@v1
|
uses: docker/setup-buildx-action@v3
|
||||||
- name: Login to DockerHub
|
- name: Login to DockerHub
|
||||||
if: github.event_name != 'pull_request'
|
if: github.event_name != 'pull_request'
|
||||||
uses: docker/login-action@v1
|
uses: docker/login-action@v1
|
||||||
|
@ -43,12 +43,12 @@ jobs:
|
||||||
echo "Platforms: ${{ steps.buildx.outputs.platforms }}"
|
echo "Platforms: ${{ steps.buildx.outputs.platforms }}"
|
||||||
- name: Build and push
|
- name: Build and push
|
||||||
id: docker_build
|
id: docker_build
|
||||||
uses: docker/build-push-action@v2
|
uses: docker/build-push-action@v5
|
||||||
with:
|
with:
|
||||||
context: .
|
context: .
|
||||||
file: ./Resources/docker/app/Dockerfile
|
file: ./Resources/docker/app/Dockerfile
|
||||||
push: true
|
push: true
|
||||||
platforms: linux/amd64,linux/arm64,linux/ppc64le,linux/arm/v7,linux/arm/v6
|
platforms: linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6
|
||||||
tags: ${{ steps.meta.outputs.tags }}
|
tags: ${{ steps.meta.outputs.tags }}
|
||||||
labels: ${{ steps.meta.outputs.labels }}
|
labels: ${{ steps.meta.outputs.labels }}
|
||||||
- name: Image digest
|
- name: Image digest
|
||||||
|
|
7
Makefile
7
Makefile
|
@ -41,6 +41,9 @@ make-migrations: # Create migrations files if schema has changed
|
||||||
shell: # Load a shell
|
shell: # Load a shell
|
||||||
python manage.py shell ${local_config}
|
python manage.py shell ${local_config}
|
||||||
|
|
||||||
|
openapi-generate:
|
||||||
|
python manage.py spectacular --color --file openapi.yml ${local_config}
|
||||||
|
|
||||||
docker-up: # (Docker) Create services/volumes/networks
|
docker-up: # (Docker) Create services/volumes/networks
|
||||||
docker compose up -d
|
docker compose up -d
|
||||||
|
|
||||||
|
@ -140,10 +143,10 @@ update-graphql-data-prod:
|
||||||
git submodule update --init
|
git submodule update --init
|
||||||
docker compose stop graphql-engine
|
docker compose stop graphql-engine
|
||||||
sync; echo 3 > /proc/sys/vm/drop_caches
|
sync; echo 3 > /proc/sys/vm/drop_caches
|
||||||
docker compose -f docker-compose.yml -f Resources/compose/docker-compose-prod-graphql.yml up -d app
|
docker compose -f docker-compose.yml -f Resources/compose/docker-compose-prod-graphql.yml up -d app cache
|
||||||
make docker-migrate
|
make docker-migrate
|
||||||
make docker-build-db
|
make docker-build-db
|
||||||
docker compose stop app
|
docker compose stop app cache
|
||||||
sync; echo 3 > /proc/sys/vm/drop_caches
|
sync; echo 3 > /proc/sys/vm/drop_caches
|
||||||
docker compose exec -T web sh -c 'rm -rf /tmp/cache/*'
|
docker compose exec -T web sh -c 'rm -rf /tmp/cache/*'
|
||||||
docker compose start graphql-engine
|
docker compose start graphql-engine
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
version: '2.4'
|
version: '2.4'
|
||||||
services:
|
services:
|
||||||
|
cache:
|
||||||
|
restart: "no"
|
||||||
|
|
||||||
db:
|
db:
|
||||||
environment:
|
environment:
|
||||||
POSTGRES_PASSWORD: "${POSTGRES_PASSWORD}"
|
POSTGRES_PASSWORD: "${POSTGRES_PASSWORD}"
|
||||||
|
|
|
@ -7,9 +7,9 @@ RUN mkdir /code
|
||||||
WORKDIR /code
|
WORKDIR /code
|
||||||
|
|
||||||
ADD requirements.txt /code/
|
ADD requirements.txt /code/
|
||||||
RUN \
|
RUN apk add --no-cache postgresql-libs libstdc++
|
||||||
apk add --no-cache postgresql-libs libstdc++ && \
|
RUN apk add --no-cache --virtual .build-deps gcc g++ musl-dev \
|
||||||
apk add --no-cache --virtual .build-deps gcc g++ musl-dev postgresql-dev && \
|
postgresql-dev rust cargo && \
|
||||||
python3 -m pip install -r requirements.txt --no-cache-dir && \
|
python3 -m pip install -r requirements.txt --no-cache-dir && \
|
||||||
apk --purge del .build-deps
|
apk --purge del .build-deps
|
||||||
ADD . /code/
|
ADD . /code/
|
||||||
|
|
|
@ -99,6 +99,7 @@ INSTALLED_APPS = (
|
||||||
"corsheaders",
|
"corsheaders",
|
||||||
"rest_framework",
|
"rest_framework",
|
||||||
"cachalot",
|
"cachalot",
|
||||||
|
"drf_spectacular",
|
||||||
) + CUSTOM_APPS
|
) + CUSTOM_APPS
|
||||||
|
|
||||||
|
|
||||||
|
@ -116,6 +117,7 @@ REST_FRAMEWORK = {
|
||||||
"DEFAULT_PAGINATION_CLASS": "rest_framework.pagination.LimitOffsetPagination",
|
"DEFAULT_PAGINATION_CLASS": "rest_framework.pagination.LimitOffsetPagination",
|
||||||
"PAGE_SIZE": 20,
|
"PAGE_SIZE": 20,
|
||||||
"PAGINATE_BY": 20,
|
"PAGINATE_BY": 20,
|
||||||
|
"DEFAULT_SCHEMA_CLASS": "drf_spectacular.openapi.AutoSchema",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -136,3 +138,42 @@ TEMPLATES = [
|
||||||
]
|
]
|
||||||
|
|
||||||
DEFAULT_AUTO_FIELD = "django.db.models.AutoField"
|
DEFAULT_AUTO_FIELD = "django.db.models.AutoField"
|
||||||
|
|
||||||
|
SPECTACULAR_SETTINGS = {
|
||||||
|
"TITLE": "PokéAPI",
|
||||||
|
"DESCRIPTION": """All the Pokémon data you'll ever need in one place, easily accessible through a modern free open-source RESTful API.
|
||||||
|
|
||||||
|
## What is this?
|
||||||
|
|
||||||
|
This is a full RESTful API linked to an extensive database detailing everything about the Pokémon main game series.
|
||||||
|
|
||||||
|
We've covered everything from Pokémon to Berry Flavors.
|
||||||
|
|
||||||
|
## Where do I start?
|
||||||
|
|
||||||
|
We have awesome [documentation](https://pokeapi.co/docs/v2) on how to use this API. It takes minutes to get started.
|
||||||
|
|
||||||
|
This API will always be publicly available and will never require any extensive setup process to consume.
|
||||||
|
|
||||||
|
Created by [**Paul Hallett**(]https://github.com/phalt) and other [**PokéAPI contributors***](https://github.com/PokeAPI/pokeapi#contributing) around the world. Pokémon and Pokémon character names are trademarks of Nintendo.
|
||||||
|
""",
|
||||||
|
"SERVERS": [{"url": "https://pokeapi.co"}],
|
||||||
|
"EXTERNAL_DOCS": {"url": "https://pokeapi.co/docs/v2"},
|
||||||
|
"VERSION": "2.7.0",
|
||||||
|
"SERVE_INCLUDE_SCHEMA": False,
|
||||||
|
"OAS_VERSION": "3.1.0",
|
||||||
|
"COMPONENT_SPLIT_REQUEST": True,
|
||||||
|
"TAGS": [
|
||||||
|
"pokemon",
|
||||||
|
"evolution",
|
||||||
|
"berries",
|
||||||
|
"items",
|
||||||
|
"machines",
|
||||||
|
"location",
|
||||||
|
"contest",
|
||||||
|
"moves",
|
||||||
|
"encounters",
|
||||||
|
"games",
|
||||||
|
"utility",
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
|
@ -13,6 +13,7 @@ middleware here, or combine a Django application with an application of another
|
||||||
framework.
|
framework.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import os
|
import os
|
||||||
from django.core.wsgi import get_wsgi_application
|
from django.core.wsgi import get_wsgi_application
|
||||||
|
|
||||||
|
|
|
@ -1242,9 +1242,11 @@ def _build_locations():
|
||||||
id=int(info[0]),
|
id=int(info[0]),
|
||||||
location_id=int(info[1]),
|
location_id=int(info[1]),
|
||||||
game_index=int(info[2]),
|
game_index=int(info[2]),
|
||||||
name="{}-{}".format(location.name, info[3])
|
name=(
|
||||||
if info[3]
|
"{}-{}".format(location.name, info[3])
|
||||||
else "{}-{}".format(location.name, "area"),
|
if info[3]
|
||||||
|
else "{}-{}".format(location.name, "area")
|
||||||
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
build_generic((LocationArea,), "location_areas.csv", csv_record_to_objects)
|
build_generic((LocationArea,), "location_areas.csv", csv_record_to_objects)
|
||||||
|
|
|
@ -3,8 +3,8 @@ evolution_trigger_id,local_language_id,name
|
||||||
1,6,Levelaufstieg
|
1,6,Levelaufstieg
|
||||||
1,9,Level up
|
1,9,Level up
|
||||||
2,5,Échange
|
2,5,Échange
|
||||||
2,6,Tausch
|
2,6,Tausch oder Verbindungsschnur
|
||||||
2,9,Trade
|
2,9,Trade or Linking Cord
|
||||||
3,5,Utilisation d'un objet
|
3,5,Utilisation d'un objet
|
||||||
3,6,Gegenstand nutzen
|
3,6,Gegenstand nutzen
|
||||||
3,9,Use item
|
3,9,Use item
|
||||||
|
|
|
|
@ -610,3 +610,7 @@ item_id,item_flag_id
|
||||||
303,7
|
303,7
|
||||||
304,5
|
304,5
|
||||||
304,7
|
304,7
|
||||||
|
2160,1
|
||||||
|
2160,2
|
||||||
|
2160,3
|
||||||
|
2160,5
|
|
|
@ -17822,3 +17822,5 @@ item_id,local_language_id,name
|
||||||
2159,1,チャデスのこな
|
2159,1,チャデスのこな
|
||||||
2159,9,Poltchageist Powder
|
2159,9,Poltchageist Powder
|
||||||
2159,11,チャデスのこな
|
2159,11,チャデスのこな
|
||||||
|
2160,9,Linking Cord
|
||||||
|
2160,11, つながりのヒモ
|
|
|
@ -1519,3 +1519,4 @@ This item can only be obtained or used via the Wonder Launcher."
|
||||||
1003,9,XXX new effect for roto-pp-restore,XXX new effect for roto-pp-restore
|
1003,9,XXX new effect for roto-pp-restore,XXX new effect for roto-pp-restore
|
||||||
1004,9,XXX new effect for roto-boost,XXX new effect for roto-boost
|
1004,9,XXX new effect for roto-boost,XXX new effect for roto-boost
|
||||||
1005,9,XXX new effect for roto-catch,XXX new effect for roto-catch
|
1005,9,XXX new effect for roto-catch,XXX new effect for roto-catch
|
||||||
|
2160,9,Allows a Pokemon whose evolution is usually triggered by trading to evolve, The Linking Cord triggers the evolution of certain Pokémon (all of which can alternatively evolve when traded) upon use. This consumes the Linking Cord.
|
||||||
|
|
|
|
@ -2107,5 +2107,6 @@ id,identifier,category_id,cost,fling_power,fling_effect_id
|
||||||
2157,cramorant-down,54,30,,
|
2157,cramorant-down,54,30,,
|
||||||
2158,morpeko-snack,54,15,,
|
2158,morpeko-snack,54,15,,
|
||||||
2159,poltchageist-powder,54,30,,
|
2159,poltchageist-powder,54,30,,
|
||||||
|
2160,linking-cord,10,8000,,
|
||||||
10001,black-augurite,10,0,,
|
10001,black-augurite,10,0,,
|
||||||
10002,peat-block,10,0,,
|
10002,peat-block,10,0,,
|
||||||
|
|
|
|
@ -719,12 +719,12 @@ id,identifier,generation_id,type_id,power,pp,accuracy,priority,target_id,damage_
|
||||||
718,multi-attack,7,1,120,10,100,0,10,2,269,,,,
|
718,multi-attack,7,1,120,10,100,0,10,2,269,,,,
|
||||||
719,10-000-000-volt-thunderbolt,7,13,195,1,,0,10,3,1,,,,
|
719,10-000-000-volt-thunderbolt,7,13,195,1,,0,10,3,1,,,,
|
||||||
720,mind-blown,7,10,150,5,100,0,9,3,420,,,,
|
720,mind-blown,7,10,150,5,100,0,9,3,420,,,,
|
||||||
721,plasma-fists,7,13,100,15,100,0,10,2,1,,,,
|
721,plasma-fists,7,13,100,15,100,0,10,2,417,,,,
|
||||||
722,photon-geyser,7,14,100,5,100,0,10,3,1,,,,
|
722,photon-geyser,7,14,100,5,100,0,10,3,1,,,,
|
||||||
723,light-that-burns-the-sky,7,14,200,1,,0,10,3,416,,,,
|
723,light-that-burns-the-sky,7,14,200,1,,0,10,3,416,,,,
|
||||||
724,searing-sunraze-smash,7,9,200,1,,0,10,2,411,,,,
|
724,searing-sunraze-smash,7,9,200,1,,0,10,2,411,,,,
|
||||||
725,menacing-moonraze-maelstrom,7,8,200,1,,0,10,3,411,,,,
|
725,menacing-moonraze-maelstrom,7,8,200,1,,0,10,3,411,,,,
|
||||||
726,lets-snuggle-forever,7,18,190,1,,0,10,2,417,,,,
|
726,lets-snuggle-forever,7,18,190,1,,0,10,2,1,,,,
|
||||||
727,splintered-stormshards,7,6,190,1,,0,10,2,418,,,,
|
727,splintered-stormshards,7,6,190,1,,0,10,2,418,,,,
|
||||||
728,clangorous-soulblaze,7,16,185,1,,0,11,3,419,100,,,
|
728,clangorous-soulblaze,7,16,185,1,,0,11,3,419,100,,,
|
||||||
729,zippy-zap,7,13,80,10,100,2,10,2,1,100,,,
|
729,zippy-zap,7,13,80,10,100,2,10,2,1,100,,,
|
||||||
|
|
|
|
@ -897,133 +897,133 @@ id,identifier,species_id,height,weight,base_experience,order,is_default
|
||||||
896,glastrier,896,22,8000,290,1088,1
|
896,glastrier,896,22,8000,290,1088,1
|
||||||
897,spectrier,897,20,445,290,1089,1
|
897,spectrier,897,20,445,290,1089,1
|
||||||
898,calyrex,898,11,77,250,1090,1
|
898,calyrex,898,11,77,250,1090,1
|
||||||
899,wyrdeer,899,18,951,,,1
|
899,wyrdeer,899,18,951,263,,1
|
||||||
900,kleavor,900,18,890,,,1
|
900,kleavor,900,18,890,175,,1
|
||||||
901,ursaluna,901,24,2900,,,1
|
901,ursaluna,901,24,2900,275,,1
|
||||||
902,basculegion-male,902,30,1100,,,1
|
902,basculegion-male,902,30,1100,265,,1
|
||||||
903,sneasler,903,13,430,,,1
|
903,sneasler,903,13,430,102,,1
|
||||||
904,overqwil,904,25,605,,,1
|
904,overqwil,904,25,605,179,,1
|
||||||
905,enamorus-incarnate,905,16,480,,,1
|
905,enamorus-incarnate,905,16,480,116,,1
|
||||||
906,sprigatito,906,4,41,,906,1
|
906,sprigatito,906,4,41,62,906,1
|
||||||
907,floragato,907,9,122,,907,1
|
907,floragato,907,9,122,144,907,1
|
||||||
908,meowscarada,908,15,312,,908,1
|
908,meowscarada,908,15,312,265,908,1
|
||||||
909,fuecoco,909,4,98,,909,1
|
909,fuecoco,909,4,98,62,909,1
|
||||||
910,crocalor,910,10,307,,910,1
|
910,crocalor,910,10,307,144,910,1
|
||||||
911,skeledirge,911,16,3265,,911,1
|
911,skeledirge,911,16,3265,265,911,1
|
||||||
912,quaxly,912,5,61,,912,1
|
912,quaxly,912,5,61,62,912,1
|
||||||
913,quaxwell,913,12,215,,913,1
|
913,quaxwell,913,12,215,144,913,1
|
||||||
914,quaquaval,914,18,619,,914,1
|
914,quaquaval,914,18,619,265,914,1
|
||||||
915,lechonk,915,5,102,,915,1
|
915,lechonk,915,5,102,51,915,1
|
||||||
916,oinkologne,916,10,1200,,916,1
|
916,oinkologne,916,10,1200,171,916,1
|
||||||
917,tarountula,917,3,40,,918,1
|
917,tarountula,917,3,40,42,918,1
|
||||||
918,spidops,918,10,165,,919,1
|
918,spidops,918,10,165,141,919,1
|
||||||
919,nymble,919,2,10,,920,1
|
919,nymble,919,2,10,42,920,1
|
||||||
920,lokix,920,10,175,,921,1
|
920,lokix,920,10,175,158,921,1
|
||||||
921,pawmi,921,3,25,,954,1
|
921,pawmi,921,3,25,48,954,1
|
||||||
922,pawmo,922,4,65,,955,1
|
922,pawmo,922,4,65,123,955,1
|
||||||
923,pawmot,923,9,410,,956,1
|
923,pawmot,923,9,410,245,956,1
|
||||||
924,tandemaus,924,3,18,,945,1
|
924,tandemaus,924,3,18,61,945,1
|
||||||
925,maushold,925,3,23,,946,1
|
925,maushold,925,3,23,165,946,1
|
||||||
926,fidough,926,3,109,,970,1
|
926,fidough,926,3,109,62,970,1
|
||||||
927,dachsbun,927,5,149,,971,1
|
927,dachsbun,927,5,149,167,971,1
|
||||||
928,smoliv,928,3,65,,935,1
|
928,smoliv,928,3,65,52,935,1
|
||||||
929,dolliv,929,6,119,,936,1
|
929,dolliv,929,6,119,124,936,1
|
||||||
930,arboliva,930,14,482,,937,1
|
930,arboliva,930,14,482,255,937,1
|
||||||
931,squawkabilly,931,6,24,,960,1
|
931,squawkabilly,931,6,24,146,960,1
|
||||||
932,nacli,932,4,160,,963,1
|
932,nacli,932,4,160,56,963,1
|
||||||
933,naclstack,933,6,1050,,964,1
|
933,naclstack,933,6,1050,124,964,1
|
||||||
934,garganacl,934,23,2400,,965,1
|
934,garganacl,934,23,2400,250,965,1
|
||||||
935,charcadet,935,6,105,,1003,1
|
935,charcadet,935,6,105,51,1003,1
|
||||||
936,armarouge,936,15,850,,1004,1
|
936,armarouge,936,15,850,263,1004,1
|
||||||
937,ceruledge,937,16,620,,1005,1
|
937,ceruledge,937,16,620,263,1005,1
|
||||||
938,tadbulb,938,3,4,,940,1
|
938,tadbulb,938,3,4,54,940,1
|
||||||
939,bellibolt,939,12,1130,,941,1
|
939,bellibolt,939,12,1130,173,941,1
|
||||||
940,wattrel,940,4,36,,957,1
|
940,wattrel,940,4,36,56,957,1
|
||||||
941,kilowattrel,941,14,386,,958,1
|
941,kilowattrel,941,14,386,172,958,1
|
||||||
942,maschiff,942,5,160,,972,1
|
942,maschiff,942,5,160,68,972,1
|
||||||
943,mabosstiff,943,11,610,,973,1
|
943,mabosstiff,943,11,610,177,973,1
|
||||||
944,shroodle,944,2,7,,968,1
|
944,shroodle,944,2,7,58,968,1
|
||||||
945,grafaiai,945,7,272,,969,1
|
945,grafaiai,945,7,272,170,969,1
|
||||||
946,bramblin,946,6,6,,974,1
|
946,bramblin,946,6,6,55,974,1
|
||||||
947,brambleghast,947,12,60,,975,1
|
947,brambleghast,947,12,60,168,975,1
|
||||||
948,toedscool,948,9,330,,1006,1
|
948,toedscool,948,9,330,67,1006,1
|
||||||
949,toedscruel,949,19,580,,1007,1
|
949,toedscruel,949,19,580,180,1007,1
|
||||||
950,klawf,950,13,790,,962,1
|
950,klawf,950,13,790,158,962,1
|
||||||
951,capsakid,951,3,30,,938,1
|
951,capsakid,951,3,30,61,938,1
|
||||||
952,scovillain,952,9,150,,939,1
|
952,scovillain,952,9,150,170,939,1
|
||||||
953,rellor,953,2,10,,922,1
|
953,rellor,953,2,10,54,922,1
|
||||||
954,rabsca,954,3,35,,923,1
|
954,rabsca,954,3,35,165,923,1
|
||||||
955,flittle,955,2,15,,926,1
|
955,flittle,955,2,15,51,926,1
|
||||||
956,espathra,956,19,900,,927,1
|
956,espathra,956,19,900,168,927,1
|
||||||
957,tinkatink,957,4,89,,1000,1
|
957,tinkatink,957,4,89,59,1000,1
|
||||||
958,tinkatuff,958,7,591,,1001,1
|
958,tinkatuff,958,7,591,133,1001,1
|
||||||
959,tinkaton,959,7,1128,,1002,1
|
959,tinkaton,959,7,1128,253,1002,1
|
||||||
960,wiglett,960,12,18,,929,1
|
960,wiglett,960,12,18,49,929,1
|
||||||
961,wugtrio,961,12,54,,930,1
|
961,wugtrio,961,12,54,149,930,1
|
||||||
962,bombirdier,962,15,429,,959,1
|
962,bombirdier,962,15,429,243,959,1
|
||||||
963,finizen,963,13,602,,933,1
|
963,finizen,963,13,602,63,933,1
|
||||||
964,palafin,964,13,602,,934,1
|
964,palafin,964,13,602,160,934,1
|
||||||
965,varoom,965,10,350,,942,1
|
965,varoom,965,10,350,60,942,1
|
||||||
966,revavroom,966,18,1200,,943,1
|
966,revavroom,966,18,1200,175,943,1
|
||||||
967,cyclizar,967,16,630,,953,1
|
967,cyclizar,967,16,630,175,953,1
|
||||||
968,orthworm,968,25,3100,,944,1
|
968,orthworm,968,25,3100,240,944,1
|
||||||
969,glimmet,969,7,80,,966,1
|
969,glimmet,969,7,80,70,966,1
|
||||||
970,glimmora,970,15,450,,967,1
|
970,glimmora,970,15,450,184,967,1
|
||||||
971,greavard,971,6,350,,924,1
|
971,greavard,971,6,350,58,924,1
|
||||||
972,houndstone,972,20,150,,925,1
|
972,houndstone,972,20,150,171,925,1
|
||||||
973,flamigo,973,16,370,,961,1
|
973,flamigo,973,16,370,175,961,1
|
||||||
974,cetoddle,974,12,450,,947,1
|
974,cetoddle,974,12,450,67,947,1
|
||||||
975,cetitan,975,45,7000,,948,1
|
975,cetitan,975,45,7000,182,948,1
|
||||||
976,veluza,976,25,900,,932,1
|
976,veluza,976,25,900,167,932,1
|
||||||
977,dondozo,977,120,2200,,931,1
|
977,dondozo,977,120,2200,265,931,1
|
||||||
978,tatsugiri,978,3,80,,952,1
|
978,tatsugiri,978,3,80,166,952,1
|
||||||
979,annihilape,979,12,560,,1010,1
|
979,annihilape,979,12,560,268,1010,1
|
||||||
980,clodsire,980,18,2230,,1009,1
|
980,clodsire,980,18,2230,151,1009,1
|
||||||
981,farigiraf,981,32,1600,,928,1
|
981,farigiraf,981,32,1600,260,928,1
|
||||||
982,dudunsparce,982,36,392,,917,1
|
982,dudunsparce,982,36,392,182,917,1
|
||||||
983,kingambit,983,20,1200,,1008,1
|
983,kingambit,983,20,1200,275,1008,1
|
||||||
984,great-tusk,984,22,3200,,978,1
|
984,great-tusk,984,22,3200,285,978,1
|
||||||
985,scream-tail,985,12,80,,982,1
|
985,scream-tail,985,12,80,285,982,1
|
||||||
986,brute-bonnet,986,12,210,,979,1
|
986,brute-bonnet,986,12,210,285,979,1
|
||||||
987,flutter-mane,987,14,40,,983,1
|
987,flutter-mane,987,14,40,285,983,1
|
||||||
988,slither-wing,988,32,920,,984,1
|
988,slither-wing,988,32,920,285,984,1
|
||||||
989,sandy-shocks,989,23,600,,981,1
|
989,sandy-shocks,989,23,600,285,981,1
|
||||||
990,iron-treads,990,9,2400,,986,1
|
990,iron-treads,990,9,2400,285,986,1
|
||||||
991,iron-bundle,991,6,110,,992,1
|
991,iron-bundle,991,6,110,285,992,1
|
||||||
992,iron-hands,992,18,3807,,989,1
|
992,iron-hands,992,18,3807,285,989,1
|
||||||
993,iron-jugulis,993,13,1110,,990,1
|
993,iron-jugulis,993,13,1110,285,990,1
|
||||||
994,iron-moth,994,12,360,,988,1
|
994,iron-moth,994,12,360,285,988,1
|
||||||
995,iron-thorns,995,16,3030,,991,1
|
995,iron-thorns,995,16,3030,285,991,1
|
||||||
996,frigibax,996,5,170,,949,1
|
996,frigibax,996,5,170,64,949,1
|
||||||
997,arctibax,997,8,300,,950,1
|
997,arctibax,997,8,300,148,950,1
|
||||||
998,baxcalibur,998,21,2100,,951,1
|
998,baxcalibur,998,21,2100,300,951,1
|
||||||
999,gimmighoul,999,3,50,,976,1
|
999,gimmighoul,999,3,50,60,976,1
|
||||||
1000,gholdengo,1000,12,300,,977,1
|
1000,gholdengo,1000,12,300,275,977,1
|
||||||
1001,wo-chien,1001,15,742,,996,1
|
1001,wo-chien,1001,15,742,285,996,1
|
||||||
1002,chien-pao,1002,19,1522,,995,1
|
1002,chien-pao,1002,19,1522,285,995,1
|
||||||
1003,ting-lu,1003,27,6997,,994,1
|
1003,ting-lu,1003,27,6997,285,994,1
|
||||||
1004,chi-yu,1004,4,49,,997,1
|
1004,chi-yu,1004,4,49,285,997,1
|
||||||
1005,roaring-moon,1005,20,3800,,985,1
|
1005,roaring-moon,1005,20,3800,295,985,1
|
||||||
1006,iron-valiant,1006,14,350,,993,1
|
1006,iron-valiant,1006,14,350,295,993,1
|
||||||
1007,koraidon,1007,25,3030,,998,1
|
1007,koraidon,1007,25,3030,335,998,1
|
||||||
1008,miraidon,1008,35,2400,,999,1
|
1008,miraidon,1008,35,2400,335,999,1
|
||||||
1009,walking-wake,1009,35,2800,,1093,1
|
1009,walking-wake,1009,35,2800,295,1093,1
|
||||||
1010,iron-leaves,1010,15,1250,,1094,1
|
1010,iron-leaves,1010,15,1250,295,1094,1
|
||||||
1011,dipplin,1011,4,97,,1095,1
|
1011,dipplin,1011,4,97,170,1095,1
|
||||||
1012,poltchageist,1012,1,11,,1096,1
|
1012,poltchageist,1012,1,11,62,1096,1
|
||||||
1013,sinistcha,1013,2,22,,1097,1
|
1013,sinistcha,1013,2,22,178,1097,1
|
||||||
1014,okidogi,1014,18,922,,1098,1
|
1014,okidogi,1014,18,922,278,1098,1
|
||||||
1015,munkidori,1015,10,122,,1099,1
|
1015,munkidori,1015,10,122,278,1099,1
|
||||||
1016,fezandipiti,1016,14,301,,1100,1
|
1016,fezandipiti,1016,14,301,278,1100,1
|
||||||
1017,ogerpon,1017,12,398,,1101,1
|
1017,ogerpon,1017,12,398,275,1101,1
|
||||||
1018,archaludon,1018,20,600,,1102,1
|
1018,archaludon,1018,20,600,300,1102,1
|
||||||
1019,hydrapple,1019,18,930,,1103,1
|
1019,hydrapple,1019,18,930,270,1103,1
|
||||||
1020,gouging-fire,1020,35,5900,,1104,1
|
1020,gouging-fire,1020,35,5900,295,1104,1
|
||||||
1021,raging-bolt,1021,52,4800,,1105,1
|
1021,raging-bolt,1021,52,4800,295,1105,1
|
||||||
1022,iron-boulder,1022,15,1625,,1106,1
|
1022,iron-boulder,1022,15,1625,295,1106,1
|
||||||
1023,iron-crown,1023,16,1560,,1107,1
|
1023,iron-crown,1023,16,1560,295,1107,1
|
||||||
1024,terapagos,1024,2,65,,1108,1
|
1024,terapagos,1024,2,65,90,1108,1
|
||||||
1025,pecharunt,1025,3,3,,1109,1
|
1025,pecharunt,1025,3,3,300,1109,1
|
||||||
10001,deoxys-attack,386,17,608,270,515,0
|
10001,deoxys-attack,386,17,608,270,515,0
|
||||||
10002,deoxys-defense,386,17,608,270,516,0
|
10002,deoxys-defense,386,17,608,270,516,0
|
||||||
10003,deoxys-speed,386,17,608,270,517,0
|
10003,deoxys-speed,386,17,608,270,517,0
|
||||||
|
|
|
|
@ -183572,3 +183572,37 @@ gives rise to the budding of fresh life across Hisui."
|
||||||
1007,41,9,"This Pokémon resembles Cyclizar, but it is far burlier and more ferocious. Nothing is known about its ecology or other features."
|
1007,41,9,"This Pokémon resembles Cyclizar, but it is far burlier and more ferocious. Nothing is known about its ecology or other features."
|
||||||
1008,40,9,"Much remains unknown about this creature. It resembles Cyclizar, but it is far more ruthless and powerful."
|
1008,40,9,"Much remains unknown about this creature. It resembles Cyclizar, but it is far more ruthless and powerful."
|
||||||
1008,41,9,"This seems to be the Iron Serpent mentioned in an old book. The Iron Serpent is said to have turned the land to ash with its lightning."
|
1008,41,9,"This seems to be the Iron Serpent mentioned in an old book. The Iron Serpent is said to have turned the land to ash with its lightning."
|
||||||
|
1009,40,9,"This ferocious creature is shrouded in mystery. It's named after an aquatic monster mentioned in an old expedition journal."
|
||||||
|
1009,41,9,"It resembles an illustration published in a paranormal magazine, said to be a depiction of a super-ancient Suicune."
|
||||||
|
1010,40,9,"Many of its physical characteristics match those of a Virizion from the future that was covered in a paranormal magazine."
|
||||||
|
1010,41,9,"According to the few eyewitness accounts that exist, it used its shining blades to julienne large trees and boulders."
|
||||||
|
1011,40,9,"Dipplin is two creatures in one Pokémon. Its evolution was triggered by a special apple grown only in one place."
|
||||||
|
1011,41,9,"The head sticking out belongs to the fore-wyrm, while the tail belongs to the core-wyrm. The two share one apple and help each other out."
|
||||||
|
1012,40,9,"Supposedly, the regrets of a tea ceremony master who died before perfecting his craft lingered in some matcha and became a Pokémon."
|
||||||
|
1012,41,9,"Poltchageist looks like a regional form of Sinistea, but it was recently discovered that the two Pokémon are entirely unrelated."
|
||||||
|
1013,40,9,"It pretends to be tea, trying to fool people into drinking it so it can drain their life-force. Its ruse is generally unsuccessful."
|
||||||
|
1013,41,9,"It prefers cool, dark places, such as the back of a shelf or the space beneath a home's floorboards. It wanders in search of prey after sunset."
|
||||||
|
1014,40,9,"After all its muscles were stimulated by the toxic chain around its neck, Okidogi transformed and gained a powerful physique."
|
||||||
|
1014,41,9,"Okidogi is a ruffian with a short temper. It can pulverize anything by swinging around the chain on its neck."
|
||||||
|
1015,40,9,"The chain is made from toxins that enhance capabilities. It stimulated Munkidori's brain and caused the Pokémon's psychic powers to bloom."
|
||||||
|
1015,41,9,"Munkidori keeps itself somewhere safe while it toys with its foes, using psychokinesis to induce intense dizziness."
|
||||||
|
1016,40,9,"Fezandipiti owes its beautiful looks and lovely voice to the toxic stimulants emanating from the chain wrapped around its body."
|
||||||
|
1016,41,9,"Fezandipiti beats its glossy wings to scatter pheromones that captivate people and Pokémon."
|
||||||
|
1017,40,9,"This Pokémon's type changes based on which mask it's wearing. It confounds its enemies with nimble movements and kicks."
|
||||||
|
1017,41,9,"This mischief-loving Pokémon is full of curiosity. It battles by drawing out the type-based energy contained within its masks."
|
||||||
|
1018,40,9,"It gathers static electricity from its surroundings. The beams it launches when down on all fours are tremendously powerful."
|
||||||
|
1018,41,9,"It digs holes on mountains, searching for food. It’s so durable that being caught in a cave-in won’t faze it."
|
||||||
|
1019,40,9,"Seven syrpents live inside an apple made of syrup. The syrpent in the center is the commander."
|
||||||
|
1019,41,9,"These capricious syrpents have banded together. On the rare occasion that their moods align, their true power is unleashed."
|
||||||
|
1020,40,9,"There are scant few reports of this creature being sighted. One short video shows it rampaging and spouting pillars of flame."
|
||||||
|
1020,41,9,"It resembles an eerie Pokémon once shown in a paranormal magazine. That Pokémon was said to be an Entei regenerated from a fossil."
|
||||||
|
1021,40,9,"It's said to incinerate everything around it with lightning launched from its fur. Very little is known about this creature."
|
||||||
|
1021,41,9,"It bears resemblance to a Pokémon that became a hot topic for a short while after a paranormal magazine touted it as Raikou's ancestor."
|
||||||
|
1022,40,9,"It resembles a Pokémon described in a dubious magazine as a Terrakion that had been modified by an evil organization."
|
||||||
|
1022,41,9,"It was named after a mysterious object recorded in an old book. Its body seems to be metallic."
|
||||||
|
1023,40,9,"It resembles a mysterious object introduced in a paranormal magazine as a cutting-edge weapon shaped like a Cobalion."
|
||||||
|
1023,41,9,"There was supposedly an incident in which it launched shining blades to cut everything around it to pieces. Little else is known about it."
|
||||||
|
1024,40,9,"Terapagos protects itself using its power to transform energy into hard crystals. This Pokémon is the source of the Terastal phenomenon."
|
||||||
|
1024,41,9,"It’s thought that this Pokémon lived in ancient Paldea until it got caught in seismic shifts and went extinct."
|
||||||
|
1025,40,9,"It feeds others toxic mochi that draw out desires and capabilities. Those who eat the mochi fall under Pecharunt’s control, chained to its will."
|
||||||
|
1025,41,9,"Its peach-shaped shell serves as storage for a potent poison. It makes poisonous mochi and serves them to people and Pokémon."
|
||||||
|
|
Can't render this file because it is too large.
|
|
@ -11116,7 +11116,7 @@ pokemon_species_id,local_language_id,name,genus
|
||||||
1011,6,Sirapfel,
|
1011,6,Sirapfel,
|
||||||
1011,7,Dipplin,
|
1011,7,Dipplin,
|
||||||
1011,8,Dipplin,
|
1011,8,Dipplin,
|
||||||
1011,9,Dipplin,
|
1011,9,Dipplin,Candy Apple Pokémon
|
||||||
1011,11,カミッチュ,
|
1011,11,カミッチュ,
|
||||||
1011,12,裹蜜虫,
|
1011,12,裹蜜虫,
|
||||||
1012,1,チャデス,
|
1012,1,チャデス,
|
||||||
|
@ -11126,7 +11126,7 @@ pokemon_species_id,local_language_id,name,genus
|
||||||
1012,6,Mortcha,
|
1012,6,Mortcha,
|
||||||
1012,7,Poltchageist,
|
1012,7,Poltchageist,
|
||||||
1012,8,Poltchageist,
|
1012,8,Poltchageist,
|
||||||
1012,9,Poltchageist,
|
1012,9,Poltchageist,Matcha Pokémon
|
||||||
1012,11,チャデス,
|
1012,11,チャデス,
|
||||||
1012,12,斯魔茶,
|
1012,12,斯魔茶,
|
||||||
1013,1,ヤバソチャ,
|
1013,1,ヤバソチャ,
|
||||||
|
@ -11136,7 +11136,7 @@ pokemon_species_id,local_language_id,name,genus
|
||||||
1013,6,Fatalitcha,
|
1013,6,Fatalitcha,
|
||||||
1013,7,Sinistcha,
|
1013,7,Sinistcha,
|
||||||
1013,8,Sinistcha,
|
1013,8,Sinistcha,
|
||||||
1013,9,Sinistcha,
|
1013,9,Sinistcha,Matcha Pokémon
|
||||||
1013,11,ヤバソチャ,
|
1013,11,ヤバソチャ,
|
||||||
1013,12,来悲粗茶,
|
1013,12,来悲粗茶,
|
||||||
1014,1,イイネイヌ,
|
1014,1,イイネイヌ,
|
||||||
|
@ -11146,7 +11146,7 @@ pokemon_species_id,local_language_id,name,genus
|
||||||
1014,6,Boninu,
|
1014,6,Boninu,
|
||||||
1014,7,Okidogi,
|
1014,7,Okidogi,
|
||||||
1014,8,Okidogi,
|
1014,8,Okidogi,
|
||||||
1014,9,Okidogi,
|
1014,9,Okidogi,Retainer Pokémon
|
||||||
1014,11,イイネイヌ,
|
1014,11,イイネイヌ,
|
||||||
1014,12,够赞狗,
|
1014,12,够赞狗,
|
||||||
1015,1,マシマシラ,
|
1015,1,マシマシラ,
|
||||||
|
@ -11156,7 +11156,7 @@ pokemon_species_id,local_language_id,name,genus
|
||||||
1015,6,Benesaru,
|
1015,6,Benesaru,
|
||||||
1015,7,Munkidori,
|
1015,7,Munkidori,
|
||||||
1015,8,Munkidori,
|
1015,8,Munkidori,
|
||||||
1015,9,Munkidori,
|
1015,9,Munkidori,Retainer Pokémon
|
||||||
1015,11,マシマシラ,
|
1015,11,マシマシラ,
|
||||||
1015,12,愿增猿,
|
1015,12,愿增猿,
|
||||||
1016,1,キチキギス,
|
1016,1,キチキギス,
|
||||||
|
@ -11166,7 +11166,7 @@ pokemon_species_id,local_language_id,name,genus
|
||||||
1016,6,Beatori,
|
1016,6,Beatori,
|
||||||
1016,7,Fezandipiti,
|
1016,7,Fezandipiti,
|
||||||
1016,8,Fezandipiti,
|
1016,8,Fezandipiti,
|
||||||
1016,9,Fezandipiti,
|
1016,9,Fezandipiti,Retainer Pokémon
|
||||||
1016,11,キチキギス,
|
1016,11,キチキギス,
|
||||||
1016,12,吉雉鸡,
|
1016,12,吉雉鸡,
|
||||||
1017,1,オーガポン,
|
1017,1,オーガポン,
|
||||||
|
@ -11176,7 +11176,7 @@ pokemon_species_id,local_language_id,name,genus
|
||||||
1017,6,Ogerpon,
|
1017,6,Ogerpon,
|
||||||
1017,7,Ogerpon,
|
1017,7,Ogerpon,
|
||||||
1017,8,Ogerpon,
|
1017,8,Ogerpon,
|
||||||
1017,9,Ogerpon,
|
1017,9,Ogerpon,Mask Pokémon
|
||||||
1017,11,オーガポン,
|
1017,11,オーガポン,
|
||||||
1017,12,厄诡椪,
|
1017,12,厄诡椪,
|
||||||
1018,1,ブリジュラス,ごうきんポケモン
|
1018,1,ブリジュラス,ごうきんポケモン
|
||||||
|
@ -11206,7 +11206,7 @@ pokemon_species_id,local_language_id,name,genus
|
||||||
1020,6,Keilflamme,
|
1020,6,Keilflamme,
|
||||||
1020,7,Flamariete,
|
1020,7,Flamariete,
|
||||||
1020,8,Vampeaguzze,
|
1020,8,Vampeaguzze,
|
||||||
1020,9,Gouging Fire,Paladox Pokémon
|
1020,9,Gouging Fire,Paradox Pokémon
|
||||||
1020,11,ウガツホムラ,パラドックスポケモン
|
1020,11,ウガツホムラ,パラドックスポケモン
|
||||||
1020,12,破空焰,
|
1020,12,破空焰,
|
||||||
1021,1,タケルライコ,パラドックスポケモン
|
1021,1,タケルライコ,パラドックスポケモン
|
||||||
|
@ -11216,7 +11216,7 @@ pokemon_species_id,local_language_id,name,genus
|
||||||
1021,6,Furienblitz,
|
1021,6,Furienblitz,
|
||||||
1021,7,Electrofuria,
|
1021,7,Electrofuria,
|
||||||
1021,8,Furiatonante,
|
1021,8,Furiatonante,
|
||||||
1021,9,Raging Bolt,Paladox Pokémon
|
1021,9,Raging Bolt,Paradox Pokémon
|
||||||
1021,11,タケルライコ,パラドックスポケモン
|
1021,11,タケルライコ,パラドックスポケモン
|
||||||
1021,12,猛雷鼓,
|
1021,12,猛雷鼓,
|
||||||
1022,1,テツノイワオ,パラドックスポケモン
|
1022,1,テツノイワオ,パラドックスポケモン
|
||||||
|
@ -11226,7 +11226,7 @@ pokemon_species_id,local_language_id,name,genus
|
||||||
1022,6,Eisenfels,
|
1022,6,Eisenfels,
|
||||||
1022,7,Ferromole,
|
1022,7,Ferromole,
|
||||||
1022,8,Massoferreo,
|
1022,8,Massoferreo,
|
||||||
1022,9,Iron Boulder,Paladox Pokémon
|
1022,9,Iron Boulder,Paradox Pokémon
|
||||||
1022,11,テツノイワオ,パラドックスポケモン
|
1022,11,テツノイワオ,パラドックスポケモン
|
||||||
1022,12,鐵磐岩,
|
1022,12,鐵磐岩,
|
||||||
1023,1,テツノカシラ,パラドックスポケモン
|
1023,1,テツノカシラ,パラドックスポケモン
|
||||||
|
@ -11236,7 +11236,7 @@ pokemon_species_id,local_language_id,name,genus
|
||||||
1023,6,Eisenhaupt,
|
1023,6,Eisenhaupt,
|
||||||
1023,7,Ferrotesta,
|
1023,7,Ferrotesta,
|
||||||
1023,8,Capoferreo,
|
1023,8,Capoferreo,
|
||||||
1023,9,Iron Crown,Paladox Pokémon
|
1023,9,Iron Crown,Paradox Pokémon
|
||||||
1023,11,テツノカシラ,パラドックスポケモン
|
1023,11,テツノカシラ,パラドックスポケモン
|
||||||
1023,12,鐵頭殼,
|
1023,12,鐵頭殼,
|
||||||
1024,1,テラパゴス,テラスタルポケモン
|
1024,1,テラパゴス,テラスタルポケモン
|
||||||
|
|
|
|
@ -179,6 +179,16 @@ type_id,local_language_id,name
|
||||||
18,9,Fairy
|
18,9,Fairy
|
||||||
18,11,フェアリー
|
18,11,フェアリー
|
||||||
18,12,妖精
|
18,12,妖精
|
||||||
|
19,1,ステラ
|
||||||
|
19,2, Stella
|
||||||
|
19,3, 스텔라
|
||||||
|
19,4,星晶
|
||||||
|
19,5,Stellaire
|
||||||
|
19,6,Stellar
|
||||||
|
19,7,Astral
|
||||||
|
19,8,Astrale
|
||||||
|
19,9,Stellar
|
||||||
|
19,11,ステラ
|
||||||
10001,1,???
|
10001,1,???
|
||||||
10001,3,???
|
10001,3,???
|
||||||
10001,4,???
|
10001,4,???
|
||||||
|
|
|
|
@ -17,5 +17,6 @@ id,identifier,generation_id,damage_class_id
|
||||||
16,dragon,1,3
|
16,dragon,1,3
|
||||||
17,dark,2,3
|
17,dark,2,3
|
||||||
18,fairy,6,
|
18,fairy,6,
|
||||||
|
19,stellar,9,
|
||||||
10001,unknown,2,
|
10001,unknown,2,
|
||||||
10002,shadow,3,
|
10002,shadow,3,
|
||||||
|
|
|
42
default.nix
Normal file
42
default.nix
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
with import <nixpkgs> { };
|
||||||
|
|
||||||
|
let
|
||||||
|
pythonPackages = python3Packages;
|
||||||
|
in pkgs.mkShell rec {
|
||||||
|
name = "impurePythonEnv";
|
||||||
|
venvDir = "./.venv";
|
||||||
|
buildInputs = [
|
||||||
|
python310Packages.python
|
||||||
|
python310Packages.venvShellHook
|
||||||
|
|
||||||
|
# python310Packages.coverage
|
||||||
|
# python310Packages.python-mimeparse
|
||||||
|
# python310Packages.python-dateutil
|
||||||
|
# python310Packages.drf-spectacular
|
||||||
|
# python310Packages.djangorestframework
|
||||||
|
# python310Packages.django-redis
|
||||||
|
# python310Packages.django-cors-headers
|
||||||
|
|
||||||
|
# Required dependancies
|
||||||
|
black
|
||||||
|
taglib
|
||||||
|
openssl
|
||||||
|
git
|
||||||
|
libxml2
|
||||||
|
libxslt
|
||||||
|
libzip
|
||||||
|
zlib
|
||||||
|
];
|
||||||
|
|
||||||
|
# Run this command, only after creating the virtual environment
|
||||||
|
postVenvCreation = ''
|
||||||
|
unset SOURCE_DATE_EPOCH
|
||||||
|
pip install -r requirements.txt
|
||||||
|
'';
|
||||||
|
|
||||||
|
postShellHook = ''
|
||||||
|
# allow pip to install wheels
|
||||||
|
unset SOURCE_DATE_EPOCH
|
||||||
|
'';
|
||||||
|
|
||||||
|
}
|
9157
openapi.yml
Normal file
9157
openapi.yml
Normal file
File diff suppressed because it is too large
Load diff
3183
pokemon_v2/README.md
3183
pokemon_v2/README.md
File diff suppressed because it is too large
Load diff
|
@ -4,6 +4,9 @@ from rest_framework.response import Response
|
||||||
from rest_framework.views import APIView
|
from rest_framework.views import APIView
|
||||||
from django.shortcuts import get_object_or_404
|
from django.shortcuts import get_object_or_404
|
||||||
from django.http import Http404
|
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
|
||||||
|
|
||||||
from .models import *
|
from .models import *
|
||||||
from .serializers import *
|
from .serializers import *
|
||||||
|
@ -38,6 +41,25 @@ class NameOrIdRetrieval:
|
||||||
idPattern = re.compile(r"^-?[0-9]+$")
|
idPattern = re.compile(r"^-?[0-9]+$")
|
||||||
namePattern = re.compile(r"^[0-9A-Za-z\-\+]+$")
|
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(
|
||||||
|
name="id",
|
||||||
|
description="This parameter can be a string or an integer.",
|
||||||
|
location=OpenApiParameter.PATH,
|
||||||
|
type=OpenApiTypes.STR,
|
||||||
|
),
|
||||||
|
]
|
||||||
|
)
|
||||||
def get_object(self):
|
def get_object(self):
|
||||||
queryset = self.get_queryset()
|
queryset = self.get_queryset()
|
||||||
queryset = self.filter_queryset(queryset)
|
queryset = self.filter_queryset(queryset)
|
||||||
|
@ -70,299 +92,879 @@ class PokeapiCommonViewset(
|
||||||
##########
|
##########
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema(
|
||||||
|
description="Abilities provide passive effects for Pokémon in battle or in the overworld. Pokémon have multiple possible abilities but can have only one ability at a time. Check out [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Ability) for greater detail.",
|
||||||
|
tags=["pokemon"],
|
||||||
|
)
|
||||||
class AbilityResource(PokeapiCommonViewset):
|
class AbilityResource(PokeapiCommonViewset):
|
||||||
queryset = Ability.objects.all()
|
queryset = Ability.objects.all()
|
||||||
serializer_class = AbilityDetailSerializer
|
serializer_class = AbilityDetailSerializer
|
||||||
list_serializer_class = AbilitySummarySerializer
|
list_serializer_class = AbilitySummarySerializer
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema(
|
||||||
|
description="Berries are small fruits that can provide HP and status condition restoration, stat enhancement, and even damage negation when eaten by Pokémon. Check out [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Berry) for greater detail.",
|
||||||
|
tags=["berries"],
|
||||||
|
summary="Get a berry",
|
||||||
|
)
|
||||||
|
@extend_schema_view(
|
||||||
|
list=extend_schema(
|
||||||
|
summary="List berries",
|
||||||
|
)
|
||||||
|
)
|
||||||
class BerryResource(PokeapiCommonViewset):
|
class BerryResource(PokeapiCommonViewset):
|
||||||
queryset = Berry.objects.all()
|
queryset = Berry.objects.all()
|
||||||
serializer_class = BerryDetailSerializer
|
serializer_class = BerryDetailSerializer
|
||||||
list_serializer_class = BerrySummarySerializer
|
list_serializer_class = BerrySummarySerializer
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema(
|
||||||
|
description="Berries can be soft or hard. Check out [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Category:Berries_by_firmness) for greater detail.",
|
||||||
|
tags=["berries"],
|
||||||
|
summary="Get berry by firmness",
|
||||||
|
)
|
||||||
|
@extend_schema_view(
|
||||||
|
list=extend_schema(
|
||||||
|
summary="List berry firmness",
|
||||||
|
)
|
||||||
|
)
|
||||||
class BerryFirmnessResource(PokeapiCommonViewset):
|
class BerryFirmnessResource(PokeapiCommonViewset):
|
||||||
queryset = BerryFirmness.objects.all()
|
queryset = BerryFirmness.objects.all()
|
||||||
serializer_class = BerryFirmnessDetailSerializer
|
serializer_class = BerryFirmnessDetailSerializer
|
||||||
list_serializer_class = BerryFirmnessSummarySerializer
|
list_serializer_class = BerryFirmnessSummarySerializer
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema(
|
||||||
|
description="Flavors determine whether a Pokémon will benefit or suffer from eating a berry based on their **nature**. Check out [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Flavor) for greater detail.",
|
||||||
|
summary="Get berries by flavor",
|
||||||
|
tags=["berries"],
|
||||||
|
)
|
||||||
|
@extend_schema_view(
|
||||||
|
list=extend_schema(
|
||||||
|
summary="List berry flavors",
|
||||||
|
)
|
||||||
|
)
|
||||||
class BerryFlavorResource(PokeapiCommonViewset):
|
class BerryFlavorResource(PokeapiCommonViewset):
|
||||||
queryset = BerryFlavor.objects.all()
|
queryset = BerryFlavor.objects.all()
|
||||||
serializer_class = BerryFlavorDetailSerializer
|
serializer_class = BerryFlavorDetailSerializer
|
||||||
list_serializer_class = BerryFlavorSummarySerializer
|
list_serializer_class = BerryFlavorSummarySerializer
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema(
|
||||||
|
description="Characteristics indicate which stat contains a Pokémon's highest IV. A Pokémon's Characteristic is determined by the remainder of its highest IV divided by 5 (gene_modulo). Check out [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Characteristic) for greater detail.",
|
||||||
|
summary="Get characteristic",
|
||||||
|
tags=["pokemon"],
|
||||||
|
)
|
||||||
|
@extend_schema_view(
|
||||||
|
list=extend_schema(
|
||||||
|
summary="List charecterictics",
|
||||||
|
)
|
||||||
|
)
|
||||||
class CharacteristicResource(PokeapiCommonViewset):
|
class CharacteristicResource(PokeapiCommonViewset):
|
||||||
queryset = Characteristic.objects.all()
|
queryset = Characteristic.objects.all()
|
||||||
serializer_class = CharacteristicDetailSerializer
|
serializer_class = CharacteristicDetailSerializer
|
||||||
list_serializer_class = CharacteristicSummarySerializer
|
list_serializer_class = CharacteristicSummarySerializer
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema(
|
||||||
|
description="Contest effects refer to the effects of moves when used in contests.",
|
||||||
|
tags=["contests"],
|
||||||
|
summary="Get contest effect",
|
||||||
|
)
|
||||||
|
@extend_schema_view(
|
||||||
|
list=extend_schema(
|
||||||
|
summary="List contest effects",
|
||||||
|
)
|
||||||
|
)
|
||||||
class ContestEffectResource(PokeapiCommonViewset):
|
class ContestEffectResource(PokeapiCommonViewset):
|
||||||
queryset = ContestEffect.objects.all()
|
queryset = ContestEffect.objects.all()
|
||||||
serializer_class = ContestEffectDetailSerializer
|
serializer_class = ContestEffectDetailSerializer
|
||||||
list_serializer_class = ContestEffectSummarySerializer
|
list_serializer_class = ContestEffectSummarySerializer
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema(
|
||||||
|
description="Contest types are categories judges used to weigh a Pokémon's condition in Pokémon contests. Check out [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Contest_condition) for greater detail.",
|
||||||
|
summary="Get contest type",
|
||||||
|
tags=["contests"],
|
||||||
|
)
|
||||||
|
@extend_schema_view(
|
||||||
|
list=extend_schema(
|
||||||
|
summary="List contest types",
|
||||||
|
)
|
||||||
|
)
|
||||||
class ContestTypeResource(PokeapiCommonViewset):
|
class ContestTypeResource(PokeapiCommonViewset):
|
||||||
queryset = ContestType.objects.all()
|
queryset = ContestType.objects.all()
|
||||||
serializer_class = ContestTypeDetailSerializer
|
serializer_class = ContestTypeDetailSerializer
|
||||||
list_serializer_class = ContestTypeSummarySerializer
|
list_serializer_class = ContestTypeSummarySerializer
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema(
|
||||||
|
description="Egg Groups are categories which determine which Pokémon are able to interbreed. Pokémon may belong to either one or two Egg Groups. Check out [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Egg_Group) for greater detail.",
|
||||||
|
summary="Get egg group",
|
||||||
|
tags=["pokemon"],
|
||||||
|
)
|
||||||
|
@extend_schema_view(
|
||||||
|
list=extend_schema(
|
||||||
|
summary="List egg groups",
|
||||||
|
)
|
||||||
|
)
|
||||||
class EggGroupResource(PokeapiCommonViewset):
|
class EggGroupResource(PokeapiCommonViewset):
|
||||||
queryset = EggGroup.objects.all()
|
queryset = EggGroup.objects.all()
|
||||||
serializer_class = EggGroupDetailSerializer
|
serializer_class = EggGroupDetailSerializer
|
||||||
list_serializer_class = EggGroupSummarySerializer
|
list_serializer_class = EggGroupSummarySerializer
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema(
|
||||||
|
description="Conditions which affect what pokemon might appear in the wild, e.g., day or night.",
|
||||||
|
summary="Get encounter condition",
|
||||||
|
tags=["encounters"],
|
||||||
|
)
|
||||||
|
@extend_schema_view(
|
||||||
|
list=extend_schema(
|
||||||
|
summary="List encounter conditions",
|
||||||
|
)
|
||||||
|
)
|
||||||
class EncounterConditionResource(PokeapiCommonViewset):
|
class EncounterConditionResource(PokeapiCommonViewset):
|
||||||
queryset = EncounterCondition.objects.all()
|
queryset = EncounterCondition.objects.all()
|
||||||
serializer_class = EncounterConditionDetailSerializer
|
serializer_class = EncounterConditionDetailSerializer
|
||||||
list_serializer_class = EncounterConditionSummarySerializer
|
list_serializer_class = EncounterConditionSummarySerializer
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema(
|
||||||
|
description="Encounter condition values are the various states that an encounter condition can have, i.e., time of day can be either day or night.",
|
||||||
|
summary="Get encounter condition value",
|
||||||
|
tags=["encounters"],
|
||||||
|
)
|
||||||
|
@extend_schema_view(
|
||||||
|
list=extend_schema(
|
||||||
|
summary="List encounter condition values",
|
||||||
|
)
|
||||||
|
)
|
||||||
class EncounterConditionValueResource(PokeapiCommonViewset):
|
class EncounterConditionValueResource(PokeapiCommonViewset):
|
||||||
queryset = EncounterConditionValue.objects.all()
|
queryset = EncounterConditionValue.objects.all()
|
||||||
serializer_class = EncounterConditionValueDetailSerializer
|
serializer_class = EncounterConditionValueDetailSerializer
|
||||||
list_serializer_class = EncounterConditionValueSummarySerializer
|
list_serializer_class = EncounterConditionValueSummarySerializer
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema(
|
||||||
|
description="Methods by which the player might can encounter Pokémon in the wild, e.g., walking in tall grass. Check out Bulbapedia for greater detail.",
|
||||||
|
summary="Get encounter method",
|
||||||
|
tags=["encounters"],
|
||||||
|
)
|
||||||
|
@extend_schema_view(
|
||||||
|
list=extend_schema(
|
||||||
|
summary="List encounter methods",
|
||||||
|
)
|
||||||
|
)
|
||||||
class EncounterMethodResource(PokeapiCommonViewset):
|
class EncounterMethodResource(PokeapiCommonViewset):
|
||||||
queryset = EncounterMethod.objects.all()
|
queryset = EncounterMethod.objects.all()
|
||||||
serializer_class = EncounterMethodDetailSerializer
|
serializer_class = EncounterMethodDetailSerializer
|
||||||
list_serializer_class = EncounterMethodSummarySerializer
|
list_serializer_class = EncounterMethodSummarySerializer
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema(
|
||||||
|
description="Evolution chains are essentially family trees. They start with the lowest stage within a family and detail evolution conditions for each as well as Pokémon they can evolve into up through the hierarchy.",
|
||||||
|
summary="Get evolution chain",
|
||||||
|
tags=["evolution"],
|
||||||
|
)
|
||||||
|
@extend_schema_view(
|
||||||
|
list=extend_schema(
|
||||||
|
summary="List evolution chains",
|
||||||
|
)
|
||||||
|
)
|
||||||
class EvolutionChainResource(PokeapiCommonViewset):
|
class EvolutionChainResource(PokeapiCommonViewset):
|
||||||
queryset = EvolutionChain.objects.all()
|
queryset = EvolutionChain.objects.all()
|
||||||
serializer_class = EvolutionChainDetailSerializer
|
serializer_class = EvolutionChainDetailSerializer
|
||||||
list_serializer_class = EvolutionChainSummarySerializer
|
list_serializer_class = EvolutionChainSummarySerializer
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema(
|
||||||
|
description="Evolution triggers are the events and conditions that cause a Pokémon to evolve. Check out [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Methods_of_evolution) for greater detail.",
|
||||||
|
summary="Get evolution trigger",
|
||||||
|
tags=["evolution"],
|
||||||
|
)
|
||||||
|
@extend_schema_view(
|
||||||
|
list=extend_schema(
|
||||||
|
summary="List evolution triggers",
|
||||||
|
)
|
||||||
|
)
|
||||||
class EvolutionTriggerResource(PokeapiCommonViewset):
|
class EvolutionTriggerResource(PokeapiCommonViewset):
|
||||||
queryset = EvolutionTrigger.objects.all()
|
queryset = EvolutionTrigger.objects.all()
|
||||||
serializer_class = EvolutionTriggerDetailSerializer
|
serializer_class = EvolutionTriggerDetailSerializer
|
||||||
list_serializer_class = EvolutionTriggerSummarySerializer
|
list_serializer_class = EvolutionTriggerSummarySerializer
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema(
|
||||||
|
description="A generation is a grouping of the Pokémon games that separates them based on the Pokémon they include. In each generation, a new set of Pokémon, Moves, Abilities and Types that did not exist in the previous generation are released.",
|
||||||
|
summary="Get genration",
|
||||||
|
tags=["games"],
|
||||||
|
)
|
||||||
|
@extend_schema_view(
|
||||||
|
list=extend_schema(
|
||||||
|
summary="List genrations",
|
||||||
|
)
|
||||||
|
)
|
||||||
class GenerationResource(PokeapiCommonViewset):
|
class GenerationResource(PokeapiCommonViewset):
|
||||||
queryset = Generation.objects.all()
|
queryset = Generation.objects.all()
|
||||||
serializer_class = GenerationDetailSerializer
|
serializer_class = GenerationDetailSerializer
|
||||||
list_serializer_class = GenerationSummarySerializer
|
list_serializer_class = GenerationSummarySerializer
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema(
|
||||||
|
description="Genders were introduced in Generation II for the purposes of breeding Pokémon but can also result in visual differences or even different evolutionary lines. Check out [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Gender) for greater detail.",
|
||||||
|
summary="Get gender",
|
||||||
|
tags=["pokemon"],
|
||||||
|
)
|
||||||
|
@extend_schema_view(
|
||||||
|
list=extend_schema(
|
||||||
|
summary="List genders",
|
||||||
|
)
|
||||||
|
)
|
||||||
class GenderResource(PokeapiCommonViewset):
|
class GenderResource(PokeapiCommonViewset):
|
||||||
queryset = Gender.objects.all()
|
queryset = Gender.objects.all()
|
||||||
serializer_class = GenderDetailSerializer
|
serializer_class = GenderDetailSerializer
|
||||||
list_serializer_class = GenderSummarySerializer
|
list_serializer_class = GenderSummarySerializer
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema(
|
||||||
|
description="Growth rates are the speed with which Pokémon gain levels through experience. Check out [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Experience) for greater detail.",
|
||||||
|
summary="Get growth rate",
|
||||||
|
tags=["pokemon"],
|
||||||
|
)
|
||||||
|
@extend_schema_view(
|
||||||
|
list=extend_schema(
|
||||||
|
summary="List growth rates",
|
||||||
|
)
|
||||||
|
)
|
||||||
class GrowthRateResource(PokeapiCommonViewset):
|
class GrowthRateResource(PokeapiCommonViewset):
|
||||||
queryset = GrowthRate.objects.all()
|
queryset = GrowthRate.objects.all()
|
||||||
serializer_class = GrowthRateDetailSerializer
|
serializer_class = GrowthRateDetailSerializer
|
||||||
list_serializer_class = GrowthRateSummarySerializer
|
list_serializer_class = GrowthRateSummarySerializer
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema(
|
||||||
|
description="An item is an object in the games which the player can pick up, keep in their bag, and use in some manner. They have various uses, including healing, powering up, helping catch Pokémon, or to access a new area.",
|
||||||
|
summary="Get item",
|
||||||
|
tags=["items"],
|
||||||
|
)
|
||||||
|
@extend_schema_view(
|
||||||
|
list=extend_schema(
|
||||||
|
summary="List items",
|
||||||
|
)
|
||||||
|
)
|
||||||
class ItemResource(PokeapiCommonViewset):
|
class ItemResource(PokeapiCommonViewset):
|
||||||
queryset = Item.objects.all()
|
queryset = Item.objects.all()
|
||||||
serializer_class = ItemDetailSerializer
|
serializer_class = ItemDetailSerializer
|
||||||
list_serializer_class = ItemSummarySerializer
|
list_serializer_class = ItemSummarySerializer
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema(
|
||||||
|
description="Item categories determine where items will be placed in the players bag.",
|
||||||
|
summary="Get item category",
|
||||||
|
tags=["items"],
|
||||||
|
)
|
||||||
|
@extend_schema_view(
|
||||||
|
list=extend_schema(
|
||||||
|
summary="List item categories",
|
||||||
|
)
|
||||||
|
)
|
||||||
class ItemCategoryResource(PokeapiCommonViewset):
|
class ItemCategoryResource(PokeapiCommonViewset):
|
||||||
queryset = ItemCategory.objects.all()
|
queryset = ItemCategory.objects.all()
|
||||||
serializer_class = ItemCategoryDetailSerializer
|
serializer_class = ItemCategoryDetailSerializer
|
||||||
list_serializer_class = ItemCategorySummarySerializer
|
list_serializer_class = ItemCategorySummarySerializer
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema(
|
||||||
|
description='Item attributes define particular aspects of items, e.g."usable in battle" or "consumable".',
|
||||||
|
summary="Get item attribute",
|
||||||
|
tags=["items"],
|
||||||
|
)
|
||||||
|
@extend_schema_view(
|
||||||
|
list=extend_schema(
|
||||||
|
summary="List item attributes",
|
||||||
|
)
|
||||||
|
)
|
||||||
class ItemAttributeResource(PokeapiCommonViewset):
|
class ItemAttributeResource(PokeapiCommonViewset):
|
||||||
queryset = ItemAttribute.objects.all()
|
queryset = ItemAttribute.objects.all()
|
||||||
serializer_class = ItemAttributeDetailSerializer
|
serializer_class = ItemAttributeDetailSerializer
|
||||||
list_serializer_class = ItemAttributeSummarySerializer
|
list_serializer_class = ItemAttributeSummarySerializer
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema(
|
||||||
|
description='The various effects of the move"Fling" when used with different items.',
|
||||||
|
summary="Get item fling effect",
|
||||||
|
tags=["items"],
|
||||||
|
)
|
||||||
|
@extend_schema_view(
|
||||||
|
list=extend_schema(
|
||||||
|
summary="List item fling effects",
|
||||||
|
)
|
||||||
|
)
|
||||||
class ItemFlingEffectResource(PokeapiCommonViewset):
|
class ItemFlingEffectResource(PokeapiCommonViewset):
|
||||||
queryset = ItemFlingEffect.objects.all()
|
queryset = ItemFlingEffect.objects.all()
|
||||||
serializer_class = ItemFlingEffectDetailSerializer
|
serializer_class = ItemFlingEffectDetailSerializer
|
||||||
list_serializer_class = ItemFlingEffectSummarySerializer
|
list_serializer_class = ItemFlingEffectSummarySerializer
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema(
|
||||||
|
description="Pockets within the players bag used for storing items by category.",
|
||||||
|
summary="Get item pocket",
|
||||||
|
tags=["items"],
|
||||||
|
)
|
||||||
|
@extend_schema_view(
|
||||||
|
list=extend_schema(
|
||||||
|
summary="List item pockets",
|
||||||
|
)
|
||||||
|
)
|
||||||
class ItemPocketResource(PokeapiCommonViewset):
|
class ItemPocketResource(PokeapiCommonViewset):
|
||||||
queryset = ItemPocket.objects.all()
|
queryset = ItemPocket.objects.all()
|
||||||
serializer_class = ItemPocketDetailSerializer
|
serializer_class = ItemPocketDetailSerializer
|
||||||
list_serializer_class = ItemPocketSummarySerializer
|
list_serializer_class = ItemPocketSummarySerializer
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema(
|
||||||
|
description="Languages for translations of API resource information.",
|
||||||
|
summary="Get language",
|
||||||
|
tags=["utility"],
|
||||||
|
)
|
||||||
|
@extend_schema_view(
|
||||||
|
list=extend_schema(
|
||||||
|
summary="List languages",
|
||||||
|
)
|
||||||
|
)
|
||||||
class LanguageResource(PokeapiCommonViewset):
|
class LanguageResource(PokeapiCommonViewset):
|
||||||
queryset = Language.objects.all()
|
queryset = Language.objects.all()
|
||||||
serializer_class = LanguageDetailSerializer
|
serializer_class = LanguageDetailSerializer
|
||||||
list_serializer_class = LanguageSummarySerializer
|
list_serializer_class = LanguageSummarySerializer
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema(
|
||||||
|
description="Locations that can be visited within the games. Locations make up sizable portions of regions, like cities or routes.",
|
||||||
|
summary="Get location",
|
||||||
|
tags=["location"],
|
||||||
|
)
|
||||||
|
@extend_schema_view(
|
||||||
|
list=extend_schema(
|
||||||
|
summary="List locations",
|
||||||
|
)
|
||||||
|
)
|
||||||
class LocationResource(PokeapiCommonViewset):
|
class LocationResource(PokeapiCommonViewset):
|
||||||
queryset = Location.objects.all()
|
queryset = Location.objects.all()
|
||||||
serializer_class = LocationDetailSerializer
|
serializer_class = LocationDetailSerializer
|
||||||
list_serializer_class = LocationSummarySerializer
|
list_serializer_class = LocationSummarySerializer
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema(
|
||||||
|
description="Location areas are sections of areas, such as floors in a building or cave. Each area has its own set of possible Pokémon encounters.",
|
||||||
|
summary="Get location area",
|
||||||
|
tags=["location"],
|
||||||
|
)
|
||||||
|
@extend_schema_view(
|
||||||
|
list=extend_schema(
|
||||||
|
summary="List location areas",
|
||||||
|
)
|
||||||
|
)
|
||||||
class LocationAreaResource(ListOrDetailSerialRelation, viewsets.ReadOnlyModelViewSet):
|
class LocationAreaResource(ListOrDetailSerialRelation, viewsets.ReadOnlyModelViewSet):
|
||||||
queryset = LocationArea.objects.all()
|
queryset = LocationArea.objects.all()
|
||||||
serializer_class = LocationAreaDetailSerializer
|
serializer_class = LocationAreaDetailSerializer
|
||||||
list_serializer_class = LocationAreaSummarySerializer
|
list_serializer_class = LocationAreaSummarySerializer
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema(
|
||||||
|
description="Machines are the representation of items that teach moves to Pokémon. They vary from version to version, so it is not certain that one specific TM or HM corresponds to a single Machine.",
|
||||||
|
summary="Get machine",
|
||||||
|
tags=["machines"],
|
||||||
|
)
|
||||||
|
@extend_schema_view(
|
||||||
|
list=extend_schema(
|
||||||
|
summary="List machines",
|
||||||
|
)
|
||||||
|
)
|
||||||
class MachineResource(PokeapiCommonViewset):
|
class MachineResource(PokeapiCommonViewset):
|
||||||
queryset = Machine.objects.all()
|
queryset = Machine.objects.all()
|
||||||
serializer_class = MachineDetailSerializer
|
serializer_class = MachineDetailSerializer
|
||||||
list_serializer_class = MachineSummarySerializer
|
list_serializer_class = MachineSummarySerializer
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema(
|
||||||
|
description="Moves are the skills of Pokémon in battle. In battle, a Pokémon uses one move each turn. Some moves (including those learned by Hidden Machine) can be used outside of battle as well, usually for the purpose of removing obstacles or exploring new areas.",
|
||||||
|
summary="Get move",
|
||||||
|
tags=["moves"],
|
||||||
|
)
|
||||||
|
@extend_schema_view(
|
||||||
|
list=extend_schema(
|
||||||
|
summary="List moves",
|
||||||
|
)
|
||||||
|
)
|
||||||
class MoveResource(PokeapiCommonViewset):
|
class MoveResource(PokeapiCommonViewset):
|
||||||
queryset = Move.objects.all()
|
queryset = Move.objects.all()
|
||||||
serializer_class = MoveDetailSerializer
|
serializer_class = MoveDetailSerializer
|
||||||
list_serializer_class = MoveSummarySerializer
|
list_serializer_class = MoveSummarySerializer
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema(
|
||||||
|
description="Damage classes moves can have, e.g. physical, special, or non-damaging.",
|
||||||
|
summary="Get move damage class",
|
||||||
|
tags=["pokemon"],
|
||||||
|
)
|
||||||
|
@extend_schema_view(
|
||||||
|
list=extend_schema(
|
||||||
|
summary="List move damage classes",
|
||||||
|
)
|
||||||
|
)
|
||||||
class MoveDamageClassResource(PokeapiCommonViewset):
|
class MoveDamageClassResource(PokeapiCommonViewset):
|
||||||
queryset = MoveDamageClass.objects.all()
|
queryset = MoveDamageClass.objects.all()
|
||||||
serializer_class = MoveDamageClassDetailSerializer
|
serializer_class = MoveDamageClassDetailSerializer
|
||||||
list_serializer_class = MoveDamageClassSummarySerializer
|
list_serializer_class = MoveDamageClassSummarySerializer
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema(
|
||||||
|
description="Move Ailments are status conditions caused by moves used during battle. See [Bulbapedia](https://bulbapedia.bulbagarden.net/wiki/Status_condition) for greater detail.",
|
||||||
|
summary="Get move meta ailment",
|
||||||
|
tags=["moves"],
|
||||||
|
)
|
||||||
|
@extend_schema_view(
|
||||||
|
list=extend_schema(
|
||||||
|
summary="List move meta ailments",
|
||||||
|
)
|
||||||
|
)
|
||||||
class MoveMetaAilmentResource(PokeapiCommonViewset):
|
class MoveMetaAilmentResource(PokeapiCommonViewset):
|
||||||
queryset = MoveMetaAilment.objects.all()
|
queryset = MoveMetaAilment.objects.all()
|
||||||
serializer_class = MoveMetaAilmentDetailSerializer
|
serializer_class = MoveMetaAilmentDetailSerializer
|
||||||
list_serializer_class = MoveMetaAilmentSummarySerializer
|
list_serializer_class = MoveMetaAilmentSummarySerializer
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema(
|
||||||
|
description="Styles of moves when used in the Battle Palace. See [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Battle_Frontier_(Generation_III)) for greater detail.",
|
||||||
|
summary="Get move battle style",
|
||||||
|
tags=["moves"],
|
||||||
|
)
|
||||||
|
@extend_schema_view(
|
||||||
|
list=extend_schema(
|
||||||
|
summary="List move battle styles",
|
||||||
|
)
|
||||||
|
)
|
||||||
class MoveBattleStyleResource(PokeapiCommonViewset):
|
class MoveBattleStyleResource(PokeapiCommonViewset):
|
||||||
queryset = MoveBattleStyle.objects.all()
|
queryset = MoveBattleStyle.objects.all()
|
||||||
serializer_class = MoveBattleStyleDetailSerializer
|
serializer_class = MoveBattleStyleDetailSerializer
|
||||||
list_serializer_class = MoveBattleStyleSummarySerializer
|
list_serializer_class = MoveBattleStyleSummarySerializer
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema(
|
||||||
|
description="Very general categories that loosely group move effects.",
|
||||||
|
summary="Get move meta category",
|
||||||
|
tags=["moves"],
|
||||||
|
)
|
||||||
|
@extend_schema_view(
|
||||||
|
list=extend_schema(
|
||||||
|
summary="List move meta categories",
|
||||||
|
)
|
||||||
|
)
|
||||||
class MoveMetaCategoryResource(PokeapiCommonViewset):
|
class MoveMetaCategoryResource(PokeapiCommonViewset):
|
||||||
queryset = MoveMetaCategory.objects.all()
|
queryset = MoveMetaCategory.objects.all()
|
||||||
serializer_class = MoveMetaCategoryDetailSerializer
|
serializer_class = MoveMetaCategoryDetailSerializer
|
||||||
list_serializer_class = MoveMetaCategorySummarySerializer
|
list_serializer_class = MoveMetaCategorySummarySerializer
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema(
|
||||||
|
description="Methods by which Pokémon can learn moves.",
|
||||||
|
summary="Get move learn method",
|
||||||
|
tags=["moves"],
|
||||||
|
)
|
||||||
|
@extend_schema_view(
|
||||||
|
list=extend_schema(
|
||||||
|
summary="List move learn methods",
|
||||||
|
)
|
||||||
|
)
|
||||||
class MoveLearnMethodResource(PokeapiCommonViewset):
|
class MoveLearnMethodResource(PokeapiCommonViewset):
|
||||||
queryset = MoveLearnMethod.objects.all()
|
queryset = MoveLearnMethod.objects.all()
|
||||||
serializer_class = MoveLearnMethodDetailSerializer
|
serializer_class = MoveLearnMethodDetailSerializer
|
||||||
list_serializer_class = MoveLearnMethodSummarySerializer
|
list_serializer_class = MoveLearnMethodSummarySerializer
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema(
|
||||||
|
description="Targets moves can be directed at during battle. Targets can be Pokémon, environments or even other moves.",
|
||||||
|
summary="Get move target",
|
||||||
|
tags=["moves"],
|
||||||
|
)
|
||||||
|
@extend_schema_view(
|
||||||
|
list=extend_schema(
|
||||||
|
summary="List move targets",
|
||||||
|
)
|
||||||
|
)
|
||||||
class MoveTargetResource(PokeapiCommonViewset):
|
class MoveTargetResource(PokeapiCommonViewset):
|
||||||
queryset = MoveTarget.objects.all()
|
queryset = MoveTarget.objects.all()
|
||||||
serializer_class = MoveTargetDetailSerializer
|
serializer_class = MoveTargetDetailSerializer
|
||||||
list_serializer_class = MoveTargetSummarySerializer
|
list_serializer_class = MoveTargetSummarySerializer
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema(
|
||||||
|
description="Natures influence how a Pokémon's stats grow. See [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Nature) for greater detail.",
|
||||||
|
summary="Get nature",
|
||||||
|
tags=["pokemon"],
|
||||||
|
)
|
||||||
|
@extend_schema_view(
|
||||||
|
list=extend_schema(
|
||||||
|
summary="List natures",
|
||||||
|
)
|
||||||
|
)
|
||||||
class NatureResource(PokeapiCommonViewset):
|
class NatureResource(PokeapiCommonViewset):
|
||||||
queryset = Nature.objects.all()
|
queryset = Nature.objects.all()
|
||||||
serializer_class = NatureDetailSerializer
|
serializer_class = NatureDetailSerializer
|
||||||
list_serializer_class = NatureSummarySerializer
|
list_serializer_class = NatureSummarySerializer
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema(
|
||||||
|
description="Areas used for grouping Pokémon encounters in Pal Park. They're like habitats that are specific to Pal Park.",
|
||||||
|
summary="Get pal park area",
|
||||||
|
tags=["location"],
|
||||||
|
)
|
||||||
|
@extend_schema_view(
|
||||||
|
list=extend_schema(
|
||||||
|
summary="List pal park areas",
|
||||||
|
)
|
||||||
|
)
|
||||||
class PalParkAreaResource(PokeapiCommonViewset):
|
class PalParkAreaResource(PokeapiCommonViewset):
|
||||||
queryset = PalParkArea.objects.all()
|
queryset = PalParkArea.objects.all()
|
||||||
serializer_class = PalParkAreaDetailSerializer
|
serializer_class = PalParkAreaDetailSerializer
|
||||||
list_serializer_class = PalParkAreaSummarySerializer
|
list_serializer_class = PalParkAreaSummarySerializer
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema(
|
||||||
|
description="Pokeathlon Stats are different attributes of a Pokémon's performance in Pokéathlons. In Pokéathlons, competitions happen on different courses; one for each of the different Pokéathlon stats. See [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Pok%C3%A9athlon) for greater detail.",
|
||||||
|
summary="Get pokeathlon stat",
|
||||||
|
tags=["pokemon"],
|
||||||
|
)
|
||||||
|
@extend_schema_view(
|
||||||
|
list=extend_schema(
|
||||||
|
summary="List pokeathlon stats",
|
||||||
|
)
|
||||||
|
)
|
||||||
class PokeathlonStatResource(PokeapiCommonViewset):
|
class PokeathlonStatResource(PokeapiCommonViewset):
|
||||||
queryset = PokeathlonStat.objects.all()
|
queryset = PokeathlonStat.objects.all()
|
||||||
serializer_class = PokeathlonStatDetailSerializer
|
serializer_class = PokeathlonStatDetailSerializer
|
||||||
list_serializer_class = PokeathlonStatSummarySerializer
|
list_serializer_class = PokeathlonStatSummarySerializer
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema(
|
||||||
|
description="A Pokédex is a handheld electronic encyclopedia device; one which is capable of recording and retaining information of the various Pokémon in a given region with the exception of the national dex and some smaller dexes related to portions of a region. See [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Pokedex) for greater detail.",
|
||||||
|
summary="Get pokedex",
|
||||||
|
tags=["games"],
|
||||||
|
)
|
||||||
|
@extend_schema_view(
|
||||||
|
list=extend_schema(
|
||||||
|
summary="List pokedex",
|
||||||
|
)
|
||||||
|
)
|
||||||
class PokedexResource(PokeapiCommonViewset):
|
class PokedexResource(PokeapiCommonViewset):
|
||||||
queryset = Pokedex.objects.all()
|
queryset = Pokedex.objects.all()
|
||||||
serializer_class = PokedexDetailSerializer
|
serializer_class = PokedexDetailSerializer
|
||||||
list_serializer_class = PokedexSummarySerializer
|
list_serializer_class = PokedexSummarySerializer
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema(
|
||||||
|
description="Colors used for sorting Pokémon in a Pokédex. The color listed in the Pokédex is usually the color most apparent or covering each Pokémon's body. No orange category exists; Pokémon that are primarily orange are listed as red or brown.",
|
||||||
|
summary="Get pokemon color",
|
||||||
|
tags=["pokemon"],
|
||||||
|
)
|
||||||
|
@extend_schema_view(
|
||||||
|
list=extend_schema(
|
||||||
|
summary="List pokemon colors",
|
||||||
|
)
|
||||||
|
)
|
||||||
class PokemonColorResource(PokeapiCommonViewset):
|
class PokemonColorResource(PokeapiCommonViewset):
|
||||||
queryset = PokemonColor.objects.all()
|
queryset = PokemonColor.objects.all()
|
||||||
serializer_class = PokemonColorDetailSerializer
|
serializer_class = PokemonColorDetailSerializer
|
||||||
list_serializer_class = PokemonColorSummarySerializer
|
list_serializer_class = PokemonColorSummarySerializer
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema(
|
||||||
|
description="Some Pokémon may appear in one of multiple, visually different forms. These differences are purely cosmetic. For variations within a Pokémon species, which do differ in more than just visuals, the 'Pokémon' entity is used to represent such a variety.",
|
||||||
|
summary="Get pokemon form",
|
||||||
|
tags=["pokemon"],
|
||||||
|
)
|
||||||
|
@extend_schema_view(
|
||||||
|
list=extend_schema(
|
||||||
|
summary="List pokemon forms",
|
||||||
|
)
|
||||||
|
)
|
||||||
class PokemonFormResource(PokeapiCommonViewset):
|
class PokemonFormResource(PokeapiCommonViewset):
|
||||||
queryset = PokemonForm.objects.all()
|
queryset = PokemonForm.objects.all()
|
||||||
serializer_class = PokemonFormDetailSerializer
|
serializer_class = PokemonFormDetailSerializer
|
||||||
list_serializer_class = PokemonFormSummarySerializer
|
list_serializer_class = PokemonFormSummarySerializer
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema(
|
||||||
|
description="Habitats are generally different terrain Pokémon can be found in but can also be areas designated for rare or legendary Pokémon.",
|
||||||
|
summary="Get pokemom habita",
|
||||||
|
tags=["pokemon"],
|
||||||
|
)
|
||||||
|
@extend_schema_view(
|
||||||
|
list=extend_schema(
|
||||||
|
summary="List pokemom habitas",
|
||||||
|
)
|
||||||
|
)
|
||||||
class PokemonHabitatResource(PokeapiCommonViewset):
|
class PokemonHabitatResource(PokeapiCommonViewset):
|
||||||
queryset = PokemonHabitat.objects.all()
|
queryset = PokemonHabitat.objects.all()
|
||||||
serializer_class = PokemonHabitatDetailSerializer
|
serializer_class = PokemonHabitatDetailSerializer
|
||||||
list_serializer_class = PokemonHabitatSummarySerializer
|
list_serializer_class = PokemonHabitatSummarySerializer
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema(
|
||||||
|
description="Shapes used for sorting Pokémon in a Pokédex.",
|
||||||
|
summary="Get pokemon shape",
|
||||||
|
tags=["pokemon"],
|
||||||
|
)
|
||||||
|
@extend_schema_view(
|
||||||
|
list=extend_schema(
|
||||||
|
summary="List pokemon shapes",
|
||||||
|
)
|
||||||
|
)
|
||||||
class PokemonShapeResource(PokeapiCommonViewset):
|
class PokemonShapeResource(PokeapiCommonViewset):
|
||||||
queryset = PokemonShape.objects.all()
|
queryset = PokemonShape.objects.all()
|
||||||
serializer_class = PokemonShapeDetailSerializer
|
serializer_class = PokemonShapeDetailSerializer
|
||||||
list_serializer_class = PokemonShapeSummarySerializer
|
list_serializer_class = PokemonShapeSummarySerializer
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema(
|
||||||
|
description="Pokémon are the creatures that inhabit the world of the Pokémon games. They can be caught using Pokéballs and trained by battling with other Pokémon. Each Pokémon belongs to a specific species but may take on a variant which makes it differ from other Pokémon of the same species, such as base stats, available abilities and typings. See [Bulbapedia](http://bulbapedia.bulbagarden.net/wiki/Pok%C3%A9mon_(species)) for greater detail.",
|
||||||
|
summary="Get pokemon",
|
||||||
|
tags=["pokemon"],
|
||||||
|
)
|
||||||
|
@extend_schema_view(
|
||||||
|
list=extend_schema(
|
||||||
|
summary="List pokemon",
|
||||||
|
)
|
||||||
|
)
|
||||||
class PokemonResource(PokeapiCommonViewset):
|
class PokemonResource(PokeapiCommonViewset):
|
||||||
queryset = Pokemon.objects.all()
|
queryset = Pokemon.objects.all()
|
||||||
serializer_class = PokemonDetailSerializer
|
serializer_class = PokemonDetailSerializer
|
||||||
list_serializer_class = PokemonSummarySerializer
|
list_serializer_class = PokemonSummarySerializer
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema(
|
||||||
|
description="A Pokémon Species forms the basis for at least one Pokémon. Attributes of a Pokémon species are shared across all varieties of Pokémon within the species. A good example is Wormadam; Wormadam is the species which can be found in three different varieties, Wormadam-Trash, Wormadam-Sandy and Wormadam-Plant.",
|
||||||
|
summary="Get pokemon species",
|
||||||
|
tags=["pokemon"],
|
||||||
|
)
|
||||||
|
@extend_schema_view(
|
||||||
|
list=extend_schema(
|
||||||
|
summary="List pokemon species",
|
||||||
|
)
|
||||||
|
)
|
||||||
class PokemonSpeciesResource(PokeapiCommonViewset):
|
class PokemonSpeciesResource(PokeapiCommonViewset):
|
||||||
queryset = PokemonSpecies.objects.all().order_by("id")
|
queryset = PokemonSpecies.objects.all().order_by("id")
|
||||||
serializer_class = PokemonSpeciesDetailSerializer
|
serializer_class = PokemonSpeciesDetailSerializer
|
||||||
list_serializer_class = PokemonSpeciesSummarySerializer
|
list_serializer_class = PokemonSpeciesSummarySerializer
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema(
|
||||||
|
description="A region is an organized area of the Pokémon world. Most often, the main difference between regions is the species of Pokémon that can be encountered within them.",
|
||||||
|
summary="Get region",
|
||||||
|
tags=["location"],
|
||||||
|
)
|
||||||
|
@extend_schema_view(
|
||||||
|
list=extend_schema(
|
||||||
|
summary="List regions",
|
||||||
|
)
|
||||||
|
)
|
||||||
class RegionResource(PokeapiCommonViewset):
|
class RegionResource(PokeapiCommonViewset):
|
||||||
queryset = Region.objects.all()
|
queryset = Region.objects.all()
|
||||||
serializer_class = RegionDetailSerializer
|
serializer_class = RegionDetailSerializer
|
||||||
list_serializer_class = RegionSummarySerializer
|
list_serializer_class = RegionSummarySerializer
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema(
|
||||||
|
description="Stats determine certain aspects of battles. Each Pokémon has a value for each stat which grows as they gain levels and can be altered momentarily by effects in battles.",
|
||||||
|
summary="Get stat",
|
||||||
|
tags=["pokemon"],
|
||||||
|
)
|
||||||
|
@extend_schema_view(
|
||||||
|
list=extend_schema(
|
||||||
|
summary="List stats",
|
||||||
|
)
|
||||||
|
)
|
||||||
class StatResource(PokeapiCommonViewset):
|
class StatResource(PokeapiCommonViewset):
|
||||||
queryset = Stat.objects.all()
|
queryset = Stat.objects.all()
|
||||||
serializer_class = StatDetailSerializer
|
serializer_class = StatDetailSerializer
|
||||||
list_serializer_class = StatSummarySerializer
|
list_serializer_class = StatSummarySerializer
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema(
|
||||||
|
description="Super contest effects refer to the effects of moves when used in super contests.",
|
||||||
|
summary="Get super contest effect",
|
||||||
|
tags=["contests"],
|
||||||
|
)
|
||||||
|
@extend_schema_view(
|
||||||
|
list=extend_schema(
|
||||||
|
summary="List super contest effects",
|
||||||
|
)
|
||||||
|
)
|
||||||
class SuperContestEffectResource(PokeapiCommonViewset):
|
class SuperContestEffectResource(PokeapiCommonViewset):
|
||||||
queryset = SuperContestEffect.objects.all()
|
queryset = SuperContestEffect.objects.all()
|
||||||
serializer_class = SuperContestEffectDetailSerializer
|
serializer_class = SuperContestEffectDetailSerializer
|
||||||
list_serializer_class = SuperContestEffectSummarySerializer
|
list_serializer_class = SuperContestEffectSummarySerializer
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema(
|
||||||
|
description="Types are properties for Pokémon and their moves. Each type has three properties: which types of Pokémon it is super effective against, which types of Pokémon it is not very effective against, and which types of Pokémon it is completely ineffective against.",
|
||||||
|
summary="Get types",
|
||||||
|
tags=["pokemon"],
|
||||||
|
)
|
||||||
|
@extend_schema_view(
|
||||||
|
list=extend_schema(
|
||||||
|
summary="List types",
|
||||||
|
)
|
||||||
|
)
|
||||||
class TypeResource(PokeapiCommonViewset):
|
class TypeResource(PokeapiCommonViewset):
|
||||||
queryset = Type.objects.all()
|
queryset = Type.objects.all()
|
||||||
serializer_class = TypeDetailSerializer
|
serializer_class = TypeDetailSerializer
|
||||||
list_serializer_class = TypeSummarySerializer
|
list_serializer_class = TypeSummarySerializer
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema(
|
||||||
|
description="Versions of the games, e.g., Red, Blue or Yellow.",
|
||||||
|
summary="Get version",
|
||||||
|
tags=["games"],
|
||||||
|
)
|
||||||
|
@extend_schema_view(
|
||||||
|
list=extend_schema(
|
||||||
|
summary="List versions",
|
||||||
|
)
|
||||||
|
)
|
||||||
class VersionResource(PokeapiCommonViewset):
|
class VersionResource(PokeapiCommonViewset):
|
||||||
queryset = Version.objects.all()
|
queryset = Version.objects.all()
|
||||||
serializer_class = VersionDetailSerializer
|
serializer_class = VersionDetailSerializer
|
||||||
list_serializer_class = VersionSummarySerializer
|
list_serializer_class = VersionSummarySerializer
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema(
|
||||||
|
description="Version groups categorize highly similar versions of the games.",
|
||||||
|
summary="Get version group",
|
||||||
|
tags=["games"],
|
||||||
|
)
|
||||||
|
@extend_schema_view(
|
||||||
|
list=extend_schema(
|
||||||
|
summary="List version groups",
|
||||||
|
)
|
||||||
|
)
|
||||||
class VersionGroupResource(PokeapiCommonViewset):
|
class VersionGroupResource(PokeapiCommonViewset):
|
||||||
queryset = VersionGroup.objects.all()
|
queryset = VersionGroup.objects.all()
|
||||||
serializer_class = VersionGroupDetailSerializer
|
serializer_class = VersionGroupDetailSerializer
|
||||||
list_serializer_class = VersionGroupSummarySerializer
|
list_serializer_class = VersionGroupSummarySerializer
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema(
|
||||||
|
description="Handles Pokemon Encounters as a sub-resource.",
|
||||||
|
summary="Get pokemon encounter",
|
||||||
|
tags=["encounters"],
|
||||||
|
responses={
|
||||||
|
"200": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["location_area", "version_details"],
|
||||||
|
"properties": {
|
||||||
|
"location_area": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["name", "url"],
|
||||||
|
"properties": {
|
||||||
|
"name": {"type": "string", "example": "cerulean-city-area"},
|
||||||
|
"url": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "uri",
|
||||||
|
"example": "https://pokeapi.co/api/v2/location-area/281/",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"version_details": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["encounter_details", "max_chance", "version"],
|
||||||
|
"properties": {
|
||||||
|
"encounter_details": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": [
|
||||||
|
"chance",
|
||||||
|
"condition_values",
|
||||||
|
"max_level",
|
||||||
|
"method",
|
||||||
|
"min_level",
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"chance": {
|
||||||
|
"type": "number",
|
||||||
|
"example": 100,
|
||||||
|
},
|
||||||
|
"condition_values": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["name", "url"],
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "story-progress-beat-red",
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "uri",
|
||||||
|
"example": "https://pokeapi.co/api/v2/encounter-condition-value/55/",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"max_level": {
|
||||||
|
"type": "number",
|
||||||
|
"example": 10,
|
||||||
|
},
|
||||||
|
"method": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["name", "url"],
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"type": "string",
|
||||||
|
"example": "gift",
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "uri",
|
||||||
|
"example": "https://pokeapi.co/api/v2/encounter-method/18/",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"min_level": {
|
||||||
|
"type": "number",
|
||||||
|
"example": 10,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"max_chance": {"type": "number", "example": 100},
|
||||||
|
"version": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["name", "url"],
|
||||||
|
"properties": {
|
||||||
|
"name": {"type": "string", "example": "red"},
|
||||||
|
"url": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "uri",
|
||||||
|
"example": "https://pokeapi.co/api/v2/version/1/",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
)
|
||||||
class PokemonEncounterView(APIView):
|
class PokemonEncounterView(APIView):
|
||||||
"""
|
|
||||||
Handles Pokemon Encounters as a sub-resource.
|
|
||||||
"""
|
|
||||||
|
|
||||||
def get(self, request, pokemon_id):
|
def get(self, request, pokemon_id):
|
||||||
self.context = dict(request=request)
|
self.context = dict(request=request)
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1679,42 +1679,46 @@ class APIData:
|
||||||
|
|
||||||
showdown = {
|
showdown = {
|
||||||
"front_default": showdown_path % pokemon.id if front_default else None,
|
"front_default": showdown_path % pokemon.id if front_default else None,
|
||||||
"front_female": showdown_path % f"female/{pokemon.id}"
|
"front_female": (
|
||||||
if front_female
|
showdown_path % f"female/{pokemon.id}" if front_female else None
|
||||||
else None,
|
),
|
||||||
"front_shiny": showdown_path % f"shiny/{pokemon.id}"
|
"front_shiny": (
|
||||||
if front_shiny
|
showdown_path % f"shiny/{pokemon.id}" if front_shiny else None
|
||||||
else None,
|
),
|
||||||
"front_shiny_female": showdown_path % f"shiny/female/{pokemon.id}"
|
"front_shiny_female": (
|
||||||
if front_shiny_female
|
showdown_path % f"shiny/female/{pokemon.id}"
|
||||||
else None,
|
if front_shiny_female
|
||||||
"back_default": showdown_path % f"back/{pokemon.id}"
|
else None
|
||||||
if back_default
|
),
|
||||||
else None,
|
"back_default": (
|
||||||
"back_female": showdown_path % f"back/female/{pokemon.id}"
|
showdown_path % f"back/{pokemon.id}" if back_default else None
|
||||||
if back_female
|
),
|
||||||
else None,
|
"back_female": (
|
||||||
"back_shiny": showdown_path % f"back/shiny/{pokemon.id}"
|
showdown_path % f"back/female/{pokemon.id}" if back_female else None
|
||||||
if back_shiny
|
),
|
||||||
else None,
|
"back_shiny": (
|
||||||
"back_shiny_female": showdown_path % f"back/shiny/female/{pokemon.id}"
|
showdown_path % f"back/shiny/{pokemon.id}" if back_shiny else None
|
||||||
if back_shiny_female
|
),
|
||||||
else None,
|
"back_shiny_female": (
|
||||||
|
showdown_path % f"back/shiny/female/{pokemon.id}"
|
||||||
|
if back_shiny_female
|
||||||
|
else None
|
||||||
|
),
|
||||||
}
|
}
|
||||||
|
|
||||||
sprites = {
|
sprites = {
|
||||||
"front_default": sprite_path % pokemon.id if front_default else None,
|
"front_default": sprite_path % pokemon.id if front_default else None,
|
||||||
"front_female": sprite_path % pokemon.id if front_female 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": sprite_path % pokemon.id if front_shiny else None,
|
||||||
"front_shiny_female": sprite_path % pokemon.id
|
"front_shiny_female": (
|
||||||
if front_shiny_female
|
sprite_path % pokemon.id if front_shiny_female else None
|
||||||
else None,
|
),
|
||||||
"back_default": sprite_path % pokemon.id if back_default 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_female": sprite_path % pokemon.id if back_female else None,
|
||||||
"back_shiny": sprite_path % pokemon.id if back_shiny else None,
|
"back_shiny": sprite_path % pokemon.id if back_shiny else None,
|
||||||
"back_shiny_female": sprite_path % pokemon.id
|
"back_shiny_female": (
|
||||||
if back_shiny_female
|
sprite_path % pokemon.id if back_shiny_female else None
|
||||||
else None,
|
),
|
||||||
}
|
}
|
||||||
|
|
||||||
pokemon_sprites = PokemonSprites.objects.create(
|
pokemon_sprites = PokemonSprites.objects.create(
|
||||||
|
@ -5099,6 +5103,25 @@ class APITests(APIData, APITestCase):
|
||||||
"{}".format(cries_data["legacy"]),
|
"{}".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):
|
def test_pokemon_form_api(self):
|
||||||
pokemon_species = self.setup_pokemon_species_data()
|
pokemon_species = self.setup_pokemon_species_data()
|
||||||
pokemon = self.setup_pokemon_data(pokemon_species=pokemon_species)
|
pokemon = self.setup_pokemon_data(pokemon_species=pokemon_species)
|
||||||
|
|
|
@ -11,3 +11,4 @@ mimeparse==0.1.3
|
||||||
psycopg2-binary==2.9.9
|
psycopg2-binary==2.9.9
|
||||||
python-dateutil==2.8.2
|
python-dateutil==2.8.2
|
||||||
python-mimeparse==1.6.0
|
python-mimeparse==1.6.0
|
||||||
|
drf-spectacular==0.27.2
|
||||||
|
|
Loading…
Reference in a new issue