models.pokemon_builder

Módulo pokemon_builder.py

[PT-BR] Implementa o padrão de projeto Builder para facilitar a construção de objetos Pokemon de forma incremental e segura.

[EN] Implements the Builder design pattern to simplify the incremental and safe construction of Pokemon objects.

Uso / Usage: builder = PokemonBuilder() pokemon = ( builder.number("025") .name("Pikachu") .add_type("Electric") .image("https://.../pikachu.png") .add_attribute("Altura", "0.4m") .build() )

 1"""
 2Módulo pokemon_builder.py
 3===========================
 4
 5[PT-BR] Implementa o padrão de projeto Builder para facilitar a construção
 6de objetos ``Pokemon`` de forma incremental e segura.
 7
 8[EN] Implements the Builder design pattern to simplify the incremental and safe
 9construction of ``Pokemon`` objects.
10
11Uso / Usage:
12    builder = PokemonBuilder()
13    pokemon = (
14        builder.number("025")
15               .name("Pikachu")
16               .add_type("Electric")
17               .image("https://.../pikachu.png")
18               .add_attribute("Altura", "0.4m")
19               .build()
20    )
21"""
22from typing import TypeVar
23Self = TypeVar("Self", bound="PokemonBuilder")
24from models.pokemon import Pokemon
25
26class PokemonBuilder:
27    """
28    [PT-BR] Builder para criar objetos Pokemon de forma segura e incremental.
29    [EN] Builder to create Pokemon objects safely and incrementally.
30    """
31
32    def __init__(self) -> None:
33        self.reset()
34
35    def reset(self) -> None:
36        self._attrs: dict[str, object] = {
37            "types": [],
38            "extra_attributes": {}
39        }
40
41    def number(self, n: str) -> Self:
42        self._attrs["number"] = n
43        return self
44
45    def name(self, n: str) -> Self:
46        self._attrs["name"] = n
47        return self
48
49    def add_type(self, t: str) -> Self:
50        self._attrs["types"].append(t)
51        return self
52
53    def image(self, url: str) -> Self:
54        self._attrs["image"] = url
55        return self
56
57    def add_attribute(self, key: str, value: str) -> Self:
58        self._attrs["extra_attributes"][key] = value
59        return self
60
61    def build(self) -> Pokemon:
62        if "number" not in self._attrs or "name" not in self._attrs:
63            raise ValueError("Pokemon must have at least a number and a name.")
64
65        pokemon = Pokemon(
66            number=self._attrs["number"],
67            name=self._attrs["name"],
68            types=self._attrs["types"],
69            image=self._attrs.get("image"),
70            extra_attributes=self._attrs["extra_attributes"]
71        )
72
73        self.reset()
74        return pokemon
class PokemonBuilder:
27class PokemonBuilder:
28    """
29    [PT-BR] Builder para criar objetos Pokemon de forma segura e incremental.
30    [EN] Builder to create Pokemon objects safely and incrementally.
31    """
32
33    def __init__(self) -> None:
34        self.reset()
35
36    def reset(self) -> None:
37        self._attrs: dict[str, object] = {
38            "types": [],
39            "extra_attributes": {}
40        }
41
42    def number(self, n: str) -> Self:
43        self._attrs["number"] = n
44        return self
45
46    def name(self, n: str) -> Self:
47        self._attrs["name"] = n
48        return self
49
50    def add_type(self, t: str) -> Self:
51        self._attrs["types"].append(t)
52        return self
53
54    def image(self, url: str) -> Self:
55        self._attrs["image"] = url
56        return self
57
58    def add_attribute(self, key: str, value: str) -> Self:
59        self._attrs["extra_attributes"][key] = value
60        return self
61
62    def build(self) -> Pokemon:
63        if "number" not in self._attrs or "name" not in self._attrs:
64            raise ValueError("Pokemon must have at least a number and a name.")
65
66        pokemon = Pokemon(
67            number=self._attrs["number"],
68            name=self._attrs["name"],
69            types=self._attrs["types"],
70            image=self._attrs.get("image"),
71            extra_attributes=self._attrs["extra_attributes"]
72        )
73
74        self.reset()
75        return pokemon

[PT-BR] Builder para criar objetos Pokemon de forma segura e incremental. [EN] Builder to create Pokemon objects safely and incrementally.

def reset(self) -> None:
36    def reset(self) -> None:
37        self._attrs: dict[str, object] = {
38            "types": [],
39            "extra_attributes": {}
40        }
def number(self, n: str) -> ~Self:
42    def number(self, n: str) -> Self:
43        self._attrs["number"] = n
44        return self
def name(self, n: str) -> ~Self:
46    def name(self, n: str) -> Self:
47        self._attrs["name"] = n
48        return self
def add_type(self, t: str) -> ~Self:
50    def add_type(self, t: str) -> Self:
51        self._attrs["types"].append(t)
52        return self
def image(self, url: str) -> ~Self:
54    def image(self, url: str) -> Self:
55        self._attrs["image"] = url
56        return self
def add_attribute(self, key: str, value: str) -> ~Self:
58    def add_attribute(self, key: str, value: str) -> Self:
59        self._attrs["extra_attributes"][key] = value
60        return self
def build(self) -> models.pokemon.Pokemon:
62    def build(self) -> Pokemon:
63        if "number" not in self._attrs or "name" not in self._attrs:
64            raise ValueError("Pokemon must have at least a number and a name.")
65
66        pokemon = Pokemon(
67            number=self._attrs["number"],
68            name=self._attrs["name"],
69            types=self._attrs["types"],
70            image=self._attrs.get("image"),
71            extra_attributes=self._attrs["extra_attributes"]
72        )
73
74        self.reset()
75        return pokemon