localdex 0.1.20__py3-none-any.whl → 0.1.22__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. localdex/__init__.py +0 -4
  2. localdex/core.py +2 -185
  3. localdex/data/pokemon/aegislash.json +88 -0
  4. localdex/data/pokemon/basculegion.json +86 -0
  5. localdex/data/pokemon/basculin.json +105 -0
  6. localdex/data/pokemon/darmanitan.json +117 -0
  7. localdex/data/pokemon/deoxys.json +144 -0
  8. localdex/data/pokemon/dudunsparce.json +117 -0
  9. localdex/data/pokemon/eiscue.json +80 -0
  10. localdex/data/pokemon/enamorus.json +77 -0
  11. localdex/data/pokemon/giratina.json +123 -0
  12. localdex/data/pokemon/gourgeist.json +109 -0
  13. localdex/data/pokemon/indeedee.json +89 -0
  14. localdex/data/pokemon/keldeo.json +107 -0
  15. localdex/data/pokemon/landorus.json +105 -0
  16. localdex/data/pokemon/lycanroc.json +107 -0
  17. localdex/data/pokemon/maushold.json +80 -0
  18. localdex/data/pokemon/meloetta.json +131 -0
  19. localdex/data/pokemon/meowstic.json +122 -0
  20. localdex/data/pokemon/mimikyu.json +113 -0
  21. localdex/data/pokemon/minior.json +90 -0
  22. localdex/data/pokemon/morpeko.json +100 -0
  23. localdex/data/pokemon/nidoran.json +109 -0
  24. localdex/data/pokemon/oinkologne.json +78 -0
  25. localdex/data/pokemon/oricorio.json +91 -0
  26. localdex/data/pokemon/palafin.json +90 -0
  27. localdex/data/pokemon/pumpkaboo.json +105 -0
  28. localdex/data/pokemon/shaymin.json +101 -0
  29. localdex/data/pokemon/squawkabilly.json +79 -0
  30. localdex/data/pokemon/tatsugiri.json +65 -0
  31. localdex/data/pokemon/thundurus.json +116 -0
  32. localdex/data/pokemon/tornadus.json +107 -0
  33. localdex/data/pokemon/toxtricity.json +112 -0
  34. localdex/data/pokemon/urshifu.json +101 -0
  35. localdex/data/pokemon/wishiwashi.json +77 -0
  36. localdex/data/pokemon/wormadam.json +93 -0
  37. localdex/data/pokemon/zygarde.json +93 -0
  38. localdex/download_data.py +62 -0
  39. localdex/models/pokemon.py +8 -11
  40. {localdex-0.1.20.dist-info → localdex-0.1.22.dist-info}/METADATA +2 -171
  41. {localdex-0.1.20.dist-info → localdex-0.1.22.dist-info}/RECORD +44 -11
  42. localdex/random_battles.py +0 -251
  43. localdex/sprite_downloader.py +0 -932
  44. {localdex-0.1.20.dist-info → localdex-0.1.22.dist-info}/WHEEL +0 -0
  45. {localdex-0.1.20.dist-info → localdex-0.1.22.dist-info}/entry_points.txt +0 -0
  46. {localdex-0.1.20.dist-info → localdex-0.1.22.dist-info}/top_level.txt +0 -0
localdex/__init__.py CHANGED
@@ -2,8 +2,6 @@
2
2
  from .core import LocalDex
3
3
  from .models import Pokemon, Move, Ability, Item, BaseStats
4
4
  from .exceptions import PokemonNotFoundError, MoveNotFoundError, AbilityNotFoundError, ItemNotFoundError
5
- from .random_battles import RandomBattleSets
6
- from .sprite_downloader import SpriteDownloader
7
5
 
