From 6270ad156de83cf2fe760311ba04026c81e32288 Mon Sep 17 00:00:00 2001 From: Benoit St-Pierre Date: Wed, 27 Jul 2016 13:12:04 -0400 Subject: [PATCH] Reduce number of inventory calls MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit There’s way too many API calls for the inventory, so I added a coached response that’s used until someone invalidates it (like when catching/throwing and spinning stops) --- pokemongo_bot/__init__.py | 27 +++++++++---------- .../cell_workers/evolve_all_worker.py | 9 +++---- .../cell_workers/pokemon_catch_worker.py | 7 +++-- .../cell_workers/seen_fort_worker.py | 1 + 4 files changed, 20 insertions(+), 24 deletions(-) diff --git a/pokemongo_bot/__init__.py b/pokemongo_bot/__init__.py index 390e5bc194..255b1afd65 100644 --- a/pokemongo_bot/__init__.py +++ b/pokemongo_bot/__init__.py @@ -35,6 +35,7 @@ def __init__(self, config): self.pokemon_list = json.load(open(os.path.join('data', 'pokemon.json'))) self.item_list = json.load(open(os.path.join('data', 'items.json'))) self.metrics = Metrics(self) + self.latest_inventory = None def start(self): self._setup_logging() @@ -313,15 +314,20 @@ def _print_character_info(self): logger.log('') - def use_lucky_egg(self): self.api.use_item_xp_boost(item_id=301) inventory_req = self.api.call() return inventory_req + def get_inventory(self): + if self.latest_inventory is None: + self.api.get_inventory() + response = self.api.call() + self.latest_inventory = response + return self.latest_inventory + def update_inventory(self): - self.api.get_inventory() - response = self.api.call() + response = self.get_inventory() self.inventory = list() if 'responses' in response: if 'GET_INVENTORY' in response['responses']: @@ -344,9 +350,7 @@ def update_inventory(self): 'item']) def current_inventory(self): - self.api.get_player().get_inventory() - - inventory_req = self.api.call() + inventory_req = self.get_inventory() inventory_dict = inventory_req['responses']['GET_INVENTORY'][ 'inventory_delta']['inventory_items'] @@ -371,9 +375,7 @@ def current_inventory(self): return items_stock def item_inventory_count(self, id): - self.api.get_player().get_inventory() - - inventory_req = self.api.call() + inventory_req = self.get_inventory() inventory_dict = inventory_req['responses'][ 'GET_INVENTORY']['inventory_delta']['inventory_items'] @@ -480,14 +482,12 @@ def heartbeat(self): if timeout >= time.time() * 1000} self.api.get_player() self.api.get_hatched_eggs() - self.api.get_inventory() self.api.check_awarded_badges() self.api.call() self.update_web_location() # updates every tick def get_inventory_count(self, what): - self.api.get_inventory() - response_dict = self.api.call() + response_dict = self.get_inventory() if 'responses' in response_dict: if 'GET_INVENTORY' in response_dict['responses']: if 'inventory_delta' in response_dict['responses'][ @@ -517,8 +517,7 @@ def get_inventory_count(self, what): return '0' def get_player_info(self): - self.api.get_inventory() - response_dict = self.api.call() + response_dict = self.get_inventory() if 'responses' in response_dict: if 'GET_INVENTORY' in response_dict['responses']: if 'inventory_delta' in response_dict['responses'][ diff --git a/pokemongo_bot/cell_workers/evolve_all_worker.py b/pokemongo_bot/cell_workers/evolve_all_worker.py index 95aeea3ee5..2474b7cbb5 100644 --- a/pokemongo_bot/cell_workers/evolve_all_worker.py +++ b/pokemongo_bot/cell_workers/evolve_all_worker.py @@ -16,8 +16,7 @@ def work(self): if not self._should_run(): return - self.api.get_inventory() - response_dict = self.api.call() + response_dict = self.bot.get_inventory() cache = {} try: @@ -85,8 +84,7 @@ def _should_run(self): return skip_evolves def _release_evolved(self, release_cand_list_ids): - self.api.get_inventory() - response_dict = self.api.call() + response_dict = self.bot.get_inventory() cache = {} try: @@ -180,8 +178,7 @@ def transfer_pokemon(self, pid): response_dict = self.api.call() def count_pokemon_inventory(self): - self.api.get_inventory() - response_dict = self.api.call() + response_dict = self.bot.get_inventory() id_list = [] return self.counting_pokemon(response_dict, id_list) diff --git a/pokemongo_bot/cell_workers/pokemon_catch_worker.py b/pokemongo_bot/cell_workers/pokemon_catch_worker.py index d4c201bee4..8c9ed14483 100644 --- a/pokemongo_bot/cell_workers/pokemon_catch_worker.py +++ b/pokemongo_bot/cell_workers/pokemon_catch_worker.py @@ -225,8 +225,7 @@ def work(self): time.sleep(5) def _transfer_low_cp_pokemon(self, value): - self.api.get_inventory() - response_dict = self.api.call() + response_dict = self.bot.get_inventory() self._transfer_all_low_cp_pokemon(value, response_dict) def _transfer_all_low_cp_pokemon(self, value, response_dict): @@ -257,8 +256,8 @@ def transfer_pokemon(self, pid): response_dict = self.api.call() def count_pokemon_inventory(self): - self.api.get_inventory() - response_dict = self.api.call() + self.bot.latest_inventory = None # Need accurate count of balls/berries/pokemons + response_dict = self.bot.get_inventory() id_list = [] return self.counting_pokemon(response_dict, id_list) diff --git a/pokemongo_bot/cell_workers/seen_fort_worker.py b/pokemongo_bot/cell_workers/seen_fort_worker.py index de94028aa9..a48baab781 100644 --- a/pokemongo_bot/cell_workers/seen_fort_worker.py +++ b/pokemongo_bot/cell_workers/seen_fort_worker.py @@ -58,6 +58,7 @@ def work(self): items_awarded = spin_details.get('items_awarded', False) if items_awarded: + self.bot.latest_inventory = None tmp_count_items = {} for item in items_awarded: item_id = item['item_id']