codecov[bot]: # [Codecov](https://codecov.io/gh/arnavb/pypokedex/pull/7?src=pr&el=h1) Report
> Merging [#7](https://codecov.io/gh/arnavb/pypokedex/pull/7?src=pr&el=desc) into [master](https://codecov.io/gh/arnavb/pypokedex/commit/1963ea43da7ca5d4dcec4c47b286d0992cd9895e?src=pr&el=desc) will **not change** coverage.
> The diff coverage is `n/a`.

[![Impacted file tree graph](https://codecov.io/gh/arnavb/pypokedex/pull/7/graphs/tree.svg?width=650&token=IdN3HmvKEy&height=150&src=pr)](https://codecov.io/gh/arnavb/pypokedex/pull/7?src=pr&el=tree)

```diff
@@          Coverage Diff          @@
##           master     #7   +/-   ##
=====================================
  Coverage     100%   100%           
=====================================
  Files           4      4           
  Lines         104    104           
  Branches       18     18           
=====================================
  Hits          104    104
```



------

[Continue to review full report at Codecov](https://codecov.io/gh/arnavb/pypokedex/pull/7?src=pr&el=continue).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/arnavb/pypokedex/pull/7?src=pr&el=footer). Last update [1963ea4...9b83485](https://codecov.io/gh/arnavb/pypokedex/pull/7?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).

diff --git a/.gitignore b/.gitignore
index 80aa5ff..38f584a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -132,3 +132,4 @@ pip-selfcheck.json
 # End of https://www.gitignore.io/api/python
 
 .vscode/
+.DS_Store
diff --git a/README.md b/README.md
index e358894..6832374 100644
--- a/README.md
+++ b/README.md
@@ -95,6 +95,8 @@ members are provided for its consumption:
     current move (according to PokeAPI).
   - `level` (`int`): The level the current Pokemon learns the current move if
     `learn_method` is `level-up`, `None` otherwise.
+- `sprites` (`Sprites`): Contains two dictionaries, `front` and `back` representing the respective
+  sprites of the current Pokemon. The keys in the dictionary are [Pokeapi sprite keys](https://pokeapi.co/docs/v2.html#pokemonsprites) without the direction prefix (e.g `back_default` is just `default` in the `back` dictionary).
 
 ### Member Functions
 
diff --git a/pypokedex/pokemon.py b/pypokedex/pokemon.py
index b3d1e1d..9188180 100644
--- a/pypokedex/pokemon.py
+++ b/pypokedex/pokemon.py
@@ -1,6 +1,6 @@
 from collections import defaultdict
 
-from typing import DefaultDict, List, NamedTuple
+from typing import DefaultDict, List, NamedTuple, Dict
 
 from pypokedex.exceptions import PyPokedexError
 
@@ -25,10 +25,14 @@ class Move(NamedTuple):
     level: int
 
 
+class Sprites(NamedTuple):
+    front: Dict[str, str]
+    back: Dict[str, str]
+
+
 class Pokemon:
     def __init__(self, json_data) -> None:
         """Loads and stores required pokemon data"""
-        # self._json_data = json_data # Store for repr
         try:
             self.dex = json_data["id"]
 
@@ -73,9 +77,18 @@ class Pokemon:
                         Move(move_name, learn_method, learn_level)
                     )
 
+            self.sprites: Sprites = Sprites(front={}, back={})
+            for sprite, url in json_data["sprites"].items():
+                sprite_direction, sprite_type = sprite.split("_", 1)
+
+                if sprite_direction == "front":
+                    self.sprites.front[sprite_type] = url
+                else:
+                    self.sprites.back[sprite_type] = url
+
         except KeyError as error:
             raise PyPokedexError(
-                "A required piece of data was not found for" "the current Pokemon!"
+                "A required piece of data was not found for the current Pokemon!"
             ) from error
 
     def exists_in(self, game: str) -> bool:
@@ -87,7 +100,9 @@ class Pokemon:
         in the specified game."""
         if not self.exists_in(game):
             raise PyPokedexError(
-                f"{self.name} is not " f"obtainable in {game}!"  # type: ignore
+                # pylint: disable=no-member
+                f"{self.name} is not "  # type: ignore
+                f"obtainable in {game}!"
             )
 
         for move in self.moves[game]:
@@ -100,6 +115,7 @@ class Pokemon:
 
     def __str__(self) -> str:
         """Returns a human-readable represenation of the current Pokemon."""
+        # pylint: disable=no-member
         return f"Pokemon(dex={self.dex}, name='{self.name}')"  # type: ignore
 
     def __eq__(self, other) -> bool:

Add Support for Sprites
This pokedex has pretty much every detail you need other than sprites. Adding sprite support shouldn't be too hard and will complete this project.
diff --git a/tests/test_pypokedex.py b/tests/test_pypokedex.py
index 66c5a2d..3dc9d61 100644
--- a/tests/test_pypokedex.py
+++ b/tests/test_pypokedex.py
@@ -1,3 +1,5 @@
+# pylint: disable=redefined-outer-name
+
 from copy import deepcopy
 
 import pytest
@@ -44,10 +46,20 @@ sample_pokemon = {
             ],
         }
     ],
+    "sprites": {
+        "back_default": "default_back_url",
+        "back_female": None,
+        "back_shiny": "shiny_back_url",
+        "back_shiny_female": None,
+        "front_default": "default_front_url",
+        "front_female": None,
+        "front_shiny": "front_shiny_url",
+        "front_shiny_female": None,
+    },
 }
 
 
-def _is_valid_sample_pokemon(pokemon: pypokedex.pokemon.Pokemon):
+def _is_properly_initialized_pokemon_object(pokemon: pypokedex.pokemon.Pokemon):
     return (
         pokemon.dex == 999
         and pokemon.name == "sample"
@@ -68,6 +80,21 @@ def _is_valid_sample_pokemon(pokemon: pypokedex.pokemon.Pokemon):
         == pypokedex.pokemon.Move("move_1", "tutor", None)
         and pokemon.moves["game_2"][0]  # noqa
         == pypokedex.pokemon.Move("move_1", "level-up", 5)
+        and pokemon.sprites
+        == pypokedex.pokemon.Sprites(
+            front={
+                "default": "default_front_url",
+                "female": None,
+                "shiny": "front_shiny_url",
+                "shiny_female": None,
+            },
+            back={
+                "default": "default_back_url",
+                "female": None,
+                "shiny": "shiny_back_url",
+                "shiny_female": None,
+            },
+        )
     )  # noqa
 
 
@@ -115,7 +142,7 @@ def test_get_pokemon_by_name(responses):
 
     pokemon = pypokedex.get(name="sample")
 
-    assert _is_valid_sample_pokemon(pokemon)
+    assert _is_properly_initialized_pokemon_object(pokemon)
 
 
 def test_get_pokemon_by_dex(responses):
@@ -128,7 +155,7 @@ def test_get_pokemon_by_dex(responses):
 
     pokemon = pypokedex.get(dex=999)
 
-    assert _is_valid_sample_pokemon(pokemon)
+    assert _is_properly_initialized_pokemon_object(pokemon)
 
 
 def test_pokemon_existence_in_games(responses):

pip install -e .[dev]
parse_log_pytest
requirements.txt
pytest pytest-cov responses mypy black pylint
3.6
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
astroid==2.11.7
attrs==22.2.0
black==22.8.0
certifi==2021.5.30
charset-normalizer==2.0.12
click==8.0.4
coverage==6.2
dataclasses==0.8
dill==0.3.4
idna==3.10
importlib-metadata==4.8.3
iniconfig==1.1.1
isort==5.10.1
lazy-object-proxy==1.7.1
mccabe==0.7.0
mypy==0.971
mypy-extensions==1.0.0
packaging==21.3
pathspec==0.9.0
platformdirs==2.4.0
pluggy==1.0.0
py==1.11.0
pylint==2.13.9
pyparsing==3.1.4
-e git+https://github.com/arnavb/pypokedex.git@1963ea43da7ca5d4dcec4c47b286d0992cd9895e#egg=pypokedex
pytest==7.0.1
pytest-cov==4.0.0
requests==2.27.1
responses==0.17.0
six==1.17.0
tomli==1.2.3
typed-ast==1.5.5
typing_extensions==4.1.1
urllib3==1.26.20
wrapt==1.16.0
zipp==3.6.0

name: pypokedex
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - pip=21.2.2=py36h06a4308_0
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - astroid==2.11.7
      - attrs==22.2.0
      - black==22.8.0
      - charset-normalizer==2.0.12
      - click==8.0.4
      - coverage==6.2
      - dataclasses==0.8
      - dill==0.3.4
      - idna==3.10
      - importlib-metadata==4.8.3
      - iniconfig==1.1.1
      - isort==5.10.1
      - lazy-object-proxy==1.7.1
      - mccabe==0.7.0
      - mypy==0.971
      - mypy-extensions==1.0.0
      - packaging==21.3
      - pathspec==0.9.0
      - platformdirs==2.4.0
      - pluggy==1.0.0
      - py==1.11.0
      - pylint==2.13.9
      - pyparsing==3.1.4
      - pytest==7.0.1
      - pytest-cov==4.0.0
      - requests==2.27.1
      - responses==0.17.0
      - six==1.17.0
      - tomli==1.2.3
      - typed-ast==1.5.5
      - typing-extensions==4.1.1
      - urllib3==1.26.20
      - wrapt==1.16.0
      - zipp==3.6.0
prefix: /opt/conda/envs/pypokedex

tests/test_pypokedex.py::test_get_pokemon_by_name tests/test_pypokedex.py::test_get_pokemon_by_dex
tests/test_pypokedex.py::test_too_few_get_arguments tests/test_pypokedex.py::test_too_many_get_arguments tests/test_pypokedex.py::test_incorrect_get_argument_types tests/test_pypokedex.py::test_pokemon_existence_in_games tests/test_pypokedex.py::test_pokemon_non_existence_in_games tests/test_pypokedex.py::test_pokemon_learns_move tests/test_pypokedex.py::test_pokemon_does_not_learn_move tests/test_pypokedex.py::test_pokemon_does_not_learn_move_because_it_is_not_in_the_specified_game tests/test_pypokedex.py::test_pokemon_str_function tests/test_pypokedex.py::test_pokemon_equality tests/test_pypokedex.py::test_pokemon_inequality tests/test_pypokedex.py::test_pokemon_less_than tests/test_pypokedex.py::test_pokemon_greater_than tests/test_pypokedex.py::test_pokemon_less_than_or_equal_to tests/test_pypokedex.py::test_pokemon_greater_than_or_equal_to tests/test_pypokedex.py::test_404_pokemon_not_found tests/test_pypokedex.py::test_other_HTTP_errors tests/test_pypokedex.py::test_requests_errors tests/test_pypokedex.py::test_missing_data_keys_for_pokemon
.gitignore README.md pypokedex/pokemon.py
.gitignore README.md pypokedex/pokemon.py