8
6
  __all__ = [
9
7
  "LocalDex",
@@ -16,6 +14,4 @@ __all__ = [
16
14
  "MoveNotFoundError",
17
15
  "AbilityNotFoundError",
18
16
  "ItemNotFoundError",
19
- "RandomBattleSets",
20
- "SpriteDownloader",
21
17
  ]
localdex/core.py CHANGED
@@ -18,8 +18,6 @@ from .exceptions import (
18
18
  ItemNotFoundError, DataLoadError, SearchError
19
19
  )
20
20
  from .data_loader import DataLoader
21
- from .random_battles import RandomBattleSets
22
- from .sprite_downloader import SpriteDownloader
23
21
 
24
22
 
25
23
  class LocalDex:
@@ -31,7 +29,7 @@ class LocalDex:
31
29
  performance and comprehensive search capabilities.
32
30
  """
33
31
 
34
- def __init__(self, data_path: Optional[str] = None, data_dir: Optional[str] = None, enable_caching: bool = True, enable_random_battles: bool = True, enable_sprite_downloader: bool = True, sprite_max_workers: int = 8):
32
+ def __init__(self, data_path: Optional[str] = None, data_dir: Optional[str] = None, enable_caching: bool = True):
35
33
  """
36
34
  Initialize the LocalDex.
37
35
 
@@ -39,9 +37,6 @@ class LocalDex:
39
37
  data_path: Optional path to data directory. If None, uses package data.
40
38
  data_dir: Alias for data_path for backward compatibility.
41
39
  enable_caching: Whether to enable caching for better performance.
42
- enable_random_battles: Whether to enable random battle sets functionality.
43
- enable_sprite_downloader: Whether to enable sprite downloader functionality.
44
- sprite_max_workers: Maximum number of worker threads for parallel sprite processing.
45
40
  """
46
41
  # Use data_dir if provided, otherwise use data_path
47
42
  final_data_path = data_dir if data_dir is not None else data_path
@@ -49,12 +44,6 @@ class LocalDex:
49
44
  self.data_dir = final_data_path # Store for backward compatibility
50
45
  self.enable_caching = enable_caching
51
46
 
52
- # Sprite downloader integration
53
- self.sprite_downloader = SpriteDownloader(final_data_path, max_workers=sprite_max_workers) if enable_sprite_downloader else None
54
-
55
- # Initialize random battle sets
56
- self.random_battles = RandomBattleSets() if enable_random_battles else None
57
-
58
47
  # Initialize caches
59
48
  self._pokemon_cache: Dict[str, Pokemon] = {}
60
49
  self._pokemon_id_cache: Dict[int, Pokemon] = {}
@@ -569,176 +558,4 @@ class LocalDex:
569
558
  "items": len(self._item_cache)
570
559
  }
571
560
 
572
- # Random Battle Sets Methods
573
-
574
- def get_random_battle_sets(self, pokemon_name: str, generation: int = 9, force_refresh: bool = False) -> Optional[Dict[str, Any]]:
575
- """
576
- Get random battle sets for a specific Pokemon.
577
-
578
- Args:
579
- pokemon_name: Name of the Pokemon (case-insensitive)
580
- generation: Generation to get sets from (8 or 9)
581
- force_refresh: If True, re-download data
582
-
583
- Returns:
584
- Pokemon's random battle sets or None if not found
585
-
586
- Raises:
587
- ValueError: If random battles are not enabled
588
- """
589
- if self.random_battles is None:
590
- raise ValueError("Random battle sets are not enabled. Set enable_random_battles=True when initializing LocalDex.")
591
-
592
- if generation == 9:
593
- return self.random_battles.get_pokemon_gen9_sets(pokemon_name, force_refresh)
594
- elif generation == 8:
595
- return self.random_battles.get_pokemon_gen8_data(pokemon_name, force_refresh)
596
- else:
597
- raise ValueError(f"Generation {generation} is not supported. Use 8 or 9.")
598
-
599
- def get_all_random_battle_sets(self, generation: int = 9, force_refresh: bool = False) -> Dict[str, Any]:
600
- """
601
- Get all random battle sets for a generation.
602
-
603
- Args:
604
- generation: Generation to get sets from (8 or 9)
605
- force_refresh: If True, re-download data
606
-
607
- Returns:
608
- Dictionary containing all random battle sets for the generation
609
-
610
- Raises:
611
- ValueError: If random battles are not enabled
612
- """
613
- if self.random_battles is None:
614
- raise ValueError("Random battle sets are not enabled. Set enable_random_battles=True when initializing LocalDex.")
615
-
616
- if generation == 9:
617
- return self.random_battles.get_gen9_sets(force_refresh)
618
- elif generation == 8:
619
- return self.random_battles.get_gen8_data(force_refresh)
620
- else:
621
- raise ValueError(f"Generation {generation} is not supported. Use 8 or 9.")
622
-
623
- def search_random_battle_pokemon_by_move(self, move_name: str, generation: int = 9, force_refresh: bool = False) -> List[str]:
624
- """
625
- Search for Pokemon that have a specific move in their random battle sets.
626
-
627
- Args:
628
- move_name: Name of the move to search for (case-insensitive)
629
- generation: Generation to search in (8 or 9)
630
- force_refresh: If True, re-download data
631
-
632
- Returns:
633
- List of Pokemon names that have the move
634
-
635
- Raises:
636
- ValueError: If random battles are not enabled
637
- """
638
- if self.random_battles is None:
639
- raise ValueError("Random battle sets are not enabled. Set enable_random_battles=True when initializing LocalDex.")
640
-
641
- return self.random_battles.search_pokemon_by_move(move_name, generation, force_refresh)
642
-
643
- def search_random_battle_pokemon_by_ability(self, ability_name: str, generation: int = 9, force_refresh: bool = False) -> List[str]:
644
- """
645
- Search for Pokemon that have a specific ability in their random battle sets.
646
-
647
- Args:
648
- ability_name: Name of the ability to search for (case-insensitive)
649
- generation: Generation to search in (8 or 9)
650
- force_refresh: If True, re-download data
651
-
652
- Returns:
653
- List of Pokemon names that have the ability
654
-
655
- Raises:
656
- ValueError: If random battles are not enabled
657
- """
658
- if self.random_battles is None:
659
- raise ValueError("Random battle sets are not enabled. Set enable_random_battles=True when initializing LocalDex.")
660
-
661
- return self.random_battles.search_pokemon_by_ability(ability_name, generation, force_refresh)
662
-
663
- def get_available_random_battle_generations(self) -> List[int]:
664
- """
665
- Get list of available generations for random battles.
666
-
667
- Returns:
668
- List of generation numbers
669
-
670
- Raises:
671
- ValueError: If random battles are not enabled
672
- """
673
- if self.random_battles is None:
674
- raise ValueError("Random battle sets are not enabled. Set enable_random_battles=True when initializing LocalDex.")
675
-
676
- return self.random_battles.get_available_generations()
677
-
678
- def get_random_battle_formats(self, generation: int) -> List[str]:
679
- """
680
- Get available formats for a specific generation.
681
-
682
- Args:
683
- generation: Generation number
684
-
685
- Returns:
686
- List of available format names
687
-
688
- Raises:
689
- ValueError: If random battles are not enabled
690
- """
691
- if self.random_battles is None:
692
- raise ValueError("Random battle sets are not enabled. Set enable_random_battles=True when initializing LocalDex.")
693
-
694
- return self.random_battles.get_generation_formats(generation)
695
-
696
- def clear_random_battle_cache(self) -> None:
697
- """Clear random battle cache."""
698
- if self.random_battles is not None:
699
- self.random_battles.clear_cache()
700
-
701
- def cleanup_random_battle_downloads(self) -> None:
702
- """Remove downloaded Pokemon Showdown repository."""
703
- if self.random_battles is not None:
704
- self.random_battles.cleanup_downloads()
705
-
706
- def download_all_sprites(self):
707
- """
708
- Download and extract all sprites (Pokemon and items).
709
- """
710
- if not self.sprite_downloader:
711
- raise RuntimeError("SpriteDownloader is not enabled.")
712
- return self.sprite_downloader.download_all_sprites()
713
-
714
- def get_pokemon_sprite_path(self, pokemon_name: str):
715
- """
716
- Get the path to a Pokemon sprite image.
717
- """
718
- if not self.sprite_downloader:
719
- raise RuntimeError("SpriteDownloader is not enabled.")
720
- return self.sprite_downloader.get_pokemon_sprite_path(pokemon_name)
721
-
722
- def get_item_sprite_path(self, item_name: str):
723
- """
724
- Get the path to an item sprite image.
725
- """
726
- if not self.sprite_downloader:
727
- raise RuntimeError("SpriteDownloader is not enabled.")
728
- return self.sprite_downloader.get_item_sprite_path(item_name)
729
-
730
- def get_sprite_metadata(self, sprite_type: str = "pokemon"):
731
- """
732
- Get sprite metadata for either 'pokemon' or 'items'.
733
- """
734
- if not self.sprite_downloader:
735
- raise RuntimeError("SpriteDownloader is not enabled.")
736
- return self.sprite_downloader.get_sprite_metadata(sprite_type)
737
-
738
- def list_available_sprites(self, sprite_type: str = "pokemon"):
739
- """
740
- List all available sprites of a given type ('pokemon' or 'items').
741
- """
742
- if not self.sprite_downloader:
743
- raise RuntimeError("SpriteDownloader is not enabled.")
744
- return self.sprite_downloader.list_available_sprites(sprite_type)
561
+
@@ -0,0 +1,88 @@
1
+ {
2
+ "id": 681,
3
+ "name": "aegislash",
4
+ "types": [
5
+ "steel",
6
+ "ghost"
7
+ ],
8
+ "baseStats": {
9
+ "hp": 60,
10
+ "attack": 50,
11
+ "defense": 140,
12
+ "special_attack": 50,
13
+ "special_defense": 140,
14
+ "speed": 60
15
+ },
16
+ "height": 1.7,
17
+ "weight": 53.0,
18
+ "abilities": {
19
+ "0": {
20
+ "name": "stance-change"
21
+ }
22
+ },
23
+ "moves": [
24
+ "swords-dance",
25
+ "cut",
26
+ "tackle",
27
+ "hyper-beam",
28
+ "toxic",
29
+ "screech",
30
+ "double-team",
31
+ "reflect",
32
+ "rest",
33
+ "rock-slide",
34
+ "slash",
35
+ "substitute",
36
+ "snore",
37
+ "reversal",
38
+ "spite",
39
+ "protect",
40
+ "endure",
41
+ "false-swipe",
42
+ "swagger",
43
+ "fury-cutter",
44
+ "attract",
45
+ "sleep-talk",
46
+ "return",
47
+ "frustration",
48
+ "pursuit",
49
+ "hidden-power",
50
+ "rain-dance",
51
+ "sunny-day",
52
+ "shadow-ball",
53
+ "rock-smash",
54
+ "facade",
55
+ "brick-break",
56
+ "secret-power",
57
+ "metal-sound",
58
+ "aerial-ace",
59
+ "iron-defense",
60
+ "block",
61
+ "shock-wave",
62
+ "gyro-ball",
63
+ "close-combat",
64
+ "power-trick",
65
+ "magnet-rise",
66
+ "night-slash",
67
+ "air-slash",
68
+ "giga-impact",
69
+ "shadow-claw",
70
+ "shadow-sneak",
71
+ "psycho-cut",
72
+ "flash-cannon",
73
+ "iron-head",
74
+ "head-smash",
75
+ "autotomize",
76
+ "after-you",
77
+ "round",
78
+ "retaliate",
79
+ "sacred-sword",
80
+ "kings-shield",
81
+ "confide",
82
+ "solar-blade",
83
+ "laser-focus",
84
+ "brutal-swing",
85
+ "steel-beam"
86
+ ],
87
+ "generation": 6
88
+ }
@@ -0,0 +1,86 @@
1
+ {
2
+ "id": 902,
3
+ "name": "basculegion",
4
+ "types": [
5
+ "water",
6
+ "ghost"
7
+ ],
8
+ "baseStats": {
9
+ "hp": 120,
10
+ "attack": 112,
11
+ "defense": 65,
12
+ "special_attack": 80,
13
+ "special_defense": 75,
14
+ "speed": 78
15
+ },
16
+ "height": 3.0,
17
+ "weight": 110.0,
18
+ "abilities": {
19
+ "0": {
20
+ "name": "swift-swim"
21
+ },
22
+ "1": {
23
+ "name": "adaptability"
24
+ },
25
+ "H": {
26
+ "name": "mold-breaker"
27
+ }
28
+ },
29
+ "moves": [
30
+ "headbutt",
31
+ "tackle",
32
+ "take-down",
33
+ "thrash",
34
+ "double-edge",
35
+ "tail-whip",
36
+ "bite",
37
+ "water-gun",
38
+ "hydro-pump",
39
+ "surf",
40
+ "ice-beam",
41
+ "blizzard",
42
+ "hyper-beam",
43
+ "agility",
44
+ "night-shade",
45
+ "confuse-ray",
46
+ "waterfall",
47
+ "rest",
48
+ "substitute",
49
+ "flail",
50
+ "spite",
51
+ "protect",
52
+ "scary-face",
53
+ "icy-wind",
54
+ "outrage",
55
+ "sleep-talk",
56
+ "pain-split",
57
+ "rain-dance",
58
+ "crunch",
59
+ "shadow-ball",
60
+ "whirlpool",
61
+ "uproar",
62
+ "facade",
63
+ "endeavor",
64
+ "muddy-water",
65
+ "mud-shot",
66
+ "water-pulse",
67
+ "giga-impact",
68
+ "ice-fang",
69
+ "zen-headbutt",
70
+ "aqua-jet",
71
+ "head-smash",
72
+ "soak",
73
+ "hex",
74
+ "phantom-force",
75
+ "psychic-fangs",
76
+ "liquidation",
77
+ "scale-shot",
78
+ "flip-turn",
79
+ "wave-crash",
80
+ "tera-blast",
81
+ "last-respects",
82
+ "snowscape",
83
+ "chilling-water"
84
+ ],
85
+ "generation": 9
86
+ }
@@ -0,0 +1,105 @@
1
+ {
2
+ "id": 550,
3
+ "name": "basculin",
4
+ "types": [
5
+ "water"
6
+ ],
7
+ "baseStats": {
8
+ "hp": 70,
9
+ "attack": 92,
10
+ "defense": 65,
11
+ "special_attack": 80,
12
+ "special_defense": 55,
13
+ "speed": 98
14
+ },
15
+ "height": 1.0,
16
+ "weight": 18.0,
17
+ "abilities": {
18
+ "0": {
19
+ "name": "reckless"
20
+ },
21
+ "1": {
22
+ "name": "adaptability"
23
+ },
24
+ "H": {
25
+ "name": "mold-breaker"
26
+ }
27
+ },
28
+ "moves": [
29
+ "cut",
30
+ "headbutt",
31
+ "tackle",
32
+ "take-down",
33
+ "thrash",
34
+ "double-edge",
35
+ "tail-whip",
36
+ "bite",
37
+ "water-gun",
38
+ "hydro-pump",
39
+ "surf",
40
+ "ice-beam",
41
+ "blizzard",
42
+ "bubble-beam",
43
+ "hyper-beam",
44
+ "toxic",
45
+ "agility",
46
+ "rage",
47
+ "double-team",
48
+ "waterfall",
49
+ "swift",
50
+ "rest",
51
+ "substitute",
52
+ "snore",
53
+ "flail",
54
+ "reversal",
55
+ "protect",
56
+ "scary-face",
57
+ "icy-wind",
58
+ "endure",
59
+ "swagger",
60
+ "attract",
61
+ "sleep-talk",
62
+ "return",
63
+ "frustration",
64
+ "hidden-power",
65
+ "rain-dance",
66
+ "crunch",
67
+ "whirlpool",
68
+ "uproar",
69
+ "hail",
70
+ "facade",
71
+ "taunt",
72
+ "superpower",
73
+ "revenge",
74
+ "endeavor",
75
+ "secret-power",
76
+ "dive",
77
+ "muddy-water",
78
+ "bounce",
79
+ "mud-shot",
80
+ "water-pulse",
81
+ "brine",
82
+ "assurance",
83
+ "aqua-tail",
84
+ "giga-impact",
85
+ "ice-fang",
86
+ "zen-headbutt",
87
+ "aqua-jet",
88
+ "head-smash",
89
+ "soak",
90
+ "round",
91
+ "chip-away",
92
+ "scald",
93
+ "final-gambit",
94
+ "confide",
95
+ "psychic-fangs",
96
+ "liquidation",
97
+ "scale-shot",
98
+ "flip-turn",
99
+ "wave-crash",
100
+ "tera-blast",
101
+ "snowscape",
102
+ "chilling-water"
103
+ ],
104
+ "generation": 5
105
+ }
@@ -0,0 +1,117 @@
1
+ {
2
+ "id": 555,
3
+ "name": "darmanitan",
4
+ "types": [
5
+ "fire"
6
+ ],
7
+ "baseStats": {
8
+ "hp": 105,
9
+ "attack": 140,
10
+ "defense": 55,
11
+ "special_attack": 30,
12
+ "special_defense": 55,
13
+ "speed": 95
14
+ },
15
+ "height": 1.3,
16
+ "weight": 92.9,
17
+ "abilities": {
18
+ "0": {
19
+ "name": "sheer-force"
20
+ },
21
+ "H": {
22
+ "name": "zen-mode"
23
+ }
24
+ },
25
+ "moves": [
26
+ "mega-punch",
27
+ "fire-punch",
28
+ "mega-kick",
29
+ "headbutt",
30
+ "tackle",
31
+ "body-slam",
32
+ "thrash",
33
+ "bite",
34
+ "roar",
35
+ "ember",
36
+ "flamethrower",
37
+ "hyper-beam",
38
+ "strength",
39
+ "solar-beam",
40
+ "fire-spin",
41
+ "earthquake",
42
+ "dig",
43
+ "toxic",
44
+ "psychic",
45
+ "rage",
46
+ "double-team",
47
+ "focus-energy",
48
+ "fire-blast",
49
+ "rest",
50
+ "rock-slide",
51
+ "substitute",
52
+ "thief",
53
+ "snore",
54
+ "reversal",
55
+ "protect",
56
+ "belly-drum",
57
+ "endure",
58
+ "rollout",
59
+ "swagger",
60
+ "attract",
61
+ "sleep-talk",
62
+ "return",
63
+ "frustration",
64
+ "encore",
65
+ "hidden-power",
66
+ "sunny-day",
67
+ "future-sight",
68
+ "rock-smash",
69
+ "uproar",
70
+ "heat-wave",
71
+ "torment",
72
+ "will-o-wisp",
73
+ "facade",
74
+ "focus-punch",
75
+ "taunt",
76
+ "trick",
77
+ "superpower",
78
+ "brick-break",
79
+ "endeavor",
80
+ "snatch",
81
+ "secret-power",
82
+ "overheat",
83
+ "rock-tomb",
84
+ "iron-defense",
85
+ "bulk-up",
86
+ "hammer-arm",
87
+ "gyro-ball",
88
+ "u-turn",
89
+ "payback",
90
+ "fling",
91
+ "power-swap",
92
+ "guard-swap",
93
+ "flare-blitz",
94
+ "focus-blast",
95
+ "giga-impact",
96
+ "fire-fang",
97
+ "zen-headbutt",
98
+ "iron-head",
99
+ "stone-edge",
100
+ "grass-knot",
101
+ "smack-down",
102
+ "flame-charge",
103
+ "round",
104
+ "incinerate",
105
+ "bulldoze",
106
+ "work-up",
107
+ "confide",
108
+ "mystical-fire",
109
+ "power-up-punch",
110
+ "laser-focus",
111
+ "body-press",
112
+ "expanding-force",
113
+ "burning-jealousy",
114
+ "lash-out"
115
+ ],
116
+ "generation": 5
117
+ }