From 1cd5049cc4b83ef5640b9e13ae774697053535f0 Mon Sep 17 00:00:00 2001 From: Triyan Mukherjee Date: Sun, 12 Jul 2026 13:37:31 +0530 Subject: [PATCH 01/11] feat: Add pre-commit and ruff --- .pre-commit-config.yaml | 31 +++++ Makefile | 4 +- pyproject.toml | 3 +- ruff.toml | 6 + uv.lock | 271 ++++++++++++++++------------------------ 5 files changed, 147 insertions(+), 168 deletions(-) create mode 100644 .pre-commit-config.yaml create mode 100644 ruff.toml diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 000000000..86ff4830a --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,31 @@ +repos: + + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.3.0 + hooks: + - id: check-ast + - id: check-json + - id: check-toml + - id: check-yaml + - id: end-of-file-fixer + - id: fix-byte-order-marker + - id: pretty-format-json + - id: sort-simple-yaml + - id: trailing-whitespace + args: + - --markdown-linebreak-ext=md + + - repo: https://github.com/pre-commit/pygrep-hooks + rev: v1.9.0 + hooks: + - id: python-check-blanket-noqa + - id: python-check-blanket-type-ignore + - id: python-use-type-annotations + + - repo: local + hooks: + - id: ruff-format + name: Ruff Format + entry: ruff format . + language: python + diff --git a/Makefile b/Makefile index f0817c307..e5259539e 100755 --- a/Makefile +++ b/Makefile @@ -89,10 +89,10 @@ docker-prod: docker-setup: docker-up docker-migrate docker-build-db # (Docker) Start services, prepare the latest DB schema, populate the DB format: check-uv # Format the source code - uv run black . --extend-exclude '.+/scripts/.+' + uv run ruff format . format-check: check-uv # Check the source code has been formatted - uv run black . --check --extend-exclude '.+/scripts/.+' + uv run ruff format . --check pull: git checkout master diff --git a/pyproject.toml b/pyproject.toml index eee796c48..117445cf9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -19,6 +19,7 @@ dependencies = [ [dependency-groups] dev = [ - "black>=26.5.1", "coverage==7.13.1", + "pre-commit>=4.6.0", + "ruff>=0.15.21", ] diff --git a/ruff.toml b/ruff.toml new file mode 100644 index 000000000..c38ae5bad --- /dev/null +++ b/ruff.toml @@ -0,0 +1,6 @@ +line-length = 120 +exclude = [ + "**/scripts", + "data/v2/cries", + "data/v2/sprites", +] \ No newline at end of file diff --git a/uv.lock b/uv.lock index 02fabbfcc..bb5135060 100644 --- a/uv.lock +++ b/uv.lock @@ -38,68 +38,12 @@ wheels = [ ] [[package]] -name = "black" -version = "26.5.1" +name = "cfgv" +version = "3.5.0" source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "click" }, - { name = "mypy-extensions" }, - { name = "packaging" }, - { name = "pathspec" }, - { name = "platformdirs" }, - { name = "pytokens" }, - { name = "tomli", marker = "python_full_version < '3.11'" }, - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/c0/37/5628dd55bf2b34257fc7603f0fe97c40e3aaf24265f416a9c85c95ca1436/black-26.5.1.tar.gz", hash = "sha256:dd321f668053961824bcc1be1cc1df748b2d7e4fa28086b08331e577b0100a73", size = 679439, upload-time = "2026-05-18T16:53:36.107Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/be/84/b3f55026206a9e8820a91503308075ca48eadc515e436731ca01dbe043b3/black-26.5.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9942db8888e06943c5dde66ca0037dcff82a2a4ec1ad0ada9e0d2ee9d9823893", size = 1987719, upload-time = "2026-05-18T17:05:02.757Z" }, - { url = "https://files.pythonhosted.org/packages/c6/34/7db312c5e5783d6e76cffd9d5ac8972a32badae4c6e3288dac0eed8d3bed/black-26.5.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:89c93167a74d3a75dfaa38a5c7cca015537d5820dd7f17d63267d674a61cae90", size = 1810083, upload-time = "2026-05-18T17:05:04.302Z" }, - { url = "https://files.pythonhosted.org/packages/33/e2/e0101e73c2c8727634e2efcb35e2b34bd23ad70dfa673789f5773a591b21/black-26.5.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:22f2cd76d069cc54c71f10360744ba8983fbb616903b4304a85b734915c8e1b4", size = 1860633, upload-time = "2026-05-18T17:05:06.391Z" }, - { url = "https://files.pythonhosted.org/packages/b0/4c/e15c0c5b23cf3651035fe5addcce90e283af3548a3f91bb03d81b83106ab/black-26.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:87ed5c6f450580a2f6790bc7cbfb016dfc73bc750249762268a3695361315eef", size = 1477886, upload-time = "2026-05-18T17:05:07.96Z" }, - { url = "https://files.pythonhosted.org/packages/9f/3f/59d43ade98d2ce5c8dc34a4e46cbecd177e6d55d7d4092969c6003ccc655/black-26.5.1-cp310-cp310-win_arm64.whl", hash = "sha256:58b4bd92cf88aacf83d88479c8f9caee044b1ec55f2451a337354a7ea2590a22", size = 1277111, upload-time = "2026-05-18T17:05:09.473Z" }, - { url = "https://files.pythonhosted.org/packages/4b/96/3c3e09f09f44a37aac36b178a279cd19aa7001bd796187a7b162a294c81f/black-26.5.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:96ae2c733b2aabdd9986e2c5df628ff3473676cd1c5faded1ff496cf6d74083c", size = 1970639, upload-time = "2026-05-18T17:05:11.461Z" }, - { url = "https://files.pythonhosted.org/packages/83/ea/5ad117b9ee3ecd933c712bcbae610006e5b7cc9f41c526cd7ed3b6c4124c/black-26.5.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0e48b87e03bf109288e55cfceadcfa15ff5470aca2851a851950ed2926f450d7", size = 1792130, upload-time = "2026-05-18T17:05:12.983Z" }, - { url = "https://files.pythonhosted.org/packages/06/3a/7c448bc623fcdfa96672531beb5a616ea5e64f6975955254d7731ffb0ad9/black-26.5.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5119fa92ae61f786e8c3662fd60aece1d0a2dd5cca5d0c79417a95e7a4272a59", size = 1846134, upload-time = "2026-05-18T17:05:14.506Z" }, - { url = "https://files.pythonhosted.org/packages/a1/5b/0b39b3a5917f0657ac014ad2edb58c139553a478adfe7f817abf1622ff6e/black-26.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:30d3c14661f2792e9142cce3eeeb1cbc175b3eb5f733be0c8eeb99651e52b0c3", size = 1478883, upload-time = "2026-05-18T17:05:16.542Z" }, - { url = "https://files.pythonhosted.org/packages/4c/48/dc222692e0f95030db1bbfb6c857e76858bad09058221ea7aae815255327/black-26.5.1-cp311-cp311-win_arm64.whl", hash = "sha256:1ef92b76f7733f282fd096ea406200b5a286c42947412b0eaff3a74e3616cefe", size = 1277776, upload-time = "2026-05-18T17:05:18.029Z" }, - { url = "https://files.pythonhosted.org/packages/24/99/7744b906703228264ef73bdd534df88ec1ef3de45c4e78f6d31b9e32d0c9/black-26.5.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4ad6fa01f941920f54f2bbb35f3df7673428a0ef98a0b0840c2eaef3b110efa8", size = 2012518, upload-time = "2026-05-18T17:05:20.108Z" }, - { url = "https://files.pythonhosted.org/packages/b7/c0/c5a3b1636dfd09c42534f2b3cf33506814f6d3e066fb0879ffa16c1ae860/black-26.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3915f256e75a2d7cf88d8953d37f780455dc586cc72dee059c528fe77f581217", size = 1816016, upload-time = "2026-05-18T17:05:21.84Z" }, - { url = "https://files.pythonhosted.org/packages/1f/0e/36044316b65ca471d3bb6d3703fd06fb50c6b727c3562f6a5a3153634f88/black-26.5.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d98d4137277c75dfb898ec8d846c4fd68ba1e9cf77f95e2865c203dc18f4c3d", size = 1884150, upload-time = "2026-05-18T17:05:23.546Z" }, - { url = "https://files.pythonhosted.org/packages/b3/33/dafc5808c2af43672912111d7c3354af1615f7e2be3bed7a878461abbe4d/black-26.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:a1dca32d9f1784af512a13410ec204c6f7f0aa9797a111c42e1c03449821c264", size = 1486825, upload-time = "2026-05-18T17:05:25.004Z" }, - { url = "https://files.pythonhosted.org/packages/82/14/b965ee6ad2a311f28bdbf692def3ee9848d2ae289dab28b27657fcee3e78/black-26.5.1-cp312-cp312-win_arm64.whl", hash = "sha256:1037d5ac7b7b310b2632ad867ec8d0e4c4819dcdb0b820f63135da746a24e418", size = 1288646, upload-time = "2026-05-18T17:05:26.477Z" }, - { url = "https://files.pythonhosted.org/packages/3f/5c/c384363980e11e25ca6b93205949bb331fbf35f4e0dbec376dfa6326cec8/black-26.5.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2b36cf2ddf5566e205f6535f782a62194a184d33e175b64ae8c40b1737522be3", size = 2009020, upload-time = "2026-05-18T17:05:28.132Z" }, - { url = "https://files.pythonhosted.org/packages/0b/df/9f31c5e0babbfed77d505fc5d120beb98b21b33feaeded3924ea941fe360/black-26.5.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1f7ea64ebfa01b50f693508fc39f875e264446d3b097088f84f203b9d09618a0", size = 1813335, upload-time = "2026-05-18T17:05:31.266Z" }, - { url = "https://files.pythonhosted.org/packages/fb/24/8e7b9a2fa61b0afd82209efe937557d180a1fa055bd7f6161eb9defc3719/black-26.5.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ecb3e624844c798144e9bd986954e0adc81d8911a1f30f375e1252fe26e8c294", size = 1881614, upload-time = "2026-05-18T17:05:32.718Z" }, - { url = "https://files.pythonhosted.org/packages/49/ad/b4e0d9365ba8ac34f6bbab62a4b1b2dd5d618fac3fa1b8db968c844201b5/black-26.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:e1a26503279b6b310669fb0b219c39e4820b77e8189fe80f522bb511f247db0a", size = 1488925, upload-time = "2026-05-18T17:05:34.259Z" }, - { url = "https://files.pythonhosted.org/packages/a1/4b/652b859bf5df88a751c30451b09338f7fd26a77d1271c666992f836b7711/black-26.5.1-cp313-cp313-win_arm64.whl", hash = "sha256:5c34b25da232ead53a6f335b76dbea124f4d152ad568b9080d6f944bc2b34b52", size = 1289883, upload-time = "2026-05-18T17:05:36.019Z" }, - { url = "https://files.pythonhosted.org/packages/a6/16/a8da8eb208c51c7f4ce74609a45d0dcc6d8a2141e45e81ee5289d1bb0d59/black-26.5.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:e88976690a64b0af98312ca958415849cb42423423c5f2ee74af4b49a97a2168", size = 2004800, upload-time = "2026-05-18T17:05:38.182Z" }, - { url = "https://files.pythonhosted.org/packages/11/8a/a479296a19e383b70a725882a6cf3d786540601ff03cabbaaf1cce864c5a/black-26.5.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:32d5ea7f6c8bdfa6e648326ebca1f02b0764e2a029edc6f8dce2627e19d468c3", size = 1815576, upload-time = "2026-05-18T17:05:40.309Z" }, - { url = "https://files.pythonhosted.org/packages/81/6b/cfaf3d39f25132c156a068f6b805576c9103a84086019507c70e1911ee7d/black-26.5.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ea8d16dc41655aa113cd64665e7219446cd7e4ff2248d7178eaa905190c86b18", size = 1877927, upload-time = "2026-05-18T17:05:42.463Z" }, - { url = "https://files.pythonhosted.org/packages/66/76/302e313964bcff7e28df329d39f84f5270095730d85ff0acc260610a0d82/black-26.5.1-cp314-cp314-win_amd64.whl", hash = "sha256:577f21094ea469ef92ec1adaf2c9441a226d2144d01a5be2fa823cecf6543e50", size = 1511860, upload-time = "2026-05-18T17:05:43.943Z" }, - { url = "https://files.pythonhosted.org/packages/27/4e/a3827e35e0e567f9f9ee59e2a0ab979267dca98718f25547ca8c6733afd4/black-26.5.1-cp314-cp314-win_arm64.whl", hash = "sha256:ed1a20af114c301a0269bf01163d51dbef72737fd65f850001e7cbe7f3c7abae", size = 1316632, upload-time = "2026-05-18T17:05:45.521Z" }, - { url = "https://files.pythonhosted.org/packages/94/51/f975cae76d44274cc2868dc9040ac5d58d464784610234455b4e7b19c6ef/black-26.5.1-py3-none-any.whl", hash = "sha256:4ed7f7da04046d2e488437170797d3b4a4ad83906683bcb7dfc68b673bbce5e2", size = 213693, upload-time = "2026-05-18T16:53:33.964Z" }, -] - -[[package]] -name = "click" -version = "8.4.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/9b/98/518d8e5081007684232226f475082b30087d0f585e8457db087298259f49/click-8.4.1.tar.gz", hash = "sha256:918b5633eddf6b41c32d4f454bf0de810065c74e3f7dbf8ee5452f8be88d3e96", size = 353007, upload-time = "2026-05-22T04:08:37.769Z" } +sdist = { url = "https://files.pythonhosted.org/packages/4e/b5/721b8799b04bf9afe054a3899c6cf4e880fcf8563cc71c15610242490a0c/cfgv-3.5.0.tar.gz", hash = "sha256:d5b1034354820651caa73ede66a6294d6e95c1b00acc5e9b098e917404669132", size = 7334, upload-time = "2025-11-19T20:55:51.612Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c7/0d/67e5b4109ea4a837e80daa87c2c696711955e40449a97e8926672534def2/click-8.4.1-py3-none-any.whl", hash = "sha256:482be17c6991b8c19c5429a1e995d9b0efdbb63172824c41f99965dc0ade8ec2", size = 116639, upload-time = "2026-05-22T04:08:35.26Z" }, -] - -[[package]] -name = "colorama" -version = "0.4.6" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, + { url = "https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl", hash = "sha256:a8dc6b26ad22ff227d2634a65cb388215ce6cc96bbcc5cfde7641ae87e8dacc0", size = 7445, upload-time = "2025-11-19T20:55:50.744Z" }, ] [[package]] @@ -201,6 +145,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/cc/48/d9f421cb8da5afaa1a64570d9989e00fb7955e6acddc5a12979f7666ef60/coverage-7.13.1-py3-none-any.whl", hash = "sha256:2016745cb3ba554469d02819d78958b571792bb68e31302610e898f80dd3a573", size = 210722, upload-time = "2025-12-28T15:42:54.901Z" }, ] +[[package]] +name = "distlib" +version = "0.4.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c9/02/bd72be9134d25ed783ecbbc38a539ffaefbf90c78418c7fb7229600dbac7/distlib-0.4.3.tar.gz", hash = "sha256:f152097224a0ae24be5a0f6bae1b9359af82133bce63f98a95f86cae1aede9ed", size = 615141, upload-time = "2026-06-12T08:04:52.847Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/02/08/9c41fb51ab5b43eb21674aff13df270e8ba6c4b29c8624e328dc7a9482af/distlib-0.4.3-py2.py3-none-any.whl", hash = "sha256:4b0ce306c966eb73bc3a7b6abad017c556dadd92c44701562cd528ac7fde4d5b", size = 470628, upload-time = "2026-06-12T08:04:50.506Z" }, +] + [[package]] name = "django" version = "5.2.10" @@ -282,6 +235,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/32/d9/502c56fc3ca960075d00956283f1c44e8cafe433dada03f9ed2821f3073b/drf_spectacular-0.29.0-py3-none-any.whl", hash = "sha256:d1ee7c9535d89848affb4427347f7c4a22c5d22530b8842ef133d7b72e19b41a", size = 105433, upload-time = "2025-11-02T03:40:24.823Z" }, ] +[[package]] +name = "filelock" +version = "3.29.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/35/94/00f2059e4835eace3ae8fde680b932c496f8ec7bdc99168dfa53fb2e6b79/filelock-3.29.7.tar.gz", hash = "sha256:5b481979797ae69e72f0b389d89a80bdd585c260c5b3f1fb9c0a5ba9bb3f195d", size = 71521, upload-time = "2026-07-08T05:46:58.716Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/60/02/be4a57b60c7149b55b9e3b3c13f609cd8eb5307c751f22bd8fb8d262e75b/filelock-3.29.7-py3-none-any.whl", hash = "sha256:987db6f789a3a2a59f55081801b2b3697cb97e2a736b5f1a9e99b559285fbc51", size = 46036, upload-time = "2026-07-08T05:46:57.53Z" }, +] + [[package]] name = "gunicorn" version = "23.0.0" @@ -294,6 +256,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/cb/7d/6dac2a6e1eba33ee43f318edbed4ff29151a49b5d37f080aad1e6469bca4/gunicorn-23.0.0-py3-none-any.whl", hash = "sha256:ec400d38950de4dfd418cff8328b2c8faed0edb0d517d3394e457c317908ca4d", size = 85029, upload-time = "2024-08-10T20:25:24.996Z" }, ] +[[package]] +name = "identify" +version = "2.6.19" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/52/63/51723b5f116cc04b061cb6f5a561790abf249d25931d515cd375e063e0f4/identify-2.6.19.tar.gz", hash = "sha256:6be5020c38fcb07da56c53733538a3081ea5aa70d36a156f83044bfbf9173842", size = 99567, upload-time = "2026-04-17T18:39:50.265Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/94/84/d9273cd09688070a6523c4aee4663a8538721b2b755c4962aafae0011e72/identify-2.6.19-py2.py3-none-any.whl", hash = "sha256:20e6a87f786f768c092a721ad107fc9df0eb89347be9396cadf3f4abbd1fb78a", size = 99397, upload-time = "2026-04-17T18:39:49.221Z" }, +] + [[package]] name = "inflection" version = "0.5.1" @@ -341,12 +312,12 @@ wheels = [ ] [[package]] -name = "mypy-extensions" -version = "1.1.0" +name = "nodeenv" +version = "1.10.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a2/6e/371856a3fb9d31ca8dac321cda606860fa4548858c0cc45d9d1d4ca2628b/mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558", size = 6343, upload-time = "2025-04-22T14:54:24.164Z" } +sdist = { url = "https://files.pythonhosted.org/packages/24/bf/d1bda4f6168e0b2e9e5958945e01910052158313224ada5ce1fb2e1113b8/nodeenv-1.10.0.tar.gz", hash = "sha256:996c191ad80897d076bdfba80a41994c2b47c68e224c542b48feba42ba00f8bb", size = 55611, upload-time = "2025-12-20T14:08:54.006Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505", size = 4963, upload-time = "2025-04-22T14:54:22.983Z" }, + { url = "https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl", hash = "sha256:5bb13e3eed2923615535339b3c620e76779af4cb4c6a90deccc9e36b274d3827", size = 23438, upload-time = "2025-12-20T14:08:52.782Z" }, ] [[package]] @@ -358,15 +329,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl", hash = "sha256:5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e", size = 100195, upload-time = "2026-04-24T20:15:22.081Z" }, ] -[[package]] -name = "pathspec" -version = "1.1.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/5a/82/42f767fc1c1143d6fd36efb827202a2d997a375e160a71eb2888a925aac1/pathspec-1.1.1.tar.gz", hash = "sha256:17db5ecd524104a120e173814c90367a96a98d07c45b2e10c2f3919fff91bf5a", size = 135180, upload-time = "2026-04-27T01:46:08.907Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.1-py3-none-any.whl", hash = "sha256:a00ce642f577bf7f473932318056212bc4f8bfdf53128c78bbd5af0b9b20b189", size = 57328, upload-time = "2026-04-27T01:46:07.06Z" }, -] - [[package]] name = "platformdirs" version = "4.10.0" @@ -394,8 +356,9 @@ dependencies = [ [package.dev-dependencies] dev = [ - { name = "black" }, { name = "coverage" }, + { name = "pre-commit" }, + { name = "ruff" }, ] [package.metadata] @@ -413,8 +376,25 @@ requires-dist = [ [package.metadata.requires-dev] dev = [ - { name = "black", specifier = ">=26.5.1" }, { name = "coverage", specifier = "==7.13.1" }, + { name = "pre-commit", specifier = ">=4.6.0" }, + { name = "ruff", specifier = ">=0.15.21" }, +] + +[[package]] +name = "pre-commit" +version = "4.6.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cfgv" }, + { name = "identify" }, + { name = "nodeenv" }, + { name = "pyyaml" }, + { name = "virtualenv" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8e/22/2de9408ac81acbb8a7d05d4cc064a152ccf33b3d480ebe0cd292153db239/pre_commit-4.6.0.tar.gz", hash = "sha256:718d2208cef53fdc38206e40524a6d4d9576d103eb16f0fec11c875e7716e9d9", size = 198525, upload-time = "2026-04-21T20:31:41.613Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/80/6e/4b28b62ecb6aae56769c34a8ff1d661473ec1e9519e2d5f8b2c150086b26/pre_commit-4.6.0-py2.py3-none-any.whl", hash = "sha256:e2cf246f7299edcabcf15f9b0571fdce06058527f0a06535068a86d38089f29b", size = 226472, upload-time = "2026-04-21T20:31:40.092Z" }, ] [[package]] @@ -498,42 +478,16 @@ wheels = [ ] [[package]] -name = "pytokens" -version = "0.4.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b6/34/b4e015b99031667a7b960f888889c5bd34ef585c85e1cb56a594b92836ac/pytokens-0.4.1.tar.gz", hash = "sha256:292052fe80923aae2260c073f822ceba21f3872ced9a68bb7953b348e561179a", size = 23015, upload-time = "2026-01-30T01:03:45.924Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/42/24/f206113e05cb8ef51b3850e7ef88f20da6f4bf932190ceb48bd3da103e10/pytokens-0.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2a44ed93ea23415c54f3face3b65ef2b844d96aeb3455b8a69b3df6beab6acc5", size = 161522, upload-time = "2026-01-30T01:02:50.393Z" }, - { url = "https://files.pythonhosted.org/packages/d4/e9/06a6bf1b90c2ed81a9c7d2544232fe5d2891d1cd480e8a1809ca354a8eb2/pytokens-0.4.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:add8bf86b71a5d9fb5b89f023a80b791e04fba57960aa790cc6125f7f1d39dfe", size = 246945, upload-time = "2026-01-30T01:02:52.399Z" }, - { url = "https://files.pythonhosted.org/packages/69/66/f6fb1007a4c3d8b682d5d65b7c1fb33257587a5f782647091e3408abe0b8/pytokens-0.4.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:670d286910b531c7b7e3c0b453fd8156f250adb140146d234a82219459b9640c", size = 259525, upload-time = "2026-01-30T01:02:53.737Z" }, - { url = "https://files.pythonhosted.org/packages/04/92/086f89b4d622a18418bac74ab5db7f68cf0c21cf7cc92de6c7b919d76c88/pytokens-0.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:4e691d7f5186bd2842c14813f79f8884bb03f5995f0575272009982c5ac6c0f7", size = 262693, upload-time = "2026-01-30T01:02:54.871Z" }, - { url = "https://files.pythonhosted.org/packages/b4/7b/8b31c347cf94a3f900bdde750b2e9131575a61fdb620d3d3c75832262137/pytokens-0.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:27b83ad28825978742beef057bfe406ad6ed524b2d28c252c5de7b4a6dd48fa2", size = 103567, upload-time = "2026-01-30T01:02:56.414Z" }, - { url = "https://files.pythonhosted.org/packages/3d/92/790ebe03f07b57e53b10884c329b9a1a308648fc083a6d4a39a10a28c8fc/pytokens-0.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d70e77c55ae8380c91c0c18dea05951482e263982911fc7410b1ffd1dadd3440", size = 160864, upload-time = "2026-01-30T01:02:57.882Z" }, - { url = "https://files.pythonhosted.org/packages/13/25/a4f555281d975bfdd1eba731450e2fe3a95870274da73fb12c40aeae7625/pytokens-0.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4a58d057208cb9075c144950d789511220b07636dd2e4708d5645d24de666bdc", size = 248565, upload-time = "2026-01-30T01:02:59.912Z" }, - { url = "https://files.pythonhosted.org/packages/17/50/bc0394b4ad5b1601be22fa43652173d47e4c9efbf0044c62e9a59b747c56/pytokens-0.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b49750419d300e2b5a3813cf229d4e5a4c728dae470bcc89867a9ad6f25a722d", size = 260824, upload-time = "2026-01-30T01:03:01.471Z" }, - { url = "https://files.pythonhosted.org/packages/4e/54/3e04f9d92a4be4fc6c80016bc396b923d2a6933ae94b5f557c939c460ee0/pytokens-0.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d9907d61f15bf7261d7e775bd5d7ee4d2930e04424bab1972591918497623a16", size = 264075, upload-time = "2026-01-30T01:03:04.143Z" }, - { url = "https://files.pythonhosted.org/packages/d1/1b/44b0326cb5470a4375f37988aea5d61b5cc52407143303015ebee94abfd6/pytokens-0.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:ee44d0f85b803321710f9239f335aafe16553b39106384cef8e6de40cb4ef2f6", size = 103323, upload-time = "2026-01-30T01:03:05.412Z" }, - { url = "https://files.pythonhosted.org/packages/41/5d/e44573011401fb82e9d51e97f1290ceb377800fb4eed650b96f4753b499c/pytokens-0.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:140709331e846b728475786df8aeb27d24f48cbcf7bcd449f8de75cae7a45083", size = 160663, upload-time = "2026-01-30T01:03:06.473Z" }, - { url = "https://files.pythonhosted.org/packages/f0/e6/5bbc3019f8e6f21d09c41f8b8654536117e5e211a85d89212d59cbdab381/pytokens-0.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d6c4268598f762bc8e91f5dbf2ab2f61f7b95bdc07953b602db879b3c8c18e1", size = 255626, upload-time = "2026-01-30T01:03:08.177Z" }, - { url = "https://files.pythonhosted.org/packages/bf/3c/2d5297d82286f6f3d92770289fd439956b201c0a4fc7e72efb9b2293758e/pytokens-0.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:24afde1f53d95348b5a0eb19488661147285ca4dd7ed752bbc3e1c6242a304d1", size = 269779, upload-time = "2026-01-30T01:03:09.756Z" }, - { url = "https://files.pythonhosted.org/packages/20/01/7436e9ad693cebda0551203e0bf28f7669976c60ad07d6402098208476de/pytokens-0.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5ad948d085ed6c16413eb5fec6b3e02fa00dc29a2534f088d3302c47eb59adf9", size = 268076, upload-time = "2026-01-30T01:03:10.957Z" }, - { url = "https://files.pythonhosted.org/packages/2e/df/533c82a3c752ba13ae7ef238b7f8cdd272cf1475f03c63ac6cf3fcfb00b6/pytokens-0.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:3f901fe783e06e48e8cbdc82d631fca8f118333798193e026a50ce1b3757ea68", size = 103552, upload-time = "2026-01-30T01:03:12.066Z" }, - { url = "https://files.pythonhosted.org/packages/cb/dc/08b1a080372afda3cceb4f3c0a7ba2bde9d6a5241f1edb02a22a019ee147/pytokens-0.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8bdb9d0ce90cbf99c525e75a2fa415144fd570a1ba987380190e8b786bc6ef9b", size = 160720, upload-time = "2026-01-30T01:03:13.843Z" }, - { url = "https://files.pythonhosted.org/packages/64/0c/41ea22205da480837a700e395507e6a24425151dfb7ead73343d6e2d7ffe/pytokens-0.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5502408cab1cb18e128570f8d598981c68a50d0cbd7c61312a90507cd3a1276f", size = 254204, upload-time = "2026-01-30T01:03:14.886Z" }, - { url = "https://files.pythonhosted.org/packages/e0/d2/afe5c7f8607018beb99971489dbb846508f1b8f351fcefc225fcf4b2adc0/pytokens-0.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:29d1d8fb1030af4d231789959f21821ab6325e463f0503a61d204343c9b355d1", size = 268423, upload-time = "2026-01-30T01:03:15.936Z" }, - { url = "https://files.pythonhosted.org/packages/68/d4/00ffdbd370410c04e9591da9220a68dc1693ef7499173eb3e30d06e05ed1/pytokens-0.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:970b08dd6b86058b6dc07efe9e98414f5102974716232d10f32ff39701e841c4", size = 266859, upload-time = "2026-01-30T01:03:17.458Z" }, - { url = "https://files.pythonhosted.org/packages/a7/c9/c3161313b4ca0c601eeefabd3d3b576edaa9afdefd32da97210700e47652/pytokens-0.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:9bd7d7f544d362576be74f9d5901a22f317efc20046efe2034dced238cbbfe78", size = 103520, upload-time = "2026-01-30T01:03:18.652Z" }, - { url = "https://files.pythonhosted.org/packages/8f/a7/b470f672e6fc5fee0a01d9e75005a0e617e162381974213a945fcd274843/pytokens-0.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:4a14d5f5fc78ce85e426aa159489e2d5961acf0e47575e08f35584009178e321", size = 160821, upload-time = "2026-01-30T01:03:19.684Z" }, - { url = "https://files.pythonhosted.org/packages/80/98/e83a36fe8d170c911f864bfded690d2542bfcfacb9c649d11a9e6eb9dc41/pytokens-0.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97f50fd18543be72da51dd505e2ed20d2228c74e0464e4262e4899797803d7fa", size = 254263, upload-time = "2026-01-30T01:03:20.834Z" }, - { url = "https://files.pythonhosted.org/packages/0f/95/70d7041273890f9f97a24234c00b746e8da86df462620194cef1d411ddeb/pytokens-0.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dc74c035f9bfca0255c1af77ddd2d6ae8419012805453e4b0e7513e17904545d", size = 268071, upload-time = "2026-01-30T01:03:21.888Z" }, - { url = "https://files.pythonhosted.org/packages/da/79/76e6d09ae19c99404656d7db9c35dfd20f2086f3eb6ecb496b5b31163bad/pytokens-0.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:f66a6bbe741bd431f6d741e617e0f39ec7257ca1f89089593479347cc4d13324", size = 271716, upload-time = "2026-01-30T01:03:23.633Z" }, - { url = "https://files.pythonhosted.org/packages/79/37/482e55fa1602e0a7ff012661d8c946bafdc05e480ea5a32f4f7e336d4aa9/pytokens-0.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:b35d7e5ad269804f6697727702da3c517bb8a5228afa450ab0fa787732055fc9", size = 104539, upload-time = "2026-01-30T01:03:24.788Z" }, - { url = "https://files.pythonhosted.org/packages/30/e8/20e7db907c23f3d63b0be3b8a4fd1927f6da2395f5bcc7f72242bb963dfe/pytokens-0.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:8fcb9ba3709ff77e77f1c7022ff11d13553f3c30299a9fe246a166903e9091eb", size = 168474, upload-time = "2026-01-30T01:03:26.428Z" }, - { url = "https://files.pythonhosted.org/packages/d6/81/88a95ee9fafdd8f5f3452107748fd04c24930d500b9aba9738f3ade642cc/pytokens-0.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:79fc6b8699564e1f9b521582c35435f1bd32dd06822322ec44afdeba666d8cb3", size = 290473, upload-time = "2026-01-30T01:03:27.415Z" }, - { url = "https://files.pythonhosted.org/packages/cf/35/3aa899645e29b6375b4aed9f8d21df219e7c958c4c186b465e42ee0a06bf/pytokens-0.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d31b97b3de0f61571a124a00ffe9a81fb9939146c122c11060725bd5aea79975", size = 303485, upload-time = "2026-01-30T01:03:28.558Z" }, - { url = "https://files.pythonhosted.org/packages/52/a0/07907b6ff512674d9b201859f7d212298c44933633c946703a20c25e9d81/pytokens-0.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:967cf6e3fd4adf7de8fc73cd3043754ae79c36475c1c11d514fc72cf5490094a", size = 306698, upload-time = "2026-01-30T01:03:29.653Z" }, - { url = "https://files.pythonhosted.org/packages/39/2a/cbbf9250020a4a8dd53ba83a46c097b69e5eb49dd14e708f496f548c6612/pytokens-0.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:584c80c24b078eec1e227079d56dc22ff755e0ba8654d8383b2c549107528918", size = 116287, upload-time = "2026-01-30T01:03:30.912Z" }, - { url = "https://files.pythonhosted.org/packages/c6/78/397db326746f0a342855b81216ae1f0a32965deccfd7c830a2dbc66d2483/pytokens-0.4.1-py3-none-any.whl", hash = "sha256:26cef14744a8385f35d0e095dc8b3a7583f6c953c2e3d269c7f82484bf5ad2de", size = 13729, upload-time = "2026-01-30T01:03:45.029Z" }, +name = "python-discovery" +version = "1.4.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "filelock" }, + { name = "platformdirs" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/4c/81/58c70036dffeccb7fe7d79d6260c69f7a28272bbd3909c29a01ea9422744/python_discovery-1.4.4.tar.gz", hash = "sha256:5cad33982d412c1f3ffb8f9ca4ea292c9680bca3942451d30b69c37fce53a4a3", size = 72212, upload-time = "2026-07-08T23:06:50.691Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9d/ae/84bc0d2440c95772272bb6f4b3d09ccf08b2898fce89b3d4f969a9fc74e9/python_discovery-1.4.4-py3-none-any.whl", hash = "sha256:abebe9120b43453b68c908acfb1e72a19d1a959ed2cb620ad38fc57d08056dbe", size = 34181, upload-time = "2026-07-08T23:06:49.402Z" }, ] [[package]] @@ -864,6 +818,31 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ea/ea/e7b0251441da9adfeaebcf29601d10f2a1455fcf0772fae9e7e19032bd96/rpds_py-2026.5.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:8c43a8a973270fd173bf48cdf80bbe66312421cba68d40845034f174f2389049", size = 586326, upload-time = "2026-05-28T12:02:11.47Z" }, ] +[[package]] +name = "ruff" +version = "0.15.21" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0f/36/6f65aa9989acdec45d417192d8f4e7921931d8a6cf87ac74bce3eed98a8e/ruff-0.15.21.tar.gz", hash = "sha256:d0cfc841c572283c36548f82664a54ce6565567f1b0d5b4cf2caac693d8b7500", size = 4769401, upload-time = "2026-07-09T20:01:34.005Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d0/c6/ede15cac6839f3dbce52565c8f5164a8210e669c7bc4decb03e5bdf47d0d/ruff-0.15.21-py3-none-linux_armv6l.whl", hash = "sha256:63ea0e965e5d73c90e95b2434beeafc70820536717f561b32ab6e777cb9bdf5d", size = 10854342, upload-time = "2026-07-09T20:00:53.998Z" }, + { url = "https://files.pythonhosted.org/packages/28/9d/d825b07ee7ea9e2d61df92a860033c94e06e7300d50a1c2653aac27d24fe/ruff-0.15.21-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:0f212c5d7d54c01bbfe6dcab02b724a39300f3e34ed7acbe995ccb320a2c58bd", size = 11139539, upload-time = "2026-07-09T20:00:57.809Z" }, + { url = "https://files.pythonhosted.org/packages/f5/de/3b107712e642f063c7a9e0887c427b22cb44097de5aab36c05f2e280670c/ruff-0.15.21-py3-none-macosx_11_0_arm64.whl", hash = "sha256:e6312e41bc96791299614995ea3a977c5857c3b5662b1ecef6755b02b87cb646", size = 10595437, upload-time = "2026-07-09T20:01:00.006Z" }, + { url = "https://files.pythonhosted.org/packages/9a/6f/b4523cc90ba239ede441447a19d0c968846a3012e5a0b0c5b62831a3d5e3/ruff-0.15.21-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01d65b4831c6b2a4ba8ee6faa84049d44d982b7a706e622c4094c509e51673be", size = 10990053, upload-time = "2026-07-09T20:01:02.187Z" }, + { url = "https://files.pythonhosted.org/packages/92/cc/c6a9872a5375f0628875481cf2f66b13d7d865bf3ca2e57f91c7e762d976/ruff-0.15.21-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2c5a913a589120ce67933d5d05fd6ddbcc2481c6a054980ee767f7414c72b4fd", size = 10666096, upload-time = "2026-07-09T20:01:04.299Z" }, + { url = "https://files.pythonhosted.org/packages/ab/97/c621f7a17e097f1790fa3af6374138823b330b2d03fc38337945daca212c/ruff-0.15.21-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef04b681d02ad4dc9620f00f83ac5c22f652d0e9a9cfe431d219b16ad5ccc41", size = 11537011, upload-time = "2026-07-09T20:01:06.771Z" }, + { url = "https://files.pythonhosted.org/packages/ea/51/d928727e476e25ccc57c6f449ffd80241a651a973ad949d39cfb2a771d28/ruff-0.15.21-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:16d090c0740916594157e75b80d666eab8e78083b39b3b0e1d698f4670a17b86", size = 12347101, upload-time = "2026-07-09T20:01:08.859Z" }, + { url = "https://files.pythonhosted.org/packages/1e/88/8cd62026802b16018ad06931d87997cf795ba2a6239ab659606c87d96bf0/ruff-0.15.21-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3a10e74757dd65004d779b73e2f3c5210156d9980b41224d50d2ebcf1db51e67", size = 11572001, upload-time = "2026-07-09T20:01:11.092Z" }, + { url = "https://files.pythonhosted.org/packages/b2/97/f63084cf55444fc110e8cb985ebfcc592af47f597d44453d778cb81bc156/ruff-0.15.21-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bab0905d2f29e0d9fbc3c373ed23db0095edaa3f71f1f4f519ec15134d9e85c8", size = 11549239, upload-time = "2026-07-09T20:01:13.27Z" }, + { url = "https://files.pythonhosted.org/packages/9d/77/f107da4a2874b7715914b03f09ba9c54424de3ff8a1cc5d015d3ee2ce0ac/ruff-0.15.21-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:00eca240af5789fec6fe7df74c088cc1f9644ed83027113468efba7c92b94075", size = 11535340, upload-time = "2026-07-09T20:01:15.206Z" }, + { url = "https://files.pythonhosted.org/packages/d5/e9/601deb322d3303a7bf212b0100ead6f2ee3f6a044d89c30f2f92bf83c731/ruff-0.15.21-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:262ab31557a75141325e32d3357f3597645a7f084e732b6b054dde428ecd9341", size = 10964048, upload-time = "2026-07-09T20:01:17.723Z" }, + { url = "https://files.pythonhosted.org/packages/ea/2e/0f2176d1e99c15192caea19c8c3a0a955246b4cb4de795042eeb616345cd/ruff-0.15.21-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:659c4e7a4212f83306045ec7c5e5a356d16d9a6ef4ae0c7a4d872914fc655d9d", size = 10667055, upload-time = "2026-07-09T20:01:19.73Z" }, + { url = "https://files.pythonhosted.org/packages/48/60/abd74a02e0c4214f12a68becfd30af7165cfdcb0e661ecdc60bbb949c09a/ruff-0.15.21-py3-none-musllinux_1_2_i686.whl", hash = "sha256:9e866eab611a5f959d36df2d10e446973a3610bc42b0c15b31dc27977d59c233", size = 11242043, upload-time = "2026-07-09T20:01:21.947Z" }, + { url = "https://files.pythonhosted.org/packages/b2/c6/583075d8ccabb4b229345edcaf1545eb3d8d6be90f686a479d7e94088bbf/ruff-0.15.21-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:e89bc93c0d3803ba870b55c29671bad9dc6d94bb1eb181b056b52eb05b52854f", size = 11648064, upload-time = "2026-07-09T20:01:24.023Z" }, + { url = "https://files.pythonhosted.org/packages/3a/3c/37d0ecb729a7cc2d393ea7dce316fc585680f35d93b8d62139d7d0a3700c/ruff-0.15.21-py3-none-win32.whl", hash = "sha256:01f8d5be84823c172b389e123174f781f9daf86d6c58719d603f941932195cdd", size = 10896555, upload-time = "2026-07-09T20:01:26.941Z" }, + { url = "https://files.pythonhosted.org/packages/c0/b8/e43466b2a6067ce91e669068f6e28d6c719a920f014b070d5c8731725de3/ruff-0.15.21-py3-none-win_amd64.whl", hash = "sha256:d4b8d9a2f0f12b816b50447f6eccb9f4bb01a6b82c86b50fb3b5354b458dc6d3", size = 12038772, upload-time = "2026-07-09T20:01:29.497Z" }, + { url = "https://files.pythonhosted.org/packages/dd/75/e90ab9aeece218a9fc5a5bc3ec97d0ee6bb3c4ff95869463c1de58e29a1c/ruff-0.15.21-py3-none-win_arm64.whl", hash = "sha256:6e83115d4b9377c1cbc13abf0e051f069fab0ef815ea0504a8a008cee24dd0a8", size = 11375265, upload-time = "2026-07-09T20:01:31.772Z" }, +] + [[package]] name = "sqlparse" version = "0.5.5" @@ -873,60 +852,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/49/4b/359f28a903c13438ef59ebeee215fb25da53066db67b305c125f1c6d2a25/sqlparse-0.5.5-py3-none-any.whl", hash = "sha256:12a08b3bf3eec877c519589833aed092e2444e68240a3577e8e26148acc7b1ba", size = 46138, upload-time = "2025-12-19T07:17:46.573Z" }, ] -[[package]] -name = "tomli" -version = "2.4.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/22/de/48c59722572767841493b26183a0d1cc411d54fd759c5607c4590b6563a6/tomli-2.4.1.tar.gz", hash = "sha256:7c7e1a961a0b2f2472c1ac5b69affa0ae1132c39adcb67aba98568702b9cc23f", size = 17543, upload-time = "2026-03-25T20:22:03.828Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f4/11/db3d5885d8528263d8adc260bb2d28ebf1270b96e98f0e0268d32b8d9900/tomli-2.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f8f0fc26ec2cc2b965b7a3b87cd19c5c6b8c5e5f436b984e85f486d652285c30", size = 154704, upload-time = "2026-03-25T20:21:10.473Z" }, - { url = "https://files.pythonhosted.org/packages/6d/f7/675db52c7e46064a9aa928885a9b20f4124ecb9bc2e1ce74c9106648d202/tomli-2.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4ab97e64ccda8756376892c53a72bd1f964e519c77236368527f758fbc36a53a", size = 149454, upload-time = "2026-03-25T20:21:12.036Z" }, - { url = "https://files.pythonhosted.org/packages/61/71/81c50943cf953efa35bce7646caab3cf457a7d8c030b27cfb40d7235f9ee/tomli-2.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96481a5786729fd470164b47cdb3e0e58062a496f455ee41b4403be77cb5a076", size = 237561, upload-time = "2026-03-25T20:21:13.098Z" }, - { url = "https://files.pythonhosted.org/packages/48/c1/f41d9cb618acccca7df82aaf682f9b49013c9397212cb9f53219e3abac37/tomli-2.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a881ab208c0baf688221f8cecc5401bd291d67e38a1ac884d6736cbcd8247e9", size = 243824, upload-time = "2026-03-25T20:21:14.569Z" }, - { url = "https://files.pythonhosted.org/packages/22/e4/5a816ecdd1f8ca51fb756ef684b90f2780afc52fc67f987e3c61d800a46d/tomli-2.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47149d5bd38761ac8be13a84864bf0b7b70bc051806bc3669ab1cbc56216b23c", size = 242227, upload-time = "2026-03-25T20:21:15.712Z" }, - { url = "https://files.pythonhosted.org/packages/6b/49/2b2a0ef529aa6eec245d25f0c703e020a73955ad7edf73e7f54ddc608aa5/tomli-2.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ec9bfaf3ad2df51ace80688143a6a4ebc09a248f6ff781a9945e51937008fcbc", size = 247859, upload-time = "2026-03-25T20:21:17.001Z" }, - { url = "https://files.pythonhosted.org/packages/83/bd/6c1a630eaca337e1e78c5903104f831bda934c426f9231429396ce3c3467/tomli-2.4.1-cp311-cp311-win32.whl", hash = "sha256:ff2983983d34813c1aeb0fa89091e76c3a22889ee83ab27c5eeb45100560c049", size = 97204, upload-time = "2026-03-25T20:21:18.079Z" }, - { url = "https://files.pythonhosted.org/packages/42/59/71461df1a885647e10b6bb7802d0b8e66480c61f3f43079e0dcd315b3954/tomli-2.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:5ee18d9ebdb417e384b58fe414e8d6af9f4e7a0ae761519fb50f721de398dd4e", size = 108084, upload-time = "2026-03-25T20:21:18.978Z" }, - { url = "https://files.pythonhosted.org/packages/b8/83/dceca96142499c069475b790e7913b1044c1a4337e700751f48ed723f883/tomli-2.4.1-cp311-cp311-win_arm64.whl", hash = "sha256:c2541745709bad0264b7d4705ad453b76ccd191e64aa6f0fc66b69a293a45ece", size = 95285, upload-time = "2026-03-25T20:21:20.309Z" }, - { url = "https://files.pythonhosted.org/packages/c1/ba/42f134a3fe2b370f555f44b1d72feebb94debcab01676bf918d0cb70e9aa/tomli-2.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c742f741d58a28940ce01d58f0ab2ea3ced8b12402f162f4d534dfe18ba1cd6a", size = 155924, upload-time = "2026-03-25T20:21:21.626Z" }, - { url = "https://files.pythonhosted.org/packages/dc/c7/62d7a17c26487ade21c5422b646110f2162f1fcc95980ef7f63e73c68f14/tomli-2.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7f86fd587c4ed9dd76f318225e7d9b29cfc5a9d43de44e5754db8d1128487085", size = 150018, upload-time = "2026-03-25T20:21:23.002Z" }, - { url = "https://files.pythonhosted.org/packages/5c/05/79d13d7c15f13bdef410bdd49a6485b1c37d28968314eabee452c22a7fda/tomli-2.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ff18e6a727ee0ab0388507b89d1bc6a22b138d1e2fa56d1ad494586d61d2eae9", size = 244948, upload-time = "2026-03-25T20:21:24.04Z" }, - { url = "https://files.pythonhosted.org/packages/10/90/d62ce007a1c80d0b2c93e02cab211224756240884751b94ca72df8a875ca/tomli-2.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:136443dbd7e1dee43c68ac2694fde36b2849865fa258d39bf822c10e8068eac5", size = 253341, upload-time = "2026-03-25T20:21:25.177Z" }, - { url = "https://files.pythonhosted.org/packages/1a/7e/caf6496d60152ad4ed09282c1885cca4eea150bfd007da84aea07bcc0a3e/tomli-2.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5e262d41726bc187e69af7825504c933b6794dc3fbd5945e41a79bb14c31f585", size = 248159, upload-time = "2026-03-25T20:21:26.364Z" }, - { url = "https://files.pythonhosted.org/packages/99/e7/c6f69c3120de34bbd882c6fba7975f3d7a746e9218e56ab46a1bc4b42552/tomli-2.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5cb41aa38891e073ee49d55fbc7839cfdb2bc0e600add13874d048c94aadddd1", size = 253290, upload-time = "2026-03-25T20:21:27.46Z" }, - { url = "https://files.pythonhosted.org/packages/d6/2f/4a3c322f22c5c66c4b836ec58211641a4067364f5dcdd7b974b4c5da300c/tomli-2.4.1-cp312-cp312-win32.whl", hash = "sha256:da25dc3563bff5965356133435b757a795a17b17d01dbc0f42fb32447ddfd917", size = 98141, upload-time = "2026-03-25T20:21:28.492Z" }, - { url = "https://files.pythonhosted.org/packages/24/22/4daacd05391b92c55759d55eaee21e1dfaea86ce5c571f10083360adf534/tomli-2.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:52c8ef851d9a240f11a88c003eacb03c31fc1c9c4ec64a99a0f922b93874fda9", size = 108847, upload-time = "2026-03-25T20:21:29.386Z" }, - { url = "https://files.pythonhosted.org/packages/68/fd/70e768887666ddd9e9f5d85129e84910f2db2796f9096aa02b721a53098d/tomli-2.4.1-cp312-cp312-win_arm64.whl", hash = "sha256:f758f1b9299d059cc3f6546ae2af89670cb1c4d48ea29c3cacc4fe7de3058257", size = 95088, upload-time = "2026-03-25T20:21:30.677Z" }, - { url = "https://files.pythonhosted.org/packages/07/06/b823a7e818c756d9a7123ba2cda7d07bc2dd32835648d1a7b7b7a05d848d/tomli-2.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:36d2bd2ad5fb9eaddba5226aa02c8ec3fa4f192631e347b3ed28186d43be6b54", size = 155866, upload-time = "2026-03-25T20:21:31.65Z" }, - { url = "https://files.pythonhosted.org/packages/14/6f/12645cf7f08e1a20c7eb8c297c6f11d31c1b50f316a7e7e1e1de6e2e7b7e/tomli-2.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:eb0dc4e38e6a1fd579e5d50369aa2e10acfc9cace504579b2faabb478e76941a", size = 149887, upload-time = "2026-03-25T20:21:33.028Z" }, - { url = "https://files.pythonhosted.org/packages/5c/e0/90637574e5e7212c09099c67ad349b04ec4d6020324539297b634a0192b0/tomli-2.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c7f2c7f2b9ca6bdeef8f0fa897f8e05085923eb091721675170254cbc5b02897", size = 243704, upload-time = "2026-03-25T20:21:34.51Z" }, - { url = "https://files.pythonhosted.org/packages/10/8f/d3ddb16c5a4befdf31a23307f72828686ab2096f068eaf56631e136c1fdd/tomli-2.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f3c6818a1a86dd6dca7ddcaaf76947d5ba31aecc28cb1b67009a5877c9a64f3f", size = 251628, upload-time = "2026-03-25T20:21:36.012Z" }, - { url = "https://files.pythonhosted.org/packages/e3/f1/dbeeb9116715abee2485bf0a12d07a8f31af94d71608c171c45f64c0469d/tomli-2.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d312ef37c91508b0ab2cee7da26ec0b3ed2f03ce12bd87a588d771ae15dcf82d", size = 247180, upload-time = "2026-03-25T20:21:37.136Z" }, - { url = "https://files.pythonhosted.org/packages/d3/74/16336ffd19ed4da28a70959f92f506233bd7cfc2332b20bdb01591e8b1d1/tomli-2.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51529d40e3ca50046d7606fa99ce3956a617f9b36380da3b7f0dd3dd28e68cb5", size = 251674, upload-time = "2026-03-25T20:21:38.298Z" }, - { url = "https://files.pythonhosted.org/packages/16/f9/229fa3434c590ddf6c0aa9af64d3af4b752540686cace29e6281e3458469/tomli-2.4.1-cp313-cp313-win32.whl", hash = "sha256:2190f2e9dd7508d2a90ded5ed369255980a1bcdd58e52f7fe24b8162bf9fedbd", size = 97976, upload-time = "2026-03-25T20:21:39.316Z" }, - { url = "https://files.pythonhosted.org/packages/6a/1e/71dfd96bcc1c775420cb8befe7a9d35f2e5b1309798f009dca17b7708c1e/tomli-2.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:8d65a2fbf9d2f8352685bc1364177ee3923d6baf5e7f43ea4959d7d8bc326a36", size = 108755, upload-time = "2026-03-25T20:21:40.248Z" }, - { url = "https://files.pythonhosted.org/packages/83/7a/d34f422a021d62420b78f5c538e5b102f62bea616d1d75a13f0a88acb04a/tomli-2.4.1-cp313-cp313-win_arm64.whl", hash = "sha256:4b605484e43cdc43f0954ddae319fb75f04cc10dd80d830540060ee7cd0243cd", size = 95265, upload-time = "2026-03-25T20:21:41.219Z" }, - { url = "https://files.pythonhosted.org/packages/3c/fb/9a5c8d27dbab540869f7c1f8eb0abb3244189ce780ba9cd73f3770662072/tomli-2.4.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:fd0409a3653af6c147209d267a0e4243f0ae46b011aa978b1080359fddc9b6cf", size = 155726, upload-time = "2026-03-25T20:21:42.23Z" }, - { url = "https://files.pythonhosted.org/packages/62/05/d2f816630cc771ad836af54f5001f47a6f611d2d39535364f148b6a92d6b/tomli-2.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a120733b01c45e9a0c34aeef92bf0cf1d56cfe81ed9d47d562f9ed591a9828ac", size = 149859, upload-time = "2026-03-25T20:21:43.386Z" }, - { url = "https://files.pythonhosted.org/packages/ce/48/66341bdb858ad9bd0ceab5a86f90eddab127cf8b046418009f2125630ecb/tomli-2.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:559db847dc486944896521f68d8190be1c9e719fced785720d2216fe7022b662", size = 244713, upload-time = "2026-03-25T20:21:44.474Z" }, - { url = "https://files.pythonhosted.org/packages/df/6d/c5fad00d82b3c7a3ab6189bd4b10e60466f22cfe8a08a9394185c8a8111c/tomli-2.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01f520d4f53ef97964a240a035ec2a869fe1a37dde002b57ebc4417a27ccd853", size = 252084, upload-time = "2026-03-25T20:21:45.62Z" }, - { url = "https://files.pythonhosted.org/packages/00/71/3a69e86f3eafe8c7a59d008d245888051005bd657760e96d5fbfb0b740c2/tomli-2.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7f94b27a62cfad8496c8d2513e1a222dd446f095fca8987fceef261225538a15", size = 247973, upload-time = "2026-03-25T20:21:46.937Z" }, - { url = "https://files.pythonhosted.org/packages/67/50/361e986652847fec4bd5e4a0208752fbe64689c603c7ae5ea7cb16b1c0ca/tomli-2.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ede3e6487c5ef5d28634ba3f31f989030ad6af71edfb0055cbbd14189ff240ba", size = 256223, upload-time = "2026-03-25T20:21:48.467Z" }, - { url = "https://files.pythonhosted.org/packages/8c/9a/b4173689a9203472e5467217e0154b00e260621caa227b6fa01feab16998/tomli-2.4.1-cp314-cp314-win32.whl", hash = "sha256:3d48a93ee1c9b79c04bb38772ee1b64dcf18ff43085896ea460ca8dec96f35f6", size = 98973, upload-time = "2026-03-25T20:21:49.526Z" }, - { url = "https://files.pythonhosted.org/packages/14/58/640ac93bf230cd27d002462c9af0d837779f8773bc03dee06b5835208214/tomli-2.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:88dceee75c2c63af144e456745e10101eb67361050196b0b6af5d717254dddf7", size = 109082, upload-time = "2026-03-25T20:21:50.506Z" }, - { url = "https://files.pythonhosted.org/packages/d5/2f/702d5e05b227401c1068f0d386d79a589bb12bf64c3d2c72ce0631e3bc49/tomli-2.4.1-cp314-cp314-win_arm64.whl", hash = "sha256:b8c198f8c1805dc42708689ed6864951fd2494f924149d3e4bce7710f8eb5232", size = 96490, upload-time = "2026-03-25T20:21:51.474Z" }, - { url = "https://files.pythonhosted.org/packages/45/4b/b877b05c8ba62927d9865dd980e34a755de541eb65fffba52b4cc495d4d2/tomli-2.4.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:d4d8fe59808a54658fcc0160ecfb1b30f9089906c50b23bcb4c69eddc19ec2b4", size = 164263, upload-time = "2026-03-25T20:21:52.543Z" }, - { url = "https://files.pythonhosted.org/packages/24/79/6ab420d37a270b89f7195dec5448f79400d9e9c1826df982f3f8e97b24fd/tomli-2.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7008df2e7655c495dd12d2a4ad038ff878d4ca4b81fccaf82b714e07eae4402c", size = 160736, upload-time = "2026-03-25T20:21:53.674Z" }, - { url = "https://files.pythonhosted.org/packages/02/e0/3630057d8eb170310785723ed5adcdfb7d50cb7e6455f85ba8a3deed642b/tomli-2.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1d8591993e228b0c930c4bb0db464bdad97b3289fb981255d6c9a41aedc84b2d", size = 270717, upload-time = "2026-03-25T20:21:55.129Z" }, - { url = "https://files.pythonhosted.org/packages/7a/b4/1613716072e544d1a7891f548d8f9ec6ce2faf42ca65acae01d76ea06bb0/tomli-2.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:734e20b57ba95624ecf1841e72b53f6e186355e216e5412de414e3c51e5e3c41", size = 278461, upload-time = "2026-03-25T20:21:56.228Z" }, - { url = "https://files.pythonhosted.org/packages/05/38/30f541baf6a3f6df77b3df16b01ba319221389e2da59427e221ef417ac0c/tomli-2.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8a650c2dbafa08d42e51ba0b62740dae4ecb9338eefa093aa5c78ceb546fcd5c", size = 274855, upload-time = "2026-03-25T20:21:57.653Z" }, - { url = "https://files.pythonhosted.org/packages/77/a3/ec9dd4fd2c38e98de34223b995a3b34813e6bdadf86c75314c928350ed14/tomli-2.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:504aa796fe0569bb43171066009ead363de03675276d2d121ac1a4572397870f", size = 283144, upload-time = "2026-03-25T20:21:59.089Z" }, - { url = "https://files.pythonhosted.org/packages/ef/be/605a6261cac79fba2ec0c9827e986e00323a1945700969b8ee0b30d85453/tomli-2.4.1-cp314-cp314t-win32.whl", hash = "sha256:b1d22e6e9387bf4739fbe23bfa80e93f6b0373a7f1b96c6227c32bef95a4d7a8", size = 108683, upload-time = "2026-03-25T20:22:00.214Z" }, - { url = "https://files.pythonhosted.org/packages/12/64/da524626d3b9cc40c168a13da8335fe1c51be12c0a63685cc6db7308daae/tomli-2.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:2c1c351919aca02858f740c6d33adea0c5deea37f9ecca1cc1ef9e884a619d26", size = 121196, upload-time = "2026-03-25T20:22:01.169Z" }, - { url = "https://files.pythonhosted.org/packages/5a/cd/e80b62269fc78fc36c9af5a6b89c835baa8af28ff5ad28c7028d60860320/tomli-2.4.1-cp314-cp314t-win_arm64.whl", hash = "sha256:eab21f45c7f66c13f2a9e0e1535309cee140182a9cdae1e041d02e47291e8396", size = 100393, upload-time = "2026-03-25T20:22:02.137Z" }, - { url = "https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl", hash = "sha256:0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe", size = 14583, upload-time = "2026-03-25T20:22:03.012Z" }, -] - [[package]] name = "typing-extensions" version = "4.15.0" @@ -953,3 +878,19 @@ sdist = { url = "https://files.pythonhosted.org/packages/98/60/f174043244c5306c9 wheels = [ { url = "https://files.pythonhosted.org/packages/a9/99/3ae339466c9183ea5b8ae87b34c0b897eda475d2aec2307cae60e5cd4f29/uritemplate-4.2.0-py3-none-any.whl", hash = "sha256:962201ba1c4edcab02e60f9a0d3821e82dfc5d2d6662a21abd533879bdb8a686", size = 11488, upload-time = "2025-06-02T15:12:03.405Z" }, ] + +[[package]] +name = "virtualenv" +version = "21.6.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "distlib" }, + { name = "filelock" }, + { name = "platformdirs" }, + { name = "python-discovery" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/34/d9/b477fddb68840b570af8b22afe9b035cbc277b5fb7b33dea390617a8b10f/virtualenv-21.6.1.tar.gz", hash = "sha256:15f978b7cd329f24855ff4a0c4b4899cc7678589f49adbdcbbb4d3232e641128", size = 5526620, upload-time = "2026-07-10T19:33:53.312Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/7c/4e7225d46d634a0d8d534dd8a6ce0c319d09b4d0cf0337eb314ca4789d8c/virtualenv-21.6.1-py3-none-any.whl", hash = "sha256:afe991df855715a2b2f60edfcc0107ef95a79fdfd8cb4cdaa71603d1c12e463b", size = 5506392, upload-time = "2026-07-10T19:33:51.629Z" }, +] From fdf26db27d9454a05845d2eea4bec16bbe10b563 Mon Sep 17 00:00:00 2001 From: Triyan Mukherjee Date: Sun, 12 Jul 2026 13:43:48 +0530 Subject: [PATCH 02/11] fix: Update pre-commit hook args --- .pre-commit-config.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 86ff4830a..1516d164d 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -7,9 +7,13 @@ repos: - id: check-json - id: check-toml - id: check-yaml + args: + - --allow-multiple-documents - id: end-of-file-fixer - id: fix-byte-order-marker - id: pretty-format-json + args: + - --no-sort-keys - id: sort-simple-yaml - id: trailing-whitespace args: From 49ea1fb984f3fd360e627b040477fd9c5776477a Mon Sep 17 00:00:00 2001 From: Triyan Mukherjee Date: Sun, 12 Jul 2026 13:49:11 +0530 Subject: [PATCH 03/11] fix: Update pre-commit hook args --- .pre-commit-config.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 1516d164d..a6274ced3 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -14,6 +14,7 @@ repos: - id: pretty-format-json args: - --no-sort-keys + - --no-ensure-ascii - id: sort-simple-yaml - id: trailing-whitespace args: @@ -32,4 +33,4 @@ repos: name: Ruff Format entry: ruff format . language: python - + types_or: [python, pyi] From 85104cef4cda6ba8d24371c8f66e7aab013c9eb6 Mon Sep 17 00:00:00 2001 From: Triyan Mukherjee Date: Sun, 12 Jul 2026 13:52:08 +0530 Subject: [PATCH 04/11] fix: Update pre-commit hook args --- .pre-commit-config.yaml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index a6274ced3..1be7035ba 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -20,17 +20,18 @@ repos: args: - --markdown-linebreak-ext=md - - repo: https://github.com/pre-commit/pygrep-hooks - rev: v1.9.0 - hooks: - - id: python-check-blanket-noqa - - id: python-check-blanket-type-ignore - - id: python-use-type-annotations + # TODO: Enable in the future when adding the ruff linter + # - repo: https://github.com/pre-commit/pygrep-hooks + # rev: v1.9.0 + # hooks: + # - id: python-check-blanket-noqa + # - id: python-check-blanket-type-ignore + # - id: python-use-type-annotations - repo: local hooks: - id: ruff-format name: Ruff Format - entry: ruff format . + entry: ruff format . language: python types_or: [python, pyi] From 707b6458cf50b646243a806bef98fa949e65fc11 Mon Sep 17 00:00:00 2001 From: Triyan Mukherjee Date: Sun, 12 Jul 2026 14:29:36 +0530 Subject: [PATCH 05/11] feat: Add csv lint check --- .pre-commit-config.yaml | 7 + Resources/scripts/check_csv.py | 51 + config/settings.py | 4 +- data/v2/build.py | 677 ++----- pokemon_v2/api.py | 48 +- .../0001_squashed_0002_auto_20160301_1408.py | 20 +- pokemon_v2/migrations/0024_django5.py | 1 - pokemon_v2/migrations/0025_pokemonstatpast.py | 1 - .../0026_alter_pokemonevolution_base_form.py | 1 - ...0027_pokemonevolution_near_special_rock.py | 1 - ..._pokemonevolution_evolved_form_and_more.py | 1 - ...pokemonformtrigger_pokemonformcondition.py | 1 - pokemon_v2/models.py | 80 +- pokemon_v2/serializers.py | 783 ++------ pokemon_v2/test_models.py | 20 +- pokemon_v2/tests.py | 1758 ++++------------- 16 files changed, 900 insertions(+), 2554 deletions(-) create mode 100644 Resources/scripts/check_csv.py diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 1be7035ba..d20cb55a1 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -30,6 +30,13 @@ repos: - repo: local hooks: + - id: check-csv + name: Check CSV + entry: uv run ./Resources/scripts/check_csv.py + language: python + args: [--encoding, utf-8] + files: \.csv$ + - id: ruff-format name: Ruff Format entry: ruff format . diff --git a/Resources/scripts/check_csv.py b/Resources/scripts/check_csv.py new file mode 100644 index 000000000..c5e1998e6 --- /dev/null +++ b/Resources/scripts/check_csv.py @@ -0,0 +1,51 @@ +import argparse +import csv +import locale +import typing +from concurrent.futures import ThreadPoolExecutor, as_completed + + +def check_csv(filename: str, encoding: str, delimiter: str) -> tuple[str, bool, str]: + try: + with open(filename, encoding=encoding, newline='') as f: + reader = csv.reader(f, delimiter=delimiter) + first_len = None + for line_no, row in enumerate(reader, start=1): + if first_len is None: + first_len = len(row) + elif len(row) != first_len: + message = f'line {line_no}: contains inconsistent columns (expected {first_len}, got {len(row)})' + return filename, False, message + except UnicodeDecodeError: + return filename, False, f'failed to decode csv text file using {encoding!r}' + + return filename, True, '' + + +def main(argv: typing.Sequence[str] | None = None) -> int: + parser = argparse.ArgumentParser() + parser.add_argument('-e', '--encoding', dest='encoding', default=locale.getpreferredencoding()) + parser.add_argument('-d', '--delimiter', dest='delimiter', default=',') + parser.add_argument('-j', '--jobs', dest='jobs', type=int, default=8) + parser.add_argument('filenames', nargs='*', help='Filenames to check.') + args = parser.parse_args(argv) + + print(f'Checking CSV files using encoding {args.encoding!r} and delimiter {args.delimiter!r}...') + print(f'Checking {len(args.filenames)} files with {args.jobs} workers...') + + retval = 0 + with ThreadPoolExecutor(max_workers=args.jobs) as executor: + futures = { + executor.submit(check_csv, filename, args.encoding, args.delimiter): filename + for filename in args.filenames + } + for future in as_completed(futures): + filename, ok, msg = future.result() + if not ok: + print(f'{filename}: {msg}') + retval = 1 + return retval + + +if __name__ == '__main__': + raise SystemExit(main()) diff --git a/config/settings.py b/config/settings.py index bb820e24e..b857c6cb5 100755 --- a/config/settings.py +++ b/config/settings.py @@ -77,9 +77,7 @@ } } -SECRET_KEY = os.environ.get( - "SECRET_KEY", "django-insecure-a(!_5+l3$#l1f4n!x+&ns_+8$4q@df*3rh$n#2h@l$2gti7!7-" -) +SECRET_KEY = os.environ.get("SECRET_KEY", "django-insecure-a(!_5+l3$#l1f4n!x+&ns_+8$4q@df*3rh$n#2h@l$2gti7!7-") CUSTOM_APPS = ("pokemon_v2",) diff --git a/data/v2/build.py b/data/v2/build.py index 93cb69711..83adf76eb 100644 --- a/data/v2/build.py +++ b/data/v2/build.py @@ -61,14 +61,8 @@ def file_path_or_none(file_name, image_file=True): if not image_file: - return ( - SOUND_DIR.format(file_name=file_name) - if file_name in RESOURCE_CRIES - else None - ) - return ( - MEDIA_DIR.format(file_name=file_name) if file_name in RESOURCE_IMAGES else None - ) + return SOUND_DIR.format(file_name=file_name) if file_name in RESOURCE_CRIES else None + return MEDIA_DIR.format(file_name=file_name) if file_name in RESOURCE_IMAGES else None def with_iter(context, iterable=None): @@ -81,9 +75,7 @@ def with_iter(context, iterable=None): def load_data(file_name): # with_iter closes the file when it has finished - return csv.reader( - with_iter(open(DATA_LOCATION + file_name, "rt", encoding="utf8")), delimiter="," - ) + return csv.reader(with_iter(open(DATA_LOCATION + file_name, "rt", encoding="utf8")), delimiter=",") def clear_table(model): @@ -92,17 +84,9 @@ def clear_table(model): print("building " + table_name) # Reset DB auto increments to start at 1 if DB_VENDOR == "sqlite": - DB_CURSOR.execute( - "DELETE FROM sqlite_sequence WHERE name = " + "'" + table_name + "'" - ) + DB_CURSOR.execute("DELETE FROM sqlite_sequence WHERE name = " + "'" + table_name + "'") else: - DB_CURSOR.execute( - "SELECT setval(pg_get_serial_sequence(" - + "'" - + table_name - + "'" - + ",'id'), 1, false);" - ) + DB_CURSOR.execute("SELECT setval(pg_get_serial_sequence(" + "'" + table_name + "'" + ",'id'), 1, false);") def build_generic(model_classes, file_name, csv_record_to_objects): @@ -147,9 +131,7 @@ def csv_record_to_objects(info): build_generic((Language,), "languages.csv", csv_record_to_objects) def csv_record_to_objects(info): - yield LanguageName( - language_id=int(info[0]), local_language_id=int(info[1]), name=info[2] - ) + yield LanguageName(language_id=int(info[0]), local_language_id=int(info[1]), name=info[2]) build_generic((LanguageName,), "language_names.csv", csv_record_to_objects) @@ -183,9 +165,7 @@ def csv_record_to_objects(info): build_generic((Generation,), "generations.csv", csv_record_to_objects) def csv_record_to_objects(info): - yield GenerationName( - generation_id=int(info[0]), language_id=int(info[1]), name=info[2] - ) + yield GenerationName(generation_id=int(info[0]), language_id=int(info[1]), name=info[2]) build_generic((GenerationName,), "generation_names.csv", csv_record_to_objects) @@ -209,9 +189,7 @@ def csv_record_to_objects(info): def csv_record_to_objects(info): yield VersionGroupRegion(version_group_id=int(info[0]), region_id=int(info[1])) - build_generic( - (VersionGroupRegion,), "version_group_regions.csv", csv_record_to_objects - ) + build_generic((VersionGroupRegion,), "version_group_regions.csv", csv_record_to_objects) def csv_record_to_objects(info): yield Version(id=int(info[0]), version_group_id=int(info[1]), name=info[2]) @@ -219,9 +197,7 @@ def csv_record_to_objects(info): build_generic((Version,), "versions.csv", csv_record_to_objects) def csv_record_to_objects(info): - yield VersionName( - version_id=int(info[0]), language_id=int(info[1]), name=info[2] - ) + yield VersionName(version_id=int(info[0]), language_id=int(info[1]), name=info[2]) build_generic((VersionName,), "version_names.csv", csv_record_to_objects) @@ -238,9 +214,7 @@ def csv_record_to_objects(info): build_generic((MoveDamageClass,), "move_damage_classes.csv", csv_record_to_objects) def csv_record_to_objects(info): - yield MoveDamageClassName( - move_damage_class_id=int(info[0]), language_id=int(info[1]), name=info[2] - ) + yield MoveDamageClassName(move_damage_class_id=int(info[0]), language_id=int(info[1]), name=info[2]) yield MoveDamageClassDescription( move_damage_class_id=int(info[0]), language_id=int(info[1]), @@ -282,13 +256,9 @@ def csv_record_to_objects(info): build_generic((PokeathlonStat,), "pokeathlon_stats.csv", csv_record_to_objects) def csv_record_to_objects(info): - yield PokeathlonStatName( - pokeathlon_stat_id=int(info[0]), language_id=int(info[1]), name=info[2] - ) + yield PokeathlonStatName(pokeathlon_stat_id=int(info[0]), language_id=int(info[1]), name=info[2]) - build_generic( - (PokeathlonStatName,), "pokeathlon_stat_names.csv", csv_record_to_objects - ) + build_generic((PokeathlonStatName,), "pokeathlon_stat_names.csv", csv_record_to_objects) # ############### @@ -308,16 +278,12 @@ def csv_record_to_objects(info): build_generic((Ability,), "abilities.csv", csv_record_to_objects) def csv_record_to_objects(info): - yield AbilityName( - ability_id=int(info[0]), language_id=int(info[1]), name=info[2] - ) + yield AbilityName(ability_id=int(info[0]), language_id=int(info[1]), name=info[2]) build_generic((AbilityName,), "ability_names.csv", csv_record_to_objects) def csv_record_to_objects(info): - yield AbilityChange( - id=int(info[0]), ability_id=int(info[1]), version_group_id=int(info[2]) - ) + yield AbilityChange(id=int(info[0]), ability_id=int(info[1]), version_group_id=int(info[2])) build_generic((AbilityChange,), "ability_changelog.csv", csv_record_to_objects) @@ -338,9 +304,7 @@ def csv_record_to_objects(info): effect=info[2], ) - build_generic( - (AbilityChangeEffectText,), "ability_changelog_prose.csv", csv_record_to_objects - ) + build_generic((AbilityChangeEffectText,), "ability_changelog_prose.csv", csv_record_to_objects) def csv_record_to_objects(info): yield AbilityFlavorText( @@ -350,9 +314,7 @@ def csv_record_to_objects(info): flavor_text=info[3], ) - build_generic( - (AbilityFlavorText,), "ability_flavor_text.csv", csv_record_to_objects - ) + build_generic((AbilityFlavorText,), "ability_flavor_text.csv", csv_record_to_objects) #################### @@ -362,9 +324,7 @@ def csv_record_to_objects(info): def _build_characteristics(): def csv_record_to_objects(info): - yield Characteristic( - id=int(info[0]), stat_id=int(info[1]), gene_mod_5=int(info[2]) - ) + yield Characteristic(id=int(info[0]), stat_id=int(info[1]), gene_mod_5=int(info[2])) build_generic((Characteristic,), "characteristics.csv", csv_record_to_objects) @@ -375,9 +335,7 @@ def csv_record_to_objects(info): description=info[2], ) - build_generic( - (CharacteristicDescription,), "characteristic_text.csv", csv_record_to_objects - ) + build_generic((CharacteristicDescription,), "characteristic_text.csv", csv_record_to_objects) ############### @@ -392,9 +350,7 @@ def csv_record_to_objects(info): build_generic((EggGroup,), "egg_groups.csv", csv_record_to_objects) def csv_record_to_objects(info): - yield EggGroupName( - egg_group_id=int(info[0]), language_id=int(info[1]), name=info[2] - ) + yield EggGroupName(egg_group_id=int(info[0]), language_id=int(info[1]), name=info[2]) build_generic((EggGroupName,), "egg_group_prose.csv", csv_record_to_objects) @@ -411,13 +367,9 @@ def csv_record_to_objects(info): build_generic((GrowthRate,), "growth_rates.csv", csv_record_to_objects) def csv_record_to_objects(info): - yield GrowthRateDescription( - growth_rate_id=int(info[0]), language_id=int(info[1]), description=info[2] - ) + yield GrowthRateDescription(growth_rate_id=int(info[0]), language_id=int(info[1]), description=info[2]) - build_generic( - (GrowthRateDescription,), "growth_rate_prose.csv", csv_record_to_objects - ) + build_generic((GrowthRateDescription,), "growth_rate_prose.csv", csv_record_to_objects) # ########### @@ -432,9 +384,7 @@ def csv_record_to_objects(info): build_generic((ItemPocket,), "item_pockets.csv", csv_record_to_objects) def csv_record_to_objects(info): - yield ItemPocketName( - item_pocket_id=int(info[0]), language_id=int(info[1]), name=info[2] - ) + yield ItemPocketName(item_pocket_id=int(info[0]), language_id=int(info[1]), name=info[2]) build_generic((ItemPocketName,), "item_pocket_names.csv", csv_record_to_objects) @@ -462,9 +412,7 @@ def csv_record_to_objects(info): build_generic((ItemCategory,), "item_categories.csv", csv_record_to_objects) def csv_record_to_objects(info): - yield ItemCategoryName( - item_category_id=int(info[0]), language_id=int(info[1]), name=info[2] - ) + yield ItemCategoryName(item_category_id=int(info[0]), language_id=int(info[1]), name=info[2]) build_generic((ItemCategoryName,), "item_category_prose.csv", csv_record_to_objects) @@ -512,9 +460,7 @@ def csv_record_to_objects(info): build_generic((ItemEffectText,), "item_prose.csv", csv_record_to_objects) def csv_record_to_objects(info): - yield ItemGameIndex( - item_id=int(info[0]), generation_id=int(info[1]), game_index=int(info[2]) - ) + yield ItemGameIndex(item_id=int(info[0]), generation_id=int(info[1]), game_index=int(info[2])) build_generic((ItemGameIndex,), "item_game_indices.csv", csv_record_to_objects) @@ -534,9 +480,7 @@ def csv_record_to_objects(info): build_generic((ItemAttribute,), "item_flags.csv", csv_record_to_objects) def csv_record_to_objects(info): - yield ItemAttributeName( - item_attribute_id=int(info[0]), language_id=int(info[1]), name=info[2] - ) + yield ItemAttributeName(item_attribute_id=int(info[0]), language_id=int(info[1]), name=info[2]) yield ItemAttributeDescription( item_attribute_id=int(info[0]), language_id=int(info[1]), @@ -577,9 +521,7 @@ def csv_record_to_objects(info): build_generic((TypeName,), "type_names.csv", csv_record_to_objects) def csv_record_to_objects(info): - yield TypeGameIndex( - type_id=int(info[0]), generation_id=int(info[1]), game_index=int(info[2]) - ) + yield TypeGameIndex(type_id=int(info[0]), generation_id=int(info[1]), game_index=int(info[2])) build_generic((TypeGameIndex,), "type_game_indices.csv", csv_record_to_objects) @@ -632,12 +574,8 @@ def csv_record_to_objects(info): if generation not in sprites: sprites[generation] = {} sprites[generation][game] = { - "name_icon": file_path_or_none( - f"types/{generation}/{game}/{info[0]}.png" - ), - "symbol_icon": file_path_or_none( - f"types/{generation}/{game}/small/{info[0]}.png" - ), + "name_icon": file_path_or_none(f"types/{generation}/{game}/{info[0]}.png"), + "symbol_icon": file_path_or_none(f"types/{generation}/{game}/small/{info[0]}.png"), } yield TypeSprites(type_id=int(info[0]), sprites=sprites) @@ -673,9 +611,7 @@ def csv_record_to_objects(info): build_generic((ContestEffect,), "contest_effects.csv", csv_record_to_objects) def csv_record_to_objects(info): - yield ContestEffectEffectText( - contest_effect_id=int(info[0]), language_id=int(info[1]), effect=info[3] - ) + yield ContestEffectEffectText(contest_effect_id=int(info[0]), language_id=int(info[1]), effect=info[3]) yield ContestEffectFlavorText( contest_effect_id=int(info[0]), language_id=int(info[1]), @@ -691,9 +627,7 @@ def csv_record_to_objects(info): def csv_record_to_objects(info): yield SuperContestEffect(id=int(info[0]), appeal=int(info[1])) - build_generic( - (SuperContestEffect,), "super_contest_effects.csv", csv_record_to_objects - ) + build_generic((SuperContestEffect,), "super_contest_effects.csv", csv_record_to_objects) def csv_record_to_objects(info): yield SuperContestEffectFlavorText( @@ -728,18 +662,12 @@ def csv_record_to_objects(info): effect=info[3], ) - build_generic( - (MoveEffectEffectText,), "move_effect_prose.csv", csv_record_to_objects - ) + build_generic((MoveEffectEffectText,), "move_effect_prose.csv", csv_record_to_objects) def csv_record_to_objects(info): - yield MoveEffectChange( - id=int(info[0]), move_effect_id=int(info[1]), version_group_id=int(info[2]) - ) + yield MoveEffectChange(id=int(info[0]), move_effect_id=int(info[1]), version_group_id=int(info[2])) - build_generic( - (MoveEffectChange,), "move_effect_changelog.csv", csv_record_to_objects - ) + build_generic((MoveEffectChange,), "move_effect_changelog.csv", csv_record_to_objects) def csv_record_to_objects(info): yield MoveEffectChangeEffectText( @@ -760,9 +688,7 @@ def csv_record_to_objects(info): build_generic((MoveLearnMethod,), "pokemon_move_methods.csv", csv_record_to_objects) def csv_record_to_objects(info): - yield VersionGroupMoveLearnMethod( - version_group_id=int(info[0]), move_learn_method_id=int(info[1]) - ) + yield VersionGroupMoveLearnMethod(version_group_id=int(info[0]), move_learn_method_id=int(info[1])) build_generic( (VersionGroupMoveLearnMethod,), @@ -771,9 +697,7 @@ def csv_record_to_objects(info): ) def csv_record_to_objects(info): - yield MoveLearnMethodName( - move_learn_method_id=int(info[0]), language_id=int(info[1]), name=info[2] - ) + yield MoveLearnMethodName(move_learn_method_id=int(info[0]), language_id=int(info[1]), name=info[2]) yield MoveLearnMethodDescription( move_learn_method_id=int(info[0]), language_id=int(info[1]), @@ -792,12 +716,8 @@ def csv_record_to_objects(info): build_generic((MoveTarget,), "move_targets.csv", csv_record_to_objects) def csv_record_to_objects(info): - yield MoveTargetName( - move_target_id=int(info[0]), language_id=int(info[1]), name=info[2] - ) - yield MoveTargetDescription( - move_target_id=int(info[0]), language_id=int(info[1]), description=info[3] - ) + yield MoveTargetName(move_target_id=int(info[0]), language_id=int(info[1]), name=info[2]) + yield MoveTargetDescription(move_target_id=int(info[0]), language_id=int(info[1]), description=info[3]) build_generic( (MoveTargetName, MoveTargetDescription), @@ -844,9 +764,7 @@ def csv_record_to_objects(info): def csv_record_to_objects(info): _move_effect = None try: - _move_effect = ( - MoveEffect.objects.get(pk=int(info[6])) if info[6] != "" else None - ) + _move_effect = MoveEffect.objects.get(pk=int(info[6])) if info[6] != "" else None except: pass @@ -869,13 +787,9 @@ def csv_record_to_objects(info): build_generic((MoveBattleStyle,), "move_battle_styles.csv", csv_record_to_objects) def csv_record_to_objects(info): - yield MoveBattleStyleName( - move_battle_style_id=int(info[0]), language_id=int(info[1]), name=info[2] - ) + yield MoveBattleStyleName(move_battle_style_id=int(info[0]), language_id=int(info[1]), name=info[2]) - build_generic( - (MoveBattleStyleName,), "move_battle_style_prose.csv", csv_record_to_objects - ) + build_generic((MoveBattleStyleName,), "move_battle_style_prose.csv", csv_record_to_objects) def csv_record_to_objects(info): yield MoveAttribute(id=int(info[0]), name=info[1]) @@ -888,9 +802,7 @@ def csv_record_to_objects(info): build_generic((MoveAttributeMap,), "move_flag_map.csv", csv_record_to_objects) def csv_record_to_objects(info): - yield MoveAttributeName( - move_attribute_id=int(info[0]), language_id=int(info[1]), name=info[2] - ) + yield MoveAttributeName(move_attribute_id=int(info[0]), language_id=int(info[1]), name=info[2]) yield MoveAttributeDescription( move_attribute_id=int(info[0]), language_id=int(info[1]), @@ -909,20 +821,14 @@ def csv_record_to_objects(info): build_generic((MoveMetaAilment,), "move_meta_ailments.csv", csv_record_to_objects) def csv_record_to_objects(info): - yield MoveMetaAilmentName( - move_meta_ailment_id=int(info[0]), language_id=int(info[1]), name=info[2] - ) + yield MoveMetaAilmentName(move_meta_ailment_id=int(info[0]), language_id=int(info[1]), name=info[2]) - build_generic( - (MoveMetaAilmentName,), "move_meta_ailment_names.csv", csv_record_to_objects - ) + build_generic((MoveMetaAilmentName,), "move_meta_ailment_names.csv", csv_record_to_objects) def csv_record_to_objects(info): yield MoveMetaCategory(id=int(info[0]), name=info[1]) - build_generic( - (MoveMetaCategory,), "move_meta_categories.csv", csv_record_to_objects - ) + build_generic((MoveMetaCategory,), "move_meta_categories.csv", csv_record_to_objects) def csv_record_to_objects(info): yield MoveMetaCategoryDescription( @@ -957,13 +863,9 @@ def csv_record_to_objects(info): build_generic((MoveMeta,), "move_meta.csv", csv_record_to_objects) def csv_record_to_objects(info): - yield MoveMetaStatChange( - move_id=int(info[0]), stat_id=int(info[1]), change=int(info[2]) - ) + yield MoveMetaStatChange(move_id=int(info[0]), stat_id=int(info[1]), change=int(info[2])) - build_generic( - (MoveMetaStatChange,), "move_meta_stat_changes.csv", csv_record_to_objects - ) + build_generic((MoveMetaStatChange,), "move_meta_stat_changes.csv", csv_record_to_objects) def csv_record_to_objects(info): yield ContestCombo(first_move_id=int(info[0]), second_move_id=int(info[1])) @@ -973,9 +875,7 @@ def csv_record_to_objects(info): def csv_record_to_objects(info): yield SuperContestCombo(first_move_id=int(info[0]), second_move_id=int(info[1])) - build_generic( - (SuperContestCombo,), "super_contest_combos.csv", csv_record_to_objects - ) + build_generic((SuperContestCombo,), "super_contest_combos.csv", csv_record_to_objects) ############# @@ -990,13 +890,9 @@ def csv_record_to_objects(info): build_generic((BerryFirmness,), "berry_firmness.csv", csv_record_to_objects) def csv_record_to_objects(info): - yield BerryFirmnessName( - berry_firmness_id=int(info[0]), language_id=int(info[1]), name=info[2] - ) + yield BerryFirmnessName(berry_firmness_id=int(info[0]), language_id=int(info[1]), name=info[2]) - build_generic( - (BerryFirmnessName,), "berry_firmness_names.csv", csv_record_to_objects - ) + build_generic((BerryFirmnessName,), "berry_firmness_names.csv", csv_record_to_objects) def csv_record_to_objects(info): item = Item.objects.get(pk=int(info[1])) @@ -1018,9 +914,7 @@ def csv_record_to_objects(info): def csv_record_to_objects(info): # Get the english name for this contest type - contest_type_name = ContestTypeName.objects.get( - contest_type_id=int(info[0]), language_id=9 - ) + contest_type_name = ContestTypeName.objects.get(contest_type_id=int(info[0]), language_id=9) yield BerryFlavor( id=int(info[0]), name=contest_type_name.flavor.lower(), @@ -1031,17 +925,13 @@ def csv_record_to_objects(info): build_generic((BerryFlavor,), "contest_types.csv", csv_record_to_objects) def csv_record_to_objects(info): - yield BerryFlavorName( - berry_flavor_id=int(info[0]), language_id=int(info[1]), name=info[3] - ) + yield BerryFlavorName(berry_flavor_id=int(info[0]), language_id=int(info[1]), name=info[3]) # This is not an error build_generic((BerryFlavorName,), "contest_type_names.csv", csv_record_to_objects) def csv_record_to_objects(info): - yield BerryFlavorMap( - berry_id=int(info[0]), berry_flavor_id=int(info[1]), potency=int(info[2]) - ) + yield BerryFlavorMap(berry_id=int(info[0]), berry_flavor_id=int(info[1]), potency=int(info[2])) # This is not an error build_generic((BerryFlavorMap,), "berry_flavors.csv", csv_record_to_objects) @@ -1085,13 +975,9 @@ def csv_record_to_objects(info): build_generic((NatureName,), "nature_names.csv", csv_record_to_objects) def csv_record_to_objects(info): - yield NaturePokeathlonStat( - nature_id=(info[0]), pokeathlon_stat_id=(info[1]), max_change=info[2] - ) + yield NaturePokeathlonStat(nature_id=(info[0]), pokeathlon_stat_id=(info[1]), max_change=info[2]) - build_generic( - (NaturePokeathlonStat,), "nature_pokeathlon_stats.csv", csv_record_to_objects - ) + build_generic((NaturePokeathlonStat,), "nature_pokeathlon_stats.csv", csv_record_to_objects) def csv_record_to_objects(info): yield NatureBattleStylePreference( @@ -1127,9 +1013,7 @@ def csv_record_to_objects(info): def _build_experiences(): def csv_record_to_objects(info): - yield Experience( - growth_rate_id=int(info[0]), level=int(info[1]), experience=int(info[2]) - ) + yield Experience(growth_rate_id=int(info[0]), level=int(info[1]), experience=int(info[2])) build_generic((Experience,), "experience.csv", csv_record_to_objects) @@ -1171,13 +1055,9 @@ def csv_record_to_objects(info): build_generic((EvolutionTrigger,), "evolution_triggers.csv", csv_record_to_objects) def csv_record_to_objects(info): - yield EvolutionTriggerName( - evolution_trigger_id=int(info[0]), language_id=int(info[1]), name=info[2] - ) + yield EvolutionTriggerName(evolution_trigger_id=int(info[0]), language_id=int(info[1]), name=info[2]) - build_generic( - (EvolutionTriggerName,), "evolution_trigger_prose.csv", csv_record_to_objects - ) + build_generic((EvolutionTriggerName,), "evolution_trigger_prose.csv", csv_record_to_objects) ############# @@ -1197,25 +1077,15 @@ def csv_record_to_objects(info): build_generic((Pokedex,), "pokedexes.csv", csv_record_to_objects) def csv_record_to_objects(info): - yield PokedexName( - pokedex_id=int(info[0]), language_id=int(info[1]), name=info[2] - ) - yield PokedexDescription( - pokedex_id=int(info[0]), language_id=int(info[1]), description=info[3] - ) + yield PokedexName(pokedex_id=int(info[0]), language_id=int(info[1]), name=info[2]) + yield PokedexDescription(pokedex_id=int(info[0]), language_id=int(info[1]), description=info[3]) - build_generic( - (PokedexName, PokedexDescription), "pokedex_prose.csv", csv_record_to_objects - ) + build_generic((PokedexName, PokedexDescription), "pokedex_prose.csv", csv_record_to_objects) def csv_record_to_objects(info): - yield PokedexVersionGroup( - pokedex_id=int(info[0]), version_group_id=int(info[1]) - ) + yield PokedexVersionGroup(pokedex_id=int(info[0]), version_group_id=int(info[1])) - build_generic( - (PokedexVersionGroup,), "pokedex_version_groups.csv", csv_record_to_objects - ) + build_generic((PokedexVersionGroup,), "pokedex_version_groups.csv", csv_record_to_objects) ############## @@ -1234,9 +1104,7 @@ def csv_record_to_objects(info): build_generic((Location,), "locations.csv", csv_record_to_objects) def csv_record_to_objects(info): - yield LocationName( - location_id=int(info[0]), language_id=int(info[1]), name=info[2] - ) + yield LocationName(location_id=int(info[0]), language_id=int(info[1]), name=info[2]) build_generic((LocationName,), "location_names.csv", csv_record_to_objects) @@ -1247,9 +1115,7 @@ def csv_record_to_objects(info): game_index=int(info[2]), ) - build_generic( - (LocationGameIndex,), "location_game_indices.csv", csv_record_to_objects - ) + build_generic((LocationGameIndex,), "location_game_indices.csv", csv_record_to_objects) def csv_record_to_objects(info): location = Location.objects.get(pk=int(info[1])) @@ -1257,19 +1123,13 @@ 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) def csv_record_to_objects(info): - yield LocationAreaName( - location_area_id=int(info[0]), language_id=int(info[1]), name=info[2] - ) + yield LocationAreaName(location_area_id=int(info[0]), language_id=int(info[1]), name=info[2]) build_generic((LocationAreaName,), "location_area_prose.csv", csv_record_to_objects) @@ -1286,9 +1146,7 @@ def csv_record_to_objects(info): build_generic((PokemonColor,), "pokemon_colors.csv", csv_record_to_objects) def csv_record_to_objects(info): - yield PokemonColorName( - pokemon_color_id=int(info[0]), language_id=int(info[1]), name=info[2] - ) + yield PokemonColorName(pokemon_color_id=int(info[0]), language_id=int(info[1]), name=info[2]) build_generic((PokemonColorName,), "pokemon_color_names.csv", csv_record_to_objects) @@ -1341,9 +1199,7 @@ def csv_record_to_objects(info): data = load_data("pokemon_species.csv") for index, info in enumerate(data): if index > 0: - evolves = ( - PokemonSpecies.objects.get(pk=int(info[3])) if info[3] != "" else None - ) + evolves = PokemonSpecies.objects.get(pk=int(info[3])) if info[3] != "" else None if evolves: species = PokemonSpecies.objects.get(pk=int(info[0])) species.evolves_from_species = evolves @@ -1357,9 +1213,7 @@ def csv_record_to_objects(info): genus=info[3], ) - build_generic( - (PokemonSpeciesName,), "pokemon_species_names.csv", csv_record_to_objects - ) + build_generic((PokemonSpeciesName,), "pokemon_species_names.csv", csv_record_to_objects) def csv_record_to_objects(info): yield PokemonSpeciesDescription( @@ -1368,9 +1222,7 @@ def csv_record_to_objects(info): description=info[2], ) - build_generic( - (PokemonSpeciesDescription,), "pokemon_species_prose.csv", csv_record_to_objects - ) + build_generic((PokemonSpeciesDescription,), "pokemon_species_prose.csv", csv_record_to_objects) def csv_record_to_objects(info): yield PokemonSpeciesFlavorText( @@ -1411,11 +1263,7 @@ def try_image_names(path, info, extension): extension, ) id_file_name = "%s.%s" % (pokemon_id, extension) - file_name = ( - id_file_name - if file_path_or_none(path + id_file_name) - else form_file_name - ) + file_name = id_file_name if file_path_or_none(path + id_file_name) else form_file_name else: file_name = "%s.%s" % (info[0], extension) return file_path_or_none(path + file_name) @@ -1439,86 +1287,44 @@ def csv_record_to_objects(info): "front_default": try_image_names(poke_sprites, info, "png"), "front_female": try_image_names(poke_sprites + "female/", info, "png"), "front_shiny": try_image_names(poke_sprites + "shiny/", info, "png"), - "front_shiny_female": try_image_names( - poke_sprites + "shiny/female/", info, "png" - ), + "front_shiny_female": try_image_names(poke_sprites + "shiny/female/", info, "png"), "back_default": try_image_names(poke_sprites + "back/", info, "png"), "back_female": try_image_names(poke_sprites + "back/female/", info, "png"), "back_shiny": try_image_names(poke_sprites + "back/shiny/", info, "png"), - "back_shiny_female": try_image_names( - poke_sprites + "back/shiny/female/", info, "png" - ), + "back_shiny_female": try_image_names(poke_sprites + "back/shiny/female/", info, "png"), "other": { "dream_world": { - "front_default": try_image_names( - poke_sprites + dream_world, info, "svg" - ), - "front_female": try_image_names( - poke_sprites + dream_world + "female/", info, "svg" - ), + "front_default": try_image_names(poke_sprites + dream_world, info, "svg"), + "front_female": try_image_names(poke_sprites + dream_world + "female/", info, "svg"), }, "home": { "front_default": try_image_names(poke_sprites + home, info, "png"), - "front_female": try_image_names( - poke_sprites + home + "female/", info, "png" - ), - "front_shiny": try_image_names( - poke_sprites + home + "shiny/", info, "png" - ), - "front_shiny_female": try_image_names( - poke_sprites + home + "shiny/female/", info, "png" - ), + "front_female": try_image_names(poke_sprites + home + "female/", info, "png"), + "front_shiny": try_image_names(poke_sprites + home + "shiny/", info, "png"), + "front_shiny_female": try_image_names(poke_sprites + home + "shiny/female/", info, "png"), }, "official-artwork": { - "front_default": try_image_names( - poke_sprites + official_art, info, "png" - ), - "front_shiny": try_image_names( - poke_sprites + official_art + "shiny/", info, "png" - ), + "front_default": try_image_names(poke_sprites + official_art, info, "png"), + "front_shiny": try_image_names(poke_sprites + official_art + "shiny/", info, "png"), }, "showdown": { - "front_default": try_image_names( - poke_sprites + showdown, info, "gif" - ), - "front_shiny": try_image_names( - poke_sprites + showdown + "shiny/", info, "gif" - ), - "front_female": try_image_names( - poke_sprites + showdown + "female/", info, "gif" - ), - "front_shiny_female": try_image_names( - poke_sprites + showdown + "shiny/female/", info, "gif" - ), - "back_default": try_image_names( - poke_sprites + showdown + "back/", info, "gif" - ), - "back_shiny": try_image_names( - poke_sprites + showdown + "back/shiny/", info, "gif" - ), - "back_female": try_image_names( - poke_sprites + showdown + "back/female/", info, "gif" - ), - "back_shiny_female": try_image_names( - poke_sprites + showdown + "back/shiny/female", info, "gif" - ), + "front_default": try_image_names(poke_sprites + showdown, info, "gif"), + "front_shiny": try_image_names(poke_sprites + showdown + "shiny/", info, "gif"), + "front_female": try_image_names(poke_sprites + showdown + "female/", info, "gif"), + "front_shiny_female": try_image_names(poke_sprites + showdown + "shiny/female/", info, "gif"), + "back_default": try_image_names(poke_sprites + showdown + "back/", info, "gif"), + "back_shiny": try_image_names(poke_sprites + showdown + "back/shiny/", info, "gif"), + "back_female": try_image_names(poke_sprites + showdown + "back/female/", info, "gif"), + "back_shiny_female": try_image_names(poke_sprites + showdown + "back/shiny/female", info, "gif"), }, }, "versions": { "generation-i": { "red-blue": { - "front_default": try_image_names( - poke_sprites + gen_i + "red-blue/", info, "png" - ), - "front_gray": try_image_names( - poke_sprites + gen_i + "red-blue/gray/", info, "png" - ), - "back_default": try_image_names( - poke_sprites + gen_i + "red-blue/back/", info, "png" - ), - "back_gray": try_image_names( - poke_sprites + gen_i + "red-blue/back/gray/", info, "png" - ), + "front_default": try_image_names(poke_sprites + gen_i + "red-blue/", info, "png"), + "front_gray": try_image_names(poke_sprites + gen_i + "red-blue/gray/", info, "png"), + "back_default": try_image_names(poke_sprites + gen_i + "red-blue/back/", info, "png"), + "back_gray": try_image_names(poke_sprites + gen_i + "red-blue/back/gray/", info, "png"), "front_transparent": try_image_names( poke_sprites + gen_i + "red-blue/transparent/", info, "png" ), @@ -1529,21 +1335,11 @@ def csv_record_to_objects(info): ), }, "yellow": { - "front_default": try_image_names( - poke_sprites + gen_i + "yellow/", info, "png" - ), - "front_gray": try_image_names( - poke_sprites + gen_i + "yellow/gray/", info, "png" - ), - "back_default": try_image_names( - poke_sprites + gen_i + "yellow/back/", info, "png" - ), - "back_gray": try_image_names( - poke_sprites + gen_i + "yellow/back/gray/", info, "png" - ), - "front_transparent": try_image_names( - poke_sprites + gen_i + "yellow/transparent/", info, "png" - ), + "front_default": try_image_names(poke_sprites + gen_i + "yellow/", info, "png"), + "front_gray": try_image_names(poke_sprites + gen_i + "yellow/gray/", info, "png"), + "back_default": try_image_names(poke_sprites + gen_i + "yellow/back/", info, "png"), + "back_gray": try_image_names(poke_sprites + gen_i + "yellow/back/gray/", info, "png"), + "front_transparent": try_image_names(poke_sprites + gen_i + "yellow/transparent/", info, "png"), "back_transparent": try_image_names( poke_sprites + gen_i + "yellow/transparent/back/", info, @@ -1553,18 +1349,10 @@ def csv_record_to_objects(info): }, "generation-ii": { "crystal": { - "front_default": try_image_names( - poke_sprites + gen_ii + "crystal/", info, "png" - ), - "front_shiny": try_image_names( - poke_sprites + gen_ii + "crystal/shiny/", info, "png" - ), - "back_default": try_image_names( - poke_sprites + gen_ii + "crystal/back/", info, "png" - ), - "back_shiny": try_image_names( - poke_sprites + gen_ii + "crystal/back/shiny/", info, "png" - ), + "front_default": try_image_names(poke_sprites + gen_ii + "crystal/", info, "png"), + "front_shiny": try_image_names(poke_sprites + gen_ii + "crystal/shiny/", info, "png"), + "back_default": try_image_names(poke_sprites + gen_ii + "crystal/back/", info, "png"), + "back_shiny": try_image_names(poke_sprites + gen_ii + "crystal/back/shiny/", info, "png"), "front_transparent": try_image_names( poke_sprites + gen_ii + "crystal/transparent/", info, "png" ), @@ -1585,35 +1373,17 @@ def csv_record_to_objects(info): ), }, "gold": { - "front_default": try_image_names( - poke_sprites + gen_ii + "gold/", info, "png" - ), - "front_shiny": try_image_names( - poke_sprites + gen_ii + "gold/shiny/", info, "png" - ), - "back_default": try_image_names( - poke_sprites + gen_ii + "gold/back/", info, "png" - ), - "back_shiny": try_image_names( - poke_sprites + gen_ii + "gold/back/shiny/", info, "png" - ), - "front_transparent": try_image_names( - poke_sprites + gen_ii + "gold/transparent/", info, "png" - ), + "front_default": try_image_names(poke_sprites + gen_ii + "gold/", info, "png"), + "front_shiny": try_image_names(poke_sprites + gen_ii + "gold/shiny/", info, "png"), + "back_default": try_image_names(poke_sprites + gen_ii + "gold/back/", info, "png"), + "back_shiny": try_image_names(poke_sprites + gen_ii + "gold/back/shiny/", info, "png"), + "front_transparent": try_image_names(poke_sprites + gen_ii + "gold/transparent/", info, "png"), }, "silver": { - "front_default": try_image_names( - poke_sprites + gen_ii + "silver/", info, "png" - ), - "front_shiny": try_image_names( - poke_sprites + gen_ii + "silver/shiny/", info, "png" - ), - "back_default": try_image_names( - poke_sprites + gen_ii + "silver/back/", info, "png" - ), - "back_shiny": try_image_names( - poke_sprites + gen_ii + "silver/back/shiny/", info, "png" - ), + "front_default": try_image_names(poke_sprites + gen_ii + "silver/", info, "png"), + "front_shiny": try_image_names(poke_sprites + gen_ii + "silver/shiny/", info, "png"), + "back_default": try_image_names(poke_sprites + gen_ii + "silver/back/", info, "png"), + "back_shiny": try_image_names(poke_sprites + gen_ii + "silver/back/shiny/", info, "png"), "front_transparent": try_image_names( poke_sprites + gen_ii + "silver/transparent/", info, "png" ), @@ -1621,17 +1391,11 @@ def csv_record_to_objects(info): }, "generation-iii": { "emerald": { - "front_default": try_image_names( - poke_sprites + gen_iii + "emerald/", info, "png" - ), - "front_shiny": try_image_names( - poke_sprites + gen_iii + "emerald/shiny/", info, "png" - ), + "front_default": try_image_names(poke_sprites + gen_iii + "emerald/", info, "png"), + "front_shiny": try_image_names(poke_sprites + gen_iii + "emerald/shiny/", info, "png"), }, "firered-leafgreen": { - "front_default": try_image_names( - poke_sprites + gen_iii + "firered-leafgreen/", info, "png" - ), + "front_default": try_image_names(poke_sprites + gen_iii + "firered-leafgreen/", info, "png"), "front_shiny": try_image_names( poke_sprites + gen_iii + "firered-leafgreen/shiny/", info, @@ -1649,9 +1413,7 @@ def csv_record_to_objects(info): ), }, "ruby-sapphire": { - "front_default": try_image_names( - poke_sprites + gen_iii + "ruby-sapphire/", info, "png" - ), + "front_default": try_image_names(poke_sprites + gen_iii + "ruby-sapphire/", info, "png"), "front_shiny": try_image_names( poke_sprites + gen_iii + "ruby-sapphire/shiny/", info, @@ -1671,9 +1433,7 @@ def csv_record_to_objects(info): }, "generation-iv": { "diamond-pearl": { - "front_default": try_image_names( - poke_sprites + gen_iv + "diamond-pearl/", info, "png" - ), + "front_default": try_image_names(poke_sprites + gen_iv + "diamond-pearl/", info, "png"), "front_female": try_image_names( poke_sprites + gen_iv + "diamond-pearl/female/", info, @@ -1689,9 +1449,7 @@ def csv_record_to_objects(info): info, "png", ), - "back_default": try_image_names( - poke_sprites + gen_iv + "diamond-pearl/back/", info, "png" - ), + "back_default": try_image_names(poke_sprites + gen_iv + "diamond-pearl/back/", info, "png"), "back_female": try_image_names( poke_sprites + gen_iv + "diamond-pearl/back/female/", info, @@ -1725,9 +1483,7 @@ def csv_record_to_objects(info): "png", ), "front_shiny_female": try_image_names( - poke_sprites - + gen_iv - + "heartgold-soulsilver/shiny/female/", + poke_sprites + gen_iv + "heartgold-soulsilver/shiny/female/", info, "png", ), @@ -1747,31 +1503,21 @@ def csv_record_to_objects(info): "png", ), "back_shiny_female": try_image_names( - poke_sprites - + gen_iv - + "heartgold-soulsilver/back/shiny/female/", + poke_sprites + gen_iv + "heartgold-soulsilver/back/shiny/female/", info, "png", ), }, "platinum": { - "front_default": try_image_names( - poke_sprites + gen_iv + "platinum/", info, "png" - ), - "front_female": try_image_names( - poke_sprites + gen_iv + "platinum/female/", info, "png" - ), - "front_shiny": try_image_names( - poke_sprites + gen_iv + "platinum/shiny/", info, "png" - ), + "front_default": try_image_names(poke_sprites + gen_iv + "platinum/", info, "png"), + "front_female": try_image_names(poke_sprites + gen_iv + "platinum/female/", info, "png"), + "front_shiny": try_image_names(poke_sprites + gen_iv + "platinum/shiny/", info, "png"), "front_shiny_female": try_image_names( poke_sprites + gen_iv + "platinum/shiny/female/", info, "png", ), - "back_default": try_image_names( - poke_sprites + gen_iv + "platinum/back/", info, "png" - ), + "back_default": try_image_names(poke_sprites + gen_iv + "platinum/back/", info, "png"), "back_female": try_image_names( poke_sprites + gen_iv + "platinum/back/female/", info, @@ -1791,23 +1537,15 @@ def csv_record_to_objects(info): }, "generation-v": { "black-white": { - "front_default": try_image_names( - poke_sprites + gen_v + "black-white/", info, "png" - ), - "front_female": try_image_names( - poke_sprites + gen_v + "black-white/female/", info, "png" - ), - "front_shiny": try_image_names( - poke_sprites + gen_v + "black-white/shiny/", info, "png" - ), + "front_default": try_image_names(poke_sprites + gen_v + "black-white/", info, "png"), + "front_female": try_image_names(poke_sprites + gen_v + "black-white/female/", info, "png"), + "front_shiny": try_image_names(poke_sprites + gen_v + "black-white/shiny/", info, "png"), "front_shiny_female": try_image_names( poke_sprites + gen_v + "black-white/shiny/female/", info, "png", ), - "back_default": try_image_names( - poke_sprites + gen_v + "black-white/back/", info, "png" - ), + "back_default": try_image_names(poke_sprites + gen_v + "black-white/back/", info, "png"), "back_female": try_image_names( poke_sprites + gen_v + "black-white/back/female/", info, @@ -1840,9 +1578,7 @@ def csv_record_to_objects(info): "gif", ), "front_shiny_female": try_image_names( - poke_sprites - + gen_v - + "black-white/animated/shiny/female/", + poke_sprites + gen_v + "black-white/animated/shiny/female/", info, "gif", ), @@ -1852,23 +1588,17 @@ def csv_record_to_objects(info): "gif", ), "back_female": try_image_names( - poke_sprites - + gen_v - + "black-white/animated/back/female/", + poke_sprites + gen_v + "black-white/animated/back/female/", info, "gif", ), "back_shiny": try_image_names( - poke_sprites - + gen_v - + "black-white/animated/back/shiny/", + poke_sprites + gen_v + "black-white/animated/back/shiny/", info, "gif", ), "back_shiny_female": try_image_names( - poke_sprites - + gen_v - + "black-white/animated/back/shiny/female/", + poke_sprites + gen_v + "black-white/animated/back/shiny/female/", info, "gif", ), @@ -1893,26 +1623,16 @@ def csv_record_to_objects(info): "png", ), "front_shiny_female": try_image_names( - poke_sprites - + gen_vi - + "omegaruby-alphasapphire/shiny/female/", + poke_sprites + gen_vi + "omegaruby-alphasapphire/shiny/female/", info, "png", ), }, "x-y": { - "front_default": try_image_names( - poke_sprites + gen_vi + "x-y/", info, "png" - ), - "front_female": try_image_names( - poke_sprites + gen_vi + "x-y/female/", info, "png" - ), - "front_shiny": try_image_names( - poke_sprites + gen_vi + "x-y/shiny/", info, "png" - ), - "front_shiny_female": try_image_names( - poke_sprites + gen_vi + "x-y/shiny/female/", info, "png" - ), + "front_default": try_image_names(poke_sprites + gen_vi + "x-y/", info, "png"), + "front_female": try_image_names(poke_sprites + gen_vi + "x-y/female/", info, "png"), + "front_shiny": try_image_names(poke_sprites + gen_vi + "x-y/shiny/", info, "png"), + "front_shiny_female": try_image_names(poke_sprites + gen_vi + "x-y/shiny/female/", info, "png"), }, }, "generation-vii": { @@ -1933,43 +1653,29 @@ def csv_record_to_objects(info): "png", ), "front_shiny_female": try_image_names( - poke_sprites - + gen_vii - + "ultra-sun-ultra-moon/shiny/female/", + poke_sprites + gen_vii + "ultra-sun-ultra-moon/shiny/female/", info, "png", ), }, "icons": { - "front_default": try_image_names( - poke_sprites + gen_vii + "icons/", info, "png" - ), - "front_female": try_image_names( - poke_sprites + gen_vii + "icons/female/", info, "png" - ), + "front_default": try_image_names(poke_sprites + gen_vii + "icons/", info, "png"), + "front_female": try_image_names(poke_sprites + gen_vii + "icons/female/", info, "png"), }, }, "generation-viii": { "icons": { - "front_default": try_image_names( - poke_sprites + gen_viii + "icons/", info, "png" - ), - "front_female": try_image_names( - poke_sprites + gen_viii + "icons/female/", info, "png" - ), + "front_default": try_image_names(poke_sprites + gen_viii + "icons/", info, "png"), + "front_female": try_image_names(poke_sprites + gen_viii + "icons/female/", info, "png"), }, "brilliant-diamond-shining-pearl": { "front_default": try_image_names( - poke_sprites - + gen_viii - + "brilliant-diamond-shining-pearl/", + poke_sprites + gen_viii + "brilliant-diamond-shining-pearl/", info, "png", ), "front_female": try_image_names( - poke_sprites - + gen_viii - + "brilliant-diamond-shining-pearl/female/", + poke_sprites + gen_viii + "brilliant-diamond-shining-pearl/female/", info, "png", ), @@ -1977,9 +1683,7 @@ def csv_record_to_objects(info): }, "generation-ix": { "scarlet-violet": { - "front_default": try_image_names( - poke_sprites + gen_ix + "scarlet-violet/", info, "png" - ), + "front_default": try_image_names(poke_sprites + gen_ix + "scarlet-violet/", info, "png"), "front_female": try_image_names( poke_sprites + gen_ix + "scarlet-violet/female/", info, @@ -2036,9 +1740,7 @@ def csv_record_to_objects(info): slot=int(info[4]), ) - build_generic( - (PokemonAbilityPast,), "pokemon_abilities_past.csv", csv_record_to_objects - ) + build_generic((PokemonAbilityPast,), "pokemon_abilities_past.csv", csv_record_to_objects) def csv_record_to_objects(info): yield PokemonDexNumber( @@ -2050,9 +1752,7 @@ def csv_record_to_objects(info): build_generic((PokemonDexNumber,), "pokemon_dex_numbers.csv", csv_record_to_objects) def csv_record_to_objects(info): - yield PokemonEggGroup( - pokemon_species_id=int(info[0]), egg_group_id=int(info[1]) - ) + yield PokemonEggGroup(pokemon_species_id=int(info[0]), egg_group_id=int(info[1])) build_generic((PokemonEggGroup,), "pokemon_egg_groups.csv", csv_record_to_objects) @@ -2118,11 +1818,7 @@ def try_image_names(path, info, extension): if form_identifier: form_file_name = "%s-%s.%s" % (species_id, form_identifier, extension) id_file_name = "%s.%s" % (pokemon_id, extension) - file_name = ( - id_file_name - if file_path_or_none(path + id_file_name) - else form_file_name - ) + file_name = id_file_name if file_path_or_none(path + id_file_name) else form_file_name if id_file_name and form_file_name and (not is_default): file_name = form_file_name else: @@ -2137,25 +1833,19 @@ def csv_record_to_objects(info): "back_default": try_image_names(poke_sprites + "back/", info, "png"), "back_shiny": try_image_names(poke_sprites + "back/shiny/", info, "png"), "front_female": try_image_names(poke_sprites + "female/", info, "png"), - "front_shiny_female": try_image_names( - poke_sprites + "shiny/female/", info, "png" - ), + "front_shiny_female": try_image_names(poke_sprites + "shiny/female/", info, "png"), "back_female": try_image_names(poke_sprites + "back/female/", info, "png"), - "back_shiny_female": try_image_names( - poke_sprites + "back/shiny/female/", info, "png" - ), + "back_shiny_female": try_image_names(poke_sprites + "back/shiny/female/", info, "png"), "versions": { "generation-viii": { "brilliant-diamond-shining-pearl": { "front_default": try_image_names( - poke_sprites - + "versions/generation-viii/brilliant-diamond-shining-pearl/", + poke_sprites + "versions/generation-viii/brilliant-diamond-shining-pearl/", info, "png", ), "front_female": try_image_names( - poke_sprites - + "versions/generation-viii/brilliant-diamond-shining-pearl/female/", + poke_sprites + "versions/generation-viii/brilliant-diamond-shining-pearl/female/", info, "png", ), @@ -2169,8 +1859,7 @@ def csv_record_to_objects(info): "png", ), "front_female": try_image_names( - poke_sprites - + "versions/generation-ix/scarlet-violet/female/", + poke_sprites + "versions/generation-ix/scarlet-violet/female/", info, "png", ), @@ -2178,9 +1867,7 @@ def csv_record_to_objects(info): }, }, } - yield PokemonFormSprites( - id=int(info[0]), pokemon_form_id=int(info[0]), sprites=sprites - ) + yield PokemonFormSprites(id=int(info[0]), pokemon_form_id=int(info[0]), sprites=sprites) build_generic((PokemonFormSprites,), "pokemon_forms.csv", csv_record_to_objects) @@ -2201,23 +1888,17 @@ def csv_record_to_objects(info): game_index=int(info[2]), ) - build_generic( - (PokemonFormGeneration,), "pokemon_form_generations.csv", csv_record_to_objects - ) + build_generic((PokemonFormGeneration,), "pokemon_form_generations.csv", csv_record_to_objects) def csv_record_to_objects(info): - yield PokemonFormType( - pokemon_form_id=int(info[0]), type_id=int(info[1]), slot=int(info[2]) - ) + yield PokemonFormType(pokemon_form_id=int(info[0]), type_id=int(info[1]), slot=int(info[2])) build_generic((PokemonFormType,), "pokemon_form_types.csv", csv_record_to_objects) def csv_record_to_objects(info): yield PokemonFormTrigger(id=int(info[0]), name=info[1]) - build_generic( - (PokemonFormTrigger,), "pokemon_form_triggers.csv", csv_record_to_objects - ) + build_generic((PokemonFormTrigger,), "pokemon_form_triggers.csv", csv_record_to_objects) def csv_record_to_objects(info): yield PokemonFormCondition( @@ -2228,27 +1909,17 @@ def csv_record_to_objects(info): move_id=int(info[4]) if info[4] != "" else None, ) - build_generic( - (PokemonFormCondition,), "pokemon_form_conditions.csv", csv_record_to_objects - ) + build_generic((PokemonFormCondition,), "pokemon_form_conditions.csv", csv_record_to_objects) def csv_record_to_objects(info): - yield PokemonGameIndex( - pokemon_id=int(info[0]), version_id=int(info[1]), game_index=int(info[2]) - ) + yield PokemonGameIndex(pokemon_id=int(info[0]), version_id=int(info[1]), game_index=int(info[2])) - build_generic( - (PokemonGameIndex,), "pokemon_game_indices.csv", csv_record_to_objects - ) + build_generic((PokemonGameIndex,), "pokemon_game_indices.csv", csv_record_to_objects) def csv_record_to_objects(info): - yield PokemonHabitatName( - pokemon_habitat_id=int(info[0]), language_id=int(info[1]), name=info[2] - ) + yield PokemonHabitatName(pokemon_habitat_id=int(info[0]), language_id=int(info[1]), name=info[2]) - build_generic( - (PokemonHabitatName,), "pokemon_habitat_names.csv", csv_record_to_objects - ) + build_generic((PokemonHabitatName,), "pokemon_habitat_names.csv", csv_record_to_objects) def csv_record_to_objects(info): yield PokemonItem( @@ -2294,9 +1965,7 @@ def csv_record_to_objects(info): build_generic((PokemonStatPast,), "pokemon_stats_past.csv", csv_record_to_objects) def csv_record_to_objects(info): - yield PokemonType( - pokemon_id=int(info[0]), type_id=int(info[1]), slot=int(info[2]) - ) + yield PokemonType(pokemon_id=int(info[0]), type_id=int(info[1]), slot=int(info[2])) build_generic((PokemonType,), "pokemon_types.csv", csv_record_to_objects) @@ -2337,25 +2006,17 @@ def csv_record_to_objects(info): ) def csv_record_to_objects(info): - yield EncounterMethodName( - encounter_method_id=int(info[0]), language_id=int(info[1]), name=info[2] - ) + yield EncounterMethodName(encounter_method_id=int(info[0]), language_id=int(info[1]), name=info[2]) - build_generic( - (EncounterMethodName,), "encounter_method_prose.csv", csv_record_to_objects - ) + build_generic((EncounterMethodName,), "encounter_method_prose.csv", csv_record_to_objects) def csv_record_to_objects(info): yield EncounterCondition(id=int(info[0]), name=info[1]) - build_generic( - (EncounterCondition,), "encounter_conditions.csv", csv_record_to_objects - ) + build_generic((EncounterCondition,), "encounter_conditions.csv", csv_record_to_objects) def csv_record_to_objects(info): - yield EncounterConditionName( - encounter_condition_id=int(info[0]), language_id=int(info[1]), name=info[2] - ) + yield EncounterConditionName(encounter_condition_id=int(info[0]), language_id=int(info[1]), name=info[2]) build_generic( (EncounterConditionName,), @@ -2415,9 +2076,7 @@ def csv_record_to_objects(info): ) def csv_record_to_objects(info): - yield EncounterConditionValueMap( - encounter_id=int(info[0]), encounter_condition_value_id=int(info[1]) - ) + yield EncounterConditionValueMap(encounter_id=int(info[0]), encounter_condition_value_id=int(info[1])) build_generic( (EncounterConditionValueMap,), @@ -2438,9 +2097,7 @@ def csv_record_to_objects(info): build_generic((PalParkArea,), "pal_park_areas.csv", csv_record_to_objects) def csv_record_to_objects(info): - yield PalParkAreaName( - pal_park_area_id=int(info[0]), language_id=int(info[1]), name=info[2] - ) + yield PalParkAreaName(pal_park_area_id=int(info[0]), language_id=int(info[1]), name=info[2]) build_generic((PalParkAreaName,), "pal_park_area_names.csv", csv_record_to_objects) diff --git a/pokemon_v2/api.py b/pokemon_v2/api.py index cf0b7052c..03bb74940 100644 --- a/pokemon_v2/api.py +++ b/pokemon_v2/api.py @@ -90,9 +90,7 @@ def get_object(self): @extend_schema_view(list=extend_schema(parameters=[q_query_string_parameter])) -class PokeapiCommonViewset( - ListOrDetailSerialRelation, NameOrIdRetrieval, viewsets.ReadOnlyModelViewSet -): +class PokeapiCommonViewset(ListOrDetailSerialRelation, NameOrIdRetrieval, viewsets.ReadOnlyModelViewSet): @extend_schema(parameters=[retrieve_path_parameter]) def retrieve(self, request, pk=None): return super().retrieve(request, pk) @@ -988,11 +986,7 @@ def get(self, request, pokemon_id): encounter_objects = Encounter.objects.filter(pokemon=pokemon) - area_ids = ( - encounter_objects.values_list("location_area", flat=True) - .distinct() - .order_by("location_area") - ) + area_ids = encounter_objects.values_list("location_area", flat=True).distinct().order_by("location_area") location_area_objects = LocationArea.objects.filter(pk__in=area_ids) version_objects = Version.objects @@ -1004,23 +998,15 @@ def get(self, request, pokemon_id): area_encounters = encounter_objects.filter(location_area_id=area_id) - version_ids = ( - area_encounters.values_list("version_id", flat=True) - .distinct() - .order_by("version_id") - ) + version_ids = area_encounters.values_list("version_id", flat=True).distinct().order_by("version_id") version_details_list = [] for version_id in version_ids: version = version_objects.get(pk=version_id) - version_encounters = area_encounters.filter( - version_id=version_id - ).order_by("encounter_slot_id") + version_encounters = area_encounters.filter(version_id=version_id).order_by("encounter_slot_id") - encounters_data = EncounterDetailSerializer( - version_encounters, many=True, context=self.context - ).data + encounters_data = EncounterDetailSerializer(version_encounters, many=True, context=self.context).data max_chance = 0 encounter_details_list = [] @@ -1041,9 +1027,7 @@ def get(self, request, pokemon_id): version_details_list.append( { - "version": VersionSummarySerializer( - version, context=self.context - ).data, + "version": VersionSummarySerializer(version, context=self.context).data, "max_chance": max_chance, "encounter_details": encounter_details_list, } @@ -1051,9 +1035,7 @@ def get(self, request, pokemon_id): encounters_list.append( { - "location_area": LocationAreaSummarySerializer( - location_area, context=self.context - ).data, + "location_area": LocationAreaSummarySerializer(location_area, context=self.context).data, "version_details": version_details_list, } ) @@ -1078,21 +1060,13 @@ def get(self, request, pokemon_id): class PokeapiMetaViewset(viewsets.ViewSet): def list(self, request): try: - git_hash = ( - subprocess.check_output( - ["git", "rev-parse", "HEAD"], stderr=subprocess.DEVNULL - ) - .decode() - .strip() - ) + git_hash = subprocess.check_output(["git", "rev-parse", "HEAD"], stderr=subprocess.DEVNULL).decode().strip() except Exception: git_hash = None try: deploy_date = ( - subprocess.check_output( - ["git", "log", "-1", "--format=%ct"], stderr=subprocess.DEVNULL - ) + subprocess.check_output(["git", "log", "-1", "--format=%ct"], stderr=subprocess.DEVNULL) .decode() .strip() ) @@ -1101,9 +1075,7 @@ def list(self, request): try: tag_output = ( - subprocess.check_output( - ["git", "tag", "--points-at", "HEAD"], stderr=subprocess.DEVNULL - ) + subprocess.check_output(["git", "tag", "--points-at", "HEAD"], stderr=subprocess.DEVNULL) .decode() .strip() ) diff --git a/pokemon_v2/migrations/0001_squashed_0002_auto_20160301_1408.py b/pokemon_v2/migrations/0001_squashed_0002_auto_20160301_1408.py index 15c60c610..e0f591830 100644 --- a/pokemon_v2/migrations/0001_squashed_0002_auto_20160301_1408.py +++ b/pokemon_v2/migrations/0001_squashed_0002_auto_20160301_1408.py @@ -1485,9 +1485,7 @@ class Migration(migrations.Migration): migrations.AddField( model_name="movemeta", name="move", - field=models.OneToOneField( - on_delete=models.CASCADE, related_name="movemeta", to="pokemon_v2.Move" - ), + field=models.OneToOneField(on_delete=models.CASCADE, related_name="movemeta", to="pokemon_v2.Move"), preserve_default=True, ), migrations.AddField( @@ -1573,9 +1571,7 @@ class Migration(migrations.Migration): migrations.AddField( model_name="move", name="type", - field=models.ForeignKey( - on_delete=models.CASCADE, blank=True, to="pokemon_v2.Type", null=True - ), + field=models.ForeignKey(on_delete=models.CASCADE, blank=True, to="pokemon_v2.Type", null=True), preserve_default=True, ), migrations.AlterField( @@ -3213,9 +3209,7 @@ class Migration(migrations.Migration): migrations.AddField( model_name="pokemonevolution", name="known_move", - field=models.ForeignKey( - on_delete=models.CASCADE, blank=True, to="pokemon_v2.Move", null=True - ), + field=models.ForeignKey(on_delete=models.CASCADE, blank=True, to="pokemon_v2.Move", null=True), preserve_default=True, ), migrations.AddField( @@ -3823,9 +3817,7 @@ class Migration(migrations.Migration): migrations.AddField( model_name="evolutionchain", name="baby_trigger_item", - field=models.ForeignKey( - on_delete=models.CASCADE, blank=True, to="pokemon_v2.Item", null=True - ), + field=models.ForeignKey(on_delete=models.CASCADE, blank=True, to="pokemon_v2.Item", null=True), preserve_default=True, ), migrations.AddField( @@ -4229,9 +4221,7 @@ class Migration(migrations.Migration): migrations.AddField( model_name="generation", name="region", - field=models.ForeignKey( - on_delete=models.CASCADE, blank=True, to="pokemon_v2.Region", null=True - ), + field=models.ForeignKey(on_delete=models.CASCADE, blank=True, to="pokemon_v2.Region", null=True), preserve_default=True, ), migrations.AddField( diff --git a/pokemon_v2/migrations/0024_django5.py b/pokemon_v2/migrations/0024_django5.py index a21d8c3b4..3a24061da 100644 --- a/pokemon_v2/migrations/0024_django5.py +++ b/pokemon_v2/migrations/0024_django5.py @@ -5,7 +5,6 @@ class Migration(migrations.Migration): - dependencies = [ ("pokemon_v2", "0023_longer_description"), ] diff --git a/pokemon_v2/migrations/0025_pokemonstatpast.py b/pokemon_v2/migrations/0025_pokemonstatpast.py index 6eec3d545..324f9a37b 100644 --- a/pokemon_v2/migrations/0025_pokemonstatpast.py +++ b/pokemon_v2/migrations/0025_pokemonstatpast.py @@ -5,7 +5,6 @@ class Migration(migrations.Migration): - dependencies = [ ("pokemon_v2", "0024_django5"), ] diff --git a/pokemon_v2/migrations/0026_alter_pokemonevolution_base_form.py b/pokemon_v2/migrations/0026_alter_pokemonevolution_base_form.py index 491479062..ea29533c5 100644 --- a/pokemon_v2/migrations/0026_alter_pokemonevolution_base_form.py +++ b/pokemon_v2/migrations/0026_alter_pokemonevolution_base_form.py @@ -5,7 +5,6 @@ class Migration(migrations.Migration): - dependencies = [ ("pokemon_v2", "0025_pokemonstatpast"), ] diff --git a/pokemon_v2/migrations/0027_pokemonevolution_near_special_rock.py b/pokemon_v2/migrations/0027_pokemonevolution_near_special_rock.py index 2fbc15853..45bcf2d2b 100644 --- a/pokemon_v2/migrations/0027_pokemonevolution_near_special_rock.py +++ b/pokemon_v2/migrations/0027_pokemonevolution_near_special_rock.py @@ -4,7 +4,6 @@ class Migration(migrations.Migration): - dependencies = [ ("pokemon_v2", "0026_alter_pokemonevolution_base_form"), ] diff --git a/pokemon_v2/migrations/0028_pokemonevolution_evolved_form_and_more.py b/pokemon_v2/migrations/0028_pokemonevolution_evolved_form_and_more.py index 83cfcaaca..fa9ecd5f1 100644 --- a/pokemon_v2/migrations/0028_pokemonevolution_evolved_form_and_more.py +++ b/pokemon_v2/migrations/0028_pokemonevolution_evolved_form_and_more.py @@ -5,7 +5,6 @@ class Migration(migrations.Migration): - dependencies = [ ("pokemon_v2", "0027_pokemonevolution_near_special_rock"), ] diff --git a/pokemon_v2/migrations/0029_pokemonformtrigger_pokemonformcondition.py b/pokemon_v2/migrations/0029_pokemonformtrigger_pokemonformcondition.py index 8f13f6af3..d86a9891e 100644 --- a/pokemon_v2/migrations/0029_pokemonformtrigger_pokemonformcondition.py +++ b/pokemon_v2/migrations/0029_pokemonformtrigger_pokemonformcondition.py @@ -5,7 +5,6 @@ class Migration(migrations.Migration): - dependencies = [ ("pokemon_v2", "0028_pokemonevolution_evolved_form_and_more"), ] diff --git a/pokemon_v2/models.py b/pokemon_v2/models.py index e8311991c..a1a4bc5e6 100644 --- a/pokemon_v2/models.py +++ b/pokemon_v2/models.py @@ -346,18 +346,14 @@ class Meta: class HasMoveEffect(models.Model): - move_effect = models.ForeignKey( - "MoveEffect", blank=True, null=True, on_delete=models.CASCADE - ) + move_effect = models.ForeignKey("MoveEffect", blank=True, null=True, on_delete=models.CASCADE) class Meta: abstract = True class HasMoveAttribute(models.Model): - move_attribute = models.ForeignKey( - "MoveAttribute", blank=True, null=True, on_delete=models.CASCADE - ) + move_attribute = models.ForeignKey("MoveAttribute", blank=True, null=True, on_delete=models.CASCADE) class Meta: abstract = True @@ -1009,9 +1005,7 @@ class BerryFlavorName(IsName): class BerryFlavorMap(models.Model): - berry = models.ForeignKey( - Berry, blank=True, null=True, related_name="%(class)s", on_delete=models.CASCADE - ) + berry = models.ForeignKey(Berry, blank=True, null=True, related_name="%(class)s", on_delete=models.CASCADE) berry_flavor = models.ForeignKey( BerryFlavor, @@ -1043,13 +1037,9 @@ class GrowthRateDescription(HasGrowthRate, IsDescription): class Nature(HasName): - decreased_stat = models.ForeignKey( - Stat, blank=True, null=True, related_name="decreased", on_delete=models.CASCADE - ) + decreased_stat = models.ForeignKey(Stat, blank=True, null=True, related_name="decreased", on_delete=models.CASCADE) - increased_stat = models.ForeignKey( - Stat, blank=True, null=True, related_name="increased", on_delete=models.CASCADE - ) + increased_stat = models.ForeignKey(Stat, blank=True, null=True, related_name="increased", on_delete=models.CASCADE) hates_flavor = models.ForeignKey( BerryFlavor, @@ -1141,9 +1131,7 @@ class EncounterSlot(HasVersionGroup, HasEncounterMethod): class Encounter(HasVersion, HasLocationArea, HasPokemon): - encounter_slot = models.ForeignKey( - EncounterSlot, blank=True, null=True, on_delete=models.CASCADE - ) + encounter_slot = models.ForeignKey(EncounterSlot, blank=True, null=True, on_delete=models.CASCADE) min_level = models.IntegerField() @@ -1173,9 +1161,7 @@ class EncounterConditionValueName(IsName): class EncounterConditionValueMap(models.Model): - encounter = models.ForeignKey( - Encounter, blank=True, null=True, on_delete=models.CASCADE - ) + encounter = models.ForeignKey(Encounter, blank=True, null=True, on_delete=models.CASCADE) encounter_condition_value = models.ForeignKey( EncounterConditionValue, blank=True, null=True, on_delete=models.CASCADE @@ -1411,9 +1397,7 @@ class Gender(HasName): class Machine(HasGrowthRate, HasItem): machine_number = models.IntegerField() - version_group = models.ForeignKey( - VersionGroup, blank=True, null=True, on_delete=models.CASCADE - ) + version_group = models.ForeignKey(VersionGroup, blank=True, null=True, on_delete=models.CASCADE) move = models.ForeignKey(Move, blank=True, null=True, on_delete=models.CASCADE) @@ -1478,13 +1462,9 @@ class SuperContestEffectFlavorText(IsFlavorText, HasSuperContestEffect): class SuperContestCombo(models.Model): - first_move = models.ForeignKey( - Move, blank=True, null=True, related_name="first", on_delete=models.CASCADE - ) + first_move = models.ForeignKey(Move, blank=True, null=True, related_name="first", on_delete=models.CASCADE) - second_move = models.ForeignKey( - Move, blank=True, null=True, related_name="second", on_delete=models.CASCADE - ) + second_move = models.ForeignKey(Move, blank=True, null=True, related_name="second", on_delete=models.CASCADE) ###################### @@ -1493,9 +1473,7 @@ class SuperContestCombo(models.Model): class EvolutionChain(models.Model): - baby_trigger_item = models.ForeignKey( - Item, blank=True, null=True, on_delete=models.CASCADE - ) + baby_trigger_item = models.ForeignKey(Item, blank=True, null=True, on_delete=models.CASCADE) class EvolutionTrigger(HasName): @@ -1532,16 +1510,10 @@ class PokedexVersionGroup(HasPokedex, HasVersionGroup): #################### -class PokemonSpecies( - HasName, HasGeneration, HasPokemonColor, HasPokemonShape, HasGrowthRate, HasOrder -): - evolves_from_species = models.ForeignKey( - "self", blank=True, null=True, on_delete=models.CASCADE - ) +class PokemonSpecies(HasName, HasGeneration, HasPokemonColor, HasPokemonShape, HasGrowthRate, HasOrder): + evolves_from_species = models.ForeignKey("self", blank=True, null=True, on_delete=models.CASCADE) - evolution_chain = models.ForeignKey( - EvolutionChain, blank=True, null=True, on_delete=models.CASCADE - ) + evolution_chain = models.ForeignKey(EvolutionChain, blank=True, null=True, on_delete=models.CASCADE) pokemon_habitat = models.ForeignKey( "PokemonHabitat", @@ -1658,15 +1630,11 @@ class PokemonEvolution(HasEvolutionTrigger, HasGender): on_delete=models.CASCADE, ) - held_item = models.ForeignKey( - Item, blank=True, null=True, related_name="held_item", on_delete=models.CASCADE - ) + held_item = models.ForeignKey(Item, blank=True, null=True, related_name="held_item", on_delete=models.CASCADE) time_of_day = models.CharField(max_length=10, blank=True, null=True) - known_move = models.ForeignKey( - Move, blank=True, null=True, on_delete=models.CASCADE - ) + known_move = models.ForeignKey(Move, blank=True, null=True, on_delete=models.CASCADE) known_move_type = models.ForeignKey( Type, related_name="known_move", blank=True, null=True, on_delete=models.CASCADE @@ -1688,9 +1656,7 @@ class PokemonEvolution(HasEvolutionTrigger, HasGender): on_delete=models.CASCADE, ) - party_type = models.ForeignKey( - Type, related_name="party_type", blank=True, null=True, on_delete=models.CASCADE - ) + party_type = models.ForeignKey(Type, related_name="party_type", blank=True, null=True, on_delete=models.CASCADE) trade_species = models.ForeignKey( PokemonSpecies, @@ -1735,9 +1701,7 @@ class PokemonEvolution(HasEvolutionTrigger, HasGender): help_text="Specific form of the evolved species", ) - used_move = models.ForeignKey( - Move, related_name="used_move", blank=True, null=True, on_delete=models.CASCADE - ) + used_move = models.ForeignKey(Move, related_name="used_move", blank=True, null=True, on_delete=models.CASCADE) min_move_count = models.IntegerField(blank=True, null=True) @@ -1749,9 +1713,7 @@ class PokemonEvolution(HasEvolutionTrigger, HasGender): class PokemonForm(HasName, HasPokemon, HasOrder): form_name = models.CharField(max_length=30) - version_group = models.ForeignKey( - VersionGroup, blank=True, null=True, on_delete=models.CASCADE - ) + version_group = models.ForeignKey(VersionGroup, blank=True, null=True, on_delete=models.CASCADE) is_default = models.BooleanField(default=False) @@ -1781,9 +1743,7 @@ class PokemonFormTrigger(HasName): class PokemonFormCondition(HasPokemonForm): form_trigger = models.ForeignKey(PokemonFormTrigger, on_delete=models.CASCADE) item = models.ForeignKey(Item, blank=True, null=True, on_delete=models.CASCADE) - ability = models.ForeignKey( - Ability, blank=True, null=True, on_delete=models.CASCADE - ) + ability = models.ForeignKey(Ability, blank=True, null=True, on_delete=models.CASCADE) move = models.ForeignKey(Move, blank=True, null=True, on_delete=models.CASCADE) diff --git a/pokemon_v2/serializers.py b/pokemon_v2/serializers.py index 7460dc49b..54bccf670 100644 --- a/pokemon_v2/serializers.py +++ b/pokemon_v2/serializers.py @@ -437,9 +437,7 @@ class Meta: class EncounterConditionValueMapSerializer(serializers.ModelSerializer): - condition_value = EncounterConditionValueSummarySerializer( - source="encounter_condition_value" - ) + condition_value = EncounterConditionValueSummarySerializer(source="encounter_condition_value") class Meta: model = EncounterConditionValueMap @@ -460,9 +458,7 @@ class Meta: class CharacteristicDetailSerializer(serializers.ModelSerializer): - descriptions = CharacteristicDescriptionSerializer( - many=True, read_only=True, source="characteristicdescription" - ) + descriptions = CharacteristicDescriptionSerializer(many=True, read_only=True, source="characteristicdescription") highest_stat = StatSummarySerializer(source="stat") gene_modulo = serializers.IntegerField(source="gene_mod_5") possible_values = serializers.SerializerMethodField("get_values") @@ -538,12 +534,8 @@ class Meta: class ContestEffectDetailSerializer(serializers.ModelSerializer): - effect_entries = ContestEffectEffectTextSerializer( - many=True, read_only=True, source="contesteffecteffecttext" - ) - flavor_text_entries = ContestEffectFlavorTextSerializer( - many=True, read_only=True, source="contesteffectflavortext" - ) + effect_entries = ContestEffectEffectTextSerializer(many=True, read_only=True, source="contesteffecteffecttext") + flavor_text_entries = ContestEffectFlavorTextSerializer(many=True, read_only=True, source="contesteffectflavortext") class Meta: model = ContestEffect @@ -559,9 +551,7 @@ class Meta: class ContestTypeDetailSerializer(serializers.ModelSerializer): - names = ContestTypeNameSerializer( - many=True, read_only=True, source="contesttypename" - ) + names = ContestTypeNameSerializer(many=True, read_only=True, source="contesttypename") berry_flavor = BerryFlavorSummarySerializer(read_only=True, source="berryflavor") class Meta: @@ -605,9 +595,7 @@ class RegionDetailSerializer(serializers.ModelSerializer): locations = LocationSummarySerializer(many=True, read_only=True, source="location") version_groups = serializers.SerializerMethodField("get_region_version_groups") pokedexes = PokedexSummarySerializer(many=True, read_only=True, source="pokedex") - main_generation = GenerationSummarySerializer( - read_only=True, source="generation", allow_null=True - ) + main_generation = GenerationSummarySerializer(read_only=True, source="generation", allow_null=True) class Meta: model = Region @@ -640,9 +628,7 @@ class Meta: ) def get_region_version_groups(self, obj): vg_regions = VersionGroupRegion.objects.filter(region=obj) - data = VersionGroupRegionSerializer( - vg_regions, many=True, context=self.context - ).data + data = VersionGroupRegionSerializer(vg_regions, many=True, context=self.context).data groups = [] for group in data: @@ -669,13 +655,9 @@ class GenerationDetailSerializer(serializers.ModelSerializer): names = GenerationNameSerializer(many=True, read_only=True, source="generationname") abilities = AbilitySummarySerializer(many=True, read_only=True, source="ability") moves = MoveSummarySerializer(many=True, read_only=True, source="move") - pokemon_species = PokemonSpeciesSummarySerializer( - many=True, read_only=True, source="pokemonspecies" - ) + pokemon_species = PokemonSpeciesSummarySerializer(many=True, read_only=True, source="pokemonspecies") types = TypeSummarySerializer(many=True, read_only=True, source="type") - version_groups = VersionGroupSummarySerializer( - many=True, read_only=True, source="versiongroup" - ) + version_groups = VersionGroupSummarySerializer(many=True, read_only=True, source="versiongroup") class Meta: model = Generation @@ -721,9 +703,7 @@ class Meta: "url": { "type": "string", "format": "uri", - "examples": [ - "https://pokeapi.co/api/v2/pokemon-species/1/" - ], + "examples": ["https://pokeapi.co/api/v2/pokemon-species/1/"], }, }, }, @@ -746,9 +726,7 @@ def get_species(self, obj): for species in species_objects: detail = OrderedDict() detail["rate"] = species.gender_rate - detail["pokemon_species"] = PokemonSpeciesSummarySerializer( - species, context=self.context - ).data + detail["pokemon_species"] = PokemonSpeciesSummarySerializer(species, context=self.context).data details.append(detail) return details @@ -775,9 +753,7 @@ def get_required(self, obj): species_list = [] for evo in evo_objects: - species = PokemonSpeciesSummarySerializer( - evo.evolved_species, context=self.context - ).data + species = PokemonSpeciesSummarySerializer(evo.evolved_species, context=self.context).data species_list.append(species) return species_list @@ -803,13 +779,9 @@ class Meta: class GrowthRateDetailSerializer(serializers.ModelSerializer): - descriptions = GrowthRateDescriptionSerializer( - many=True, read_only=True, source="growthratedescription" - ) + descriptions = GrowthRateDescriptionSerializer(many=True, read_only=True, source="growthratedescription") levels = ExperienceSerializer(many=True, read_only=True, source="experience") - pokemon_species = PokemonSpeciesSummarySerializer( - many=True, read_only=True, source="pokemonspecies" - ) + pokemon_species = PokemonSpeciesSummarySerializer(many=True, read_only=True, source="pokemonspecies") class Meta: model = GrowthRate @@ -830,9 +802,7 @@ class Meta: class LanguageDetailSerializer(serializers.ModelSerializer): - names = LanguageNameSerializer( - many=True, read_only=True, source="languagename_language" - ) + names = LanguageNameSerializer(many=True, read_only=True, source="languagename_language") class Meta: model = Language @@ -853,12 +823,8 @@ class Meta: class EncounterConditionDetailSerializer(serializers.ModelSerializer): - names = EncounterConditionNameSerializer( - many=True, read_only=True, source="encounterconditionname" - ) - values = EncounterConditionValueSummarySerializer( - many=True, read_only=True, source="encounterconditionvalue" - ) + names = EncounterConditionNameSerializer(many=True, read_only=True, source="encounterconditionname") + values = EncounterConditionValueSummarySerializer(many=True, read_only=True, source="encounterconditionvalue") class Meta: model = EncounterCondition @@ -875,9 +841,7 @@ class Meta: class EncounterConditionValueDetailSerializer(serializers.ModelSerializer): condition = EncounterConditionSummarySerializer(source="encounter_condition") - names = EncounterConditionValueNameSerializer( - many=True, read_only=True, source="encounterconditionvaluename" - ) + names = EncounterConditionValueNameSerializer(many=True, read_only=True, source="encounterconditionvaluename") class Meta: model = EncounterConditionValue @@ -893,9 +857,7 @@ class Meta: class EncounterMethodDetailSerializer(serializers.ModelSerializer): - names = EncounterMethodNameSerializer( - many=True, read_only=True, source="encountermethodname" - ) + names = EncounterMethodNameSerializer(many=True, read_only=True, source="encountermethodname") class Meta: model = EncounterMethod @@ -931,9 +893,7 @@ class Meta: def get_encounter_conditions(self, obj): condition_values = EncounterConditionValueMap.objects.filter(encounter=obj) - data = EncounterConditionValueMapSerializer( - condition_values, many=True, context=self.context - ).data + data = EncounterConditionValueMapSerializer(condition_values, many=True, context=self.context).data values = [] for map in data: @@ -963,9 +923,7 @@ class LocationAreaDetailSerializer(serializers.ModelSerializer): location = LocationSummarySerializer() encounter_method_rates = serializers.SerializerMethodField("get_method_rates") pokemon_encounters = serializers.SerializerMethodField("get_encounters") - names = LocationAreaNameSerializer( - many=True, read_only=True, source="locationareaname" - ) + names = LocationAreaNameSerializer(many=True, read_only=True, source="locationareaname") class Meta: model = LocationArea @@ -994,9 +952,7 @@ class Meta: "url": { "type": "string", "format": "uri", - "examples": [ - "https://pokeapi.co/api/v2/encounter-method/2/" - ], + "examples": ["https://pokeapi.co/api/v2/encounter-method/2/"], }, }, }, @@ -1022,9 +978,7 @@ class Meta: "url": { "type": "string", "format": "uri", - "examples": [ - "https://pokeapi.co/api/v2/version/14/" - ], + "examples": ["https://pokeapi.co/api/v2/version/14/"], }, }, }, @@ -1037,9 +991,7 @@ class Meta: ) def get_method_rates(self, obj): # Get encounters related to this area and pull out unique encounter methods - encounter_rates = LocationAreaEncounterRate.objects.filter( - location_area=obj - ).order_by("encounter_method_id") + encounter_rates = LocationAreaEncounterRate.objects.filter(location_area=obj).order_by("encounter_method_id") method_ids = encounter_rates.values("encounter_method_id").distinct() encounter_rate_list = [] @@ -1047,21 +999,13 @@ def get_method_rates(self, obj): encounter_rate_details = OrderedDict() # Get each Unique Item by ID - encounter_method_object = EncounterMethod.objects.get( - pk=id["encounter_method_id"] - ) - encounter_method_data = EncounterMethodSummarySerializer( - encounter_method_object, context=self.context - ).data + encounter_method_object = EncounterMethod.objects.get(pk=id["encounter_method_id"]) + encounter_method_data = EncounterMethodSummarySerializer(encounter_method_object, context=self.context).data encounter_rate_details["encounter_method"] = encounter_method_data # Get Versions associated with each unique item - area_encounter_objects = encounter_rates.filter( - encounter_method_id=id["encounter_method_id"] - ) - serializer = LocationAreaEncounterRateSerializer( - area_encounter_objects, many=True, context=self.context - ) + area_encounter_objects = encounter_rates.filter(encounter_method_id=id["encounter_method_id"]) + serializer = LocationAreaEncounterRateSerializer(area_encounter_objects, many=True, context=self.context) encounter_rate_details["version_details"] = [] for area_encounter in serializer.data: @@ -1112,9 +1056,7 @@ def get_method_rates(self, obj): "url": { "type": "string", "format": "uri", - "examples": [ - "https://pokeapi.co/api/v2/version/12/" - ], + "examples": ["https://pokeapi.co/api/v2/version/12/"], }, }, }, @@ -1176,9 +1118,7 @@ def get_method_rates(self, obj): "url": { "type": "string", "format": "uri", - "examples": [ - "https://pokeapi.co/api/v2/encounter-method/5/" - ], + "examples": ["https://pokeapi.co/api/v2/encounter-method/5/"], }, }, }, @@ -1194,9 +1134,7 @@ def get_method_rates(self, obj): def get_encounters(self, obj): # get versions for later use version_objects = Version.objects.all() - version_data = VersionSummarySerializer( - version_objects, many=True, context=self.context - ).data + version_data = VersionSummarySerializer(version_objects, many=True, context=self.context).data # all encounters associated with location area all_encounters = Encounter.objects.filter(location_area=obj).order_by("pokemon") @@ -1207,14 +1145,10 @@ def get_encounters(self, obj): pokemon_object = Pokemon.objects.get(pk=poke["pokemon"]) pokemon_detail = OrderedDict() - pokemon_detail["pokemon"] = PokemonSummarySerializer( - pokemon_object, context=self.context - ).data + pokemon_detail["pokemon"] = PokemonSummarySerializer(pokemon_object, context=self.context).data pokemon_detail["version_details"] = [] - poke_encounters = all_encounters.filter(pokemon=poke["pokemon"]).order_by( - "version" - ) + poke_encounters = all_encounters.filter(pokemon=poke["pokemon"]).order_by("version") # each pokemon has multiple versions it could be encountered in for ver in poke_encounters.values("version").distinct(): @@ -1269,12 +1203,8 @@ class Meta: class LocationDetailSerializer(serializers.ModelSerializer): region = RegionSummarySerializer() names = LocationNameSerializer(many=True, read_only=True, source="locationname") - game_indices = LocationGameIndexSerializer( - many=True, read_only=True, source="locationgameindex" - ) - areas = LocationAreaSummarySerializer( - many=True, read_only=True, source="locationarea" - ) + game_indices = LocationGameIndexSerializer(many=True, read_only=True, source="locationgameindex") + areas = LocationAreaSummarySerializer(many=True, read_only=True, source="locationarea") class Meta: model = Location @@ -1317,9 +1247,7 @@ class Meta: class AbilityChangeSerializer(serializers.ModelSerializer): version_group = VersionGroupSummarySerializer() - effect_entries = AbilityChangeEffectTextSerializer( - many=True, read_only=True, source="abilitychangeeffecttext" - ) + effect_entries = AbilityChangeEffectTextSerializer(many=True, read_only=True, source="abilitychangeeffecttext") class Meta: model = AbilityChange @@ -1335,17 +1263,11 @@ class Meta: class AbilityDetailSerializer(serializers.ModelSerializer): - effect_entries = AbilityEffectTextSerializer( - many=True, read_only=True, source="abilityeffecttext" - ) - flavor_text_entries = AbilityFlavorTextSerializer( - many=True, read_only=True, source="abilityflavortext" - ) + effect_entries = AbilityEffectTextSerializer(many=True, read_only=True, source="abilityeffecttext") + flavor_text_entries = AbilityFlavorTextSerializer(many=True, read_only=True, source="abilityflavortext") names = AbilityNameSerializer(many=True, read_only=True, source="abilityname") generation = GenerationSummarySerializer() - effect_changes = AbilityChangeSerializer( - many=True, read_only=True, source="abilitychange" - ) + effect_changes = AbilityChangeSerializer(many=True, read_only=True, source="abilitychange") pokemon = serializers.SerializerMethodField("get_ability_pokemon") class Meta: @@ -1389,9 +1311,7 @@ class Meta: ) def get_ability_pokemon(self, obj): pokemon_ability_objects = PokemonAbility.objects.filter(ability=obj) - data = PokemonAbilitySerializer( - pokemon_ability_objects, many=True, context=self.context - ).data + data = PokemonAbilitySerializer(pokemon_ability_objects, many=True, context=self.context).data pokemon = [] for poke in data: @@ -1417,9 +1337,7 @@ class Meta: class StatDetailSerializer(serializers.ModelSerializer): names = StatNameSerializer(many=True, read_only=True, source="statname") move_damage_class = MoveDamageClassSummarySerializer() - characteristics = CharacteristicSummarySerializer( - many=True, read_only=True, source="characteristic" - ) + characteristics = CharacteristicSummarySerializer(many=True, read_only=True, source="characteristic") affecting_moves = serializers.SerializerMethodField("get_moves_that_affect") affecting_natures = serializers.SerializerMethodField("get_natures_that_affect") affecting_items = serializers.SerializerMethodField("get_items_that_affect") @@ -1466,9 +1384,7 @@ class Meta: "url": { "type": "string", "format": "uri", - "examples": [ - "https://pokeapi.co/api/v2/move/14/" - ], + "examples": ["https://pokeapi.co/api/v2/move/14/"], }, }, }, @@ -1494,9 +1410,7 @@ class Meta: "url": { "type": "string", "format": "uri", - "examples": [ - "https://pokeapi.co/api/v2/move/45/" - ], + "examples": ["https://pokeapi.co/api/v2/move/45/"], }, }, }, @@ -1508,9 +1422,7 @@ class Meta: ) def get_moves_that_affect(self, obj): stat_change_objects = MoveMetaStatChange.objects.filter(stat=obj) - stat_changes = MoveMetaStatChangeSerializer( - stat_change_objects, many=True, context=self.context - ).data + stat_changes = MoveMetaStatChangeSerializer(stat_change_objects, many=True, context=self.context).data changes = OrderedDict([("increase", []), ("decrease", [])]) for change in stat_changes: @@ -1562,13 +1474,9 @@ def get_moves_that_affect(self, obj): ) def get_natures_that_affect(self, obj): increase_objects = Nature.objects.filter(increased_stat=obj) - increases = NatureSummarySerializer( - increase_objects, many=True, context=self.context - ).data + increases = NatureSummarySerializer(increase_objects, many=True, context=self.context).data decrease_objects = Nature.objects.filter(decreased_stat=obj) - decreases = NatureSummarySerializer( - decrease_objects, many=True, context=self.context - ).data + decreases = NatureSummarySerializer(decrease_objects, many=True, context=self.context).data return OrderedDict([("increase", increases), ("decrease", decreases)]) @@ -1617,9 +1525,7 @@ def get_items_that_affect(self, obj): for item_identifier in stat_item_mapping[stat_name]: try: item = Item.objects.get(name=item_identifier) - affecting_items.append( - ItemSummarySerializer(item, context=self.context).data - ) + affecting_items.append(ItemSummarySerializer(item, context=self.context).data) except Item.DoesNotExist: pass @@ -1638,9 +1544,7 @@ def get_items_that_affect(self, obj): for item_identifier in x_item_mapping[stat_name]: try: item = Item.objects.get(name=item_identifier) - affecting_items.append( - ItemSummarySerializer(item, context=self.context).data - ) + affecting_items.append(ItemSummarySerializer(item, context=self.context).data) except Item.DoesNotExist: pass @@ -1662,9 +1566,7 @@ class Meta: class ItemPocketDetailSerializer(serializers.ModelSerializer): names = ItemPocketNameSerializer(many=True, read_only=True, source="itempocketname") - categories = ItemCategorySummarySerializer( - many=True, read_only=True, source="itemcategory" - ) + categories = ItemCategorySummarySerializer(many=True, read_only=True, source="itemcategory") class Meta: model = ItemPocket @@ -1683,9 +1585,7 @@ class Meta: class ItemCategoryDetailSerializer(serializers.ModelSerializer): - names = ItemCategoryNameSerializer( - many=True, read_only=True, source="itemcategoryname" - ) + names = ItemCategoryNameSerializer(many=True, read_only=True, source="itemcategoryname") pocket = ItemPocketSummarySerializer(source="item_pocket") items = ItemSummarySerializer(many=True, read_only=True, source="item") @@ -1716,12 +1616,8 @@ class Meta: class ItemAttributeDetailSerializer(serializers.ModelSerializer): - names = ItemAttributeNameSerializer( - many=True, read_only=True, source="itemattributename" - ) - descriptions = ItemAttributeDescriptionSerializer( - many=True, read_only=True, source="itemattributedescription" - ) + names = ItemAttributeNameSerializer(many=True, read_only=True, source="itemattributename") + descriptions = ItemAttributeDescriptionSerializer(many=True, read_only=True, source="itemattributedescription") items = serializers.SerializerMethodField("get_attribute_items") class Meta: @@ -1769,9 +1665,7 @@ class Meta: class ItemFlingEffectDetailSerializer(serializers.ModelSerializer): - effect_entries = ItemFlingEffectEffectTextSerializer( - many=True, read_only=True, source="itemflingeffecteffecttext" - ) + effect_entries = ItemFlingEffectEffectTextSerializer(many=True, read_only=True, source="itemflingeffecteffecttext") items = ItemSummarySerializer(many=True, read_only=True, source="item") class Meta: @@ -1824,15 +1718,9 @@ class Meta: class ItemDetailSerializer(serializers.ModelSerializer): names = ItemNameSerializer(many=True, read_only=True, source="itemname") - game_indices = ItemGameIndexSerializer( - many=True, read_only=True, source="itemgameindex" - ) - effect_entries = ItemEffectTextSerializer( - many=True, read_only=True, source="itemeffecttext" - ) - flavor_text_entries = ItemFlavorTextSerializer( - many=True, read_only=True, source="itemflavortext" - ) + game_indices = ItemGameIndexSerializer(many=True, read_only=True, source="itemgameindex") + effect_entries = ItemEffectTextSerializer(many=True, read_only=True, source="itemeffecttext") + flavor_text_entries = ItemFlavorTextSerializer(many=True, read_only=True, source="itemflavortext") category = ItemCategorySummarySerializer(source="item_category") attributes = serializers.SerializerMethodField("get_item_attributes") fling_effect = ItemFlingEffectSummarySerializer(source="item_fling_effect") @@ -1881,9 +1769,7 @@ class Meta: "url": { "type": "string", "format": "uri", - "examples": [ - "https://pokeapi.co/api/v2/version-group/20/" - ], + "examples": ["https://pokeapi.co/api/v2/version-group/20/"], }, }, }, @@ -1897,17 +1783,11 @@ def get_item_machines(self, obj): machines = [] for machine_object in machine_objects: - machine_data = MachineSummarySerializer( - machine_object, context=self.context - ).data + machine_data = MachineSummarySerializer(machine_object, context=self.context).data - version_group_data = VersionGroupSummarySerializer( - machine_object.version_group, context=self.context - ).data + version_group_data = VersionGroupSummarySerializer(machine_object.version_group, context=self.context).data - machines.append( - {"machine": machine_data, "version_group": version_group_data} - ) + machines.append({"machine": machine_data, "version_group": version_group_data}) return machines @@ -1919,9 +1799,7 @@ def get_item_machines(self, obj): "default": { "type": "string", "format": "uri", - "examples": [ - "https://pokeapi.co/media/sprites/items/master-ball.png" - ], + "examples": ["https://pokeapi.co/media/sprites/items/master-ball.png"], } }, } @@ -1949,9 +1827,7 @@ def get_item_sprites(self, obj): ) def get_item_attributes(self, obj): item_attribute_maps = ItemAttributeMap.objects.filter(item=obj) - serializer = ItemAttributeMapSerializer( - item_attribute_maps, many=True, context=self.context - ) + serializer = ItemAttributeMapSerializer(item_attribute_maps, many=True, context=self.context) data = serializer.data attributes = [] @@ -2005,9 +1881,7 @@ def get_item_attributes(self, obj): "url": { "type": "string", "format": "uri", - "examples": [ - "https://pokeapi.co/api/v2/version/7/" - ], + "examples": ["https://pokeapi.co/api/v2/version/7/"], }, }, }, @@ -2028,16 +1902,12 @@ def get_held_by_pokemon(self, obj): # Get each Unique Item by ID pokemon_object = Pokemon.objects.get(pk=id["pokemon_id"]) - pokemon_data = PokemonSummarySerializer( - pokemon_object, context=self.context - ).data + pokemon_data = PokemonSummarySerializer(pokemon_object, context=self.context).data item_pokemon_details["pokemon"] = pokemon_data # Get Versions associated with each unique item pokemon_item_objects = pokemon_items.filter(pokemon_id=id["pokemon_id"]) - serializer = PokemonItemSerializer( - pokemon_item_objects, many=True, context=self.context - ) + serializer = PokemonItemSerializer(pokemon_item_objects, many=True, context=self.context) item_pokemon_details["version_details"] = [] for pokemon in serializer.data: @@ -2066,9 +1936,7 @@ def get_held_by_pokemon(self, obj): def get_baby_trigger_for(self, obj): try: chain_object = EvolutionChain.objects.get(baby_trigger_item=obj) - data = EvolutionChainSummarySerializer( - chain_object, context=self.context - ).data + data = EvolutionChainSummarySerializer(chain_object, context=self.context).data except EvolutionChain.DoesNotExist: data = None @@ -2147,9 +2015,7 @@ class Meta: "url": { "type": "string", "format": "uri", - "examples": [ - "https://pokeapi.co/api/v2/pokeathlon-stat/2/" - ], + "examples": ["https://pokeapi.co/api/v2/pokeathlon-stat/2/"], }, }, }, @@ -2159,9 +2025,7 @@ class Meta: ) def get_pokeathlon_stats(self, obj): pokeathlon_stat_objects = NaturePokeathlonStat.objects.filter(nature=obj) - pokeathlon_stats = NaturePokeathlonStatSerializer( - pokeathlon_stat_objects, many=True, context=self.context - ).data + pokeathlon_stats = NaturePokeathlonStatSerializer(pokeathlon_stat_objects, many=True, context=self.context).data for stat in pokeathlon_stats: del stat["nature"] @@ -2183,9 +2047,7 @@ class Meta: class BerryFirmnessDetailSerializer(serializers.ModelSerializer): - names = BerryFirmnessNameSerializer( - many=True, read_only=True, source="berryfirmnessname" - ) + names = BerryFirmnessNameSerializer(many=True, read_only=True, source="berryfirmnessname") berries = BerrySummarySerializer(many=True, read_only=True, source="berry") class Meta: @@ -2202,9 +2064,7 @@ class Meta: class BerryFlavorDetailSerializer(serializers.ModelSerializer): - names = BerryFlavorNameSerializer( - many=True, read_only=True, source="berryflavorname" - ) + names = BerryFlavorNameSerializer(many=True, read_only=True, source="berryflavorname") contest_type = ContestTypeSummarySerializer() berries = serializers.SerializerMethodField("get_berries_with_flavor") @@ -2242,12 +2102,8 @@ class Meta: } ) def get_berries_with_flavor(self, obj): - flavor_map_objects = BerryFlavorMap.objects.filter( - berry_flavor=obj, potency__gt=0 - ).order_by("potency") - flavor_maps = BerryFlavorMapSerializer( - flavor_map_objects, many=True, context=self.context - ).data + flavor_map_objects = BerryFlavorMap.objects.filter(berry_flavor=obj, potency__gt=0).order_by("potency") + flavor_maps = BerryFlavorMapSerializer(flavor_map_objects, many=True, context=self.context).data for map in flavor_maps: del map["flavor"] @@ -2299,9 +2155,7 @@ class Meta: "type": "string", "format": "uri", "description": "The URL to get more information about the flavor", - "examples": [ - "https://pokeapi.co/api/v2/berry-flavor/1/" - ], + "examples": ["https://pokeapi.co/api/v2/berry-flavor/1/"], }, }, }, @@ -2311,9 +2165,7 @@ class Meta: ) def get_berry_flavors(self, obj): flavor_map_objects = BerryFlavorMap.objects.filter(berry=obj) - flavor_maps = BerryFlavorMapSerializer( - flavor_map_objects, many=True, context=self.context - ).data + flavor_maps = BerryFlavorMapSerializer(flavor_map_objects, many=True, context=self.context).data flavors = [] for map in flavor_maps: @@ -2430,14 +2282,10 @@ class TypeDetailSerializer(serializers.ModelSerializer): generation = GenerationSummarySerializer() names = AbilityNameSerializer(many=True, read_only=True, source="typename") - game_indices = TypeGameIndexSerializer( - many=True, read_only=True, source="typegameindex" - ) + game_indices = TypeGameIndexSerializer(many=True, read_only=True, source="typegameindex") move_damage_class = MoveDamageClassSummarySerializer() damage_relations = serializers.SerializerMethodField("get_type_relationships") - past_damage_relations = serializers.SerializerMethodField( - "get_type_past_relationships" - ) + past_damage_relations = serializers.SerializerMethodField("get_type_past_relationships") pokemon = serializers.SerializerMethodField("get_type_pokemon") moves = MoveSummarySerializer(many=True, read_only=True, source="move") sprites = serializers.SerializerMethodField("get_type_sprites") @@ -2526,17 +2374,11 @@ def get_type_sprites(self, obj): def add_type_entry(self, relations, type, damage_factor, direction="_damage_to"): if damage_factor == 200: - relations["double" + direction].append( - TypeSummarySerializer(type, context=self.context).data - ) + relations["double" + direction].append(TypeSummarySerializer(type, context=self.context).data) elif damage_factor == 50: - relations["half" + direction].append( - TypeSummarySerializer(type, context=self.context).data - ) + relations["half" + direction].append(TypeSummarySerializer(type, context=self.context).data) elif damage_factor == 0: - relations["no" + direction].append( - TypeSummarySerializer(type, context=self.context).data - ) + relations["no" + direction].append(TypeSummarySerializer(type, context=self.context).data) @extend_schema_field( field={ @@ -2669,9 +2511,7 @@ def get_type_relationships(self, obj): for relation in serializer.data: type = Type.objects.get(pk=relation["damage_type"]) damage_factor = relation["damage_factor"] - self.add_type_entry( - relations, type, damage_factor, direction="_damage_from" - ) + self.add_type_entry(relations, type, damage_factor, direction="_damage_from") return relations @@ -2750,9 +2590,7 @@ def remove_type_entry(self, relations, type, direction="_damage_to"): "url": { "type": "string", "format": "uri", - "examples": [ - "https://pokeapi.co/api/v2/type/3/" - ], + "examples": ["https://pokeapi.co/api/v2/type/3/"], }, }, }, @@ -2767,9 +2605,7 @@ def remove_type_entry(self, relations, type, direction="_damage_to"): "url": { "type": "string", "format": "uri", - "examples": [ - "https://pokeapi.co/api/v2/type/7/" - ], + "examples": ["https://pokeapi.co/api/v2/type/7/"], }, }, }, @@ -2787,9 +2623,7 @@ def remove_type_entry(self, relations, type, direction="_damage_to"): "url": { "type": "string", "format": "uri", - "examples": [ - "https://pokeapi.co/api/v2/type/4/" - ], + "examples": ["https://pokeapi.co/api/v2/type/4/"], }, }, }, @@ -2807,9 +2641,7 @@ def remove_type_entry(self, relations, type, direction="_damage_to"): "url": { "type": "string", "format": "uri", - "examples": [ - "https://pokeapi.co/api/v2/type/13/" - ], + "examples": ["https://pokeapi.co/api/v2/type/13/"], }, }, }, @@ -2827,9 +2659,7 @@ def remove_type_entry(self, relations, type, direction="_damage_to"): "url": { "type": "string", "format": "uri", - "examples": [ - "https://pokeapi.co/api/v2/type/4/" - ], + "examples": ["https://pokeapi.co/api/v2/type/4/"], }, }, }, @@ -2847,9 +2677,7 @@ def remove_type_entry(self, relations, type, direction="_damage_to"): "url": { "type": "string", "format": "uri", - "examples": [ - "https://pokeapi.co/api/v2/type/11/" - ], + "examples": ["https://pokeapi.co/api/v2/type/11/"], }, }, }, @@ -2890,24 +2718,12 @@ def get_type_past_relationships(self, obj): # remove types not yet introduced # e.g. Poison has no effect on Steel, but Steel was not present in generation I # so it should be absent from the list - relations["no_damage_to"] = self.remove_newer_types( - relations["no_damage_to"], current_gen - ) - relations["half_damage_to"] = self.remove_newer_types( - relations["half_damage_to"], current_gen - ) - relations["double_damage_to"] = self.remove_newer_types( - relations["double_damage_to"], current_gen - ) - relations["no_damage_from"] = self.remove_newer_types( - relations["no_damage_from"], current_gen - ) - relations["half_damage_from"] = self.remove_newer_types( - relations["half_damage_from"], current_gen - ) - relations["double_damage_from"] = self.remove_newer_types( - relations["double_damage_from"], current_gen - ) + relations["no_damage_to"] = self.remove_newer_types(relations["no_damage_to"], current_gen) + relations["half_damage_to"] = self.remove_newer_types(relations["half_damage_to"], current_gen) + relations["double_damage_to"] = self.remove_newer_types(relations["double_damage_to"], current_gen) + relations["no_damage_from"] = self.remove_newer_types(relations["no_damage_from"], current_gen) + relations["half_damage_from"] = self.remove_newer_types(relations["half_damage_from"], current_gen) + relations["double_damage_from"] = self.remove_newer_types(relations["double_damage_from"], current_gen) # populate offensive relations results = list(filter(lambda x: x["damage_type"] == obj.id, gen_data)) @@ -2919,9 +2735,7 @@ def get_type_past_relationships(self, obj): # add entry damage_factor = relation["damage_factor"] - self.add_type_entry( - relations, type, damage_factor, direction="_damage_to" - ) + self.add_type_entry(relations, type, damage_factor, direction="_damage_to") del relation["generation"] @@ -2935,9 +2749,7 @@ def get_type_past_relationships(self, obj): # add entry damage_factor = relation["damage_factor"] - self.add_type_entry( - relations, type, damage_factor, direction="_damage_from" - ) + self.add_type_entry(relations, type, damage_factor, direction="_damage_from") del relation["generation"] @@ -2985,9 +2797,7 @@ def type_is_present(self, type, current_gen): ) def get_type_pokemon(self, obj): poke_type_objects = PokemonType.objects.filter(type=obj) - poke_types = PokemonTypeSerializer( - poke_type_objects, many=True, context=self.context - ).data + poke_types = PokemonTypeSerializer(poke_type_objects, many=True, context=self.context).data for poke_type in poke_types: del poke_type["type"] @@ -3020,9 +2830,7 @@ class Meta: class MoveBattleStyleDetailSerializer(serializers.ModelSerializer): - names = MoveBattleStyleNameSerializer( - many=True, read_only=True, source="movebattlestylename" - ) + names = MoveBattleStyleNameSerializer(many=True, read_only=True, source="movebattlestylename") class Meta: model = MoveBattleStyle @@ -3049,12 +2857,8 @@ class Meta: class MoveDamageClassDetailSerializer(serializers.ModelSerializer): - names = MoveDamageClassNameSerializer( - many=True, read_only=True, source="movedamageclassname" - ) - descriptions = MoveDamageClassDescriptionSerializer( - many=True, read_only=True, source="movedamageclassdescription" - ) + names = MoveDamageClassNameSerializer(many=True, read_only=True, source="movedamageclassname") + descriptions = MoveDamageClassDescriptionSerializer(many=True, read_only=True, source="movedamageclassdescription") moves = MoveSummarySerializer(many=True, read_only=True, source="move") class Meta: @@ -3080,9 +2884,7 @@ class Meta: class MoveMetaAilmentDetailSerializer(serializers.ModelSerializer): - names = MoveMetaAilmentNameSerializer( - many=True, read_only=True, source="movemetaailmentname" - ) + names = MoveMetaAilmentNameSerializer(many=True, read_only=True, source="movemetaailmentname") moves = serializers.SerializerMethodField("get_ailment_moves") class Meta: @@ -3208,9 +3010,7 @@ class Meta: class MoveTargetDetailSerializer(serializers.ModelSerializer): names = MoveTargetNameSerializer(many=True, read_only=True, source="movetargetname") - descriptions = MoveTargetDescriptionSerializer( - many=True, read_only=True, source="movetargetdescription" - ) + descriptions = MoveTargetDescriptionSerializer(many=True, read_only=True, source="movetargetdescription") moves = MoveSummarySerializer(many=True, read_only=True, source="move") class Meta: @@ -3260,9 +3060,7 @@ class Meta: }, "short_effect": { "type": "string", - "examples": [ - "Inflicts regular damage with no additional effect." - ], + "examples": ["Inflicts regular damage with no additional effect."], }, "language": { "type": "object", @@ -3282,9 +3080,7 @@ class Meta: ) def get_effects(self, obj): effect_texts = MoveEffectEffectText.objects.filter(move_effect=obj.move_effect) - data = MoveEffectEffectTextSerializer( - effect_texts, many=True, context=self.context - ).data + data = MoveEffectEffectTextSerializer(effect_texts, many=True, context=self.context).data return data @@ -3343,9 +3139,7 @@ class MoveDetailSerializer(serializers.ModelSerializer): past_values = MoveChangeSerializer(many=True, read_only=True, source="movechange") effect_changes = serializers.SerializerMethodField("get_effect_change_text") machines = serializers.SerializerMethodField("get_move_machines") - flavor_text_entries = MoveFlavorTextSerializer( - many=True, read_only=True, source="moveflavortext" - ) + flavor_text_entries = MoveFlavorTextSerializer(many=True, read_only=True, source="moveflavortext") learned_by_pokemon = serializers.SerializerMethodField() class Meta: @@ -3403,9 +3197,7 @@ def get_learned_by_pokemon(self, obj): for id in pokemon_ids: pokemon_object = Pokemon.objects.get(pk=id["pokemon_id"]) - pokemon_data = PokemonSummarySerializer( - pokemon_object, context=self.context - ).data + pokemon_data = PokemonSummarySerializer(pokemon_object, context=self.context).data pokemon_list.append(pokemon_data) @@ -3437,9 +3229,7 @@ def get_learned_by_pokemon(self, obj): "url": { "type": "string", "format": "uri", - "examples": [ - "https://pokeapi.co/api/v2/version-group/1/" - ], + "examples": ["https://pokeapi.co/api/v2/version-group/1/"], }, }, }, @@ -3453,17 +3243,11 @@ def get_move_machines(self, obj): machines = [] for machine_object in machine_objects: - machine_data = MachineSummarySerializer( - machine_object, context=self.context - ).data + machine_data = MachineSummarySerializer(machine_object, context=self.context).data - version_group_data = VersionGroupSummarySerializer( - machine_object.version_group, context=self.context - ).data + version_group_data = VersionGroupSummarySerializer(machine_object.version_group, context=self.context).data - machines.append( - {"machine": machine_data, "version_group": version_group_data} - ) + machines.append({"machine": machine_data, "version_group": version_group_data}) return machines @@ -3490,9 +3274,7 @@ def get_move_machines(self, obj): "url": { "type": "string", "format": "uri", - "examples": [ - "https://pokeapi.co/api/v2/move/7/" - ], + "examples": ["https://pokeapi.co/api/v2/move/7/"], }, }, }, @@ -3511,9 +3293,7 @@ def get_move_machines(self, obj): "url": { "type": "string", "format": "uri", - "examples": [ - "https://pokeapi.co/api/v2/move/8/" - ], + "examples": ["https://pokeapi.co/api/v2/move/8/"], }, }, }, @@ -3538,9 +3318,7 @@ def get_move_machines(self, obj): "url": { "type": "string", "format": "uri", - "examples": [ - "https://pokeapi.co/api/v2/move/400/" - ], + "examples": ["https://pokeapi.co/api/v2/move/400/"], }, }, }, @@ -3559,9 +3337,7 @@ def get_move_machines(self, obj): "url": { "type": "string", "format": "uri", - "examples": [ - "https://pokeapi.co/api/v2/move/116/" - ], + "examples": ["https://pokeapi.co/api/v2/move/116/"], }, }, }, @@ -3573,31 +3349,18 @@ def get_move_machines(self, obj): ) def get_combos(self, obj): normal_before_objects = ContestCombo.objects.filter(first_move=obj) - normal_before_data = ContestComboSerializer( - normal_before_objects, many=True, context=self.context - ).data + normal_before_data = ContestComboSerializer(normal_before_objects, many=True, context=self.context).data normal_after_objects = ContestCombo.objects.filter(second_move=obj) - normal_after_data = ContestComboSerializer( - normal_after_objects, many=True, context=self.context - ).data + normal_after_data = ContestComboSerializer(normal_after_objects, many=True, context=self.context).data super_before_objects = SuperContestCombo.objects.filter(first_move=obj) - super_before_data = SuperContestComboSerializer( - super_before_objects, many=True, context=self.context - ).data + super_before_data = SuperContestComboSerializer(super_before_objects, many=True, context=self.context).data super_after_objects = SuperContestCombo.objects.filter(second_move=obj) - super_after_data = SuperContestComboSerializer( - super_after_objects, many=True, context=self.context - ).data + super_after_data = SuperContestComboSerializer(super_after_objects, many=True, context=self.context).data details = None - if ( - normal_before_data - or normal_after_data - or super_before_data - or super_after_data - ): + if normal_before_data or normal_after_data or super_before_data or super_after_data: details = OrderedDict() details["normal"] = OrderedDict() details["normal"]["use_before"] = None @@ -3641,9 +3404,7 @@ def get_combos(self, obj): }, "short_effect": { "type": "string", - "examples": [ - "Inflicts regular damage with no additional effect." - ], + "examples": ["Inflicts regular damage with no additional effect."], }, "language": { "type": "object", @@ -3663,15 +3424,11 @@ def get_combos(self, obj): ) def get_effect_text(self, obj): effect_texts = MoveEffectEffectText.objects.filter(move_effect=obj.move_effect) - data = MoveEffectEffectTextSerializer( - effect_texts, many=True, context=self.context - ).data + data = MoveEffectEffectTextSerializer(effect_texts, many=True, context=self.context).data if len(data) > 0: for key, value in data[0].items(): if "$effect_chance%" in value: - data[0][key] = value.replace( - "$effect_chance", f"{obj.move_effect_chance}" - ) + data[0][key] = value.replace("$effect_chance", f"{obj.move_effect_chance}") return data @@ -3690,9 +3447,7 @@ def get_effect_text(self, obj): "properties": { "effect": { "type": "string", - "examples": [ - "Hits Pokémon under the effects of dig and fly." - ], + "examples": ["Hits Pokémon under the effects of dig and fly."], }, "language": { "type": "object", @@ -3702,9 +3457,7 @@ def get_effect_text(self, obj): "url": { "type": "string", "format": "uri", - "examples": [ - "https://pokeapi.co/api/v2/language/9/" - ], + "examples": ["https://pokeapi.co/api/v2/language/9/"], }, }, }, @@ -3719,9 +3472,7 @@ def get_effect_text(self, obj): "url": { "type": "string", "format": "uri", - "examples": [ - "https://pokeapi.co/api/v2/version-group/3/" - ], + "examples": ["https://pokeapi.co/api/v2/version-group/3/"], }, }, }, @@ -3731,9 +3482,7 @@ def get_effect_text(self, obj): ) def get_effect_change_text(self, obj): effect_changes = MoveEffectChange.objects.filter(move_effect=obj.move_effect) - data = MoveEffectChangeSerializer( - effect_changes, many=True, context=self.context - ).data + data = MoveEffectChangeSerializer(effect_changes, many=True, context=self.context).data return data @@ -3763,9 +3512,7 @@ def get_effect_change_text(self, obj): ) def get_move_stat_change(self, obj): stat_change_objects = MoveMetaStatChange.objects.filter(move=obj) - stat_changes = MoveMetaStatChangeSerializer( - stat_change_objects, many=True, context=self.context - ).data + stat_changes = MoveMetaStatChangeSerializer(stat_change_objects, many=True, context=self.context).data for change in stat_changes: del change["move"] @@ -3796,9 +3543,7 @@ class Meta: class PalParkAreaDetailSerializer(serializers.ModelSerializer): - names = PalParkAreaNameSerializer( - many=True, read_only=True, source="palparkareaname" - ) + names = PalParkAreaNameSerializer(many=True, read_only=True, source="palparkareaname") pokemon_encounters = serializers.SerializerMethodField("get_encounters") class Meta: @@ -3825,9 +3570,7 @@ class Meta: "url": { "type": "string", "format": "uri", - "examples": [ - "https://pokeapi.co/api/v2/pokemon-species/1/" - ], + "examples": ["https://pokeapi.co/api/v2/pokemon-species/1/"], }, }, }, @@ -3838,9 +3581,7 @@ class Meta: ) def get_encounters(self, obj): pal_park_objects = PalPark.objects.filter(pal_park_area=obj) - parks = PalParkSerializer( - pal_park_objects, many=True, context=self.context - ).data + parks = PalParkSerializer(pal_park_objects, many=True, context=self.context).data encounters = [] for encounter in parks: @@ -3864,12 +3605,8 @@ class Meta: class PokemonColorDetailSerializer(serializers.ModelSerializer): - names = PokemonColorNameSerializer( - many=True, read_only=True, source="pokemoncolorname" - ) - pokemon_species = PokemonSpeciesSummarySerializer( - many=True, read_only=True, source="pokemonspecies" - ) + names = PokemonColorNameSerializer(many=True, read_only=True, source="pokemoncolorname") + pokemon_species = PokemonSpeciesSummarySerializer(many=True, read_only=True, source="pokemonspecies") class Meta: model = PokemonColor @@ -3911,9 +3648,7 @@ class PokemonFormDetailSerializer(serializers.ModelSerializer): form_names = serializers.SerializerMethodField("get_pokemon_form_names") names = serializers.SerializerMethodField("get_pokemon_form_pokemon_names") types = serializers.SerializerMethodField("get_pokemon_form_types") - trigger_conditions = serializers.SerializerMethodField( - "get_pokemon_form_triggers_conditions" - ) + trigger_conditions = serializers.SerializerMethodField("get_pokemon_form_triggers_conditions") class Meta: model = PokemonForm @@ -3960,12 +3695,8 @@ class Meta: } ) def get_pokemon_form_names(self, obj): - form_results = PokemonFormName.objects.filter( - pokemon_form=obj, name__regex=".+" - ) - form_serializer = PokemonFormNameSerializer( - form_results, many=True, context=self.context - ) + form_results = PokemonFormName.objects.filter(pokemon_form=obj, name__regex=".+") + form_serializer = PokemonFormNameSerializer(form_results, many=True, context=self.context) data = form_serializer.data @@ -3999,12 +3730,8 @@ def get_pokemon_form_names(self, obj): } ) def get_pokemon_form_pokemon_names(self, obj): - form_results = PokemonFormName.objects.filter( - pokemon_form=obj, pokemon_name__regex=".+" - ) - form_serializer = PokemonFormNameSerializer( - form_results, many=True, context=self.context - ) + form_results = PokemonFormName.objects.filter(pokemon_form=obj, pokemon_name__regex=".+") + form_serializer = PokemonFormNameSerializer(form_results, many=True, context=self.context) data = form_serializer.data @@ -4078,9 +3805,7 @@ def get_pokemon_form_sprites(self, obj): ) def get_pokemon_form_types(self, obj): form_type_objects = PokemonFormType.objects.filter(pokemon_form=obj) - form_types = PokemonFormTypeSerializer( - form_type_objects, many=True, context=self.context - ).data + form_types = PokemonFormTypeSerializer(form_type_objects, many=True, context=self.context).data for form_type in form_types: del form_type["pokemon_form"] @@ -4089,9 +3814,7 @@ def get_pokemon_form_types(self, obj): if form_types == []: pokemon_object = Pokemon.objects.get(id=obj.pokemon_id) pokemon_type_objects = PokemonType.objects.filter(pokemon=pokemon_object) - form_types = PokemonTypeSerializer( - pokemon_type_objects, many=True, context=self.context - ).data + form_types = PokemonTypeSerializer(pokemon_type_objects, many=True, context=self.context).data for form_type in form_types: del form_type["pokemon"] @@ -4124,9 +3847,7 @@ def get_pokemon_form_types(self, obj): ) def get_pokemon_form_triggers_conditions(self, obj): conditions = PokemonFormCondition.objects.filter(pokemon_form=obj) - conditions_data = PokemonFormConditionSerializer( - conditions, many=True, context=self.context - ).data + conditions_data = PokemonFormConditionSerializer(conditions, many=True, context=self.context).data triggers = [] for condition in conditions_data: @@ -4156,12 +3877,8 @@ class Meta: class PokemonHabitatDetailSerializer(serializers.ModelSerializer): - names = PokemonHabitatNameSerializer( - many=True, read_only=True, source="pokemonhabitatname" - ) - pokemon_species = PokemonSpeciesSummarySerializer( - many=True, read_only=True, source="pokemonspecies" - ) + names = PokemonHabitatNameSerializer(many=True, read_only=True, source="pokemonhabitatname") + pokemon_species = PokemonSpeciesSummarySerializer(many=True, read_only=True, source="pokemonspecies") class Meta: model = PokemonHabitat @@ -4190,12 +3907,8 @@ class Meta: class MoveLearnMethodDetailSerializer(serializers.ModelSerializer): - names = MoveLearnMethodNameSerializer( - many=True, read_only=True, source="movelearnmethodname" - ) - descriptions = MoveLearnMethodDescriptionSerializer( - many=True, read_only=True, source="movelearnmethoddescription" - ) + names = MoveLearnMethodNameSerializer(many=True, read_only=True, source="movelearnmethodname") + descriptions = MoveLearnMethodDescriptionSerializer(many=True, read_only=True, source="movelearnmethoddescription") version_groups = serializers.SerializerMethodField("get_method_version_groups") class Meta: @@ -4226,9 +3939,7 @@ class Meta: } ) def get_method_version_groups(self, obj): - version_group_objects = VersionGroupMoveLearnMethod.objects.filter( - move_learn_method=obj - ) + version_group_objects = VersionGroupMoveLearnMethod.objects.filter(move_learn_method=obj) version_group_data = VersionGroupMoveLearnMethodSerializer( version_group_objects, many=True, context=self.context ).data @@ -4261,9 +3972,7 @@ class Meta: class PokemonShapeDetailSerializer(serializers.ModelSerializer): names = serializers.SerializerMethodField("get_shape_names") awesome_names = serializers.SerializerMethodField("get_shape_awesome_names") - pokemon_species = PokemonSpeciesSummarySerializer( - many=True, read_only=True, source="pokemonspecies" - ) + pokemon_species = PokemonSpeciesSummarySerializer(many=True, read_only=True, source="pokemonspecies") class Meta: model = PokemonShape @@ -4288,9 +3997,7 @@ class Meta: ) def get_shape_names(self, obj): results = PokemonShapeName.objects.filter(pokemon_shape_id=obj) - serializer = PokemonShapeNameSerializer( - results, many=True, context=self.context - ) + serializer = PokemonShapeNameSerializer(results, many=True, context=self.context) data = serializer.data for entry in data: @@ -4340,9 +4047,7 @@ def get_shape_names(self, obj): ) def get_shape_awesome_names(self, obj): results = PokemonShapeName.objects.filter(pokemon_shape_id=obj) - serializer = PokemonShapeNameSerializer( - results, many=True, context=self.context - ) + serializer = PokemonShapeNameSerializer(results, many=True, context=self.context) data = serializer.data for entry in data: @@ -4399,18 +4104,14 @@ class Meta: class PokemonDetailSerializer(serializers.ModelSerializer): abilities = serializers.SerializerMethodField("get_pokemon_abilities") past_abilities = serializers.SerializerMethodField("get_past_pokemon_abilities") - game_indices = PokemonGameIndexSerializer( - many=True, read_only=True, source="pokemongameindex" - ) + game_indices = PokemonGameIndexSerializer(many=True, read_only=True, source="pokemongameindex") moves = serializers.SerializerMethodField("get_pokemon_moves") species = PokemonSpeciesSummarySerializer(source="pokemon_species") stats = PokemonStatSerializer(many=True, read_only=True, source="pokemonstat") past_stats = serializers.SerializerMethodField("get_past_pokemon_stats") types = serializers.SerializerMethodField("get_pokemon_types") past_types = serializers.SerializerMethodField("get_past_pokemon_types") - forms = PokemonFormSummarySerializer( - many=True, read_only=True, source="pokemonform" - ) + forms = PokemonFormSummarySerializer(many=True, read_only=True, source="pokemonform") held_items = serializers.SerializerMethodField("get_pokemon_held_items") location_area_encounters = serializers.SerializerMethodField("get_encounters") sprites = serializers.SerializerMethodField("get_pokemon_sprites") @@ -4486,16 +4187,12 @@ def get_pokemon_sprites(self, obj): "latest": { "type": "string", "format": "uri", - "examples": [ - "https://raw.githubusercontent.com/PokeAPI/cries/main/cries/pokemon/latest/50.ogg" - ], + "examples": ["https://raw.githubusercontent.com/PokeAPI/cries/main/cries/pokemon/latest/50.ogg"], }, "legacy": { "type": "string", "format": "uri", - "examples": [ - "https://raw.githubusercontent.com/PokeAPI/cries/main/cries/pokemon/legacy/50.ogg" - ], + "examples": ["https://raw.githubusercontent.com/PokeAPI/cries/main/cries/pokemon/legacy/50.ogg"], }, }, } @@ -4816,9 +4513,7 @@ def get_pokemon_cries(self, obj): "url": { "type": "string", "format": "uri", - "examples": [ - "https://pokeapi.co/api/v2/move-learn-method/1/" - ], + "examples": ["https://pokeapi.co/api/v2/move-learn-method/1/"], }, }, }, @@ -4833,9 +4528,7 @@ def get_pokemon_cries(self, obj): "url": { "type": "string", "format": "uri", - "examples": [ - "https://pokeapi.co/api/v2/version-group/1/" - ], + "examples": ["https://pokeapi.co/api/v2/version-group/1/"], }, }, }, @@ -4848,13 +4541,9 @@ def get_pokemon_cries(self, obj): ) def get_pokemon_moves(self, obj): version_objects = VersionGroup.objects.all() - version_data = VersionGroupSummarySerializer( - version_objects, many=True, context=self.context - ).data + version_data = VersionGroupSummarySerializer(version_objects, many=True, context=self.context).data method_objects = MoveLearnMethod.objects.all() - method_data = MoveLearnMethodSummarySerializer( - method_objects, many=True, context=self.context - ).data + method_data = MoveLearnMethodSummarySerializer(method_objects, many=True, context=self.context).data # Get moves related to this pokemon and pull out unique Move IDs. # Note that it's important to order by the same column we're using to @@ -4875,21 +4564,15 @@ def get_pokemon_moves(self, obj): # Get Versions and Move Methods associated with each unique move pokemon_move_objects = pokemon_moves.filter(move_id=id["move_id"]) - serializer = PokemonMoveSerializer( - pokemon_move_objects, many=True, context=self.context - ) + serializer = PokemonMoveSerializer(pokemon_move_objects, many=True, context=self.context) pokemon_move_details["version_group_details"] = [] for move in serializer.data: version_detail = OrderedDict() version_detail["level_learned_at"] = move["level"] - version_detail["version_group"] = version_data[ - move["version_group"] - 1 - ] - version_detail["move_learn_method"] = method_data[ - move["move_learn_method"] - 1 - ] + version_detail["version_group"] = version_data[move["version_group"] - 1] + version_detail["move_learn_method"] = method_data[move["move_learn_method"] - 1] version_detail["order"] = move["order"] pokemon_move_details["version_group_details"].append(version_detail) @@ -4952,9 +4635,7 @@ def get_pokemon_moves(self, obj): "url": { "type": "string", "format": "uri", - "examples": [ - "https://pokeapi.co/api/v2/version/12/" - ], + "examples": ["https://pokeapi.co/api/v2/version/12/"], }, }, }, @@ -4981,9 +4662,7 @@ def get_pokemon_held_items(self, obj): # Get Versions associated with each unique item pokemon_item_objects = pokemon_items.filter(item_id=id["item_id"]) - serializer = PokemonItemSerializer( - pokemon_item_objects, many=True, context=self.context - ) + serializer = PokemonItemSerializer(pokemon_item_objects, many=True, context=self.context) pokemon_item_details["version_details"] = [] for item in serializer.data: @@ -5033,9 +4712,7 @@ def get_pokemon_held_items(self, obj): ) def get_pokemon_abilities(self, obj): pokemon_ability_objects = PokemonAbility.objects.filter(pokemon=obj) - data = PokemonAbilitySerializer( - pokemon_ability_objects, many=True, context=self.context - ).data + data = PokemonAbilitySerializer(pokemon_ability_objects, many=True, context=self.context).data abilities = [] for ability in data: @@ -5084,9 +4761,7 @@ def get_pokemon_abilities(self, obj): "url": { "type": "string", "format": "uri", - "examples": [ - "https://pokeapi.co/api/v2/ability/26/" - ], + "examples": ["https://pokeapi.co/api/v2/ability/26/"], }, }, }, @@ -5196,9 +4871,7 @@ def get_past_pokemon_abilities(self, obj): "url": { "type": "string", "format": "uri", - "examples": [ - "https://pokeapi.co/api/v2/stat/6/" - ], + "examples": ["https://pokeapi.co/api/v2/stat/6/"], }, }, }, @@ -5211,9 +4884,7 @@ def get_past_pokemon_abilities(self, obj): ) def get_past_pokemon_stats(self, obj): pokemon_past_stat_objects = PokemonStatPast.objects.filter(pokemon=obj) - pokemon_past_stats = PokemonStatPastSerializer( - pokemon_past_stat_objects, many=True, context=self.context - ).data + pokemon_past_stats = PokemonStatPastSerializer(pokemon_past_stat_objects, many=True, context=self.context).data # post-process to the form we want current_generation = "" @@ -5275,9 +4946,7 @@ def get_past_pokemon_stats(self, obj): ) def get_pokemon_types(self, obj): poke_type_objects = PokemonType.objects.filter(pokemon=obj) - poke_types = PokemonTypeSerializer( - poke_type_objects, many=True, context=self.context - ).data + poke_types = PokemonTypeSerializer(poke_type_objects, many=True, context=self.context).data for poke_type in poke_types: del poke_type["pokemon"] @@ -5342,9 +5011,7 @@ def get_pokemon_types(self, obj): "url": { "type": "string", "format": "uri", - "examples": [ - "https://pokeapi.co/api/v2/type/1/" - ], + "examples": ["https://pokeapi.co/api/v2/type/1/"], }, }, }, @@ -5357,9 +5024,7 @@ def get_pokemon_types(self, obj): ) def get_past_pokemon_types(self, obj): poke_past_type_objects = PokemonTypePast.objects.filter(pokemon=obj) - poke_past_types = PokemonTypePastSerializer( - poke_past_type_objects, many=True, context=self.context - ).data + poke_past_types = PokemonTypePastSerializer(poke_past_type_objects, many=True, context=self.context).data # post-process to the form we want current_generation = "" @@ -5412,9 +5077,7 @@ class Meta: class EvolutionTriggerDetailSerializer(serializers.HyperlinkedModelSerializer): - names = EvolutionTriggerNameSerializer( - many=True, read_only=True, source="evolutiontriggername" - ) + names = EvolutionTriggerNameSerializer(many=True, read_only=True, source="evolutiontriggername") pokemon_species = serializers.SerializerMethodField("get_species") class Meta: @@ -5444,9 +5107,7 @@ def get_species(self, obj): species_names = set() for evo in evo_objects: - species = PokemonSpeciesSummarySerializer( - evo.evolved_species, context=self.context - ).data + species = PokemonSpeciesSummarySerializer(evo.evolved_species, context=self.context).data if species["name"] not in species_names: species_list.append(species) species_names.add(species["name"]) @@ -5495,9 +5156,7 @@ class PokemonSpeciesDetailSerializer(serializers.ModelSerializer): form_descriptions = PokemonSpeciesDescriptionSerializer( many=True, read_only=True, source="pokemonspeciesdescription" ) - pokedex_numbers = PokemonDexEntrySerializer( - many=True, read_only=True, source="pokemondexnumber" - ) + pokedex_numbers = PokemonDexEntrySerializer(many=True, read_only=True, source="pokemondexnumber") egg_groups = serializers.SerializerMethodField("get_pokemon_egg_groups") flavor_text_entries = PokemonSpeciesFlavorTextSerializer( many=True, read_only=True, source="pokemonspeciesflavortext" @@ -5571,9 +5230,7 @@ class Meta: ) def get_pokemon_names(self, obj): species_results = PokemonSpeciesName.objects.filter(pokemon_species=obj) - species_serializer = PokemonSpeciesNameSerializer( - species_results, many=True, context=self.context - ) + species_serializer = PokemonSpeciesNameSerializer(species_results, many=True, context=self.context) data = species_serializer.data @@ -5615,9 +5272,7 @@ def get_pokemon_names(self, obj): ) def get_pokemon_genera(self, obj): results = PokemonSpeciesName.objects.filter(pokemon_species=obj) - serializer = PokemonSpeciesNameSerializer( - results, many=True, context=self.context - ) + serializer = PokemonSpeciesNameSerializer(results, many=True, context=self.context) data = serializer.data genera = [] @@ -5680,12 +5335,8 @@ def get_pokemon_egg_groups(self, obj): ) def get_pokemon_varieties(self, obj): results = Pokemon.objects.filter(pokemon_species=obj) - summary_data = PokemonSummarySerializer( - results, many=True, context=self.context - ).data - detail_data = PokemonDetailSerializer( - results, many=True, context=self.context - ).data + summary_data = PokemonSummarySerializer(results, many=True, context=self.context).data + detail_data = PokemonDetailSerializer(results, many=True, context=self.context).data varieties = [] @@ -5712,9 +5363,7 @@ def get_pokemon_varieties(self, obj): "url": { "type": "string", "format": "uri", - "examples": [ - "https://pokeapi.co/api/v2/pal-park-area/2/" - ], + "examples": ["https://pokeapi.co/api/v2/pal-park-area/2/"], }, }, }, @@ -5730,9 +5379,7 @@ def get_pokemon_varieties(self, obj): ) def get_encounters(self, obj): pal_park_objects = PalPark.objects.filter(pokemon_species=obj) - parks = PalParkSerializer( - pal_park_objects, many=True, context=self.context - ).data + parks = PalParkSerializer(pal_park_objects, many=True, context=self.context).data encounters = [] for encounter in parks: @@ -6073,9 +5720,7 @@ class Meta: "url": { "type": "string", "format": "uri", - "examples": [ - "https://pokeapi.co/api/v2/pokemon-species/440/" - ], + "examples": ["https://pokeapi.co/api/v2/pokemon-species/440/"], }, }, }, @@ -6091,9 +5736,7 @@ class Meta: "url": { "type": "string", "format": "uri", - "examples": [ - "https://pokeapi.co/api/v2/pokemon-species/440/" - ], + "examples": ["https://pokeapi.co/api/v2/pokemon-species/440/"], }, }, }, @@ -6103,15 +5746,9 @@ class Meta: def build_chain(self, obj): chain_id = obj.id - pokemon_objects = PokemonSpecies.objects.filter( - evolution_chain_id=chain_id - ).order_by("order") - summary_data = PokemonSpeciesSummarySerializer( - pokemon_objects, many=True, context=self.context - ).data - ref_data = PokemonSpeciesEvolutionSerializer( - pokemon_objects, many=True, context=self.context - ).data + pokemon_objects = PokemonSpecies.objects.filter(evolution_chain_id=chain_id).order_by("order") + summary_data = PokemonSpeciesSummarySerializer(pokemon_objects, many=True, context=self.context).data + ref_data = PokemonSpeciesEvolutionSerializer(pokemon_objects, many=True, context=self.context).data # convert evolution data list to tree evolution_tree = self.build_evolution_tree(ref_data) @@ -6159,13 +5796,9 @@ def build_chain_link_entry(self, chain_link, summary_data): species = chain_link["species"] if species["evolves_from_species"]: - evolution_object = PokemonEvolution.objects.filter( - evolved_species=species["id"] - ) + evolution_object = PokemonEvolution.objects.filter(evolved_species=species["id"]) - evolution_data = PokemonEvolutionSerializer( - evolution_object, many=True, context=self.context - ).data + evolution_data = PokemonEvolutionSerializer(evolution_object, many=True, context=self.context).data entry["is_baby"] = species["is_baby"] @@ -6174,9 +5807,7 @@ def build_chain_link_entry(self, chain_link, summary_data): entry["evolution_details"] = evolution_data or [] - evolves_to = [ - self.build_chain_link_entry(c, summary_data) for c in chain_link["children"] - ] + evolves_to = [self.build_chain_link_entry(c, summary_data) for c in chain_link["children"]] entry["evolves_to"] = evolves_to return entry @@ -6203,9 +5834,7 @@ class Meta: class PokeathlonStatDetailSerializer(serializers.HyperlinkedModelSerializer): - names = PokeathlonStatNameSerializer( - many=True, read_only=True, source="pokeathlonstatname" - ) + names = PokeathlonStatNameSerializer(many=True, read_only=True, source="pokeathlonstatname") affecting_natures = serializers.SerializerMethodField("get_natures_that_affect") class Meta: @@ -6237,9 +5866,7 @@ class Meta: "url": { "type": "string", "format": "uri", - "examples": [ - "https://pokeapi.co/api/v2/nature/1/" - ], + "examples": ["https://pokeapi.co/api/v2/nature/1/"], }, }, }, @@ -6266,9 +5893,7 @@ class Meta: "url": { "type": "string", "format": "uri", - "examples": [ - "https://pokeapi.co/api/v2/nature/1/" - ], + "examples": ["https://pokeapi.co/api/v2/nature/1/"], }, }, }, @@ -6280,9 +5905,7 @@ class Meta: ) def get_natures_that_affect(self, obj): stat_change_objects = NaturePokeathlonStat.objects.filter(pokeathlon_stat=obj) - stat_changes = NaturePokeathlonStatSerializer( - stat_change_objects, many=True, context=self.context - ).data + stat_changes = NaturePokeathlonStatSerializer(stat_change_objects, many=True, context=self.context).data changes = OrderedDict([("increase", []), ("decrease", [])]) for change in stat_changes: @@ -6317,9 +5940,7 @@ class Meta: class PokedexDetailSerializer(serializers.ModelSerializer): region = RegionSummarySerializer() names = PokedexNameSerializer(many=True, read_only=True, source="pokedexname") - descriptions = PokedexDescriptionSerializer( - many=True, read_only=True, source="pokedexdescription" - ) + descriptions = PokedexDescriptionSerializer(many=True, read_only=True, source="pokedexdescription") pokemon_entries = serializers.SerializerMethodField("get_pokedex_entries") version_groups = serializers.SerializerMethodField("get_pokedex_version_groups") @@ -6356,9 +5977,7 @@ class Meta: "url": { "type": "string", "format": "uri", - "examples": [ - "https://pokeapi.co/api/v2/pokemon-species/1/" - ], + "examples": ["https://pokeapi.co/api/v2/pokemon-species/1/"], }, }, }, @@ -6367,12 +5986,8 @@ class Meta: } ) def get_pokedex_entries(self, obj): - results = PokemonDexNumber.objects.filter(pokedex=obj).order_by( - "pokedex_number" - ) - serializer = PokemonDexNumberSerializer( - results, many=True, context=self.context - ) + results = PokemonDexNumber.objects.filter(pokedex=obj).order_by("pokedex_number") + serializer = PokemonDexNumberSerializer(results, many=True, context=self.context) data = serializer.data for entry in data: @@ -6399,9 +6014,7 @@ def get_pokedex_entries(self, obj): ) def get_pokedex_version_groups(self, obj): dex_group_objects = PokedexVersionGroup.objects.filter(pokedex=obj) - dex_groups = PokedexVersionGroupSerializer( - dex_group_objects, many=True, context=self.context - ).data + dex_groups = PokedexVersionGroupSerializer(dex_group_objects, many=True, context=self.context).data results = [] for dex_group in dex_groups: @@ -6475,9 +6088,7 @@ class Meta: ) def get_version_group_regions(self, obj): vg_regions = VersionGroupRegion.objects.filter(version_group=obj) - data = VersionGroupRegionSerializer( - vg_regions, many=True, context=self.context - ).data + data = VersionGroupRegionSerializer(vg_regions, many=True, context=self.context).data regions = [] for region in data: @@ -6505,9 +6116,7 @@ def get_version_group_regions(self, obj): } ) def get_learn_methods(self, obj): - learn_method_objects = VersionGroupMoveLearnMethod.objects.filter( - version_group=obj - ) + learn_method_objects = VersionGroupMoveLearnMethod.objects.filter(version_group=obj) learn_method_data = VersionGroupMoveLearnMethodSerializer( learn_method_objects, many=True, context=self.context ).data @@ -6537,9 +6146,7 @@ def get_learn_methods(self, obj): ) def get_version_groups_pokedexes(self, obj): dex_group_objects = PokedexVersionGroup.objects.filter(version_group=obj) - dex_groups = PokedexVersionGroupSerializer( - dex_group_objects, many=True, context=self.context - ).data + dex_groups = PokedexVersionGroupSerializer(dex_group_objects, many=True, context=self.context).data results = [] for dex_group in dex_groups: diff --git a/pokemon_v2/test_models.py b/pokemon_v2/test_models.py index e0a338221..fca14fb2f 100644 --- a/pokemon_v2/test_models.py +++ b/pokemon_v2/test_models.py @@ -92,28 +92,18 @@ def test_all_csv_identifiers_are_ascii_slugs(self): # Report violations if violations: error_lines.append( - "\n\nFound {} resource(s) with invalid identifiers (not ASCII slugs):".format( - len(violations) - ) + "\n\nFound {} resource(s) with invalid identifiers (not ASCII slugs):".format(len(violations)) ) error_lines.append("\nIdentifiers must match pattern: ^[a-z0-9-]+$") error_lines.append("\nInvalid identifiers found in CSV files:") for v in violations: - error_lines.append( - " - {file} (row {row}, id={id}): {identifier}".format(**v) - ) + error_lines.append(" - {file} (row {row}, id={id}): {identifier}".format(**v)) - error_lines.append( - "\nThese identifiers contain invalid characters and must be normalized." - ) - error_lines.append( - "Update the CSV files in data/v2/csv/ to fix these identifiers." - ) + error_lines.append("\nThese identifiers contain invalid characters and must be normalized.") + error_lines.append("Update the CSV files in data/v2/csv/ to fix these identifiers.") error_lines.append("\nSuggested fixes:") - error_lines.append( - " - Remove Unicode apostrophes (') and replace with regular hyphens or remove" - ) + error_lines.append(" - Remove Unicode apostrophes (') and replace with regular hyphens or remove") error_lines.append(" - Remove Unicode letters (ñ → n)") error_lines.append(" - Remove parentheses and other special characters") error_lines.append(" - Convert to lowercase") diff --git a/pokemon_v2/tests.py b/pokemon_v2/tests.py index b49c99e4a..28f853dcf 100644 --- a/pokemon_v2/tests.py +++ b/pokemon_v2/tests.py @@ -41,9 +41,7 @@ def setup_language_data(cls, name="lang"): def setup_language_name_data(cls, language, name="lang nm"): local_language = cls.setup_language_data(name="lang for " + name) - language_name = LanguageName.objects.create( - language=language, local_language=local_language, name=name - ) + language_name = LanguageName.objects.create(language=language, local_language=local_language, name=name) language_name.save() return language_name @@ -60,9 +58,7 @@ def setup_region_data(cls, name="reg"): def setup_region_name_data(cls, region, name="reg nm"): language = cls.setup_language_data(name="lang for " + name) - region_name = RegionName.objects.create( - region=region, language=language, name=name - ) + region_name = RegionName.objects.create(region=region, language=language, name=name) region_name.save() return region_name @@ -81,9 +77,7 @@ def setup_generation_data(cls, region=None, name="gen"): def setup_generation_name_data(cls, generation, name="gen nm"): language = cls.setup_language_data(name="lang for " + name) - generation_name = GenerationName.objects.create( - generation=generation, language=language, name=name - ) + generation_name = GenerationName.objects.create(generation=generation, language=language, name=name) generation_name.save() return generation_name @@ -93,18 +87,14 @@ def setup_generation_name_data(cls, generation, name="gen nm"): def setup_version_group_data(cls, name="ver grp", generation=None): generation = generation or cls.setup_generation_data(name="gen for " + name) - version_group = VersionGroup.objects.create( - name=name, generation=generation, order=1 - ) + version_group = VersionGroup.objects.create(name=name, generation=generation, order=1) version_group.save() return version_group @classmethod def setup_version_group_region_data(cls, version_group=None, region=None): - version_group_region = VersionGroupRegion.objects.create( - version_group=version_group, region=region - ) + version_group_region = VersionGroupRegion.objects.create(version_group=version_group, region=region) version_group_region.save() return version_group_region @@ -123,9 +113,7 @@ def setup_version_data(cls, version_group=None, name="ver"): def setup_version_name_data(cls, version, name="ver nm"): language = cls.setup_language_data(name="lang for " + name) - version_name = VersionName.objects.create( - version=version, language=language, name=name - ) + version_name = VersionName.objects.create(version=version, language=language, name=name) version_name.save() return version_name @@ -135,9 +123,7 @@ def setup_version_name_data(cls, version, name="ver nm"): def setup_ability_data(cls, name="ablty", generation=None): generation = generation or cls.setup_generation_data(name="gen for " + name) - ability = Ability.objects.create( - name=name, generation=generation, is_main_series=False - ) + ability = Ability.objects.create(name=name, generation=generation, is_main_series=False) ability.save() return ability @@ -146,17 +132,13 @@ def setup_ability_data(cls, name="ablty", generation=None): def setup_ability_name_data(cls, ability, name="ablty nm"): language = cls.setup_language_data(name="lang for " + name) - ability_name = AbilityName.objects.create( - ability=ability, language=language, name=name - ) + ability_name = AbilityName.objects.create(ability=ability, language=language, name=name) ability_name.save() return ability_name @classmethod - def setup_ability_effect_text_data( - cls, ability, short_effect="ablty shrt efct", effect="ablty efct" - ): + def setup_ability_effect_text_data(cls, ability, short_effect="ablty shrt efct", effect="ablty efct"): language = cls.setup_language_data(name="lang for " + effect) ability_effect_text = AbilityEffectText.objects.create( @@ -170,17 +152,13 @@ def setup_ability_effect_text_data( def setup_ability_change_data(cls, ability): version_group = cls.setup_version_group_data(name="ver grp for ablty chng") - ability_change = AbilityChange.objects.create( - ability=ability, version_group=version_group - ) + ability_change = AbilityChange.objects.create(ability=ability, version_group=version_group) ability_change.save() return ability_change @classmethod - def setup_ability_change_effect_text_data( - cls, ability_change, effect="ablty change efct" - ): + def setup_ability_change_effect_text_data(cls, ability_change, effect="ablty change efct"): language = cls.setup_language_data(name="lang for " + effect) ability_change_effect_text = AbilityChangeEffectText.objects.create( @@ -228,9 +206,7 @@ def setup_item_attribute_name_data(cls, item_attribute, name="itm attr nm"): return item_attribute_name @classmethod - def setup_item_attribute_description_data( - cls, item_attribute, description="itm attr desc" - ): + def setup_item_attribute_description_data(cls, item_attribute, description="itm attr desc"): language = cls.setup_language_data(name="lang for " + description) item_attribute_description = ItemAttributeDescription.objects.create( @@ -257,9 +233,7 @@ def setup_item_fling_effect_data(cls, name="itm flng efct"): return item_fling_effect @classmethod - def setup_item_fling_effect_effect_text_data( - cls, item_fling_effect, effect="itm flng efct efct txt" - ): + def setup_item_fling_effect_effect_text_data(cls, item_fling_effect, effect="itm flng efct efct txt"): language = cls.setup_language_data(name="lang for " + effect) item_fling_effect_effect_text = ItemFlingEffectEffectText.objects.create( @@ -282,18 +256,14 @@ def setup_item_pocket_data(cls, name="itm pkt"): def setup_item_pocket_name_data(cls, item_pocket, name="itm pkt nm"): language = cls.setup_language_data(name="lang for " + name) - item_pocket_name = ItemPocketName.objects.create( - item_pocket=item_pocket, name=name, language=language - ) + item_pocket_name = ItemPocketName.objects.create(item_pocket=item_pocket, name=name, language=language) item_pocket_name.save() return item_pocket_name @classmethod def setup_item_category_data(cls, name="itm ctgry", item_pocket=None): - item_pocket = item_pocket or cls.setup_item_pocket_data( - name="itm pkt for " + name - ) + item_pocket = item_pocket or cls.setup_item_pocket_data(name="itm pkt for " + name) item_category = ItemCategory.objects.create(name=name, item_pocket=item_pocket) item_category.save() @@ -304,9 +274,7 @@ def setup_item_category_data(cls, name="itm ctgry", item_pocket=None): def setup_item_category_name_data(cls, item_category, name="itm ctgry nm"): language = cls.setup_language_data(name="lang for " + name) - item_category_name = ItemCategoryName.objects.create( - item_category=item_category, name=name, language=language - ) + item_category_name = ItemCategoryName.objects.create(item_category=item_category, name=name, language=language) item_category_name.save() return item_category_name @@ -319,9 +287,7 @@ def setup_item_sprites_data(cls, item, default=True): "default": sprite_path % item.id if default else None, } - item_sprites = ItemSprites.objects.create( - item=item, sprites=json.dumps(sprites) - ) + item_sprites = ItemSprites.objects.create(item=item, sprites=json.dumps(sprites)) item_sprites.save() return item_sprites @@ -356,9 +322,7 @@ def setup_item_name_data(cls, item, name="itm nm"): return item_name @classmethod - def setup_item_effect_text_data( - cls, item, short_effect="ablty shrt efct", effect="ablty efct" - ): + def setup_item_effect_text_data(cls, item, short_effect="ablty shrt efct", effect="ablty efct"): language = cls.setup_language_data(name="lang for " + effect) item_effect_text = ItemEffectText.objects.create( @@ -388,9 +352,7 @@ def setup_item_flavor_text_data(cls, item, flavor_text="itm flvr txt"): def setup_item_game_index_data(cls, item, game_index=0): generation = cls.setup_generation_data(name="gen for itm gm indx") - item_game_index = ItemGameIndex.objects.create( - item=item, game_index=game_index, generation=generation - ) + item_game_index = ItemGameIndex.objects.create(item=item, game_index=game_index, generation=generation) item_game_index.save() return item_game_index @@ -409,9 +371,7 @@ def setup_contest_type_data(cls, name="cntst tp"): def setup_contest_type_name_data(cls, contest_type, name="cntst tp nm"): language = cls.setup_language_data(name="lang for " + name) - contest_type_name = ContestTypeName.objects.create( - language=language, name=name, contest_type=contest_type - ) + contest_type_name = ContestTypeName.objects.create(language=language, name=name, contest_type=contest_type) contest_type_name.save() return contest_type_name @@ -424,9 +384,7 @@ def setup_contest_effect_data(cls, appeal=2, jam=0): return contest_effect @classmethod - def setup_contest_effect_flavor_text_data( - cls, contest_effect, flavor_text="cntst efct flvr txt" - ): + def setup_contest_effect_flavor_text_data(cls, contest_effect, flavor_text="cntst efct flvr txt"): language = cls.setup_language_data(name="lang for " + flavor_text) contest_effect_flavor_text = ContestEffectFlavorText.objects.create( @@ -437,9 +395,7 @@ def setup_contest_effect_flavor_text_data( return contest_effect_flavor_text @classmethod - def setup_contest_effect_effect_text_data( - cls, contest_effect, effect="cntst efct efct txt" - ): + def setup_contest_effect_effect_text_data(cls, contest_effect, effect="cntst efct efct txt"): language = cls.setup_language_data(name="lang for " + effect) contest_effect_effect_text = ContestEffectEffectText.objects.create( @@ -459,9 +415,7 @@ def setup_super_contest_effect_data(cls, appeal=2): return super_contest_effect @classmethod - def setup_super_contest_effect_flavor_text_data( - cls, super_contest_effect, flavor_text="spr cntst efct flvr txt" - ): + def setup_super_contest_effect_flavor_text_data(cls, super_contest_effect, flavor_text="spr cntst efct flvr txt"): language = cls.setup_language_data(name="lang for " + flavor_text) super_contest_effect_flavor_text = SuperContestEffectFlavorText.objects.create( @@ -476,9 +430,7 @@ def setup_super_contest_effect_flavor_text_data( # Berry Data @classmethod def setup_berry_flavor_data(cls, contest_type=None, name="bry flvr"): - contest_type = contest_type or cls.setup_contest_type_data( - name="cntst tp for bry flvr" - ) + contest_type = contest_type or cls.setup_contest_type_data(name="cntst tp for bry flvr") berry_flavor = BerryFlavor.objects.create(name=name, contest_type=contest_type) berry_flavor.save() @@ -489,9 +441,7 @@ def setup_berry_flavor_data(cls, contest_type=None, name="bry flvr"): def setup_berry_flavor_name_data(cls, berry_flavor, name="bry flvr nm"): language = cls.setup_language_data(name="lang for " + name) - berry_flavor_name = BerryFlavorName.objects.create( - language=language, name=name, berry_flavor=berry_flavor - ) + berry_flavor_name = BerryFlavorName.objects.create(language=language, name=name, berry_flavor=berry_flavor) berry_flavor_name.save() return berry_flavor_name @@ -518,9 +468,7 @@ def setup_berry_firmness_name_data(cls, berry_firmness, name="bry frmns nm"): @classmethod def setup_berry_flavor_map_data(cls, berry, berry_flavor, potency=20): - berry_flavor_map = BerryFlavorMap( - berry=berry, berry_flavor=berry_flavor, potency=potency - ) + berry_flavor_map = BerryFlavorMap(berry=berry, berry_flavor=berry_flavor, potency=potency) berry_flavor_map.save() return berry_flavor_map @@ -541,9 +489,7 @@ def setup_berry_data( ): item = item or cls.setup_item_data(name="itm for " + name) - berry_firmness = berry_firmness or cls.setup_berry_firmness_data( - name="bry frmns for " + name - ) + berry_firmness = berry_firmness or cls.setup_berry_firmness_data(name="bry frmns for " + name) berry = Berry.objects.create( name=name, @@ -575,9 +521,7 @@ def setup_egg_group_data(cls, name="egg grp"): def setup_egg_group_name_data(cls, egg_group, name="ntr nm"): language = cls.setup_language_data(name="lang for " + name) - egg_group_name = EggGroupName.objects.create( - egg_group=egg_group, language=language, name=name - ) + egg_group_name = EggGroupName.objects.create(egg_group=egg_group, language=language, name=name) egg_group_name.save() return egg_group_name @@ -591,9 +535,7 @@ def setup_growth_rate_data(cls, name="grth rt", formula="pie*1000"): return growth_rate @classmethod - def setup_growth_rate_description_data( - cls, growth_rate, description="grth rt desc" - ): + def setup_growth_rate_description_data(cls, growth_rate, description="grth rt desc"): language = cls.setup_language_data(name="lang for " + description) growth_rate_description = GrowthRateDescription.objects.create( @@ -628,9 +570,7 @@ def setup_location_game_index_data(cls, location, game_index=0): def setup_location_name_data(cls, location, name="lctn nm"): language = cls.setup_language_data(name="lang for " + name) - location_name = LocationName.objects.create( - language=language, name=name, location=location - ) + location_name = LocationName.objects.create(language=language, name=name, location=location) location_name.save() return location_name @@ -639,9 +579,7 @@ def setup_location_name_data(cls, location, name="lctn nm"): def setup_location_area_data(cls, location=None, name="lctn area", game_index=0): location = location or cls.setup_location_data(name="lctn for " + name) - location_area = LocationArea( - location=location, name=name, game_index=game_index - ) + location_area = LocationArea(location=location, name=name, game_index=game_index) location_area.save() return location_area @@ -650,9 +588,7 @@ def setup_location_area_data(cls, location=None, name="lctn area", game_index=0) def setup_location_area_name_data(cls, location_area, name="lctn area nm"): language = cls.setup_language_data(name="lang for " + name) - location_area_name = LocationAreaName.objects.create( - language=language, name=name, location_area=location_area - ) + location_area_name = LocationAreaName.objects.create(language=language, name=name, location_area=location_area) location_area_name.save() return location_area_name @@ -660,15 +596,11 @@ def setup_location_area_name_data(cls, location_area, name="lctn area nm"): # Type Data @classmethod def setup_type_data(cls, name="tp", move_damage_class=None, generation=None): - move_damage_class = move_damage_class or cls.setup_move_damage_class_data( - name="mv dmg cls for " + name - ) + move_damage_class = move_damage_class or cls.setup_move_damage_class_data(name="mv dmg cls for " + name) generation = generation or cls.setup_generation_data(name="rgn for " + name) - type = Type( - name=name, generation=generation, move_damage_class=move_damage_class - ) + type = Type(name=name, generation=generation, move_damage_class=move_damage_class) type.save() return type @@ -686,9 +618,7 @@ def setup_type_name_data(cls, type, name="tp nm"): def setup_type_game_index_data(cls, type, game_index=0): generation = cls.setup_generation_data(name="gen for tp gm indx") - type_game_index = TypeGameIndex.objects.create( - type=type, game_index=game_index, generation=generation - ) + type_game_index = TypeGameIndex.objects.create(type=type, game_index=game_index, generation=generation) type_game_index.save() return type_game_index @@ -725,9 +655,7 @@ def setup_type_sprites_data(cls, type): if type.id == 18 and generation.endswith(("-iii", "-iv", "-v")): sprites[generation][game] = None - elif type.id == 19 and generation.endswith( - ("-iii", "-iv", "-v", "-vi", "-vii", "-viii") - ): + elif type.id == 19 and generation.endswith(("-iii", "-iv", "-v", "-vi", "-vii", "-viii")): sprites[generation][game] = None else: sprites[generation][game] = { @@ -735,9 +663,7 @@ def setup_type_sprites_data(cls, type): "symbol_icon": f"https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/types/{generation}/{game}/small/{type.id}.png", } - type_sprites = TypeSprites.objects.create( - type=type, sprites=json.dumps(sprites) - ) + type_sprites = TypeSprites.objects.create(type=type, sprites=json.dumps(sprites)) type_sprites.save() return type_sprites, game_map @@ -787,9 +713,7 @@ def setup_move_category_data(cls, name="mv ctgry"): return move_category @classmethod - def setup_move_category_description_data( - cls, move_category, description="mv ctgry desc" - ): + def setup_move_category_description_data(cls, move_category, description="mv ctgry desc"): language = cls.setup_language_data(name="lang for " + description) move_category_description = MoveMetaCategoryDescription.objects.create( @@ -844,9 +768,7 @@ def setup_move_damage_class_name_data(cls, move_damage_class, name="mv dmg cls n return move_damage_class_name @classmethod - def setup_move_damage_class_description_data( - cls, move_damage_class, description="mv dmg cls desc" - ): + def setup_move_damage_class_description_data(cls, move_damage_class, description="mv dmg cls desc"): language = cls.setup_language_data(name="lang for " + description) move_damage_class_description = MoveDamageClassDescription.objects.create( @@ -866,9 +788,7 @@ def setup_move_learn_method_data(cls, name="mv lrn mthd"): return move_learn_method @classmethod - def setup_move_learn_method_name_data( - cls, move_learn_method, name="mv lrn mthd nm" - ): + def setup_move_learn_method_name_data(cls, move_learn_method, name="mv lrn mthd nm"): language = cls.setup_language_data(name="lang for " + name) move_learn_method_name = MoveLearnMethodName.objects.create( @@ -879,9 +799,7 @@ def setup_move_learn_method_name_data( return move_learn_method_name @classmethod - def setup_move_learn_method_description_data( - cls, move_learn_method, description="mv lrn mthd desc" - ): + def setup_move_learn_method_description_data(cls, move_learn_method, description="mv lrn mthd desc"): language = cls.setup_language_data(name="lang for " + description) move_learn_method_description = MoveLearnMethodDescription.objects.create( @@ -904,17 +822,13 @@ def setup_move_target_data(cls, name="mv trgt"): def setup_move_target_name_data(cls, move_target, name="mv trgt nm"): language = cls.setup_language_data(name="lang for " + name) - move_target_name = MoveTargetName.objects.create( - move_target=move_target, language=language, name=name - ) + move_target_name = MoveTargetName.objects.create(move_target=move_target, language=language, name=name) move_target_name.save() return move_target_name @classmethod - def setup_move_target_description_data( - cls, move_target, description="mv trgt desc" - ): + def setup_move_target_description_data(cls, move_target, description="mv trgt desc"): language = cls.setup_language_data(name="lang for " + description) move_target_description = MoveTargetDescription.objects.create( @@ -926,17 +840,13 @@ def setup_move_target_description_data( @classmethod def setup_contest_combo_data(cls, first_move, second_move): - contest_combo = ContestCombo.objects.create( - first_move=first_move, second_move=second_move - ) + contest_combo = ContestCombo.objects.create(first_move=first_move, second_move=second_move) contest_combo.save() return contest_combo @classmethod - def setup_version_group_move_learn_method_data( - cls, version_group=None, move_learn_method=None - ): + def setup_version_group_move_learn_method_data(cls, version_group=None, move_learn_method=None): version_group_move_learn_method = VersionGroupMoveLearnMethod.objects.create( version_group=version_group, move_learn_method=move_learn_method ) @@ -946,9 +856,7 @@ def setup_version_group_move_learn_method_data( @classmethod def setup_super_contest_combo_data(cls, first_move, second_move): - super_contest_combo = SuperContestCombo.objects.create( - first_move=first_move, second_move=second_move - ) + super_contest_combo = SuperContestCombo.objects.create(first_move=first_move, second_move=second_move) super_contest_combo.save() return super_contest_combo @@ -987,27 +895,19 @@ def setup_move_data( priority=0, effect_chance=50, ): - contest_type = contest_type or cls.setup_contest_type_data( - name="cntst tp for " + name - ) + contest_type = contest_type or cls.setup_contest_type_data(name="cntst tp for " + name) contest_effect = contest_effect or cls.setup_contest_effect_data() - super_contest_effect = ( - super_contest_effect or cls.setup_super_contest_effect_data() - ) + super_contest_effect = super_contest_effect or cls.setup_super_contest_effect_data() generation = generation or cls.setup_generation_data(name="gen for " + name) type = type or cls.setup_type_data(name="tp for " + name) - move_target = move_target or cls.setup_move_target_data( - name="mv trgt for " + name - ) + move_target = move_target or cls.setup_move_target_data(name="mv trgt for " + name) - move_damage_class = move_damage_class or cls.setup_move_damage_class_data( - name="mv dmg cls for " + name - ) + move_damage_class = move_damage_class or cls.setup_move_damage_class_data(name="mv dmg cls for " + name) move = Move.objects.create( name=name, @@ -1090,9 +990,7 @@ def setup_move_change_data( accuracy=80, effect_chance=50, ): - version_group = version_group or cls.setup_version_group_data( - name="ver grp for mv chng" - ) + version_group = version_group or cls.setup_version_group_data(name="ver grp for mv chng") move_change = MoveChange.objects.create( move=move, @@ -1112,17 +1010,13 @@ def setup_move_change_data( def setup_move_effect_change_data(cls, move_effect=None): version_group = cls.setup_version_group_data(name="ver grp for mv chng") - move_effect_change = MoveEffectChange.objects.create( - move_effect=move_effect, version_group=version_group - ) + move_effect_change = MoveEffectChange.objects.create(move_effect=move_effect, version_group=version_group) move_effect_change.save() return move_effect_change @classmethod - def setup_move_effect_change_effect_text_data( - cls, move_effect_change=None, effect="mv efct chng efct txt" - ): + def setup_move_effect_change_effect_text_data(cls, move_effect_change=None, effect="mv efct chng efct txt"): language = cls.setup_language_data(name="lang for " + effect) move_effect_change_effect_text = MoveEffectChangeEffectText.objects.create( @@ -1135,9 +1029,7 @@ def setup_move_effect_change_effect_text_data( # Stat Data @classmethod def setup_stat_data(cls, name="stt", is_battle_only=True, game_index=1): - move_damage_class = cls.setup_move_damage_class_data( - name="mv dmg cls for " + name - ) + move_damage_class = cls.setup_move_damage_class_data(name="mv dmg cls for " + name) stat = Stat.objects.create( name=name, @@ -1162,9 +1054,7 @@ def setup_stat_name_data(cls, stat, name="stt nm"): def setup_move_stat_change_data(cls, move, stat=None, change=1): stat = stat or cls.setup_stat_data(name="stt for mv") - move_stat_change = MoveMetaStatChange.objects.create( - move=move, stat=stat, change=change - ) + move_stat_change = MoveMetaStatChange.objects.create(move=move, stat=stat, change=change) move_stat_change.save() return move_stat_change @@ -1198,9 +1088,7 @@ def setup_characteristic_data(cls, gene_mod_5=0, stat=None): return characteristic @classmethod - def setup_characteristic_description_data( - cls, characteristic, description="char desc" - ): + def setup_characteristic_description_data(cls, characteristic, description="char desc"): language = cls.setup_language_data(name="lang for " + description) characteristic_description = CharacteristicDescription.objects.create( @@ -1237,17 +1125,13 @@ def setup_nature_data( def setup_nature_name_data(cls, nature, name="ntr nm"): language = cls.setup_language_data(name="lang for " + name) - nature_name = NatureName.objects.create( - nature=nature, language=language, name=name - ) + nature_name = NatureName.objects.create(nature=nature, language=language, name=name) nature_name.save() return nature_name @classmethod - def setup_nature_pokeathlon_stat_data( - cls, nature=None, pokeathlon_stat=None, max_change=1 - ): + def setup_nature_pokeathlon_stat_data(cls, nature=None, pokeathlon_stat=None, max_change=1): nature_pokeathlon_stat = NaturePokeathlonStat.objects.create( nature=nature, pokeathlon_stat=pokeathlon_stat, @@ -1292,9 +1176,7 @@ def setup_pokedex_data(cls, region=None, name="pkdx"): def setup_pokedex_name_data(cls, pokedex, name="pkdx nm"): language = cls.setup_language_data(name="lang for " + name) - pokedex_name = PokedexName.objects.create( - pokedex=pokedex, language=language, name=name - ) + pokedex_name = PokedexName.objects.create(pokedex=pokedex, language=language, name=name) pokedex_name.save() return pokedex_name @@ -1312,13 +1194,9 @@ def setup_pokedex_description_data(cls, pokedex, description="pkdx desc"): @classmethod def setup_pokedex_version_group_data(cls, pokedex, version_group=None): - version_group = version_group or cls.setup_language_data( - name="ver grp for pkdx" - ) + version_group = version_group or cls.setup_language_data(name="ver grp for pkdx") - pokedex_version_group = PokedexVersionGroup.objects.create( - pokedex=pokedex, version_group=version_group - ) + pokedex_version_group = PokedexVersionGroup.objects.create(pokedex=pokedex, version_group=version_group) pokedex_version_group.save() return pokedex_version_group @@ -1357,9 +1235,7 @@ def setup_pokemon_color_data(cls, name="pkm clr"): def setup_pokemon_color_name_data(cls, pokemon_color, name="pkm clr nm"): language = cls.setup_language_data(name="lang for " + name) - pokemon_color_name = PokemonColorName.objects.create( - pokemon_color=pokemon_color, language=language, name=name - ) + pokemon_color_name = PokemonColorName.objects.create(pokemon_color=pokemon_color, language=language, name=name) pokemon_color_name.save() return pokemon_color_name @@ -1374,9 +1250,7 @@ def setup_pokemon_shape_data(cls, name="pkm shp"): return pokemon_shape @classmethod - def setup_pokemon_shape_name_data( - cls, pokemon_shape, name="pkm shp nm", awesome_name="pkm shp awsm nm" - ): + def setup_pokemon_shape_name_data(cls, pokemon_shape, name="pkm shp nm", awesome_name="pkm shp awsm nm"): language = cls.setup_language_data(name="lang for " + name) pokemon_shape_name = PokemonShapeName.objects.create( @@ -1390,9 +1264,7 @@ def setup_pokemon_shape_name_data( return pokemon_shape_name @classmethod - def setup_pokemon_species_form_description_data( - cls, pokemon_species=None, description="pkm spcs frm dscr" - ): + def setup_pokemon_species_form_description_data(cls, pokemon_species=None, description="pkm spcs frm dscr"): language = cls.setup_language_data(name="lang for " + description) pokemon_species_form_description = PokemonSpeciesDescription.objects.create( @@ -1403,9 +1275,7 @@ def setup_pokemon_species_form_description_data( return pokemon_species_form_description @classmethod - def setup_pokemon_species_flavor_text_data( - cls, pokemon_species, flavor_text="pkmn spcs flvr txt" - ): + def setup_pokemon_species_flavor_text_data(cls, pokemon_species, flavor_text="pkmn spcs flvr txt"): version = cls.setup_version_data(name="ver for " + flavor_text) language = cls.setup_language_data(name="lang for " + flavor_text) @@ -1444,21 +1314,13 @@ def setup_pokemon_species_data( ): generation = generation or cls.setup_generation_data(name="gen for " + name) - growth_rate = growth_rate or cls.setup_growth_rate_data( - name="grth rt for " + name - ) + growth_rate = growth_rate or cls.setup_growth_rate_data(name="grth rt for " + name) - pokemon_shape = pokemon_shape or cls.setup_pokemon_shape_data( - name="pkmn shp for " + name - ) + pokemon_shape = pokemon_shape or cls.setup_pokemon_shape_data(name="pkmn shp for " + name) - pokemon_color = pokemon_color or cls.setup_pokemon_color_data( - name="pkmn clr for " + name - ) + pokemon_color = pokemon_color or cls.setup_pokemon_color_data(name="pkmn clr for " + name) - pokemon_habitat = pokemon_habitat or cls.setup_pokemon_habitat_data( - name="pkm hbtt for " + name - ) + pokemon_habitat = pokemon_habitat or cls.setup_pokemon_habitat_data(name="pkm hbtt for " + name) pokemon_species = PokemonSpecies.objects.create( name=name, @@ -1485,9 +1347,7 @@ def setup_pokemon_species_data( return pokemon_species @classmethod - def setup_pokemon_species_name_data( - cls, pokemon_species, name="pkmn spcs nm", genus="pkmn spcs gns" - ): + def setup_pokemon_species_name_data(cls, pokemon_species, name="pkmn spcs nm", genus="pkmn spcs gns"): language = cls.setup_language_data(name="lang for " + name) pokemon_species_name = PokemonSpeciesName.objects.create( @@ -1510,9 +1370,7 @@ def setup_pokemon_dex_entry_data(cls, pokemon_species, pokedex, entry_number=100 @classmethod def setup_pokemon_egg_group_data(cls, pokemon_species, egg_group): - pokemon_egg_group = PokemonEggGroup( - pokemon_species=pokemon_species, egg_group=egg_group - ) + pokemon_egg_group = PokemonEggGroup(pokemon_species=pokemon_species, egg_group=egg_group) pokemon_egg_group.save() return pokemon_egg_group @@ -1528,9 +1386,7 @@ def setup_pokemon_data( order=1, is_default=False, ): - pokemon_species = pokemon_species or cls.setup_pokemon_species_data( - name="pkmn spcs for " + name - ) + pokemon_species = pokemon_species or cls.setup_pokemon_species_data(name="pkmn spcs for " + name) pokemon = Pokemon.objects.create( name=name, @@ -1549,9 +1405,7 @@ def setup_pokemon_data( def setup_pokemon_game_index_data(cls, pokemon, game_index=0): version = cls.setup_version_data(name="ver for pkmn gm indx") - pokemon_game_index = PokemonGameIndex.objects.create( - pokemon=pokemon, game_index=game_index, version=version - ) + pokemon_game_index = PokemonGameIndex.objects.create(pokemon=pokemon, game_index=game_index, version=version) pokemon_game_index.save() return pokemon_game_index @@ -1574,9 +1428,7 @@ def setup_pokemon_form_sprites_data( "back_shiny": sprite_path % pokemon_form.id if back_shiny else None, } - pokemon_form_sprites = PokemonFormSprites.objects.create( - pokemon_form=pokemon_form, sprites=json.dumps(sprites) - ) + pokemon_form_sprites = PokemonFormSprites.objects.create(pokemon_form=pokemon_form, sprites=json.dumps(sprites)) pokemon_form_sprites.save() return pokemon_form_sprites @@ -1626,12 +1478,8 @@ def setup_pokemon_form_trigger_data(cls, name="frm trgr for pkmn frm"): return pokemon_form_trigger @classmethod - def setup_pokemon_form_condition_data( - cls, pokemon_form, form_trigger=None, item=None, ability=None, move=None - ): - form_trigger = form_trigger or cls.setup_pokemon_form_trigger_data( - name="frm trgr for pkmn frm" - ) + def setup_pokemon_form_condition_data(cls, pokemon_form, form_trigger=None, item=None, ability=None, move=None): + form_trigger = form_trigger or cls.setup_pokemon_form_trigger_data(name="frm trgr for pkmn frm") item = item or cls.setup_item_data(name="itm for pkmn frm") pokemon_form_condition = PokemonFormCondition( @@ -1648,17 +1496,13 @@ def setup_pokemon_form_condition_data( def setup_pokemon_ability_data(cls, pokemon, ability=None, is_hidden=False, slot=1): ability = ability or cls.setup_ability_data(name="ablty for pkmn") - pokemon_ability = PokemonAbility( - pokemon=pokemon, ability=ability, is_hidden=is_hidden, slot=slot - ) + pokemon_ability = PokemonAbility(pokemon=pokemon, ability=ability, is_hidden=is_hidden, slot=slot) pokemon_ability.save() return pokemon_ability @classmethod - def setup_pokemon_past_ability_data( - cls, pokemon, generation, ability=None, is_hidden=False, slot=1 - ): + def setup_pokemon_past_ability_data(cls, pokemon, generation, ability=None, is_hidden=False, slot=1): ability = ability or cls.setup_ability_data(name="ablty for pkmn") pokemon_ability_past = PokemonAbilityPast( @@ -1676,9 +1520,7 @@ def setup_pokemon_past_ability_data( def setup_pokemon_stat_data(cls, pokemon, base_stat=10, effort=10): stat = cls.setup_stat_data(name="stt for pkmn") - pokemon_stat = PokemonStat( - pokemon=pokemon, stat=stat, base_stat=base_stat, effort=effort - ) + pokemon_stat = PokemonStat(pokemon=pokemon, stat=stat, base_stat=base_stat, effort=effort) pokemon_stat.save() return pokemon_stat @@ -1711,9 +1553,7 @@ def setup_pokemon_type_data(cls, pokemon, type=None, slot=1): def setup_pokemon_past_type_data(cls, pokemon, generation, type=None, slot=1): type = type or cls.setup_type_data(name="tp for pkmn") - pokemon_type_past = PokemonTypePast( - pokemon=pokemon, generation=generation, type=type, slot=slot - ) + pokemon_type_past = PokemonTypePast(pokemon=pokemon, generation=generation, type=type, slot=slot) pokemon_type_past.save() return pokemon_type_past @@ -1726,18 +1566,14 @@ def setup_pokemon_item_data(cls, pokemon=None, item=None, version=None, rarity=5 version = version or cls.setup_version_data(name="ver grp for pkmn itm") - pokemon_item = PokemonItem( - pokemon=pokemon, version=version, item=item, rarity=rarity - ) + pokemon_item = PokemonItem(pokemon=pokemon, version=version, item=item, rarity=rarity) pokemon_item.save() return pokemon_item @classmethod def setup_pokemon_move_data(cls, pokemon, move, version_group, level=0, order=1): - move_learn_method = cls.setup_move_learn_method_data( - name="mv lrn mthd for pkmn" - ) + move_learn_method = cls.setup_move_learn_method_data(name="mv lrn mthd for pkmn") pokemon_move = PokemonMove.objects.create( pokemon=pokemon, @@ -1769,46 +1605,24 @@ 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( @@ -1821,16 +1635,12 @@ def setup_pokemon_sprites_data( @classmethod def setup_pokemon_cries_data(cls, pokemon, latest=True, legacy=False): - cries_path = ( - "https://raw.githubusercontent.com/PokeAPI/cries/main/cries/pokemon/%s.ogg" - ) + cries_path = "https://raw.githubusercontent.com/PokeAPI/cries/main/cries/pokemon/%s.ogg" cries = { "latest": cries_path % f"latest/{pokemon.id}" if latest else None, "legacy": cries_path % f"legacy/{pokemon.id}" if legacy else None, } - pokemon_cries = PokemonCries.objects.create( - pokemon=pokemon, cries=json.dumps(cries) - ) + pokemon_cries = PokemonCries.objects.create(pokemon=pokemon, cries=json.dumps(cries)) pokemon_cries.save() return pokemon_cries @@ -1898,13 +1708,9 @@ def setup_pokemon_evolution_data( min_steps=None, min_damage_taken=None, ): - evolved_species = evolved_species or cls.setup_pokemon_species_data( - name="pkmn spcs for pkmn evltn" - ) + evolved_species = evolved_species or cls.setup_pokemon_species_data(name="pkmn spcs for pkmn evltn") - evolution_trigger = evolution_trigger or cls.setup_evolution_trigger_data( - name="evltn trgr for pkmn evltn" - ) + evolution_trigger = evolution_trigger or cls.setup_evolution_trigger_data(name="evltn trgr for pkmn evltn") pokemon_evolution = PokemonEvolution.objects.create( evolved_species=evolved_species, @@ -1969,9 +1775,7 @@ def setup_encounter_condition_data(cls, name="encntr cndtn"): return encounter_condition @classmethod - def setup_encounter_condition_name_data( - cls, encounter_condition, name="encntr cndtn nm" - ): + def setup_encounter_condition_name_data(cls, encounter_condition, name="encntr cndtn nm"): language = cls.setup_language_data(name="lang for " + name) encounter_condition_name = EncounterConditionName.objects.create( @@ -1982,9 +1786,7 @@ def setup_encounter_condition_name_data( return encounter_condition_name @classmethod - def setup_encounter_condition_value_data( - cls, encounter_condition, name="encntr cndtn vlu", is_default=False - ): + def setup_encounter_condition_value_data(cls, encounter_condition, name="encntr cndtn vlu", is_default=False): encounter_condition_value = EncounterConditionValue.objects.create( encounter_condition=encounter_condition, name=name, is_default=is_default ) @@ -1993,9 +1795,7 @@ def setup_encounter_condition_value_data( return encounter_condition_value @classmethod - def setup_encounter_condition_value_name_data( - cls, encounter_condition_value, name="encntr cndtn vlu nm" - ): + def setup_encounter_condition_value_name_data(cls, encounter_condition_value, name="encntr cndtn vlu nm"): language = cls.setup_language_data(name="lang for " + name) encounter_condition_value_name = EncounterConditionValueName.objects.create( @@ -2008,9 +1808,7 @@ def setup_encounter_condition_value_name_data( return encounter_condition_value_name @classmethod - def setup_encounter_condition_value_map_data( - cls, encounter, encounter_condition_value - ): + def setup_encounter_condition_value_map_data(cls, encounter, encounter_condition_value): encounter_condition_value_map = EncounterConditionValue.objects.create( encounter=encounter, encounter_condition_value=encounter_condition_value ) @@ -2020,9 +1818,7 @@ def setup_encounter_condition_value_map_data( @classmethod def setup_encounter_slot_data(cls, encounter_method=None, slot=0, rarity=0): - encounter_method = encounter_method or cls.setup_encounter_method_data( - name="encntr mthd for encntr slt" - ) + encounter_method = encounter_method or cls.setup_encounter_method_data(name="encntr mthd for encntr slt") version_group = cls.setup_version_group_data(name="ver grp for encntr slt") @@ -2037,9 +1833,7 @@ def setup_encounter_slot_data(cls, encounter_method=None, slot=0, rarity=0): return encounter_slot @classmethod - def setup_location_area_encounter_rate_data( - cls, location_area, encounter_method, rate=0 - ): + def setup_location_area_encounter_rate_data(cls, location_area, encounter_method, rate=0): version = cls.setup_version_data(name="ver for lctn area") location_area_encounter_rate = LocationAreaEncounterRate.objects.create( @@ -2062,9 +1856,7 @@ def setup_encounter_data( min_level=10, max_level=15, ): - location_area = location_area or cls.setup_location_area_data( - name="ver for encntr" - ) + location_area = location_area or cls.setup_location_area_data(name="ver for encntr") encounter_slot = encounter_slot or cls.setup_encounter_slot_data() @@ -2096,20 +1888,14 @@ def setup_pal_park_area_data(cls, name="pl prk area"): def setup_pal_park_area_name_data(cls, pal_park_area, name="pl prk area nm"): language = cls.setup_language_data(name="lang for " + name) - pal_park_area_name = PalParkAreaName.objects.create( - pal_park_area=pal_park_area, language=language, name=name - ) + pal_park_area_name = PalParkAreaName.objects.create(pal_park_area=pal_park_area, language=language, name=name) pal_park_area_name.save() return pal_park_area_name @classmethod - def setup_pal_park_data( - cls, pokemon_species=None, pal_park_area=None, base_score=10, rate=10 - ): - pal_park_area = pal_park_area or cls.setup_pal_park_area_data( - name="pl prk area" - ) + def setup_pal_park_data(cls, pokemon_species=None, pal_park_area=None, base_score=10, rate=10): + pal_park_area = pal_park_area or cls.setup_pal_park_area_data(name="pl prk area") pal_park = PalPark.objects.create( base_score=base_score, @@ -2127,15 +1913,9 @@ class APITests(APIData, APITestCase): # Gender Tests def test_gender_api(self): gender = self.setup_gender_data(name="female") - pokemon_species = self.setup_pokemon_species_data( - name="pkmn spcs for gndr", gender_rate=8 - ) - evolved_species = self.setup_pokemon_species_data( - name="evlvd pkmn spcs for gndr" - ) - self.setup_pokemon_evolution_data( - evolved_species=evolved_species, gender=gender - ) + pokemon_species = self.setup_pokemon_species_data(name="pkmn spcs for gndr", gender_rate=8) + evolved_species = self.setup_pokemon_species_data(name="evlvd pkmn spcs for gndr") + self.setup_pokemon_evolution_data(evolved_species=evolved_species, gender=gender) response = self.client.get("{}/gender/{}/".format(API_V2, gender.pk)) @@ -2157,9 +1937,7 @@ def test_gender_api(self): response.data["pokemon_species_details"][0]["pokemon_species"]["url"], "{}{}/pokemon-species/{}/".format(TEST_HOST, API_V2, pokemon_species.pk), ) - self.assertEqual( - response.data["required_for_evolution"][0]["name"], evolved_species.name - ) + self.assertEqual(response.data["required_for_evolution"][0]["name"], evolved_species.name) self.assertEqual( response.data["required_for_evolution"][0]["url"], "{}{}/pokemon-species/{}/".format(TEST_HOST, API_V2, evolved_species.pk), @@ -2188,9 +1966,7 @@ def test_language_api(self): ) self.assertEqual( response.data["names"][0]["language"]["url"], - "{}{}/language/{}/".format( - TEST_HOST, API_V2, language_name.local_language.pk - ), + "{}{}/language/{}/".format(TEST_HOST, API_V2, language_name.local_language.pk), ) # Region Tests @@ -2198,9 +1974,7 @@ def test_region_api(self): region = self.setup_region_data(name="base reg") region_name = self.setup_region_name_data(region, name="base reg name") location = self.setup_location_data(region=region, name="lctn for base rgn") - generation = self.setup_generation_data( - region=region, name="gnrtn for base rgn" - ) + generation = self.setup_generation_data(region=region, name="gnrtn for base rgn") pokedex = self.setup_pokedex_data(region=region, name="pkdx for base rgn") version_group = self.setup_version_group_data(name="ver grp for base rgn") self.setup_version_group_region_data(region=region, version_group=version_group) @@ -2214,9 +1988,7 @@ def test_region_api(self): self.assertEqual(response.data["name"], region.name) # name params self.assertEqual(response.data["names"][0]["name"], region_name.name) - self.assertEqual( - response.data["names"][0]["language"]["name"], region_name.language.name - ) + self.assertEqual(response.data["names"][0]["language"]["name"], region_name.language.name) self.assertEqual( response.data["names"][0]["language"]["url"], "{}{}/language/{}/".format(TEST_HOST, API_V2, region_name.language.pk), @@ -2249,20 +2021,12 @@ def test_region_api(self): # Generation Tests def test_generation_api(self): generation = self.setup_generation_data(name="base gen") - generation_name = self.setup_generation_name_data( - generation, name="base reg name" - ) - ability = self.setup_ability_data( - name="ablty for base gen", generation=generation - ) + generation_name = self.setup_generation_name_data(generation, name="base reg name") + ability = self.setup_ability_data(name="ablty for base gen", generation=generation) move = self.setup_move_data(name="mv for base gen", generation=generation) - pokemon_species = self.setup_pokemon_species_data( - name="pkmn spcs for base gen", generation=generation - ) + pokemon_species = self.setup_pokemon_species_data(name="pkmn spcs for base gen", generation=generation) type = self.setup_type_data(name="tp for base gen", generation=generation) - version_group = self.setup_version_group_data( - name="ver grp for base gen", generation=generation - ) + version_group = self.setup_version_group_data(name="ver grp for base gen", generation=generation) response = self.client.get("{}/generation/{}/".format(API_V2, generation.pk)) @@ -2271,9 +2035,7 @@ def test_generation_api(self): self.assertEqual(response.data["name"], generation.name) # name params self.assertEqual(response.data["names"][0]["name"], generation_name.name) - self.assertEqual( - response.data["names"][0]["language"]["name"], generation_name.language.name - ) + self.assertEqual(response.data["names"][0]["language"]["name"], generation_name.language.name) self.assertEqual( response.data["names"][0]["language"]["url"], "{}{}/language/{}/".format(TEST_HOST, API_V2, generation_name.language.pk), @@ -2303,9 +2065,7 @@ def test_generation_api(self): "{}{}/type/{}/".format(TEST_HOST, API_V2, type.pk), ) # species params - self.assertEqual( - response.data["pokemon_species"][0]["name"], pokemon_species.name - ) + self.assertEqual(response.data["pokemon_species"][0]["name"], pokemon_species.name) self.assertEqual( response.data["pokemon_species"][0]["url"], "{}{}/pokemon-species/{}/".format(TEST_HOST, API_V2, pokemon_species.pk), @@ -2330,22 +2090,16 @@ def test_version_api(self): self.assertEqual(response.data["name"], version.name) # name params self.assertEqual(response.data["names"][0]["name"], version_name.name) - self.assertEqual( - response.data["names"][0]["language"]["name"], version_name.language.name - ) + self.assertEqual(response.data["names"][0]["language"]["name"], version_name.language.name) self.assertEqual( response.data["names"][0]["language"]["url"], "{}{}/language/{}/".format(TEST_HOST, API_V2, version_name.language.pk), ) # version group params - self.assertEqual( - response.data["version_group"]["name"], version.version_group.name - ) + self.assertEqual(response.data["version_group"]["name"], version.version_group.name) self.assertEqual( response.data["version_group"]["url"], - "{}{}/version-group/{}/".format( - TEST_HOST, API_V2, version.version_group.pk - ), + "{}{}/version-group/{}/".format(TEST_HOST, API_V2, version.version_group.pk), ) def test_version_group_api(self): @@ -2355,18 +2109,12 @@ def test_version_group_api(self): version_group=version_group, move_learn_method=move_learn_method ) region = self.setup_region_data(name="rgn for ver grp") - version = self.setup_version_data( - name="ver for base ver grp", version_group=version_group - ) + version = self.setup_version_data(name="ver for base ver grp", version_group=version_group) self.setup_version_group_region_data(version_group=version_group, region=region) pokedex = self.setup_pokedex_data(name="pkdx for base ver group") - self.setup_pokedex_version_group_data( - pokedex=pokedex, version_group=version_group - ) + self.setup_pokedex_version_group_data(pokedex=pokedex, version_group=version_group) - response = self.client.get( - "{}/version-group/{}/".format(API_V2, version_group.pk) - ) + response = self.client.get("{}/version-group/{}/".format(API_V2, version_group.pk)) # base params self.assertEqual(response.data["id"], version_group.pk) @@ -2379,14 +2127,10 @@ def test_version_group_api(self): "{}{}/version/{}/".format(TEST_HOST, API_V2, version.pk), ) # generation params - self.assertEqual( - response.data["generation"]["name"], version_group.generation.name - ) + self.assertEqual(response.data["generation"]["name"], version_group.generation.name) self.assertEqual( response.data["generation"]["url"], - "{}{}/generation/{}/".format( - TEST_HOST, API_V2, version_group.generation.pk - ), + "{}{}/generation/{}/".format(TEST_HOST, API_V2, version_group.generation.pk), ) # region params self.assertEqual(response.data["regions"][0]["name"], region.name) @@ -2395,14 +2139,10 @@ def test_version_group_api(self): "{}{}/region/{}/".format(TEST_HOST, API_V2, region.pk), ) # move learn method params - self.assertEqual( - response.data["move_learn_methods"][0]["name"], move_learn_method.name - ) + self.assertEqual(response.data["move_learn_methods"][0]["name"], move_learn_method.name) self.assertEqual( response.data["move_learn_methods"][0]["url"], - "{}{}/move-learn-method/{}/".format( - TEST_HOST, API_V2, move_learn_method.pk - ), + "{}{}/move-learn-method/{}/".format(TEST_HOST, API_V2, move_learn_method.pk), ) # pokedex group self.assertEqual(response.data["pokedexes"][0]["name"], pokedex.name) @@ -2414,13 +2154,9 @@ def test_version_group_api(self): # Egg Group Tests def test_egg_group_api(self): egg_group = self.setup_egg_group_data(name="base egg grp") - egg_group_name = self.setup_egg_group_name_data( - egg_group, name="base egg grp name" - ) + egg_group_name = self.setup_egg_group_name_data(egg_group, name="base egg grp name") pokemon_species = self.setup_pokemon_species_data() - self.setup_pokemon_egg_group_data( - pokemon_species=pokemon_species, egg_group=egg_group - ) + self.setup_pokemon_egg_group_data(pokemon_species=pokemon_species, egg_group=egg_group) response = self.client.get("{}/egg-group/{}/".format(API_V2, egg_group.pk)) @@ -2431,17 +2167,13 @@ def test_egg_group_api(self): self.assertEqual(response.data["name"], egg_group.name) # name params self.assertEqual(response.data["names"][0]["name"], egg_group_name.name) - self.assertEqual( - response.data["names"][0]["language"]["name"], egg_group_name.language.name - ) + self.assertEqual(response.data["names"][0]["language"]["name"], egg_group_name.language.name) self.assertEqual( response.data["names"][0]["language"]["url"], "{}{}/language/{}/".format(TEST_HOST, API_V2, egg_group_name.language.pk), ) # species params - self.assertEqual( - response.data["pokemon_species"][0]["name"], pokemon_species.name - ) + self.assertEqual(response.data["pokemon_species"][0]["name"], pokemon_species.name) self.assertEqual( response.data["pokemon_species"][0]["url"], "{}{}/pokemon-species/{}/".format(TEST_HOST, API_V2, pokemon_species.pk), @@ -2451,20 +2183,14 @@ def test_egg_group_api(self): def test_ability_api(self): ability = self.setup_ability_data(name="base ablty") ability_name = self.setup_ability_name_data(ability, name="base ablty name") - ability_effect_text = self.setup_ability_effect_text_data( - ability, effect="base ablty efct" - ) - ability_flavor_text = self.setup_ability_flavor_text_data( - ability, flavor_text="base flvr txt" - ) + ability_effect_text = self.setup_ability_effect_text_data(ability, effect="base ablty efct") + ability_flavor_text = self.setup_ability_flavor_text_data(ability, flavor_text="base flvr txt") ability_change = self.setup_ability_change_data(ability) ability_change_effect_text = self.setup_ability_change_effect_text_data( ability_change, effect="base ablty chng efct" ) pokemon = self.setup_pokemon_data(name="pkmn for ablty") - pokemon_ability = self.setup_pokemon_ability_data( - ability=ability, pokemon=pokemon - ) + pokemon_ability = self.setup_pokemon_ability_data(ability=ability, pokemon=pokemon) response = self.client.get("{}/ability/{}/".format(API_V2, ability.pk)) @@ -2474,17 +2200,13 @@ def test_ability_api(self): self.assertEqual(response.data["is_main_series"], ability.is_main_series) # name params self.assertEqual(response.data["names"][0]["name"], ability_name.name) - self.assertEqual( - response.data["names"][0]["language"]["name"], ability_name.language.name - ) + self.assertEqual(response.data["names"][0]["language"]["name"], ability_name.language.name) self.assertEqual( response.data["names"][0]["language"]["url"], "{}{}/language/{}/".format(TEST_HOST, API_V2, ability_name.language.pk), ) # description params - self.assertEqual( - response.data["effect_entries"][0]["effect"], ability_effect_text.effect - ) + self.assertEqual(response.data["effect_entries"][0]["effect"], ability_effect_text.effect) self.assertEqual( response.data["effect_entries"][0]["short_effect"], ability_effect_text.short_effect, @@ -2495,9 +2217,7 @@ def test_ability_api(self): ) self.assertEqual( response.data["effect_entries"][0]["language"]["url"], - "{}{}/language/{}/".format( - TEST_HOST, API_V2, ability_effect_text.language.pk - ), + "{}{}/language/{}/".format(TEST_HOST, API_V2, ability_effect_text.language.pk), ) # flavor text params self.assertEqual( @@ -2514,9 +2234,7 @@ def test_ability_api(self): ) self.assertEqual( response.data["flavor_text_entries"][0]["language"]["url"], - "{}{}/language/{}/".format( - TEST_HOST, API_V2, ability_flavor_text.language.pk - ), + "{}{}/language/{}/".format(TEST_HOST, API_V2, ability_flavor_text.language.pk), ) # generation params self.assertEqual(response.data["generation"]["name"], ability.generation.name) @@ -2531,9 +2249,7 @@ def test_ability_api(self): ) self.assertEqual( response.data["effect_changes"][0]["version_group"]["url"], - "{}{}/version-group/{}/".format( - TEST_HOST, API_V2, ability_change.version_group.pk - ), + "{}{}/version-group/{}/".format(TEST_HOST, API_V2, ability_change.version_group.pk), ) self.assertEqual( response.data["effect_changes"][0]["effect_entries"][0]["effect"], @@ -2545,14 +2261,10 @@ def test_ability_api(self): ) self.assertEqual( response.data["effect_changes"][0]["effect_entries"][0]["language"]["url"], - "{}{}/language/{}/".format( - TEST_HOST, API_V2, ability_change_effect_text.language.pk - ), + "{}{}/language/{}/".format(TEST_HOST, API_V2, ability_change_effect_text.language.pk), ) # pokemon params - self.assertEqual( - response.data["pokemon"][0]["is_hidden"], pokemon_ability.is_hidden - ) + self.assertEqual(response.data["pokemon"][0]["is_hidden"], pokemon_ability.is_hidden) self.assertEqual(response.data["pokemon"][0]["slot"], pokemon_ability.slot) self.assertEqual(response.data["pokemon"][0]["pokemon"]["name"], pokemon.name) self.assertEqual( @@ -2564,18 +2276,14 @@ def test_ability_api(self): def test_item_attribute_api(self): # item attribute data item_attribute = self.setup_item_attribute_data(name="base itm attr") - item_attribute_name = self.setup_item_attribute_name_data( - item_attribute, name="base itm attr nm" - ) + item_attribute_name = self.setup_item_attribute_name_data(item_attribute, name="base itm attr nm") item_attribute_description = self.setup_item_attribute_description_data( item_attribute, description="base itm attr desc" ) item = self.setup_item_data(name="itm fr base itm attr") self.setup_item_attribute_map_data(item_attribute=item_attribute, item=item) - response = self.client.get( - "{}/item-attribute/{}/".format(API_V2, item_attribute.pk) - ) + response = self.client.get("{}/item-attribute/{}/".format(API_V2, item_attribute.pk)) # base params self.assertEqual(response.data["id"], item_attribute.pk) @@ -2588,9 +2296,7 @@ def test_item_attribute_api(self): ) self.assertEqual( response.data["names"][0]["language"]["url"], - "{}{}/language/{}/".format( - TEST_HOST, API_V2, item_attribute_name.language.pk - ), + "{}{}/language/{}/".format(TEST_HOST, API_V2, item_attribute_name.language.pk), ) # description params self.assertEqual( @@ -2603,9 +2309,7 @@ def test_item_attribute_api(self): ) self.assertEqual( response.data["descriptions"][0]["language"]["url"], - "{}{}/language/{}/".format( - TEST_HOST, API_V2, item_attribute_description.language.pk - ), + "{}{}/language/{}/".format(TEST_HOST, API_V2, item_attribute_description.language.pk), ) # item params self.assertEqual(response.data["items"][0]["name"], item.name) @@ -2617,16 +2321,10 @@ def test_item_attribute_api(self): def test_item_category_api(self): # item category data item_category = self.setup_item_category_data(name="base itm ctgry") - item_category_name = self.setup_item_category_name_data( - item_category, name="base itm ctgry nm" - ) - item = self.setup_item_data( - item_category=item_category, name="itm fr base itm ctgry" - ) + item_category_name = self.setup_item_category_name_data(item_category, name="base itm ctgry nm") + item = self.setup_item_data(item_category=item_category, name="itm fr base itm ctgry") - response = self.client.get( - "{}/item-category/{}/".format(API_V2, item_category.pk) - ) + response = self.client.get("{}/item-category/{}/".format(API_V2, item_category.pk)) # base params self.assertEqual(response.data["id"], item_category.pk) @@ -2639,19 +2337,13 @@ def test_item_category_api(self): ) self.assertEqual( response.data["names"][0]["language"]["url"], - "{}{}/language/{}/".format( - TEST_HOST, API_V2, item_category_name.language.pk - ), + "{}{}/language/{}/".format(TEST_HOST, API_V2, item_category_name.language.pk), ) # pocket params - self.assertEqual( - response.data["pocket"]["name"], item_category.item_pocket.name - ) + self.assertEqual(response.data["pocket"]["name"], item_category.item_pocket.name) self.assertEqual( response.data["pocket"]["url"], - "{}{}/item-pocket/{}/".format( - TEST_HOST, API_V2, item_category.item_pocket.pk - ), + "{}{}/item-pocket/{}/".format(TEST_HOST, API_V2, item_category.item_pocket.pk), ) # item params self.assertEqual(response.data["items"][0]["name"], item.name) @@ -2666,13 +2358,9 @@ def test_item_fling_effect_api(self): item_fling_effect_effect_text = self.setup_item_fling_effect_effect_text_data( item_fling_effect, effect="base itm flng efct nm" ) - item = self.setup_item_data( - item_fling_effect=item_fling_effect, name="itm fr base itm attr" - ) + item = self.setup_item_data(item_fling_effect=item_fling_effect, name="itm fr base itm attr") - response = self.client.get( - "{}/item-fling-effect/{}/".format(API_V2, item_fling_effect.pk) - ) + response = self.client.get("{}/item-fling-effect/{}/".format(API_V2, item_fling_effect.pk)) # base params self.assertEqual(response.data["id"], item_fling_effect.pk) @@ -2688,9 +2376,7 @@ def test_item_fling_effect_api(self): ) self.assertEqual( response.data["effect_entries"][0]["language"]["url"], - "{}{}/language/{}/".format( - TEST_HOST, API_V2, item_fling_effect_effect_text.language.pk - ), + "{}{}/language/{}/".format(TEST_HOST, API_V2, item_fling_effect_effect_text.language.pk), ) # item params self.assertEqual(response.data["items"][0]["name"], item.name) @@ -2702,9 +2388,7 @@ def test_item_fling_effect_api(self): def test_item_pocket_api(self): # item pocket data item_pocket = self.setup_item_pocket_data(name="base itm pkt") - item_pocket_name = self.setup_item_pocket_name_data( - item_pocket, name="base itm pkt nm" - ) + item_pocket_name = self.setup_item_pocket_name_data(item_pocket, name="base itm pkt nm") response = self.client.get("{}/item-pocket/{}/".format(API_V2, item_pocket.pk)) @@ -2724,14 +2408,10 @@ def test_item_pocket_api(self): def test_item_api(self): item_category = self.setup_item_category_data(name="itm ctgry for base itm") - item_fling_effect = self.setup_item_fling_effect_data( - name="itm flng efct for base itm" - ) + item_fling_effect = self.setup_item_fling_effect_data(name="itm flng efct for base itm") item = self.setup_item_data(item_category, item_fling_effect, name="base itm") item_name = self.setup_item_name_data(item, name="base itm name") - item_flavor_text = self.setup_item_flavor_text_data( - item, flavor_text="base itm flvr txt" - ) + item_flavor_text = self.setup_item_flavor_text_data(item, flavor_text="base itm flvr txt") item_effect_text = self.setup_item_effect_text_data( item, effect="base nrml efct", short_effect="base shrt efct" ) @@ -2746,9 +2426,7 @@ def test_item_api(self): item_attribute_map = ItemAttributeMap(item=item, item_attribute=item_attribute) item_attribute_map.save() - response = self.client.get( - "{}/item/{}/".format(API_V2, item.pk), headers={"host": "testserver"} - ) + response = self.client.get("{}/item/{}/".format(API_V2, item.pk), headers={"host": "testserver"}) # base params self.assertEqual(response.data["id"], item.pk) @@ -2757,9 +2435,7 @@ def test_item_api(self): self.assertEqual(response.data["fling_power"], item.fling_power) # name params self.assertEqual(response.data["names"][0]["name"], item_name.name) - self.assertEqual( - response.data["names"][0]["language"]["name"], item_name.language.name - ) + self.assertEqual(response.data["names"][0]["language"]["name"], item_name.language.name) self.assertEqual( response.data["names"][0]["language"]["url"], "{}{}/language/{}/".format(TEST_HOST, API_V2, item_name.language.pk), @@ -2775,9 +2451,7 @@ def test_item_api(self): ) self.assertEqual( response.data["flavor_text_entries"][0]["version_group"]["url"], - "{}{}/version-group/{}/".format( - TEST_HOST, API_V2, item_flavor_text.version_group.pk - ), + "{}{}/version-group/{}/".format(TEST_HOST, API_V2, item_flavor_text.version_group.pk), ) self.assertEqual( response.data["flavor_text_entries"][0]["language"]["name"], @@ -2788,9 +2462,7 @@ def test_item_api(self): "{}{}/language/{}/".format(TEST_HOST, API_V2, item_flavor_text.language.pk), ) # effect text params - self.assertEqual( - response.data["effect_entries"][0]["effect"], item_effect_text.effect - ) + self.assertEqual(response.data["effect_entries"][0]["effect"], item_effect_text.effect) self.assertEqual( response.data["effect_entries"][0]["short_effect"], item_effect_text.short_effect, @@ -2813,9 +2485,7 @@ def test_item_api(self): self.assertEqual(response.data["fling_effect"]["name"], item_fling_effect.name) self.assertEqual( response.data["fling_effect"]["url"], - "{}{}/item-fling-effect/{}/".format( - TEST_HOST, API_V2, item_fling_effect.pk - ), + "{}{}/item-fling-effect/{}/".format(TEST_HOST, API_V2, item_fling_effect.pk), ) # attribute params self.assertEqual(response.data["attributes"][0]["name"], item_attribute.name) @@ -2824,23 +2494,17 @@ def test_item_api(self): "{}{}/item-attribute/{}/".format(TEST_HOST, API_V2, item_attribute.pk), ) # game indices params - self.assertEqual( - response.data["game_indices"][0]["game_index"], item_game_index.game_index - ) + self.assertEqual(response.data["game_indices"][0]["game_index"], item_game_index.game_index) self.assertEqual( response.data["game_indices"][0]["generation"]["name"], item_game_index.generation.name, ) self.assertEqual( response.data["game_indices"][0]["generation"]["url"], - "{}{}/generation/{}/".format( - TEST_HOST, API_V2, item_game_index.generation.pk - ), + "{}{}/generation/{}/".format(TEST_HOST, API_V2, item_game_index.generation.pk), ) # held by params - self.assertEqual( - response.data["held_by_pokemon"][0]["pokemon"]["name"], pokemon.name - ) + self.assertEqual(response.data["held_by_pokemon"][0]["pokemon"]["name"], pokemon.name) self.assertEqual( response.data["held_by_pokemon"][0]["pokemon"]["url"], "{}{}/pokemon/{}/".format(TEST_HOST, API_V2, pokemon.pk), @@ -2850,9 +2514,7 @@ def test_item_api(self): pokemon_item.rarity, ) self.assertEqual( - response.data["held_by_pokemon"][0]["version_details"][0]["version"][ - "name" - ], + response.data["held_by_pokemon"][0]["version_details"][0]["version"]["name"], pokemon_item.version.name, ) self.assertEqual( @@ -2881,16 +2543,10 @@ def test_item_api(self): # Berry Tests def test_berry_firmness_api(self): berry_firmness = self.setup_berry_firmness_data(name="base bry frmns") - berry_firmness_name = self.setup_berry_firmness_name_data( - berry_firmness, name="base bry frmns nm" - ) - berry = self.setup_berry_data( - berry_firmness=berry_firmness, name="bry for base frmns" - ) + berry_firmness_name = self.setup_berry_firmness_name_data(berry_firmness, name="base bry frmns nm") + berry = self.setup_berry_data(berry_firmness=berry_firmness, name="bry for base frmns") - response = self.client.get( - "{}/berry-firmness/{}/".format(API_V2, berry_firmness.pk) - ) + response = self.client.get("{}/berry-firmness/{}/".format(API_V2, berry_firmness.pk)) # base params self.assertEqual(response.data["id"], berry_firmness.pk) @@ -2903,9 +2559,7 @@ def test_berry_firmness_api(self): ) self.assertEqual( response.data["names"][0]["language"]["url"], - "{}{}/language/{}/".format( - TEST_HOST, API_V2, berry_firmness_name.language.pk - ), + "{}{}/language/{}/".format(TEST_HOST, API_V2, berry_firmness_name.language.pk), ) # berry params self.assertEqual(response.data["berries"][0]["name"], berry.name) @@ -2916,17 +2570,11 @@ def test_berry_firmness_api(self): def test_berry_flavor_api(self): berry_flavor = self.setup_berry_flavor_data(name="base bry flvr") - berry_flavor_name = self.setup_berry_flavor_name_data( - berry_flavor, name="base bry flvr nm" - ) + berry_flavor_name = self.setup_berry_flavor_name_data(berry_flavor, name="base bry flvr nm") berry = self.setup_berry_data(name="bry for base bry flvr") - berry_flavor_map = self.setup_berry_flavor_map_data( - berry=berry, berry_flavor=berry_flavor, potency=50 - ) + berry_flavor_map = self.setup_berry_flavor_map_data(berry=berry, berry_flavor=berry_flavor, potency=50) - response = self.client.get( - "{}/berry-flavor/{}/".format(API_V2, berry_flavor.pk) - ) + response = self.client.get("{}/berry-flavor/{}/".format(API_V2, berry_flavor.pk)) # base params self.assertEqual(response.data["id"], berry_flavor.pk) @@ -2939,24 +2587,16 @@ def test_berry_flavor_api(self): ) self.assertEqual( response.data["names"][0]["language"]["url"], - "{}{}/language/{}/".format( - TEST_HOST, API_V2, berry_flavor_name.language.pk - ), + "{}{}/language/{}/".format(TEST_HOST, API_V2, berry_flavor_name.language.pk), ) # contest type params - self.assertEqual( - response.data["contest_type"]["name"], berry_flavor.contest_type.name - ) + self.assertEqual(response.data["contest_type"]["name"], berry_flavor.contest_type.name) self.assertEqual( response.data["contest_type"]["url"], - "{}{}/contest-type/{}/".format( - TEST_HOST, API_V2, berry_flavor.contest_type.pk - ), + "{}{}/contest-type/{}/".format(TEST_HOST, API_V2, berry_flavor.contest_type.pk), ) # berry params - self.assertEqual( - response.data["berries"][0]["potency"], berry_flavor_map.potency - ) + self.assertEqual(response.data["berries"][0]["potency"], berry_flavor_map.potency) self.assertEqual(response.data["berries"][0]["berry"]["name"], berry.name) self.assertEqual( response.data["berries"][0]["berry"]["url"], @@ -2967,9 +2607,7 @@ def test_berry_api(self): type = self.setup_type_data(name="tp fr base bry") berry = self.setup_berry_data(name="base bry", natural_gift_type=type) berry_flavor = self.setup_berry_flavor_data(name="bry flvr for base bry") - berry_flavor_map = self.setup_berry_flavor_map_data( - berry=berry, berry_flavor=berry_flavor - ) + berry_flavor_map = self.setup_berry_flavor_map_data(berry=berry, berry_flavor=berry_flavor) response = self.client.get("{}/berry/{}/".format(API_V2, berry.pk)) @@ -2986,9 +2624,7 @@ def test_berry_api(self): self.assertEqual(response.data["firmness"]["name"], berry.berry_firmness.name) self.assertEqual( response.data["firmness"]["url"], - "{}{}/berry-firmness/{}/".format( - TEST_HOST, API_V2, berry.berry_firmness.pk - ), + "{}{}/berry-firmness/{}/".format(TEST_HOST, API_V2, berry.berry_firmness.pk), ) # item params self.assertEqual(response.data["item"]["name"], berry.item.name) @@ -2997,12 +2633,8 @@ def test_berry_api(self): "{}{}/item/{}/".format(TEST_HOST, API_V2, berry.item.pk), ) # flavor params - self.assertEqual( - response.data["flavors"][0]["potency"], berry_flavor_map.potency - ) - self.assertEqual( - response.data["flavors"][0]["flavor"]["name"], berry_flavor.name - ) + self.assertEqual(response.data["flavors"][0]["potency"], berry_flavor_map.potency) + self.assertEqual(response.data["flavors"][0]["flavor"]["name"], berry_flavor.name) self.assertEqual( response.data["flavors"][0]["flavor"]["url"], "{}{}/berry-flavor/{}/".format(TEST_HOST, API_V2, berry_flavor.pk), @@ -3018,12 +2650,8 @@ def test_berry_api(self): def test_growth_rate_api(self): # item pocket data growth_rate = self.setup_growth_rate_data(name="base grth rt") - growth_rate_description = self.setup_growth_rate_description_data( - growth_rate, description="base grth rt desc" - ) - pokemon_species = self.setup_pokemon_species_data( - name="pkmn spcs for grth rt", growth_rate=growth_rate - ) + growth_rate_description = self.setup_growth_rate_description_data(growth_rate, description="base grth rt desc") + pokemon_species = self.setup_pokemon_species_data(name="pkmn spcs for grth rt", growth_rate=growth_rate) # map item attribute to item experience = Experience(growth_rate=growth_rate, level=10, experience=3000) @@ -3046,19 +2674,13 @@ def test_growth_rate_api(self): ) self.assertEqual( response.data["descriptions"][0]["language"]["url"], - "{}{}/language/{}/".format( - TEST_HOST, API_V2, growth_rate_description.language.pk - ), + "{}{}/language/{}/".format(TEST_HOST, API_V2, growth_rate_description.language.pk), ) # experience params self.assertEqual(response.data["levels"][0]["level"], experience.level) - self.assertEqual( - response.data["levels"][0]["experience"], experience.experience - ) + self.assertEqual(response.data["levels"][0]["experience"], experience.experience) # species params - self.assertEqual( - response.data["pokemon_species"][0]["name"], pokemon_species.name - ) + self.assertEqual(response.data["pokemon_species"][0]["name"], pokemon_species.name) self.assertEqual( response.data["pokemon_species"][0]["url"], "{}{}/pokemon-species/{}/".format(TEST_HOST, API_V2, pokemon_species.pk), @@ -3068,9 +2690,7 @@ def test_growth_rate_api(self): def test_location_api(self): location = self.setup_location_data(name="base lctn") location_name = self.setup_location_name_data(location, name="base lctn name") - location_game_index = self.setup_location_game_index_data( - location, game_index=10 - ) + location_game_index = self.setup_location_game_index_data(location, game_index=10) response = self.client.get("{}/location/{}/".format(API_V2, location.pk)) @@ -3081,9 +2701,7 @@ def test_location_api(self): self.assertEqual(response.data["name"], location.name) # name params self.assertEqual(response.data["names"][0]["name"], location_name.name) - self.assertEqual( - response.data["names"][0]["language"]["name"], location_name.language.name - ) + self.assertEqual(response.data["names"][0]["language"]["name"], location_name.language.name) self.assertEqual( response.data["names"][0]["language"]["url"], "{}{}/language/{}/".format(TEST_HOST, API_V2, location_name.language.pk), @@ -3105,32 +2723,22 @@ def test_location_api(self): ) self.assertEqual( response.data["game_indices"][0]["generation"]["url"], - "{}{}/generation/{}/".format( - TEST_HOST, API_V2, location_game_index.generation.pk - ), + "{}{}/generation/{}/".format(TEST_HOST, API_V2, location_game_index.generation.pk), ) def test_location_area_api(self): location = self.setup_location_data(name="lctn for base lctn area") location_area = self.setup_location_area_data(location, name="base lctn area") - location_area_name = self.setup_location_area_name_data( - location_area, name="base lctn area name" - ) + location_area_name = self.setup_location_area_name_data(location_area, name="base lctn area name") - encounter_method = self.setup_encounter_method_data( - name="encntr mthd for lctn area" - ) + encounter_method = self.setup_encounter_method_data(name="encntr mthd for lctn area") location_area_encounter_rate = self.setup_location_area_encounter_rate_data( location_area, encounter_method, rate=20 ) pokemon_species1 = self.setup_pokemon_species_data(name="spcs for pkmn1") - pokemon1 = self.setup_pokemon_data( - name="pkmn1 for base encntr", pokemon_species=pokemon_species1 - ) - encounter_slot1 = self.setup_encounter_slot_data( - encounter_method, slot=1, rarity=30 - ) + pokemon1 = self.setup_pokemon_data(name="pkmn1 for base encntr", pokemon_species=pokemon_species1) + encounter_slot1 = self.setup_encounter_slot_data(encounter_method, slot=1, rarity=30) encounter1 = self.setup_encounter_data( pokemon=pokemon1, location_area=location_area, @@ -3140,12 +2748,8 @@ def test_location_area_api(self): ) pokemon_species2 = self.setup_pokemon_species_data(name="spcs for pkmn2") - pokemon2 = self.setup_pokemon_data( - name="pkmn2 for base encntr", pokemon_species=pokemon_species2 - ) - encounter_slot2 = self.setup_encounter_slot_data( - encounter_method, slot=2, rarity=40 - ) + pokemon2 = self.setup_pokemon_data(name="pkmn2 for base encntr", pokemon_species=pokemon_species2) + encounter_slot2 = self.setup_encounter_slot_data(encounter_method, slot=2, rarity=40) encounter2 = self.setup_encounter_data( pokemon=pokemon2, location_area=location_area, @@ -3154,9 +2758,7 @@ def test_location_area_api(self): max_level=36, ) - response = self.client.get( - "{}/location-area/{}/".format(API_V2, location_area.pk) - ) + response = self.client.get("{}/location-area/{}/".format(API_V2, location_area.pk)) self.assertEqual(response.status_code, status.HTTP_200_OK) @@ -3172,9 +2774,7 @@ def test_location_area_api(self): ) self.assertEqual( response.data["names"][0]["language"]["url"], - "{}{}/language/{}/".format( - TEST_HOST, API_V2, location_area_name.language.pk - ), + "{}{}/language/{}/".format(TEST_HOST, API_V2, location_area_name.language.pk), ) # location params self.assertEqual(response.data["location"]["name"], location.name) @@ -3196,23 +2796,15 @@ def test_location_area_api(self): location_area_encounter_rate.rate, ) self.assertEqual( - response.data["encounter_method_rates"][0]["version_details"][0]["version"][ - "name" - ], + response.data["encounter_method_rates"][0]["version_details"][0]["version"]["name"], location_area_encounter_rate.version.name, ) self.assertEqual( - response.data["encounter_method_rates"][0]["version_details"][0]["version"][ - "url" - ], - "{}{}/version/{}/".format( - TEST_HOST, API_V2, location_area_encounter_rate.version.pk - ), + response.data["encounter_method_rates"][0]["version_details"][0]["version"]["url"], + "{}{}/version/{}/".format(TEST_HOST, API_V2, location_area_encounter_rate.version.pk), ) # encounter params - self.assertEqual( - response.data["pokemon_encounters"][0]["pokemon"]["name"], pokemon1.name - ) + self.assertEqual(response.data["pokemon_encounters"][0]["pokemon"]["name"], pokemon1.name) self.assertEqual( response.data["pokemon_encounters"][0]["pokemon"]["url"], "{}{}/pokemon/{}/".format(TEST_HOST, API_V2, pokemon1.pk), @@ -3222,41 +2814,27 @@ def test_location_area_api(self): encounter_slot1.rarity, ) self.assertEqual( - response.data["pokemon_encounters"][0]["version_details"][0]["version"][ - "name" - ], + response.data["pokemon_encounters"][0]["version_details"][0]["version"]["name"], encounter1.version.name, ) self.assertEqual( - response.data["pokemon_encounters"][0]["version_details"][0]["version"][ - "url" - ], + response.data["pokemon_encounters"][0]["version_details"][0]["version"]["url"], "{}{}/version/{}/".format(TEST_HOST, API_V2, encounter1.version.pk), ) self.assertEqual( - response.data["pokemon_encounters"][0].get("version_details")[0][ - "encounter_details" - ][0]["chance"], + response.data["pokemon_encounters"][0].get("version_details")[0]["encounter_details"][0]["chance"], encounter_slot1.rarity, ) self.assertEqual( - response.data["pokemon_encounters"][0].get("version_details")[0][ - "encounter_details" - ][0]["method"]["name"], + response.data["pokemon_encounters"][0].get("version_details")[0]["encounter_details"][0]["method"]["name"], encounter_slot1.encounter_method.name, ) self.assertEqual( - response.data["pokemon_encounters"][0]["version_details"][0].get( - "encounter_details" - )[0]["method"]["url"], - "{}{}/encounter-method/{}/".format( - TEST_HOST, API_V2, encounter_slot1.encounter_method.pk - ), + response.data["pokemon_encounters"][0]["version_details"][0].get("encounter_details")[0]["method"]["url"], + "{}{}/encounter-method/{}/".format(TEST_HOST, API_V2, encounter_slot1.encounter_method.pk), ) - self.assertEqual( - response.data["pokemon_encounters"][1]["pokemon"]["name"], pokemon2.name - ) + self.assertEqual(response.data["pokemon_encounters"][1]["pokemon"]["name"], pokemon2.name) self.assertEqual( response.data["pokemon_encounters"][1]["pokemon"]["url"], "{}{}/pokemon/{}/".format(TEST_HOST, API_V2, pokemon2.pk), @@ -3266,51 +2844,33 @@ def test_location_area_api(self): encounter_slot2.rarity, ) self.assertEqual( - response.data["pokemon_encounters"][1]["version_details"][0]["version"][ - "name" - ], + response.data["pokemon_encounters"][1]["version_details"][0]["version"]["name"], encounter2.version.name, ) self.assertEqual( - response.data["pokemon_encounters"][1]["version_details"][0]["version"][ - "url" - ], + response.data["pokemon_encounters"][1]["version_details"][0]["version"]["url"], "{}{}/version/{}/".format(TEST_HOST, API_V2, encounter2.version.pk), ) self.assertEqual( - response.data["pokemon_encounters"][1].get("version_details")[0][ - "encounter_details" - ][0]["chance"], + response.data["pokemon_encounters"][1].get("version_details")[0]["encounter_details"][0]["chance"], encounter_slot2.rarity, ) self.assertEqual( - response.data["pokemon_encounters"][1]["version_details"][0].get( - "encounter_details" - )[0]["method"]["name"], + response.data["pokemon_encounters"][1]["version_details"][0].get("encounter_details")[0]["method"]["name"], encounter_slot2.encounter_method.name, ) self.assertEqual( - response.data["pokemon_encounters"][1]["version_details"][0].get( - "encounter_details" - )[0]["method"]["url"], - "{}{}/encounter-method/{}/".format( - TEST_HOST, API_V2, encounter_slot2.encounter_method.pk - ), + response.data["pokemon_encounters"][1]["version_details"][0].get("encounter_details")[0]["method"]["url"], + "{}{}/encounter-method/{}/".format(TEST_HOST, API_V2, encounter_slot2.encounter_method.pk), ) # Contest Tests def test_contest_type_api(self): contest_type = self.setup_contest_type_data(name="base cntst tp") - contest_type_name = self.setup_contest_type_name_data( - contest_type, name="base cntst tp name" - ) - berry_flavor = self.setup_berry_flavor_data( - name="bry for base cntst tp", contest_type=contest_type - ) + contest_type_name = self.setup_contest_type_name_data(contest_type, name="base cntst tp name") + berry_flavor = self.setup_berry_flavor_data(name="bry for base cntst tp", contest_type=contest_type) - response = self.client.get( - "{}/contest-type/{}/".format(API_V2, contest_type.pk) - ) + response = self.client.get("{}/contest-type/{}/".format(API_V2, contest_type.pk)) self.assertEqual(response.status_code, status.HTTP_200_OK) @@ -3325,9 +2885,7 @@ def test_contest_type_api(self): ) self.assertEqual( response.data["names"][0]["language"]["url"], - "{}{}/language/{}/".format( - TEST_HOST, API_V2, contest_type_name.language.pk - ), + "{}{}/language/{}/".format(TEST_HOST, API_V2, contest_type_name.language.pk), ) # berry params self.assertEqual(response.data["berry_flavor"]["name"], berry_flavor.name) @@ -3345,9 +2903,7 @@ def test_contest_effect_api(self): contest_effect, effect="base cntst efct eftc txt" ) - response = self.client.get( - "{}/contest-effect/{}/".format(API_V2, contest_effect.pk) - ) + response = self.client.get("{}/contest-effect/{}/".format(API_V2, contest_effect.pk)) self.assertEqual(response.status_code, status.HTTP_200_OK) @@ -3366,9 +2922,7 @@ def test_contest_effect_api(self): ) self.assertEqual( response.data["effect_entries"][0]["language"]["url"], - "{}{}/language/{}/".format( - TEST_HOST, API_V2, contest_effect_effect_text.language.pk - ), + "{}{}/language/{}/".format(TEST_HOST, API_V2, contest_effect_effect_text.language.pk), ) # flavor text params self.assertEqual( @@ -3381,25 +2935,17 @@ def test_contest_effect_api(self): ) self.assertEqual( response.data["flavor_text_entries"][0]["language"]["url"], - "{}{}/language/{}/".format( - TEST_HOST, API_V2, contest_effect_flavor_text.language.pk - ), + "{}{}/language/{}/".format(TEST_HOST, API_V2, contest_effect_flavor_text.language.pk), ) def test_super_contest_effect_api(self): super_contest_effect = self.setup_super_contest_effect_data(appeal=10) - super_contest_effect_flavor_text = ( - self.setup_super_contest_effect_flavor_text_data( - super_contest_effect, flavor_text="base spr cntst efct flvr txt" - ) - ) - move = self.setup_move_data( - name="mv for base spr cntst efct", super_contest_effect=super_contest_effect + super_contest_effect_flavor_text = self.setup_super_contest_effect_flavor_text_data( + super_contest_effect, flavor_text="base spr cntst efct flvr txt" ) + move = self.setup_move_data(name="mv for base spr cntst efct", super_contest_effect=super_contest_effect) - response = self.client.get( - "{}/super-contest-effect/{}/".format(API_V2, super_contest_effect.pk) - ) + response = self.client.get("{}/super-contest-effect/{}/".format(API_V2, super_contest_effect.pk)) self.assertEqual(response.status_code, status.HTTP_200_OK) @@ -3417,9 +2963,7 @@ def test_super_contest_effect_api(self): ) self.assertEqual( response.data["flavor_text_entries"][0]["language"]["url"], - "{}{}/language/{}/".format( - TEST_HOST, API_V2, super_contest_effect_flavor_text.language.pk - ), + "{}{}/language/{}/".format(TEST_HOST, API_V2, super_contest_effect_flavor_text.language.pk), ) # move params self.assertEqual(response.data["moves"][0]["name"], move.name) @@ -3439,24 +2983,12 @@ def test_type_api(self): generation = self.setup_generation_data(name="past gen") - no_damage_to = self.setup_type_data( - name="no damage to tp", generation=generation - ) - half_damage_to = self.setup_type_data( - name="half damage to tp", generation=generation - ) - double_damage_to = self.setup_type_data( - name="double damage to tp", generation=generation - ) - no_damage_from = self.setup_type_data( - name="no damage from tp", generation=generation - ) - half_damage_from = self.setup_type_data( - name="half damage from tp", generation=generation - ) - double_damage_from = self.setup_type_data( - name="double damage from tp", generation=generation - ) + no_damage_to = self.setup_type_data(name="no damage to tp", generation=generation) + half_damage_to = self.setup_type_data(name="half damage to tp", generation=generation) + double_damage_to = self.setup_type_data(name="double damage to tp", generation=generation) + no_damage_from = self.setup_type_data(name="no damage from tp", generation=generation) + half_damage_from = self.setup_type_data(name="half damage from tp", generation=generation) + double_damage_from = self.setup_type_data(name="double damage from tp", generation=generation) newer_generation = self.setup_generation_data(name="newer_generation") @@ -3465,14 +2997,10 @@ def test_type_api(self): type_sprites, game_map = self.setup_type_sprites_data(type=type_obj) # type relations - no_damage_to_relation = TypeEfficacy( - damage_type=type_obj, target_type=no_damage_to, damage_factor=0 - ) + no_damage_to_relation = TypeEfficacy(damage_type=type_obj, target_type=no_damage_to, damage_factor=0) no_damage_to_relation.save() - half_damage_to_type_relation = TypeEfficacy( - damage_type=type_obj, target_type=half_damage_to, damage_factor=50 - ) + half_damage_to_type_relation = TypeEfficacy(damage_type=type_obj, target_type=half_damage_to, damage_factor=50) half_damage_to_type_relation.save() double_damage_to_type_relation = TypeEfficacy( @@ -3480,9 +3008,7 @@ def test_type_api(self): ) double_damage_to_type_relation.save() - no_damage_from_relation = TypeEfficacy( - damage_type=no_damage_from, target_type=type_obj, damage_factor=0 - ) + no_damage_from_relation = TypeEfficacy(damage_type=no_damage_from, target_type=type_obj, damage_factor=0) no_damage_from_relation.save() half_damage_from_type_relation = TypeEfficacy( @@ -3520,9 +3046,7 @@ def test_type_api(self): self.assertEqual(response.data["name"], type_obj.name) # name params self.assertEqual(response.data["names"][0]["name"], type_name.name) - self.assertEqual( - response.data["names"][0]["language"]["name"], type_name.language.name - ) + self.assertEqual(response.data["names"][0]["language"]["name"], type_name.language.name) self.assertEqual( response.data["names"][0]["language"]["url"], "{}{}/language/{}/".format(TEST_HOST, API_V2, type_name.language.pk), @@ -3534,14 +3058,10 @@ def test_type_api(self): "{}{}/generation/{}/".format(TEST_HOST, API_V2, type_obj.generation.pk), ) # damage class params - self.assertEqual( - response.data["move_damage_class"]["name"], type_obj.move_damage_class.name - ) + self.assertEqual(response.data["move_damage_class"]["name"], type_obj.move_damage_class.name) self.assertEqual( response.data["move_damage_class"]["url"], - "{}{}/move-damage-class/{}/".format( - TEST_HOST, API_V2, type_obj.move_damage_class.pk - ), + "{}{}/move-damage-class/{}/".format(TEST_HOST, API_V2, type_obj.move_damage_class.pk), ) # move params self.assertEqual(response.data["moves"][0]["name"], move.name) @@ -3614,9 +3134,7 @@ def test_type_api(self): self.assertEqual(gen_data["name"], generation.name) self.assertEqual( gen_data["url"], - "{}{}/generation/{}/".format( - TEST_HOST, API_V2, past_no_damage_to_relation.generation.pk - ), + "{}{}/generation/{}/".format(TEST_HOST, API_V2, past_no_damage_to_relation.generation.pk), ) # relations @@ -3626,9 +3144,7 @@ def test_type_api(self): # this list... self.assertEqual(len(gen_relations["no_damage_to"]), 0) - self.assertEqual( - gen_relations["half_damage_to"][0]["name"], half_damage_to.name - ) + self.assertEqual(gen_relations["half_damage_to"][0]["name"], half_damage_to.name) self.assertEqual( gen_relations["half_damage_to"][0]["url"], "{}{}/type/{}/".format(TEST_HOST, API_V2, half_damage_to.pk), @@ -3641,30 +3157,22 @@ def test_type_api(self): "{}{}/type/{}/".format(TEST_HOST, API_V2, no_damage_to.pk), ) - self.assertEqual( - gen_relations["double_damage_to"][0]["name"], double_damage_to.name - ) + self.assertEqual(gen_relations["double_damage_to"][0]["name"], double_damage_to.name) self.assertEqual( gen_relations["double_damage_to"][0]["url"], "{}{}/type/{}/".format(TEST_HOST, API_V2, double_damage_to.pk), ) - self.assertEqual( - gen_relations["no_damage_from"][0]["name"], no_damage_from.name - ) + self.assertEqual(gen_relations["no_damage_from"][0]["name"], no_damage_from.name) self.assertEqual( gen_relations["no_damage_from"][0]["url"], "{}{}/type/{}/".format(TEST_HOST, API_V2, no_damage_from.pk), ) - self.assertEqual( - gen_relations["half_damage_from"][0]["name"], half_damage_from.name - ) + self.assertEqual(gen_relations["half_damage_from"][0]["name"], half_damage_from.name) self.assertEqual( gen_relations["half_damage_from"][0]["url"], "{}{}/type/{}/".format(TEST_HOST, API_V2, half_damage_from.pk), ) - self.assertEqual( - gen_relations["double_damage_from"][0]["name"], double_damage_from.name - ) + self.assertEqual(gen_relations["double_damage_from"][0]["name"], double_damage_from.name) self.assertEqual( gen_relations["double_damage_from"][0]["url"], "{}{}/type/{}/".format(TEST_HOST, API_V2, double_damage_from.pk), @@ -3675,18 +3183,14 @@ def test_type_api(self): self.assertEqual(len(gen_relations["double_damage_from"]), 1) # game indices params - self.assertEqual( - response.data["game_indices"][0]["game_index"], type_game_index.game_index - ) + self.assertEqual(response.data["game_indices"][0]["game_index"], type_game_index.game_index) self.assertEqual( response.data["game_indices"][0]["generation"]["name"], type_game_index.generation.name, ) self.assertEqual( response.data["game_indices"][0]["generation"]["url"], - "{}{}/generation/{}/".format( - TEST_HOST, API_V2, type_game_index.generation.pk - ), + "{}{}/generation/{}/".format(TEST_HOST, API_V2, type_game_index.generation.pk), ) sprites_data = json.loads(type_sprites.sprites) @@ -3698,9 +3202,7 @@ def test_type_api(self): sprites_data[generation][game]["name_icon"], ) self.assertEqual( - json.loads(response.data["sprites"])[generation][game][ - "symbol_icon" - ], + json.loads(response.data["sprites"])[generation][game]["symbol_icon"], sprites_data[generation][game]["symbol_icon"], ) @@ -3708,15 +3210,9 @@ def test_type_api(self): def test_pokedex_api(self): pokedex = self.setup_pokedex_data(name="base pkdx") pokedex_name = self.setup_pokedex_name_data(pokedex, name="base pkdx name") - pokedex_description = self.setup_pokedex_description_data( - pokedex, description="base pkdx desc" - ) - pokemon_species = self.setup_pokemon_species_data( - name="pkmn spcs for base pkdx" - ) - dex_entry = self.setup_pokemon_dex_entry_data( - pokedex=pokedex, pokemon_species=pokemon_species - ) + pokedex_description = self.setup_pokedex_description_data(pokedex, description="base pkdx desc") + pokemon_species = self.setup_pokemon_species_data(name="pkmn spcs for base pkdx") + dex_entry = self.setup_pokemon_dex_entry_data(pokedex=pokedex, pokemon_species=pokemon_species) response = self.client.get("{}/pokedex/{}/".format(API_V2, pokedex.pk)) @@ -3728,9 +3224,7 @@ def test_pokedex_api(self): self.assertEqual(response.data["is_main_series"], pokedex.is_main_series) # name params self.assertEqual(response.data["names"][0]["name"], pokedex_name.name) - self.assertEqual( - response.data["names"][0]["language"]["name"], pokedex_name.language.name - ) + self.assertEqual(response.data["names"][0]["language"]["name"], pokedex_name.language.name) self.assertEqual( response.data["names"][0]["language"]["url"], "{}{}/language/{}/".format(TEST_HOST, API_V2, pokedex_name.language.pk), @@ -3746,9 +3240,7 @@ def test_pokedex_api(self): ) self.assertEqual( response.data["descriptions"][0]["language"]["url"], - "{}{}/language/{}/".format( - TEST_HOST, API_V2, pokedex_description.language.pk - ), + "{}{}/language/{}/".format(TEST_HOST, API_V2, pokedex_description.language.pk), ) # region params self.assertEqual(response.data["region"]["name"], pokedex.region.name) @@ -3773,15 +3265,11 @@ def test_pokedex_api(self): # Move Tests def test_move_ailment_api(self): move_ailment = self.setup_move_ailment_data(name="base mv almnt") - move_ailment_name = self.setup_move_ailment_name_data( - move_ailment, name="base mv almnt name" - ) + move_ailment_name = self.setup_move_ailment_name_data(move_ailment, name="base mv almnt name") move = self.setup_move_data(name="mv for base mv almnt") self.setup_move_meta_data(move=move, move_ailment=move_ailment) - response = self.client.get( - "{}/move-ailment/{}/".format(API_V2, move_ailment.pk) - ) + response = self.client.get("{}/move-ailment/{}/".format(API_V2, move_ailment.pk)) self.assertEqual(response.status_code, status.HTTP_200_OK) @@ -3796,9 +3284,7 @@ def test_move_ailment_api(self): ) self.assertEqual( response.data["names"][0]["language"]["url"], - "{}{}/language/{}/".format( - TEST_HOST, API_V2, move_ailment_name.language.pk - ), + "{}{}/language/{}/".format(TEST_HOST, API_V2, move_ailment_name.language.pk), ) # move params self.assertEqual(response.data["moves"][0]["name"], move.name) @@ -3809,13 +3295,9 @@ def test_move_ailment_api(self): def test_move_battle_style_api(self): move_battle_style = self.setup_move_battle_style_data(name="base mv btl stl") - move_battle_style_name = self.setup_move_battle_style_name_data( - move_battle_style, name="base mv btl stl name" - ) + move_battle_style_name = self.setup_move_battle_style_name_data(move_battle_style, name="base mv btl stl name") - response = self.client.get( - "{}/move-battle-style/{}/".format(API_V2, move_battle_style.pk) - ) + response = self.client.get("{}/move-battle-style/{}/".format(API_V2, move_battle_style.pk)) self.assertEqual(response.status_code, status.HTTP_200_OK) @@ -3830,9 +3312,7 @@ def test_move_battle_style_api(self): ) self.assertEqual( response.data["names"][0]["language"]["url"], - "{}{}/language/{}/".format( - TEST_HOST, API_V2, move_battle_style_name.language.pk - ), + "{}{}/language/{}/".format(TEST_HOST, API_V2, move_battle_style_name.language.pk), ) def test_move_category_api(self): @@ -3843,9 +3323,7 @@ def test_move_category_api(self): move = self.setup_move_data(name="mv for base mv ctgry") self.setup_move_meta_data(move=move, move_category=move_category) - response = self.client.get( - "{}/move-category/{}/".format(API_V2, move_category.pk) - ) + response = self.client.get("{}/move-category/{}/".format(API_V2, move_category.pk)) self.assertEqual(response.status_code, status.HTTP_200_OK) @@ -3863,9 +3341,7 @@ def test_move_category_api(self): ) self.assertEqual( response.data["descriptions"][0]["language"]["url"], - "{}{}/language/{}/".format( - TEST_HOST, API_V2, move_category_description.language.pk - ), + "{}{}/language/{}/".format(TEST_HOST, API_V2, move_category_description.language.pk), ) # move params self.assertEqual(response.data["moves"][0]["name"], move.name) @@ -3876,19 +3352,13 @@ def test_move_category_api(self): def test_move_damage_class_api(self): move_damage_class = self.setup_move_damage_class_data(name="base mv dmg cls") - move_damage_class_name = self.setup_move_damage_class_name_data( - move_damage_class, name="base mv dmg cls nm" - ) + move_damage_class_name = self.setup_move_damage_class_name_data(move_damage_class, name="base mv dmg cls nm") move_damage_class_description = self.setup_move_damage_class_description_data( move_damage_class, description="base mv dmg cls desc" ) - move = self.setup_move_data( - name="mv for base mv dmg cls", move_damage_class=move_damage_class - ) + move = self.setup_move_data(name="mv for base mv dmg cls", move_damage_class=move_damage_class) - response = self.client.get( - "{}/move-damage-class/{}/".format(API_V2, move_damage_class.pk) - ) + response = self.client.get("{}/move-damage-class/{}/".format(API_V2, move_damage_class.pk)) self.assertEqual(response.status_code, status.HTTP_200_OK) @@ -3903,9 +3373,7 @@ def test_move_damage_class_api(self): ) self.assertEqual( response.data["names"][0]["language"]["url"], - "{}{}/language/{}/".format( - TEST_HOST, API_V2, move_damage_class_name.language.pk - ), + "{}{}/language/{}/".format(TEST_HOST, API_V2, move_damage_class_name.language.pk), ) # description params self.assertEqual( @@ -3918,9 +3386,7 @@ def test_move_damage_class_api(self): ) self.assertEqual( response.data["descriptions"][0]["language"]["url"], - "{}{}/language/{}/".format( - TEST_HOST, API_V2, move_damage_class_description.language.pk - ), + "{}{}/language/{}/".format(TEST_HOST, API_V2, move_damage_class_description.language.pk), ) # move params self.assertEqual(response.data["moves"][0]["name"], move.name) @@ -3931,22 +3397,16 @@ def test_move_damage_class_api(self): def test_move_learn_method_api(self): move_learn_method = self.setup_move_learn_method_data(name="base mv lrn mthd") - move_learn_method_name = self.setup_move_learn_method_name_data( - move_learn_method, name="base mv lrn mthd nm" - ) + move_learn_method_name = self.setup_move_learn_method_name_data(move_learn_method, name="base mv lrn mthd nm") move_learn_method_description = self.setup_move_learn_method_description_data( move_learn_method, description="base mv lrn mthd desc" ) - version_group = self.setup_version_group_data( - name="ver grp for base mv lrn mthd" - ) + version_group = self.setup_version_group_data(name="ver grp for base mv lrn mthd") self.setup_version_group_move_learn_method_data( version_group=version_group, move_learn_method=move_learn_method ) - response = self.client.get( - "{}/move-learn-method/{}/".format(API_V2, move_learn_method.pk) - ) + response = self.client.get("{}/move-learn-method/{}/".format(API_V2, move_learn_method.pk)) self.assertEqual(response.status_code, status.HTTP_200_OK) @@ -3961,9 +3421,7 @@ def test_move_learn_method_api(self): ) self.assertEqual( response.data["names"][0]["language"]["url"], - "{}{}/language/{}/".format( - TEST_HOST, API_V2, move_learn_method_name.language.pk - ), + "{}{}/language/{}/".format(TEST_HOST, API_V2, move_learn_method_name.language.pk), ) # description params self.assertEqual( @@ -3976,9 +3434,7 @@ def test_move_learn_method_api(self): ) self.assertEqual( response.data["descriptions"][0]["language"]["url"], - "{}{}/language/{}/".format( - TEST_HOST, API_V2, move_learn_method_description.language.pk - ), + "{}{}/language/{}/".format(TEST_HOST, API_V2, move_learn_method_description.language.pk), ) # version group params self.assertEqual(response.data["version_groups"][0]["name"], version_group.name) @@ -3989,12 +3445,8 @@ def test_move_learn_method_api(self): def test_move_target_api(self): move_target = self.setup_move_target_data(name="base mv trgt") - move_target_name = self.setup_move_target_name_data( - move_target, name="base mv trgt nm" - ) - move_target_description = self.setup_move_target_description_data( - move_target, description="base mv trgt desc" - ) + move_target_name = self.setup_move_target_name_data(move_target, name="base mv trgt nm") + move_target_description = self.setup_move_target_description_data(move_target, description="base mv trgt desc") move = self.setup_move_data(name="mv for base mv trgt", move_target=move_target) response = self.client.get("{}/move-target/{}/".format(API_V2, move_target.pk)) @@ -4025,9 +3477,7 @@ def test_move_target_api(self): ) self.assertEqual( response.data["descriptions"][0]["language"]["url"], - "{}{}/language/{}/".format( - TEST_HOST, API_V2, move_target_description.language.pk - ), + "{}{}/language/{}/".format(TEST_HOST, API_V2, move_target_description.language.pk), ) # move params self.assertEqual(response.data["moves"][0]["name"], move.name) @@ -4060,9 +3510,7 @@ def test_move_api(self): self.setup_contest_combo_data(before_move, move) self.setup_super_contest_combo_data(move, after_move) self.setup_super_contest_combo_data(before_move, move) - move_flavor_text = self.setup_move_flavor_text_data( - move, flavor_text="flvr text for move" - ) + move_flavor_text = self.setup_move_flavor_text_data(move, flavor_text="flvr text for move") response = self.client.get("{}/move/{}/".format(API_V2, move.pk)) @@ -4078,22 +3526,16 @@ def test_move_api(self): self.assertEqual(response.data["priority"], move.priority) # name params self.assertEqual(response.data["names"][0]["name"], move_name.name) - self.assertEqual( - response.data["names"][0]["language"]["name"], move_name.language.name - ) + self.assertEqual(response.data["names"][0]["language"]["name"], move_name.language.name) self.assertEqual( response.data["names"][0]["language"]["url"], "{}{}/language/{}/".format(TEST_HOST, API_V2, move_name.language.pk), ) # damage class params - self.assertEqual( - response.data["damage_class"]["name"], move.move_damage_class.name - ) + self.assertEqual(response.data["damage_class"]["name"], move.move_damage_class.name) self.assertEqual( response.data["damage_class"]["url"], - "{}{}/move-damage-class/{}/".format( - TEST_HOST, API_V2, move.move_damage_class.pk - ), + "{}{}/move-damage-class/{}/".format(TEST_HOST, API_V2, move.move_damage_class.pk), ) # contest type params self.assertEqual(response.data["contest_type"]["name"], move.contest_type.name) @@ -4109,9 +3551,7 @@ def test_move_api(self): # super contest effect params self.assertEqual( response.data["super_contest_effect"]["url"], - "{}{}/super-contest-effect/{}/".format( - TEST_HOST, API_V2, move.super_contest_effect.pk - ), + "{}{}/super-contest-effect/{}/".format(TEST_HOST, API_V2, move.super_contest_effect.pk), ) # generation params self.assertEqual(response.data["generation"]["name"], move.generation.name) @@ -4132,20 +3572,14 @@ def test_move_api(self): "{}{}/type/{}/".format(TEST_HOST, API_V2, move.type.pk), ) # stat change params - self.assertEqual( - response.data["stat_changes"][0]["change"], move_stat_change.change - ) - self.assertEqual( - response.data["stat_changes"][0]["stat"]["name"], move_stat_change.stat.name - ) + self.assertEqual(response.data["stat_changes"][0]["change"], move_stat_change.change) + self.assertEqual(response.data["stat_changes"][0]["stat"]["name"], move_stat_change.stat.name) self.assertEqual( response.data["stat_changes"][0]["stat"]["url"], "{}{}/stat/{}/".format(TEST_HOST, API_V2, move_stat_change.stat.pk), ) # effect entries params - self.assertEqual( - response.data["effect_entries"][0]["effect"], move_effect_effect_text.effect - ) + self.assertEqual(response.data["effect_entries"][0]["effect"], move_effect_effect_text.effect) self.assertEqual( response.data["effect_entries"][0]["short_effect"], move_effect_effect_text.short_effect, @@ -4156,9 +3590,7 @@ def test_move_api(self): ) self.assertEqual( response.data["effect_entries"][0]["language"]["url"], - "{}{}/language/{}/".format( - TEST_HOST, API_V2, move_effect_effect_text.language.pk - ), + "{}{}/language/{}/".format(TEST_HOST, API_V2, move_effect_effect_text.language.pk), ) # meta data self.assertEqual(response.data["meta"]["min_hits"], move_meta.min_hits) @@ -4168,32 +3600,20 @@ def test_move_api(self): self.assertEqual(response.data["meta"]["drain"], move_meta.drain) self.assertEqual(response.data["meta"]["healing"], move_meta.healing) self.assertEqual(response.data["meta"]["crit_rate"], move_meta.crit_rate) - self.assertEqual( - response.data["meta"]["ailment_chance"], move_meta.ailment_chance - ) - self.assertEqual( - response.data["meta"]["flinch_chance"], move_meta.flinch_chance - ) + self.assertEqual(response.data["meta"]["ailment_chance"], move_meta.ailment_chance) + self.assertEqual(response.data["meta"]["flinch_chance"], move_meta.flinch_chance) self.assertEqual(response.data["meta"]["stat_chance"], move_meta.stat_chance) # ailment params - self.assertEqual( - response.data["meta"]["ailment"]["name"], move_meta.move_meta_ailment.name - ) + self.assertEqual(response.data["meta"]["ailment"]["name"], move_meta.move_meta_ailment.name) self.assertEqual( response.data["meta"]["ailment"]["url"], - "{}{}/move-ailment/{}/".format( - TEST_HOST, API_V2, move_meta.move_meta_ailment.pk - ), + "{}{}/move-ailment/{}/".format(TEST_HOST, API_V2, move_meta.move_meta_ailment.pk), ) # category params - self.assertEqual( - response.data["meta"]["category"]["name"], move_meta.move_meta_category.name - ) + self.assertEqual(response.data["meta"]["category"]["name"], move_meta.move_meta_category.name) self.assertEqual( response.data["meta"]["category"]["url"], - "{}{}/move-category/{}/".format( - TEST_HOST, API_V2, move_meta.move_meta_category.pk - ), + "{}{}/move-category/{}/".format(TEST_HOST, API_V2, move_meta.move_meta_category.pk), ) # combo params self.assertEqual( @@ -4229,9 +3649,7 @@ def test_move_api(self): "{}{}/move/{}/".format(TEST_HOST, API_V2, before_move.pk), ) # change params - self.assertEqual( - response.data["past_values"][0]["accuracy"], move_change.accuracy - ) + self.assertEqual(response.data["past_values"][0]["accuracy"], move_change.accuracy) self.assertEqual(response.data["past_values"][0]["power"], move_change.power) self.assertEqual(response.data["past_values"][0]["pp"], move_change.pp) self.assertEqual( @@ -4244,9 +3662,7 @@ def test_move_api(self): ) self.assertEqual( response.data["past_values"][0]["version_group"]["url"], - "{}{}/version-group/{}/".format( - TEST_HOST, API_V2, move_change.version_group.pk - ), + "{}{}/version-group/{}/".format(TEST_HOST, API_V2, move_change.version_group.pk), ) # effect changes self.assertEqual( @@ -4255,9 +3671,7 @@ def test_move_api(self): ) self.assertEqual( response.data["effect_changes"][0]["version_group"]["url"], - "{}{}/version-group/{}/".format( - TEST_HOST, API_V2, move_effect_change.version_group.pk - ), + "{}{}/version-group/{}/".format(TEST_HOST, API_V2, move_effect_change.version_group.pk), ) self.assertEqual( response.data["effect_changes"][0]["effect_entries"][0]["effect"], @@ -4269,9 +3683,7 @@ def test_move_api(self): ) self.assertEqual( response.data["effect_changes"][0]["effect_entries"][0]["language"]["url"], - "{}{}/language/{}/".format( - TEST_HOST, API_V2, move_effect_change_effect_text.language.pk - ), + "{}{}/language/{}/".format(TEST_HOST, API_V2, move_effect_change_effect_text.language.pk), ) # flavor text params self.assertEqual( @@ -4292,9 +3704,7 @@ def test_move_api(self): ) self.assertEqual( response.data["flavor_text_entries"][0]["version_group"]["url"], - "{}{}/version-group/{}/".format( - TEST_HOST, API_V2, move_flavor_text.version_group.pk - ), + "{}{}/version-group/{}/".format(TEST_HOST, API_V2, move_flavor_text.version_group.pk), ) # pokemon self.assertEqual(response.data["learned_by_pokemon"][0]["name"], pokemon.name) @@ -4304,19 +3714,11 @@ def test_stat_api(self): stat = self.setup_stat_data(name="base stt") stat_name = self.setup_stat_name_data(stat, name="base stt name") increase_move = self.setup_move_data(name="incrs mv for base stt") - increase_move_stat_change = self.setup_move_stat_change_data( - move=increase_move, stat=stat, change=2 - ) + increase_move_stat_change = self.setup_move_stat_change_data(move=increase_move, stat=stat, change=2) decrease_move = self.setup_move_data(name="dcrs mv for base stt") - decrease_move_stat_change = self.setup_move_stat_change_data( - move=decrease_move, stat=stat, change=(-2) - ) - increase_nature = self.setup_nature_data( - name="incrs ntr for base stt", increased_stat=stat - ) - decrease_nature = self.setup_nature_data( - name="dcrs ntr for base stt", decreased_stat=stat - ) + decrease_move_stat_change = self.setup_move_stat_change_data(move=decrease_move, stat=stat, change=(-2)) + increase_nature = self.setup_nature_data(name="incrs ntr for base stt", increased_stat=stat) + decrease_nature = self.setup_nature_data(name="dcrs ntr for base stt", decreased_stat=stat) characteristic = self.setup_characteristic_data(stat=stat) response = self.client.get("{}/stat/{}/".format(API_V2, stat.pk)) @@ -4330,22 +3732,16 @@ def test_stat_api(self): self.assertEqual(response.data["is_battle_only"], stat.is_battle_only) # name params self.assertEqual(response.data["names"][0]["name"], stat_name.name) - self.assertEqual( - response.data["names"][0]["language"]["name"], stat_name.language.name - ) + self.assertEqual(response.data["names"][0]["language"]["name"], stat_name.language.name) self.assertEqual( response.data["names"][0]["language"]["url"], "{}{}/language/{}/".format(TEST_HOST, API_V2, stat_name.language.pk), ) # move damage class params - self.assertEqual( - response.data["move_damage_class"]["name"], stat.move_damage_class.name - ) + self.assertEqual(response.data["move_damage_class"]["name"], stat.move_damage_class.name) self.assertEqual( response.data["move_damage_class"]["url"], - "{}{}/move-damage-class/{}/".format( - TEST_HOST, API_V2, stat.move_damage_class.pk - ), + "{}{}/move-damage-class/{}/".format(TEST_HOST, API_V2, stat.move_damage_class.pk), ) # nature params self.assertEqual( @@ -4397,13 +3793,9 @@ def test_stat_api(self): def test_pokeathlon_stat_api(self): pokeathlon_stat = self.setup_pokeathlon_stat_data(name="base pkathln stt") - pokeathlon_stat_name = self.setup_pokeathlon_stat_name_data( - pokeathlon_stat, name="base pkathln stt name" - ) + pokeathlon_stat_name = self.setup_pokeathlon_stat_name_data(pokeathlon_stat, name="base pkathln stt name") - response = self.client.get( - "{}/pokeathlon-stat/{}/".format(API_V2, pokeathlon_stat.pk) - ) + response = self.client.get("{}/pokeathlon-stat/{}/".format(API_V2, pokeathlon_stat.pk)) self.assertEqual(response.status_code, status.HTTP_200_OK) @@ -4418,9 +3810,7 @@ def test_pokeathlon_stat_api(self): ) self.assertEqual( response.data["names"][0]["language"]["url"], - "{}{}/language/{}/".format( - TEST_HOST, API_V2, pokeathlon_stat_name.language.pk - ), + "{}{}/language/{}/".format(TEST_HOST, API_V2, pokeathlon_stat_name.language.pk), ) # Characteristic Tests @@ -4430,9 +3820,7 @@ def test_characteristic_api(self): characteristic, description="base char desc" ) - response = self.client.get( - "{}/characteristic/{}/".format(API_V2, characteristic.pk) - ) + response = self.client.get("{}/characteristic/{}/".format(API_V2, characteristic.pk)) self.assertEqual(response.status_code, status.HTTP_200_OK) @@ -4450,14 +3838,10 @@ def test_characteristic_api(self): ) self.assertEqual( response.data["descriptions"][0]["language"]["url"], - "{}{}/language/{}/".format( - TEST_HOST, API_V2, characteristic_description.language.pk - ), + "{}{}/language/{}/".format(TEST_HOST, API_V2, characteristic_description.language.pk), ) # stat params - self.assertEqual( - response.data["highest_stat"]["name"], characteristic.stat.name - ) + self.assertEqual(response.data["highest_stat"]["name"], characteristic.stat.name) self.assertEqual( response.data["highest_stat"]["url"], "{}{}/stat/{}/".format(TEST_HOST, API_V2, characteristic.stat.pk), @@ -4469,13 +3853,9 @@ def test_characteristic_values(self): characteristic = self.setup_characteristic_data(gene_mod_5=modulo) # note that 'possible_values' is computed solely from gene_modulo # thus it is fine that our test characteristics are indexed 1-5 - result = self.client.get( - "{}/characteristic/{}/".format(API_V2, characteristic.pk) - ) + result = self.client.get("{}/characteristic/{}/".format(API_V2, characteristic.pk)) for i in range(len(result.data["possible_values"])): - self.assertEqual( - result.data["possible_values"][i], characteristic.gene_mod_5 + i * 5 - ) + self.assertEqual(result.data["possible_values"][i], characteristic.gene_mod_5 + i * 5) # Nature Tests def test_nature_api(self): @@ -4492,16 +3872,12 @@ def test_nature_api(self): ) nature_name = self.setup_nature_name_data(nature, name="base ntr name") - pokeathlon_stat = self.setup_pokeathlon_stat_data( - name="pkeathln stt for ntr stt" - ) + pokeathlon_stat = self.setup_pokeathlon_stat_data(name="pkeathln stt for ntr stt") nature_pokeathlon_stat = self.setup_nature_pokeathlon_stat_data( nature=nature, pokeathlon_stat=pokeathlon_stat, max_change=1 ) - move_battle_style = self.setup_move_battle_style_data( - name="mv btl stl for ntr stt" - ) + move_battle_style = self.setup_move_battle_style_data(name="mv btl stl for ntr stt") nature_battle_style_preference = self.setup_nature_battle_style_preference_data( nature=nature, move_battle_style=move_battle_style ) @@ -4515,9 +3891,7 @@ def test_nature_api(self): self.assertEqual(response.data["name"], nature.name) # name params self.assertEqual(response.data["names"][0]["name"], nature_name.name) - self.assertEqual( - response.data["names"][0]["language"]["name"], nature_name.language.name - ) + self.assertEqual(response.data["names"][0]["language"]["name"], nature_name.language.name) self.assertEqual( response.data["names"][0]["language"]["url"], "{}{}/language/{}/".format(TEST_HOST, API_V2, nature_name.language.pk), @@ -4567,33 +3941,23 @@ def test_nature_api(self): nature_battle_style_preference.high_hp_preference, ) self.assertEqual( - response.data["move_battle_style_preferences"][0]["move_battle_style"][ - "name" - ], + response.data["move_battle_style_preferences"][0]["move_battle_style"]["name"], move_battle_style.name, ) self.assertEqual( - response.data["move_battle_style_preferences"][0]["move_battle_style"][ - "url" - ], - "{}{}/move-battle-style/{}/".format( - TEST_HOST, API_V2, move_battle_style.pk - ), + response.data["move_battle_style_preferences"][0]["move_battle_style"]["url"], + "{}{}/move-battle-style/{}/".format(TEST_HOST, API_V2, move_battle_style.pk), ) # Pokemon Tests def test_pokemon_habitat_api(self): pokemon_habitat = self.setup_pokemon_habitat_data(name="base pkmn hbtt trgr") - pokemon_habitat_name = self.setup_pokemon_habitat_name_data( - pokemon_habitat, name="base pkmn hbtt name" - ) + pokemon_habitat_name = self.setup_pokemon_habitat_name_data(pokemon_habitat, name="base pkmn hbtt name") pokemon_species = self.setup_pokemon_species_data( pokemon_habitat=pokemon_habitat, name="pkmn spcs for pkmn hbtt" ) - response = self.client.get( - "{}/pokemon-habitat/{}/".format(API_V2, pokemon_habitat.pk) - ) + response = self.client.get("{}/pokemon-habitat/{}/".format(API_V2, pokemon_habitat.pk)) self.assertEqual(response.status_code, status.HTTP_200_OK) @@ -4608,14 +3972,10 @@ def test_pokemon_habitat_api(self): ) self.assertEqual( response.data["names"][0]["language"]["url"], - "{}{}/language/{}/".format( - TEST_HOST, API_V2, pokemon_habitat_name.language.pk - ), + "{}{}/language/{}/".format(TEST_HOST, API_V2, pokemon_habitat_name.language.pk), ) # species params - self.assertEqual( - response.data["pokemon_species"][0]["name"], pokemon_species.name - ) + self.assertEqual(response.data["pokemon_species"][0]["name"], pokemon_species.name) self.assertEqual( response.data["pokemon_species"][0]["url"], "{}{}/pokemon-species/{}/".format(TEST_HOST, API_V2, pokemon_species.pk), @@ -4623,16 +3983,10 @@ def test_pokemon_habitat_api(self): def test_pokemon_color_api(self): pokemon_color = self.setup_pokemon_color_data(name="base pkmn clr trgr") - pokemon_color_name = self.setup_pokemon_color_name_data( - pokemon_color, name="base pkmn clr name" - ) - pokemon_species = self.setup_pokemon_species_data( - pokemon_color=pokemon_color, name="pkmn spcs for pkmn clr" - ) + pokemon_color_name = self.setup_pokemon_color_name_data(pokemon_color, name="base pkmn clr name") + pokemon_species = self.setup_pokemon_species_data(pokemon_color=pokemon_color, name="pkmn spcs for pkmn clr") - response = self.client.get( - "{}/pokemon-color/{}/".format(API_V2, pokemon_color.pk) - ) + response = self.client.get("{}/pokemon-color/{}/".format(API_V2, pokemon_color.pk)) self.assertEqual(response.status_code, status.HTTP_200_OK) @@ -4647,14 +4001,10 @@ def test_pokemon_color_api(self): ) self.assertEqual( response.data["names"][0]["language"]["url"], - "{}{}/language/{}/".format( - TEST_HOST, API_V2, pokemon_color_name.language.pk - ), + "{}{}/language/{}/".format(TEST_HOST, API_V2, pokemon_color_name.language.pk), ) # species params - self.assertEqual( - response.data["pokemon_species"][0]["name"], pokemon_species.name - ) + self.assertEqual(response.data["pokemon_species"][0]["name"], pokemon_species.name) self.assertEqual( response.data["pokemon_species"][0]["url"], "{}{}/pokemon-species/{}/".format(TEST_HOST, API_V2, pokemon_species.pk), @@ -4662,16 +4012,10 @@ def test_pokemon_color_api(self): def test_pokemon_shape_api(self): pokemon_shape = self.setup_pokemon_shape_data(name="base pkmn shp trgr") - pokemon_shape_name = self.setup_pokemon_shape_name_data( - pokemon_shape, name="base pkmn shp name" - ) - pokemon_species = self.setup_pokemon_species_data( - pokemon_shape=pokemon_shape, name="pkmn spcs for pkmn shp" - ) + pokemon_shape_name = self.setup_pokemon_shape_name_data(pokemon_shape, name="base pkmn shp name") + pokemon_species = self.setup_pokemon_species_data(pokemon_shape=pokemon_shape, name="pkmn spcs for pkmn shp") - response = self.client.get( - "{}/pokemon-shape/{}/".format(API_V2, pokemon_shape.pk) - ) + response = self.client.get("{}/pokemon-shape/{}/".format(API_V2, pokemon_shape.pk)) self.assertEqual(response.status_code, status.HTTP_200_OK) @@ -4686,9 +4030,7 @@ def test_pokemon_shape_api(self): ) self.assertEqual( response.data["names"][0]["language"]["url"], - "{}{}/language/{}/".format( - TEST_HOST, API_V2, pokemon_shape_name.language.pk - ), + "{}{}/language/{}/".format(TEST_HOST, API_V2, pokemon_shape_name.language.pk), ) # awesome name params self.assertEqual( @@ -4701,33 +4043,23 @@ def test_pokemon_shape_api(self): ) self.assertEqual( response.data["awesome_names"][0]["language"]["url"], - "{}{}/language/{}/".format( - TEST_HOST, API_V2, pokemon_shape_name.language.pk - ), + "{}{}/language/{}/".format(TEST_HOST, API_V2, pokemon_shape_name.language.pk), ) # species params - self.assertEqual( - response.data["pokemon_species"][0]["name"], pokemon_species.name - ) + self.assertEqual(response.data["pokemon_species"][0]["name"], pokemon_species.name) self.assertEqual( response.data["pokemon_species"][0]["url"], "{}{}/pokemon-species/{}/".format(TEST_HOST, API_V2, pokemon_species.pk), ) def test_pokemon_species_api(self): - evolves_from_species = self.setup_pokemon_species_data( - name="evolves from pkmn spcs" - ) + evolves_from_species = self.setup_pokemon_species_data(name="evolves from pkmn spcs") pokemon_species = self.setup_pokemon_species_data( evolves_from_species=evolves_from_species, name="base pkmn spcs" ) - pokemon_species_name = self.setup_pokemon_species_name_data( - pokemon_species, name="base pkmn shp name" - ) - pokemon_species_form_description = ( - self.setup_pokemon_species_form_description_data( - pokemon_species, description="frm dscr for pkmn spcs" - ) + pokemon_species_name = self.setup_pokemon_species_name_data(pokemon_species, name="base pkmn shp name") + pokemon_species_form_description = self.setup_pokemon_species_form_description_data( + pokemon_species, description="frm dscr for pkmn spcs" ) pokemon_species_flavor_text = self.setup_pokemon_species_flavor_text_data( pokemon_species, flavor_text="flvr txt for pkmn spcs" @@ -4741,13 +4073,9 @@ def test_pokemon_species_api(self): ) egg_group = self.setup_egg_group_data(name="egg grp for pkmn spcs") - self.setup_pokemon_egg_group_data( - pokemon_species=pokemon_species, egg_group=egg_group - ) + self.setup_pokemon_egg_group_data(pokemon_species=pokemon_species, egg_group=egg_group) - pokemon = self.setup_pokemon_data( - pokemon_species=pokemon_species, name="pkm for base pkmn spcs" - ) + pokemon = self.setup_pokemon_data(pokemon_species=pokemon_species, name="pkm for base pkmn spcs") self.setup_pokemon_sprites_data(pokemon) self.setup_pokemon_cries_data(pokemon) @@ -4764,9 +4092,7 @@ def test_pokemon_species_api(self): self.assertEqual(response.data["order"], pokemon_species.order) self.assertEqual(response.data["capture_rate"], pokemon_species.capture_rate) self.assertEqual(response.data["gender_rate"], pokemon_species.gender_rate) - self.assertEqual( - response.data["base_happiness"], pokemon_species.base_happiness - ) + self.assertEqual(response.data["base_happiness"], pokemon_species.base_happiness) self.assertEqual(response.data["is_baby"], pokemon_species.is_baby) self.assertEqual(response.data["is_legendary"], pokemon_species.is_legendary) self.assertEqual(response.data["is_mythical"], pokemon_species.is_mythical) @@ -4776,9 +4102,7 @@ def test_pokemon_species_api(self): response.data["has_gender_differences"], pokemon_species.has_gender_differences, ) - self.assertEqual( - response.data["forms_switchable"], pokemon_species.forms_switchable - ) + self.assertEqual(response.data["forms_switchable"], pokemon_species.forms_switchable) # name params self.assertEqual(response.data["names"][0]["name"], pokemon_species_name.name) self.assertEqual( @@ -4787,28 +4111,20 @@ def test_pokemon_species_api(self): ) self.assertEqual( response.data["names"][0]["language"]["url"], - "{}{}/language/{}/".format( - TEST_HOST, API_V2, pokemon_species_name.language.pk - ), + "{}{}/language/{}/".format(TEST_HOST, API_V2, pokemon_species_name.language.pk), ) # growth rate params - self.assertEqual( - response.data["growth_rate"]["name"], pokemon_species.growth_rate.name - ) + self.assertEqual(response.data["growth_rate"]["name"], pokemon_species.growth_rate.name) self.assertEqual( response.data["growth_rate"]["url"], - "{}{}/growth-rate/{}/".format( - TEST_HOST, API_V2, pokemon_species.growth_rate.pk - ), + "{}{}/growth-rate/{}/".format(TEST_HOST, API_V2, pokemon_species.growth_rate.pk), ) # dex number params self.assertEqual( response.data["pokedex_numbers"][0]["entry_number"], dex_number.pokedex_number, ) - self.assertEqual( - response.data["pokedex_numbers"][0]["pokedex"]["name"], pokedex.name - ) + self.assertEqual(response.data["pokedex_numbers"][0]["pokedex"]["name"], pokedex.name) self.assertEqual( response.data["pokedex_numbers"][0]["pokedex"]["url"], "{}{}/pokedex/{}/".format(TEST_HOST, API_V2, pokedex.pk), @@ -4820,73 +4136,47 @@ def test_pokemon_species_api(self): "{}{}/egg-group/{}/".format(TEST_HOST, API_V2, egg_group.pk), ) # generation params - self.assertEqual( - response.data["generation"]["name"], pokemon_species.generation.name - ) + self.assertEqual(response.data["generation"]["name"], pokemon_species.generation.name) self.assertEqual( response.data["generation"]["url"], - "{}{}/generation/{}/".format( - TEST_HOST, API_V2, pokemon_species.generation.pk - ), + "{}{}/generation/{}/".format(TEST_HOST, API_V2, pokemon_species.generation.pk), ) # color params - self.assertEqual( - response.data["color"]["name"], pokemon_species.pokemon_color.name - ) + self.assertEqual(response.data["color"]["name"], pokemon_species.pokemon_color.name) self.assertEqual( response.data["color"]["url"], - "{}{}/pokemon-color/{}/".format( - TEST_HOST, API_V2, pokemon_species.pokemon_color.pk - ), + "{}{}/pokemon-color/{}/".format(TEST_HOST, API_V2, pokemon_species.pokemon_color.pk), ) # shape params - self.assertEqual( - response.data["shape"]["name"], pokemon_species.pokemon_shape.name - ) + self.assertEqual(response.data["shape"]["name"], pokemon_species.pokemon_shape.name) self.assertEqual( response.data["shape"]["url"], - "{}{}/pokemon-shape/{}/".format( - TEST_HOST, API_V2, pokemon_species.pokemon_shape.pk - ), + "{}{}/pokemon-shape/{}/".format(TEST_HOST, API_V2, pokemon_species.pokemon_shape.pk), ) # habitat params - self.assertEqual( - response.data["habitat"]["name"], pokemon_species.pokemon_habitat.name - ) + self.assertEqual(response.data["habitat"]["name"], pokemon_species.pokemon_habitat.name) self.assertEqual( response.data["habitat"]["url"], - "{}{}/pokemon-habitat/{}/".format( - TEST_HOST, API_V2, pokemon_species.pokemon_habitat.pk - ), + "{}{}/pokemon-habitat/{}/".format(TEST_HOST, API_V2, pokemon_species.pokemon_habitat.pk), ) # evolves from params - self.assertEqual( - response.data["evolves_from_species"]["name"], evolves_from_species.name - ) + self.assertEqual(response.data["evolves_from_species"]["name"], evolves_from_species.name) self.assertEqual( response.data["evolves_from_species"]["url"], - "{}{}/pokemon-species/{}/".format( - TEST_HOST, API_V2, evolves_from_species.pk - ), + "{}{}/pokemon-species/{}/".format(TEST_HOST, API_V2, evolves_from_species.pk), ) # genus params - self.assertEqual( - response.data["genera"][0]["genus"], pokemon_species_name.genus - ) + self.assertEqual(response.data["genera"][0]["genus"], pokemon_species_name.genus) self.assertEqual( response.data["genera"][0]["language"]["name"], pokemon_species_name.language.name, ) self.assertEqual( response.data["genera"][0]["language"]["url"], - "{}{}/language/{}/".format( - TEST_HOST, API_V2, pokemon_species_name.language.pk - ), + "{}{}/language/{}/".format(TEST_HOST, API_V2, pokemon_species_name.language.pk), ) # pokemon varieties params - self.assertEqual( - response.data["varieties"][0]["is_default"], pokemon.is_default - ) + self.assertEqual(response.data["varieties"][0]["is_default"], pokemon.is_default) self.assertEqual(response.data["varieties"][0]["pokemon"]["name"], pokemon.name) self.assertEqual( response.data["varieties"][0]["pokemon"]["url"], @@ -4903,9 +4193,7 @@ def test_pokemon_species_api(self): ) self.assertEqual( response.data["form_descriptions"][0]["language"]["url"], - "{}{}/language/{}/".format( - TEST_HOST, API_V2, pokemon_species_form_description.language.pk - ), + "{}{}/language/{}/".format(TEST_HOST, API_V2, pokemon_species_form_description.language.pk), ) # flavor text params self.assertEqual( @@ -4918,9 +4206,7 @@ def test_pokemon_species_api(self): ) self.assertEqual( response.data["flavor_text_entries"][0]["language"]["url"], - "{}{}/language/{}/".format( - TEST_HOST, API_V2, pokemon_species_flavor_text.language.pk - ), + "{}{}/language/{}/".format(TEST_HOST, API_V2, pokemon_species_flavor_text.language.pk), ) self.assertEqual( response.data["flavor_text_entries"][0]["version"]["name"], @@ -4928,14 +4214,10 @@ def test_pokemon_species_api(self): ) self.assertEqual( response.data["flavor_text_entries"][0]["version"]["url"], - "{}{}/version/{}/".format( - TEST_HOST, API_V2, pokemon_species_flavor_text.version.pk - ), + "{}{}/version/{}/".format(TEST_HOST, API_V2, pokemon_species_flavor_text.version.pk), ) # pal park params - self.assertEqual( - response.data["pal_park_encounters"][0]["base_score"], pal_park.base_score - ) + self.assertEqual(response.data["pal_park_encounters"][0]["base_score"], pal_park.base_score) self.assertEqual(response.data["pal_park_encounters"][0]["rate"], pal_park.rate) self.assertEqual( response.data["pal_park_encounters"][0]["area"]["name"], @@ -4943,49 +4225,31 @@ def test_pokemon_species_api(self): ) self.assertEqual( response.data["pal_park_encounters"][0]["area"]["url"], - "{}{}/pal-park-area/{}/".format( - TEST_HOST, API_V2, pal_park.pal_park_area.pk - ), + "{}{}/pal-park-area/{}/".format(TEST_HOST, API_V2, pal_park.pal_park_area.pk), ) def test_pokemon_api(self): - pokemon_species = self.setup_pokemon_species_data( - name="pkmn spcs for base pkmn" - ) - pokemon = self.setup_pokemon_data( - pokemon_species=pokemon_species, name="base pkm" - ) - pokemon_form = self.setup_pokemon_form_data( - pokemon=pokemon, name="pkm form for base pkmn" - ) + pokemon_species = self.setup_pokemon_species_data(name="pkmn spcs for base pkmn") + pokemon = self.setup_pokemon_data(pokemon_species=pokemon_species, name="base pkm") + pokemon_form = self.setup_pokemon_form_data(pokemon=pokemon, name="pkm form for base pkmn") generation = self.setup_generation_data(name="base gen") pokemon_ability = self.setup_pokemon_ability_data(pokemon=pokemon) - pokemon_past_ability = self.setup_pokemon_past_ability_data( - pokemon=pokemon, generation=generation - ) + pokemon_past_ability = self.setup_pokemon_past_ability_data(pokemon=pokemon, generation=generation) pokemon_stat = self.setup_pokemon_stat_data(pokemon=pokemon) - pokemon_past_stat = self.setup_pokemon_past_stat_data( - pokemon=pokemon, generation=generation - ) + pokemon_past_stat = self.setup_pokemon_past_stat_data(pokemon=pokemon, generation=generation) pokemon_type = self.setup_pokemon_type_data(pokemon=pokemon) - pokemon_past_type = self.setup_pokemon_past_type_data( - pokemon=pokemon, generation=generation - ) + pokemon_past_type = self.setup_pokemon_past_type_data(pokemon=pokemon, generation=generation) pokemon_item = self.setup_pokemon_item_data(pokemon=pokemon) pokemon_sprites = self.setup_pokemon_sprites_data(pokemon=pokemon) pokemon_cries = self.setup_pokemon_cries_data(pokemon, latest=True, legacy=True) - pokemon_game_index = self.setup_pokemon_game_index_data( - pokemon=pokemon, game_index=10 - ) + pokemon_game_index = self.setup_pokemon_game_index_data(pokemon=pokemon, game_index=10) # To test issue #85, we will create one move that has multiple # learn levels in different version groups. Later, we'll # assert that we only got one move record back. pokemon_move = self.setup_move_data(name="mv for pkmn") pokemon_moves = [] for move in range(0, 4): - version_group = self.setup_version_group_data( - name="ver grp " + str(move) + " for pkmn" - ) + version_group = self.setup_version_group_data(name="ver grp " + str(move) + " for pkmn") new_move = self.setup_pokemon_move_data( pokemon=pokemon, move=pokemon_move, @@ -4994,13 +4258,9 @@ def test_pokemon_api(self): ) pokemon_moves.append(new_move) - encounter_method = self.setup_encounter_method_data( - name="encntr mthd for lctn area" - ) + encounter_method = self.setup_encounter_method_data(name="encntr mthd for lctn area") location_area1 = self.setup_location_area_data(name="lctn1 area for base pkmn") - encounter_slot1 = self.setup_encounter_slot_data( - encounter_method, slot=1, rarity=30 - ) + encounter_slot1 = self.setup_encounter_slot_data(encounter_method, slot=1, rarity=30) self.setup_encounter_data( location_area=location_area1, pokemon=pokemon, @@ -5009,9 +4269,7 @@ def test_pokemon_api(self): max_level=35, ) location_area2 = self.setup_location_area_data(name="lctn2 area for base pkmn") - encounter_slot2 = self.setup_encounter_slot_data( - encounter_method, slot=2, rarity=40 - ) + encounter_slot2 = self.setup_encounter_slot_data(encounter_method, slot=2, rarity=40) self.setup_encounter_data( location_area=location_area2, pokemon=pokemon, @@ -5019,9 +4277,7 @@ def test_pokemon_api(self): min_level=32, max_level=36, ) - response = self.client.get( - "{}/pokemon/{}/".format(API_V2, pokemon.pk), headers={"host": "testserver"} - ) + response = self.client.get("{}/pokemon/{}/".format(API_V2, pokemon.pk), headers={"host": "testserver"}) self.assertEqual(response.status_code, status.HTTP_200_OK) @@ -5040,9 +4296,7 @@ def test_pokemon_api(self): "{}{}/pokemon-species/{}/".format(TEST_HOST, API_V2, pokemon_species.pk), ) # abilities params - self.assertEqual( - response.data["abilities"][0]["is_hidden"], pokemon_ability.is_hidden - ) + self.assertEqual(response.data["abilities"][0]["is_hidden"], pokemon_ability.is_hidden) self.assertEqual(response.data["abilities"][0]["slot"], pokemon_ability.slot) self.assertEqual( response.data["abilities"][0]["ability"]["name"], @@ -5060,34 +4314,24 @@ def test_pokemon_api(self): ) self.assertEqual( past_abilities_obj["generation"]["url"], - "{}{}/generation/{}/".format( - TEST_HOST, API_V2, pokemon_past_ability.generation.pk - ), + "{}{}/generation/{}/".format(TEST_HOST, API_V2, pokemon_past_ability.generation.pk), ) past_abilities_abilities_obj = past_abilities_obj["abilities"][0] - self.assertEqual( - past_abilities_abilities_obj["is_hidden"], pokemon_past_ability.is_hidden - ) - self.assertEqual( - past_abilities_abilities_obj["slot"], pokemon_past_ability.slot - ) + self.assertEqual(past_abilities_abilities_obj["is_hidden"], pokemon_past_ability.is_hidden) + self.assertEqual(past_abilities_abilities_obj["slot"], pokemon_past_ability.slot) self.assertEqual( past_abilities_abilities_obj["ability"]["name"], pokemon_past_ability.ability.name, ) self.assertEqual( past_abilities_abilities_obj["ability"]["url"], - "{}{}/ability/{}/".format( - TEST_HOST, API_V2, pokemon_past_ability.ability.pk - ), + "{}{}/ability/{}/".format(TEST_HOST, API_V2, pokemon_past_ability.ability.pk), ) # stat params self.assertEqual(response.data["stats"][0]["base_stat"], pokemon_stat.base_stat) self.assertEqual(response.data["stats"][0]["effort"], pokemon_stat.effort) - self.assertEqual( - response.data["stats"][0]["stat"]["name"], pokemon_stat.stat.name - ) + self.assertEqual(response.data["stats"][0]["stat"]["name"], pokemon_stat.stat.name) self.assertEqual( response.data["stats"][0]["stat"]["url"], "{}{}/stat/{}/".format(TEST_HOST, API_V2, pokemon_stat.stat.pk), @@ -5100,56 +4344,42 @@ def test_pokemon_api(self): ) self.assertEqual( past_stats_obj["generation"]["url"], - "{}{}/generation/{}/".format( - TEST_HOST, API_V2, pokemon_past_stat.generation.pk - ), + "{}{}/generation/{}/".format(TEST_HOST, API_V2, pokemon_past_stat.generation.pk), ) past_stats_stats_obj = past_stats_obj["stats"][0] self.assertEqual(past_stats_stats_obj["base_stat"], pokemon_past_stat.base_stat) self.assertEqual(past_stats_stats_obj["effort"], pokemon_past_stat.effort) - self.assertEqual( - past_stats_stats_obj["stat"]["name"], pokemon_past_stat.stat.name - ) + self.assertEqual(past_stats_stats_obj["stat"]["name"], pokemon_past_stat.stat.name) self.assertEqual( past_stats_stats_obj["stat"]["url"], "{}{}/stat/{}/".format(TEST_HOST, API_V2, pokemon_past_stat.stat.pk), ) # type params self.assertEqual(response.data["types"][0]["slot"], pokemon_type.slot) - self.assertEqual( - response.data["types"][0]["type"]["name"], pokemon_type.type.name - ) + self.assertEqual(response.data["types"][0]["type"]["name"], pokemon_type.type.name) self.assertEqual( response.data["types"][0]["type"]["url"], "{}{}/type/{}/".format(TEST_HOST, API_V2, pokemon_type.type.pk), ) # past type params past_types_obj = response.data["past_types"][0] - self.assertEqual( - past_types_obj["generation"]["name"], pokemon_past_type.generation.name - ) + self.assertEqual(past_types_obj["generation"]["name"], pokemon_past_type.generation.name) self.assertEqual( past_types_obj["generation"]["url"], - "{}{}/generation/{}/".format( - TEST_HOST, API_V2, pokemon_past_type.generation.pk - ), + "{}{}/generation/{}/".format(TEST_HOST, API_V2, pokemon_past_type.generation.pk), ) past_types_types_obj = past_types_obj["types"][0] self.assertEqual(past_types_types_obj["slot"], pokemon_past_type.slot) - self.assertEqual( - past_types_types_obj["type"]["name"], pokemon_past_type.type.name - ) + self.assertEqual(past_types_types_obj["type"]["name"], pokemon_past_type.type.name) self.assertEqual( past_types_types_obj["type"]["url"], "{}{}/type/{}/".format(TEST_HOST, API_V2, pokemon_past_type.type.pk), ) # items params - self.assertEqual( - response.data["held_items"][0]["item"]["name"], pokemon_item.item.name - ) + self.assertEqual(response.data["held_items"][0]["item"]["name"], pokemon_item.item.name) self.assertEqual( response.data["held_items"][0]["item"]["url"], "{}{}/item/{}/".format(TEST_HOST, API_V2, pokemon_item.item.pk), @@ -5197,9 +4427,7 @@ def test_pokemon_api(self): actual = version["version_group"]["name"] self.assertEqual(expected, actual) # Version Group URL - expected = "{}{}/version-group/{}/".format( - TEST_HOST, API_V2, pokemon_moves[i].version_group.pk - ) + expected = "{}{}/version-group/{}/".format(TEST_HOST, API_V2, pokemon_moves[i].version_group.pk) actual = version["version_group"]["url"] self.assertEqual(expected, actual) # Learn Method Name @@ -5207,9 +4435,7 @@ def test_pokemon_api(self): actual = version["move_learn_method"]["name"] self.assertEqual(expected, actual) # Learn Method URL - expected = "{}{}/move-learn-method/{}/".format( - TEST_HOST, API_V2, pokemon_moves[i].move_learn_method.pk - ) + expected = "{}{}/move-learn-method/{}/".format(TEST_HOST, API_V2, pokemon_moves[i].move_learn_method.pk) actual = version["move_learn_method"]["url"] self.assertEqual(expected, actual) # game indices params @@ -5285,9 +4511,7 @@ def test_pokemon_api(self): def test_pokemon_form_api(self): pokemon_species = self.setup_pokemon_species_data() pokemon = self.setup_pokemon_data(pokemon_species=pokemon_species) - pokemon_form = self.setup_pokemon_form_data( - pokemon=pokemon, name="pkm form for base pkmn" - ) + pokemon_form = self.setup_pokemon_form_data(pokemon=pokemon, name="pkm form for base pkmn") pokemon_form_sprites = self.setup_pokemon_form_sprites_data(pokemon_form) pokemon_form_type = self.setup_pokemon_form_type_data(pokemon_form) pokemon_form_condition = self.setup_pokemon_form_condition_data(pokemon_form) @@ -5315,14 +4539,10 @@ def test_pokemon_form_api(self): "{}{}/pokemon/{}/".format(TEST_HOST, API_V2, pokemon.pk), ) # version group params - self.assertEqual( - response.data["version_group"]["name"], pokemon_form.version_group.name - ) + self.assertEqual(response.data["version_group"]["name"], pokemon_form.version_group.name) self.assertEqual( response.data["version_group"]["url"], - "{}{}/version-group/{}/".format( - TEST_HOST, API_V2, pokemon_form.version_group.pk - ), + "{}{}/version-group/{}/".format(TEST_HOST, API_V2, pokemon_form.version_group.pk), ) sprites_data = json.loads(pokemon_form_sprites.sprites) @@ -5335,9 +4555,7 @@ def test_pokemon_form_api(self): self.assertEqual(sprites_data["back_default"], None) # type params self.assertEqual(response.data["types"][0]["slot"], pokemon_form_type.slot) - self.assertEqual( - response.data["types"][0]["type"]["name"], pokemon_form_type.type.name - ) + self.assertEqual(response.data["types"][0]["type"]["name"], pokemon_form_type.type.name) self.assertEqual( response.data["types"][0]["type"]["url"], "{}{}/type/{}/".format(TEST_HOST, API_V2, pokemon_form_type.type.pk), @@ -5359,19 +4577,11 @@ def test_pokemon_form_api(self): # Evolution test def test_evolution_trigger_api(self): evolution_trigger = self.setup_evolution_trigger_data(name="base evltn trgr") - evolution_trigger_name = self.setup_evolution_trigger_name_data( - evolution_trigger, name="base evltn trgr name" - ) - pokemon_species = self.setup_pokemon_species_data( - name="pkmn spcs for base evltn trgr" - ) - self.setup_pokemon_evolution_data( - evolved_species=pokemon_species, evolution_trigger=evolution_trigger - ) + evolution_trigger_name = self.setup_evolution_trigger_name_data(evolution_trigger, name="base evltn trgr name") + pokemon_species = self.setup_pokemon_species_data(name="pkmn spcs for base evltn trgr") + self.setup_pokemon_evolution_data(evolved_species=pokemon_species, evolution_trigger=evolution_trigger) - response = self.client.get( - "{}/evolution-trigger/{}/".format(API_V2, evolution_trigger.pk) - ) + response = self.client.get("{}/evolution-trigger/{}/".format(API_V2, evolution_trigger.pk)) self.assertEqual(response.status_code, status.HTTP_200_OK) @@ -5386,14 +4596,10 @@ def test_evolution_trigger_api(self): ) self.assertEqual( response.data["names"][0]["language"]["url"], - "{}{}/language/{}/".format( - TEST_HOST, API_V2, evolution_trigger_name.language.pk - ), + "{}{}/language/{}/".format(TEST_HOST, API_V2, evolution_trigger_name.language.pk), ) # pokemon species params - self.assertEqual( - response.data["pokemon_species"][0]["name"], pokemon_species.name - ) + self.assertEqual(response.data["pokemon_species"][0]["name"], pokemon_species.name) self.assertEqual( response.data["pokemon_species"][0]["url"], "{}{}/pokemon-species/{}/".format(TEST_HOST, API_V2, pokemon_species.pk), @@ -5401,13 +4607,9 @@ def test_evolution_trigger_api(self): def test_evolution_chain_api(self): baby_trigger_item = self.setup_item_data(name="bby itm for evo chn") - evolution_chain = self.setup_evolution_chain_data( - baby_trigger_item=baby_trigger_item - ) + evolution_chain = self.setup_evolution_chain_data(baby_trigger_item=baby_trigger_item) - baby = self.setup_pokemon_species_data( - name="bby for evo chn", is_baby=True, evolution_chain=evolution_chain - ) + baby = self.setup_pokemon_species_data(name="bby for evo chn", is_baby=True, evolution_chain=evolution_chain) basic = self.setup_pokemon_species_data( name="bsc for evo chn", @@ -5415,9 +4617,7 @@ def test_evolution_chain_api(self): evolution_chain=evolution_chain, ) basic_location = self.setup_location_data(name="lctn for bsc evo chn") - basic_evolution = self.setup_pokemon_evolution_data( - evolved_species=basic, min_level=5, location=basic_location - ) + basic_evolution = self.setup_pokemon_evolution_data(evolved_species=basic, min_level=5, location=basic_location) stage_one = self.setup_pokemon_species_data( name="stg one for evo chn", @@ -5453,9 +4653,7 @@ def test_evolution_chain_api(self): party_type=stage_two_second_party_type, ) - response = self.client.get( - "{}/evolution-chain/{}/".format(API_V2, evolution_chain.pk) - ) + response = self.client.get("{}/evolution-chain/{}/".format(API_V2, evolution_chain.pk)) self.assertEqual(response.status_code, status.HTTP_200_OK) @@ -5468,9 +4666,7 @@ def test_evolution_chain_api(self): # base params self.assertEqual(response.data["id"], evolution_chain.pk) # baby trigger params - self.assertEqual( - response.data["baby_trigger_item"]["name"], baby_trigger_item.name - ) + self.assertEqual(response.data["baby_trigger_item"]["name"], baby_trigger_item.name) self.assertEqual( response.data["baby_trigger_item"]["url"], "{}{}/item/{}/".format(TEST_HOST, API_V2, baby_trigger_item.pk), @@ -5489,12 +4685,8 @@ def test_evolution_chain_api(self): basic_data["species"]["url"], "{}{}/pokemon-species/{}/".format(TEST_HOST, API_V2, basic.pk), ) - self.assertEqual( - basic_data["evolution_details"][0]["min_level"], basic_evolution.min_level - ) - self.assertEqual( - basic_data["evolution_details"][0]["location"]["name"], basic_location.name - ) + self.assertEqual(basic_data["evolution_details"][0]["min_level"], basic_evolution.min_level) + self.assertEqual(basic_data["evolution_details"][0]["location"]["name"], basic_location.name) self.assertEqual( basic_data["evolution_details"][0]["location"]["url"], "{}{}/location/{}/".format(TEST_HOST, API_V2, basic_location.pk), @@ -5539,9 +4731,7 @@ def test_evolution_chain_api(self): ) # stage two second params self.assertEqual(stage_two_second_data["is_baby"], stage_two_second.is_baby) - self.assertEqual( - stage_two_second_data["species"]["name"], stage_two_second.name - ) + self.assertEqual(stage_two_second_data["species"]["name"], stage_two_second.name) self.assertEqual( stage_two_second_data["species"]["url"], "{}{}/pokemon-species/{}/".format(TEST_HOST, API_V2, stage_two_second.pk), @@ -5574,40 +4764,30 @@ def test_evolution_chain_api_wurmple_bugfix(self): evolves_from_species=basic, evolution_chain=evolution_chain, ) - stage_one_first_evolution = self.setup_pokemon_evolution_data( - evolved_species=stage_one_first, min_level=7 - ) + stage_one_first_evolution = self.setup_pokemon_evolution_data(evolved_species=stage_one_first, min_level=7) stage_two_first = self.setup_pokemon_species_data( name="beautifly", evolves_from_species=stage_one_first, evolution_chain=evolution_chain, ) - stage_two_first_evolution = self.setup_pokemon_evolution_data( - evolved_species=stage_two_first, min_level=10 - ) + stage_two_first_evolution = self.setup_pokemon_evolution_data(evolved_species=stage_two_first, min_level=10) stage_one_second = self.setup_pokemon_species_data( name="cascoon", evolves_from_species=basic, evolution_chain=evolution_chain, ) - stage_one_second_evolution = self.setup_pokemon_evolution_data( - evolved_species=stage_one_second, min_level=7 - ) + stage_one_second_evolution = self.setup_pokemon_evolution_data(evolved_species=stage_one_second, min_level=7) stage_two_second = self.setup_pokemon_species_data( name="dustox", evolves_from_species=stage_one_second, evolution_chain=evolution_chain, ) - stage_two_second_evolution = self.setup_pokemon_evolution_data( - evolved_species=stage_two_second, min_level=10 - ) + stage_two_second_evolution = self.setup_pokemon_evolution_data(evolved_species=stage_two_second, min_level=10) - response = self.client.get( - "{}/evolution-chain/{}/".format(API_V2, evolution_chain.pk) - ) + response = self.client.get("{}/evolution-chain/{}/".format(API_V2, evolution_chain.pk)) self.assertEqual(response.status_code, status.HTTP_200_OK) @@ -5627,13 +4807,9 @@ def test_evolution_chain_api_wurmple_bugfix(self): # Encounter Tests def test_encounter_method_api(self): encounter_method = self.setup_encounter_method_data(name="base encntr mthd") - encounter_method_name = self.setup_encounter_method_name_data( - encounter_method, name="base encntr mthd name" - ) + encounter_method_name = self.setup_encounter_method_name_data(encounter_method, name="base encntr mthd name") - response = self.client.get( - "{}/encounter-method/{}/".format(API_V2, encounter_method.pk) - ) + response = self.client.get("{}/encounter-method/{}/".format(API_V2, encounter_method.pk)) self.assertEqual(response.status_code, status.HTTP_200_OK) @@ -5649,15 +4825,11 @@ def test_encounter_method_api(self): ) self.assertEqual( response.data["names"][0]["language"]["url"], - "{}{}/language/{}/".format( - TEST_HOST, API_V2, encounter_method_name.language.pk - ), + "{}{}/language/{}/".format(TEST_HOST, API_V2, encounter_method_name.language.pk), ) def test_encounter_condition_value_api(self): - encounter_condition = self.setup_encounter_condition_data( - name="encntr cndtn for base encntr cndtn vlu" - ) + encounter_condition = self.setup_encounter_condition_data(name="encntr cndtn for base encntr cndtn vlu") encounter_condition_value = self.setup_encounter_condition_value_data( encounter_condition, name="base encntr cndtn vlu" ) @@ -5665,11 +4837,7 @@ def test_encounter_condition_value_api(self): encounter_condition_value, name="base encntr cndtn vlu name" ) - response = self.client.get( - "{}/encounter-condition-value/{}/".format( - API_V2, encounter_condition_value.pk - ) - ) + response = self.client.get("{}/encounter-condition-value/{}/".format(API_V2, encounter_condition_value.pk)) self.assertEqual(response.status_code, status.HTTP_200_OK) @@ -5677,32 +4845,24 @@ def test_encounter_condition_value_api(self): self.assertEqual(response.data["id"], encounter_condition_value.pk) self.assertEqual(response.data["name"], encounter_condition_value.name) # name params - self.assertEqual( - response.data["names"][0]["name"], encounter_condition_value_name.name - ) + self.assertEqual(response.data["names"][0]["name"], encounter_condition_value_name.name) self.assertEqual( response.data["names"][0]["language"]["name"], encounter_condition_value_name.language.name, ) self.assertEqual( response.data["names"][0]["language"]["url"], - "{}{}/language/{}/".format( - TEST_HOST, API_V2, encounter_condition_value_name.language.pk - ), + "{}{}/language/{}/".format(TEST_HOST, API_V2, encounter_condition_value_name.language.pk), ) # condition params self.assertEqual(response.data["condition"]["name"], encounter_condition.name) self.assertEqual( response.data["condition"]["url"], - "{}{}/encounter-condition/{}/".format( - TEST_HOST, API_V2, encounter_condition.pk - ), + "{}{}/encounter-condition/{}/".format(TEST_HOST, API_V2, encounter_condition.pk), ) def test_encounter_condition_api(self): - encounter_condition = self.setup_encounter_condition_data( - name="base encntr cndtn" - ) + encounter_condition = self.setup_encounter_condition_data(name="base encntr cndtn") encounter_condition_name = self.setup_encounter_condition_name_data( encounter_condition, name="base encntr cndtn name" ) @@ -5712,9 +4872,7 @@ def test_encounter_condition_api(self): is_default=True, ) - response = self.client.get( - "{}/encounter-condition/{}/".format(API_V2, encounter_condition.pk) - ) + response = self.client.get("{}/encounter-condition/{}/".format(API_V2, encounter_condition.pk)) self.assertEqual(response.status_code, status.HTTP_200_OK) @@ -5722,36 +4880,26 @@ def test_encounter_condition_api(self): self.assertEqual(response.data["id"], encounter_condition.pk) self.assertEqual(response.data["name"], encounter_condition.name) # name params - self.assertEqual( - response.data["names"][0]["name"], encounter_condition_name.name - ) + self.assertEqual(response.data["names"][0]["name"], encounter_condition_name.name) self.assertEqual( response.data["names"][0]["language"]["name"], encounter_condition_name.language.name, ) self.assertEqual( response.data["names"][0]["language"]["url"], - "{}{}/language/{}/".format( - TEST_HOST, API_V2, encounter_condition_name.language.pk - ), + "{}{}/language/{}/".format(TEST_HOST, API_V2, encounter_condition_name.language.pk), ) # value params - self.assertEqual( - response.data["values"][0]["name"], encounter_condition_value.name - ) + self.assertEqual(response.data["values"][0]["name"], encounter_condition_value.name) self.assertEqual( response.data["values"][0]["url"], - "{}{}/encounter-condition-value/{}/".format( - TEST_HOST, API_V2, encounter_condition_value.pk - ), + "{}{}/encounter-condition-value/{}/".format(TEST_HOST, API_V2, encounter_condition_value.pk), ) # Pal Park Tests def test_pal_park_area_api(self): pal_park_area = self.setup_pal_park_area_data(name="base pl prk area") - pal_park_area_name = self.setup_pal_park_area_name_data( - pal_park_area, name="base pl prk area nm" - ) + pal_park_area_name = self.setup_pal_park_area_name_data(pal_park_area, name="base pl prk area nm") pokemon_species = self.setup_pokemon_species_data(name="pkmn spcs for pl prk") pal_park = self.setup_pal_park_data( pal_park_area=pal_park_area, @@ -5760,9 +4908,7 @@ def test_pal_park_area_api(self): rate=20, ) - response = self.client.get( - "{}/pal-park-area/{}/".format(API_V2, pal_park_area.pk) - ) + response = self.client.get("{}/pal-park-area/{}/".format(API_V2, pal_park_area.pk)) self.assertEqual(response.status_code, status.HTTP_200_OK) @@ -5777,14 +4923,10 @@ def test_pal_park_area_api(self): ) self.assertEqual( response.data["names"][0]["language"]["url"], - "{}{}/language/{}/".format( - TEST_HOST, API_V2, pal_park_area_name.language.pk - ), + "{}{}/language/{}/".format(TEST_HOST, API_V2, pal_park_area_name.language.pk), ) # encounter params - self.assertEqual( - response.data["pokemon_encounters"][0]["base_score"], pal_park.base_score - ) + self.assertEqual(response.data["pokemon_encounters"][0]["base_score"], pal_park.base_score) self.assertEqual(response.data["pokemon_encounters"][0]["rate"], pal_park.rate) self.assertEqual( response.data["pokemon_encounters"][0]["pokemon_species"]["name"], @@ -5804,43 +4946,27 @@ def test_id_range_api(self): # Test if API endpoints are case-insensitive def test_case_insensitive_api(self): # Set up pokemon data - pokemon_species = self.setup_pokemon_species_data( - name="pkmn spcs for base pkmn" - ) - pokemon = self.setup_pokemon_data( - pokemon_species=pokemon_species, name="base pkm" - ) - pokemon_form = self.setup_pokemon_form_data( - pokemon=pokemon, name="pkm form for base pkmn" - ) + pokemon_species = self.setup_pokemon_species_data(name="pkmn spcs for base pkmn") + pokemon = self.setup_pokemon_data(pokemon_species=pokemon_species, name="base pkm") + pokemon_form = self.setup_pokemon_form_data(pokemon=pokemon, name="pkm form for base pkmn") generation = self.setup_generation_data(name="base gen") pokemon_ability = self.setup_pokemon_ability_data(pokemon=pokemon) - pokemon_past_ability = self.setup_pokemon_past_ability_data( - pokemon=pokemon, generation=generation - ) + pokemon_past_ability = self.setup_pokemon_past_ability_data(pokemon=pokemon, generation=generation) pokemon_stat = self.setup_pokemon_stat_data(pokemon=pokemon) - pokemon_past_stat = self.setup_pokemon_past_stat_data( - pokemon=pokemon, generation=generation - ) + pokemon_past_stat = self.setup_pokemon_past_stat_data(pokemon=pokemon, generation=generation) pokemon_type = self.setup_pokemon_type_data(pokemon=pokemon) - pokemon_past_type = self.setup_pokemon_past_type_data( - pokemon=pokemon, generation=generation - ) + pokemon_past_type = self.setup_pokemon_past_type_data(pokemon=pokemon, generation=generation) pokemon_item = self.setup_pokemon_item_data(pokemon=pokemon) pokemon_sprites = self.setup_pokemon_sprites_data(pokemon=pokemon) pokemon_cries = self.setup_pokemon_cries_data(pokemon, latest=True, legacy=True) - pokemon_game_index = self.setup_pokemon_game_index_data( - pokemon=pokemon, game_index=10 - ) + pokemon_game_index = self.setup_pokemon_game_index_data(pokemon=pokemon, game_index=10) # To test issue #85, we will create one move that has multiple # learn levels in different version groups. Later, we'll # assert that we only got one move record back. pokemon_move = self.setup_move_data(name="mv for pkmn") pokemon_moves = [] for move in range(0, 4): - version_group = self.setup_version_group_data( - name="ver grp " + str(move) + " for pkmn" - ) + version_group = self.setup_version_group_data(name="ver grp " + str(move) + " for pkmn") new_move = self.setup_pokemon_move_data( pokemon=pokemon, move=pokemon_move, @@ -5849,13 +4975,9 @@ def test_case_insensitive_api(self): ) pokemon_moves.append(new_move) - encounter_method = self.setup_encounter_method_data( - name="encntr mthd for lctn area" - ) + encounter_method = self.setup_encounter_method_data(name="encntr mthd for lctn area") location_area1 = self.setup_location_area_data(name="lctn1 area for base pkmn") - encounter_slot1 = self.setup_encounter_slot_data( - encounter_method, slot=1, rarity=30 - ) + encounter_slot1 = self.setup_encounter_slot_data(encounter_method, slot=1, rarity=30) self.setup_encounter_data( location_area=location_area1, pokemon=pokemon, @@ -5864,9 +4986,7 @@ def test_case_insensitive_api(self): max_level=35, ) location_area2 = self.setup_location_area_data(name="lctn2 area for base pkmn") - encounter_slot2 = self.setup_encounter_slot_data( - encounter_method, slot=2, rarity=40 - ) + encounter_slot2 = self.setup_encounter_slot_data(encounter_method, slot=2, rarity=40) self.setup_encounter_data( location_area=location_area2, pokemon=pokemon, From 937a96640b1fe7af365f6047f0494ba4e2e4ce4a Mon Sep 17 00:00:00 2001 From: Triyan Mukherjee Date: Sun, 12 Jul 2026 15:00:30 +0530 Subject: [PATCH 06/11] feat: Add pre-commit to circleci --- .circleci/config.yml | 3 +++ .pre-commit-config.yaml | 20 +++++++++++++++++--- CONTRIBUTING.md | 7 +++++++ Makefile | 6 ++++++ README.md | 10 ++++++++-- 5 files changed, 41 insertions(+), 5 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 82106cf43..7c3fc84bf 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -14,6 +14,9 @@ jobs: - run: name: Install deps command: make install + - run: + name: Pre-commit checks + command: SKIP=ruff-format,build-and-test pre-commit run --all-files --show-diff-on-failure - run: name: Format Check command: make format-check diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index d20cb55a1..be5904443 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -33,12 +33,26 @@ repos: - id: check-csv name: Check CSV entry: uv run ./Resources/scripts/check_csv.py - language: python + language: system args: [--encoding, utf-8] files: \.csv$ - id: ruff-format name: Ruff Format - entry: ruff format . - language: python + entry: uv run ruff format . + language: system types_or: [python, pyi] + + - id: build-and-test + name: Build and Test + entry: >- + python -c " + import subprocess, sys; + run = lambda cmd, inp=None: subprocess.run(cmd, input=inp, text=True).returncode == 0 or sys.exit(1); + run(['uv', 'run', 'manage.py', 'migrate', '--settings=config.local']); + run(['uv', 'run', 'manage.py', 'shell', '--settings=config.local'], inp='from data.v2.build import build_all; build_all()\n'); + run(['uv', 'run', 'manage.py', 'test', '--settings=config.local']) + " + language: system + pass_filenames: false + always_run: true diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c63eb2f8c..a03e87e19 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -18,6 +18,13 @@ git checkout -b my_new_branch ``` - Write some code, fix something, and add a test to prove that it works. **No pull request will be accepted without tests passing, or without new tests if new features are added.** +- Make sure your code passes the pre-commit hooks, if you have the hooks installed it should run automatically on commit. You can run them manually with: +```bash +make pre-commit +# or +uv run pre-commit run --all-files +``` + - Commit your code and push it to GitHub - [Open a new pull request](https://help.github.com/articles/creating-a-pull-request/) and describe the changes you have made. diff --git a/Makefile b/Makefile index e5259539e..471fa54ef 100755 --- a/Makefile +++ b/Makefile @@ -22,6 +22,12 @@ install: check-uv # Install requirements for local development install-base: check-uv # Install minimal requirements for runtime/pipeline environments uv sync --locked --no-dev +pre-commit-install: check-uv # Install pre-commit hooks + uv run pre-commit install + +pre-commit: check-uv # Run pre-commit hooks + uv run pre-commit run --all-files + setup: check-uv # Set up the project database uv run manage.py migrate ${local_config} diff --git a/README.md b/README.md index 5b70b384f..0cb73e848 100755 --- a/README.md +++ b/README.md @@ -38,14 +38,20 @@ A RESTful API for Pokémon - [pokeapi.co](https://pokeapi.co) - Download this source code into a working directory, be sure to use the flag `--recurse-submodules` to clone also our submodules. - Install [uv](https://docs.astral.sh/uv/getting-started/installation/) for Python environment management. - + - Install the requirements using the Makefile commands: - + ```sh make install # This will install all the required packages and libraries for using PokeAPI ``` +- Install the pre-commit hooks using the Makefile commands: + + ```sh + make pre-commit-install + ``` + - Set up the local development environment using the following command: ```sh From b14a8bc7ddccc9a45bce8997fca7e4e9026b1fd6 Mon Sep 17 00:00:00 2001 From: Triyan Mukherjee Date: Sun, 12 Jul 2026 15:02:41 +0530 Subject: [PATCH 07/11] fix: Update pre-commit hook args --- .pre-commit-config.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index be5904443..54b0ce19f 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -42,6 +42,7 @@ repos: entry: uv run ruff format . language: system types_or: [python, pyi] + pass_filenames: false - id: build-and-test name: Build and Test From 352b1343c1973ce36f8ccc2b3672f7bec1b21568 Mon Sep 17 00:00:00 2001 From: Triyan Mukherjee Date: Sun, 12 Jul 2026 15:06:52 +0530 Subject: [PATCH 08/11] fix: Update pre-commit hook args --- .circleci/config.yml | 2 +- .pre-commit-config.yaml | 1 + ruff.toml | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 7c3fc84bf..fc09a6196 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -16,7 +16,7 @@ jobs: command: make install - run: name: Pre-commit checks - command: SKIP=ruff-format,build-and-test pre-commit run --all-files --show-diff-on-failure + command: SKIP=ruff-format pre-commit run --all-files --show-diff-on-failure - run: name: Format Check command: make format-check diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 54b0ce19f..e3bb6fcdf 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -57,3 +57,4 @@ repos: language: system pass_filenames: false always_run: true + stages: [manual] diff --git a/ruff.toml b/ruff.toml index c38ae5bad..4e6fb552a 100644 --- a/ruff.toml +++ b/ruff.toml @@ -3,4 +3,4 @@ exclude = [ "**/scripts", "data/v2/cries", "data/v2/sprites", -] \ No newline at end of file +] From 0e8af534268330ed36b1aa060c216d968e8fe4e3 Mon Sep 17 00:00:00 2001 From: Triyan Mukherjee Date: Sun, 12 Jul 2026 15:09:25 +0530 Subject: [PATCH 09/11] chore: Run pre-commit formatting checks --- .dockerignore | 2 +- .github/ISSUE_TEMPLATE/bug_report.md | 2 +- .github/ISSUE_TEMPLATE/config.yml | 2 +- .github/ISSUE_TEMPLATE/feature_request.md | 2 +- .github/dependabot.yml | 2 +- .github/pull_request_template.md | 2 +- .github/workflows/docker-k8s.yml | 2 +- CONTRIBUTORS.txt | 2 +- Resources/gcp/api_v2_slo.sh | 2 +- .../kustomize/base/config/pokeapi.env.sample | 2 +- .../kustomize/base/secrets/graphql.env.sample | 2 +- .../base/secrets/postgres.env.sample | 2 +- Resources/kind/config-ga.yaml | 2 +- Resources/nginx/ssl/ssl.sample.conf | 2 +- Resources/scripts/data/gen8/read_swsh.py | 4 +- Resources/scripts/data/gen8/to_csv.py | 2 +- .../data/scraper_go/data/new_abilities.txt | 2 +- .../data/scraper_go/data/new_moves.txt | 2 +- .../data/scraper_go/data/new_pokemon.txt | 2 +- .../scripts/data/scraper_node/new_pokemons.js | 2 +- Resources/scripts/wait.sh | 2 +- data/v2/csv/ability_flavor_text.csv | 78 +- data/v2/csv/ability_prose.csv | 24 +- data/v2/csv/generations.csv | 2 +- data/v2/csv/item_flag_map.csv | 2 +- data/v2/csv/item_flavor_text.csv | 152 +- data/v2/csv/item_prose.csv | 176 +- data/v2/csv/location_area_prose.csv | 10 +- data/v2/csv/location_names.csv | 2 +- data/v2/csv/move_flavor_text.csv | 4314 ++++++++--------- data/v2/csv/move_names.csv | 4 +- data/v2/csv/pokedex_version_groups.csv | 2 +- data/v2/csv/pokedexes.csv | 2 +- data/v2/csv/pokemon_dex_numbers.csv | 2 +- data/v2/csv/pokemon_egg_groups.csv | 2 +- data/v2/csv/pokemon_species_flavor_text.csv | 252 +- data/v2/csv/pokemon_stats_past.csv | 2 +- data/v2/csv/region_names.csv | 2 +- docker-compose-dev.yml | 2 +- graphql/v1beta/examples/item_translations.gql | 2 +- .../v1beta2/examples/item_translations.gql | 2 +- 41 files changed, 2539 insertions(+), 2539 deletions(-) diff --git a/.dockerignore b/.dockerignore index cdc3406ad..0d764cf7c 100644 --- a/.dockerignore +++ b/.dockerignore @@ -27,4 +27,4 @@ docker-compose* target data/v2/cries data/v2/csv -data/v2/sprites \ No newline at end of file +data/v2/sprites diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 3209b8bfb..a20ec9587 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -7,7 +7,7 @@ about: Create a report to help us improve Thanks for contributing to the PokéAPI project. To make sure we're effective, please check the following: - Make sure your issue hasn't already been submitted on the issues tab. (It has search functionality!) -- If your issue is one of outdated API data, please note that we get our data from [veekun](https://github.com/veekun/pokedex/). If they are not up to date either, please look for or create an issue there. Otherwise, feel free to create an issue here. +- If your issue is one of outdated API data, please note that we get our data from [veekun](https://github.com/veekun/pokedex/). If they are not up to date either, please look for or create an issue there. Otherwise, feel free to create an issue here. - Provide a clear description of the issue. - Provide a clear description of the steps to reproduce. - Provide a clear description of the expected behavior. diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index f84c42c95..290759d95 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,4 +1,4 @@ - + blank_issues_enabled: false contact_links: - name: Question diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index 52e58f725..2afe0e5c4 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -7,7 +7,7 @@ about: Suggest an idea for this project diff --git a/.github/dependabot.yml b/.github/dependabot.yml index f07e7fd63..4b299d313 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -7,4 +7,4 @@ updates: - package-ecosystem: "docker" directory: "/Resources/docker/app" schedule: - interval: "monthly" \ No newline at end of file + interval: "monthly" diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index acac7f025..b07afc6f4 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,4 +1,4 @@ -