From f3d2a9cca5c797033b6d260e4aac551b0b29e63b Mon Sep 17 00:00:00 2001 From: Adarnof Date: Tue, 24 Nov 2015 02:45:36 +0000 Subject: [PATCH] Added logic to check if corp or alliance exists Prevents errors in celery task from prevention execution Addresses issues #68 and #93 --- celerytask/tasks.py | 78 +++++++++++++++------------- services/managers/eve_api_manager.py | 35 +++++++++++++ 2 files changed, 78 insertions(+), 35 deletions(-) diff --git a/celerytask/tasks.py b/celerytask/tasks.py index db78f88b..bb8c4ffa 100755 --- a/celerytask/tasks.py +++ b/celerytask/tasks.py @@ -369,17 +369,22 @@ def run_corp_update(): # Update all allinace info's for all_alliance_info in EveManager.get_all_alliance_info(): - all_alliance_api_info = EveApiManager.get_alliance_information(all_alliance_info.alliance_id) - if (not settings.IS_CORP and all_alliance_info.alliance_id == settings.ALLIANCE_ID): - EveManager.update_alliance_info(all_alliance_api_info['id'], all_alliance_api_info['executor_id'], - all_alliance_api_info['member_count'], False) - elif standing_level in corp_standings: - if int(all_alliance_info.alliance_id) in corp_standings[standing_level]: - if int(corp_standings[standing_level][int(all_alliance_info.alliance_id)][ - 'standing']) >= settings.BLUE_STANDING: - EveManager.update_alliance_info(all_alliance_api_info['id'], - all_alliance_api_info['executor_id'], - all_alliance_api_info['member_count'], True) + if EveApiManager.check_if_alliance_exists(all_alliance_info.alliance_id): + all_alliance_api_info = EveApiManager.get_alliance_information(all_alliance_info.alliance_id) + if (not settings.IS_CORP and all_alliance_info.alliance_id == settings.ALLIANCE_ID): + EveManager.update_alliance_info(all_alliance_api_info['id'], all_alliance_api_info['executor_id'], + all_alliance_api_info['member_count'], False) + elif standing_level in corp_standings: + if int(all_alliance_info.alliance_id) in corp_standings[standing_level]: + if int(corp_standings[standing_level][int(all_alliance_info.alliance_id)][ + 'standing']) >= settings.BLUE_STANDING: + EveManager.update_alliance_info(all_alliance_api_info['id'], + all_alliance_api_info['executor_id'], + all_alliance_api_info['member_count'], True) + else: + EveManager.update_alliance_info(all_alliance_api_info['id'], + all_alliance_api_info['executor_id'], + all_alliance_api_info['member_count'], False) else: EveManager.update_alliance_info(all_alliance_api_info['id'], all_alliance_api_info['executor_id'], @@ -389,41 +394,44 @@ def run_corp_update(): all_alliance_api_info['executor_id'], all_alliance_api_info['member_count'], False) else: - EveManager.update_alliance_info(all_alliance_api_info['id'], - all_alliance_api_info['executor_id'], - all_alliance_api_info['member_count'], False) + #alliance no longer exists + all_alliance_info.delete() # Update corp infos for all_corp_info in EveManager.get_all_corporation_info(): - alliance = None - corpinfo = EveApiManager.get_corporation_information(all_corp_info.corporation_id) - if corpinfo['alliance']['id'] is not None: - alliance = EveManager.get_alliance_info_by_id(corpinfo['alliance']['id']) + if EveApiManager.check_if_corp_exists(all_corp_info.corporation_id): + alliance = None + corpinfo = EveApiManager.get_corporation_information(all_corp_info.corporation_id) + if corpinfo['alliance']['id'] is not None: + alliance = EveManager.get_alliance_info_by_id(corpinfo['alliance']['id']) - if alliance is not None and all_corp_info.alliance is not None: + if alliance is not None and all_corp_info.alliance is not None: - if (not settings.IS_CORP) and (all_corp_info.alliance.alliance_id == settings.ALLIANCE_ID): - EveManager.update_corporation_info(corpinfo['id'], corpinfo['members']['current'], alliance, False) - elif int(alliance.alliance_id) in corp_standings[standing_level]: - if int(corp_standings[standing_level][int(alliance.alliance_id)][ - 'standing']) >= settings.BLUE_STANDING: - EveManager.update_corporation_info(corpinfo['id'], corpinfo['members']['current'], alliance, - True) + if (not settings.IS_CORP) and (all_corp_info.alliance.alliance_id == settings.ALLIANCE_ID): + EveManager.update_corporation_info(corpinfo['id'], corpinfo['members']['current'], alliance, False) + elif int(alliance.alliance_id) in corp_standings[standing_level]: + if int(corp_standings[standing_level][int(alliance.alliance_id)][ + 'standing']) >= settings.BLUE_STANDING: + EveManager.update_corporation_info(corpinfo['id'], corpinfo['members']['current'], alliance, + True) + else: + EveManager.update_corporation_info(corpinfo['id'], corpinfo['members']['current'], alliance, + False) else: EveManager.update_corporation_info(corpinfo['id'], corpinfo['members']['current'], alliance, False) else: - EveManager.update_corporation_info(corpinfo['id'], corpinfo['members']['current'], alliance, - False) - else: - if int(all_corp_info.corporation_id) in corp_standings[standing_level]: - if int(corp_standings[standing_level][int(all_corp_info.corporation_id)][ - 'standing']) >= settings.BLUE_STANDING: - EveManager.update_corporation_info(corpinfo['id'], corpinfo['members']['current'], None, True) + if int(all_corp_info.corporation_id) in corp_standings[standing_level]: + if int(corp_standings[standing_level][int(all_corp_info.corporation_id)][ + 'standing']) >= settings.BLUE_STANDING: + EveManager.update_corporation_info(corpinfo['id'], corpinfo['members']['current'], None, True) + else: + EveManager.update_corporation_info(corpinfo['id'], corpinfo['members']['current'], None, False) else: EveManager.update_corporation_info(corpinfo['id'], corpinfo['members']['current'], None, False) - else: - EveManager.update_corporation_info(corpinfo['id'], corpinfo['members']['current'], None, False) + else: + #corp has closed + all_corp_info.delete() # Remove irrelevent corp and alliance models # Check the corps diff --git a/services/managers/eve_api_manager.py b/services/managers/eve_api_manager.py index bcba1e38..9c61455c 100644 --- a/services/managers/eve_api_manager.py +++ b/services/managers/eve_api_manager.py @@ -179,3 +179,38 @@ class EveApiManager(): return False return False + + @staticmethod + def check_if_alliance_exists(alliance_id): + try: + api = evelink.api.API() + eve = evelink.eve.EVE(api=api) + alliances = eve.alliances() + if int(alliance_id) in alliances[0]: + return True + else: + return False + except evelink.api.APIError as error: + print error + return False + except ValueError as error: + #attempts to catch error resulting from checking alliance_of nonetype models + print error + return False + return False + + @staticmethod + def check_if_corp_exists(corp_id): + try: + api = evelink.api.API() + corp = evelink.corp.Corp(api=api) + corpinfo = corp.corporation_sheet(corp_id=corp_id) + if corpinfo[0]['members']['current'] > 0: + return True + else: + return False + except evelink.api.APIError as error: + #could be smart and check for error code523 to verify error due to no corp instead of catch-all + print error + return False + return False