Support static blue corps and alliances (#708)

This commit is contained in:
Adarnof 2017-02-11 22:05:32 -05:00 committed by GitHub
parent d7291f83c3
commit 8c82897a92
4 changed files with 76 additions and 65 deletions

View File

@ -353,11 +353,15 @@ ALLIANCE_IDS = []
# CORP_API_VCODE - Set this to the api vcode for the corp API key # CORP_API_VCODE - Set this to the api vcode for the corp API key
# BLUE_STANDING - The lowest standings value to consider blue # BLUE_STANDING - The lowest standings value to consider blue
# STANDING_LEVEL - The level of standings to query. Accepted values are 'corp' and 'alliance'. # STANDING_LEVEL - The level of standings to query. Accepted values are 'corp' and 'alliance'.
# BLUE_CORP_IDS - A list of corps to remain blue regardless of in-game standings
# BLUE_ALLIANCE_IDS - A list of alliances to remain blue regardless of in-game standings
######################## ########################
CORP_API_ID = os.environ.get('AA_CORP_API_ID', '') CORP_API_ID = os.environ.get('AA_CORP_API_ID', '')
CORP_API_VCODE = os.environ.get('AA_CORP_API_VCODE', '') CORP_API_VCODE = os.environ.get('AA_CORP_API_VCODE', '')
BLUE_STANDING = float(os.environ.get('AA_BLUE_STANDING', '5.0')) BLUE_STANDING = float(os.environ.get('AA_BLUE_STANDING', '5.0'))
STANDING_LEVEL = os.environ.get('AA_STANDING_LEVEL', 'corp') STANDING_LEVEL = os.environ.get('AA_STANDING_LEVEL', 'corp')
BLUE_CORP_IDS = []
BLUE_ALLIANCE_IDS = []
######################## ########################
# API Configuration # API Configuration
@ -710,7 +714,10 @@ if ENABLE_AUTH_IPS4 or ENABLE_BLUE_IPS4:
# Ensure corp/alliance IDs are expected types # Ensure corp/alliance IDs are expected types
STR_CORP_IDS = [str(id) for id in CORP_IDS] STR_CORP_IDS = [str(id) for id in CORP_IDS]
STR_ALLIANCE_IDS = [str(id) for id in ALLIANCE_IDS] STR_ALLIANCE_IDS = [str(id) for id in ALLIANCE_IDS]
STR_BLUE_CORP_IDS = [str(id) for id in BLUE_CORP_IDS]
STR_BLUE_ALLIANCE_IDS = [str(id) for id in BLUE_ALLIANCE_IDS]
# Conditionally add periodic tasks for services if installed
if 'services.modules.teamspeak3' in INSTALLED_APPS: if 'services.modules.teamspeak3' in INSTALLED_APPS:
CELERYBEAT_SCHEDULE['run_ts3_group_update'] = { CELERYBEAT_SCHEDULE['run_ts3_group_update'] = {
'task': 'services.modules.teamspeak3.tasks.Teamspeak3Tasks.run_ts3_group_update', 'task': 'services.modules.teamspeak3.tasks.Teamspeak3Tasks.run_ts3_group_update',

View File

@ -30,16 +30,16 @@ class EveManager(object):
@staticmethod @staticmethod
def create_character_obj(character, user, api_id): def create_character_obj(character, user, api_id):
EveCharacter.objects.create( return EveCharacter.objects.create(
character_id = character.id, character_id=character.id,
character_name = character.name, character_name=character.name,
corporation_id = character.corp.id, corporation_id=character.corp.id,
corporation_name = character.corp.name, corporation_name=character.corp.name,
corporation_ticker = character.corp.ticker, corporation_ticker=character.corp.ticker,
alliance_id = character.alliance.id, alliance_id=character.alliance.id,
alliance_name = character.alliance.name, alliance_name=character.alliance.name,
user = user, user=user,
api_id = api_id, api_id=api_id,
) )
@staticmethod @staticmethod
@ -56,6 +56,7 @@ class EveManager(object):
model.alliance_id = char.alliance.id model.alliance_id = char.alliance.id
model.alliance_name = char.alliance.name model.alliance_name = char.alliance.name
model.save() model.save()
return model
@staticmethod @staticmethod
def create_api_keypair(api_id, api_key, user_id): def create_api_keypair(api_id, api_key, user_id):
@ -80,12 +81,12 @@ class EveManager(object):
@staticmethod @staticmethod
def create_alliance_obj(alliance, is_blue=False): def create_alliance_obj(alliance, is_blue=False):
EveAllianceInfo.objects.create( return EveAllianceInfo.objects.create(
alliance_id = alliance.id, alliance_id=alliance.id,
alliance_name = alliance.name, alliance_name=alliance.name,
alliance_ticker = alliance.ticker, alliance_ticker=alliance.ticker,
executor_corp_id = alliance.executor_corp_id, executor_corp_id=alliance.executor_corp_id,
is_blue = is_blue, is_blue=is_blue,
) )
@staticmethod @staticmethod
@ -96,8 +97,9 @@ class EveManager(object):
def update_alliance_obj(alliance, is_blue=None): def update_alliance_obj(alliance, is_blue=None):
model = EveAllianceInfo.objects.get(alliance_id=alliance.id) model = EveAllianceInfo.objects.get(alliance_id=alliance.id)
model.executor_corp_id = alliance.executor_corp_id model.executor_corp_id = alliance.executor_corp_id
model.is_blue = model.is_blue if is_blue == None else is_blue model.is_blue = model.is_blue if is_blue is None else is_blue
model.save() model.save()
return model
@staticmethod @staticmethod
def populate_alliance(id): def populate_alliance(id):
@ -107,7 +109,10 @@ class EveManager(object):
if not EveCorporationInfo.objects.filter(corporation_id=corp_id).exists(): if not EveCorporationInfo.objects.filter(corporation_id=corp_id).exists():
EveManager.create_corporation(corp_id, is_blue=alliance_model.is_blue) EveManager.create_corporation(corp_id, is_blue=alliance_model.is_blue)
EveCorporationInfo.objects.filter(corporation_id__in=alliance.corp_ids).update(alliance=alliance_model) EveCorporationInfo.objects.filter(corporation_id__in=alliance.corp_ids).update(alliance=alliance_model)
EveCorporationInfo.objects.filter(alliance=alliance_model).exclude(corporation_id__in=alliance.corp_ids).update(alliance=None) EveCorporationInfo.objects.filter(alliance=alliance_model).exclude(corporation_id__in=alliance.corp_ids).update(
alliance=None)
if alliance_model.is_blue:
EveCorporationInfo.objects.filter(alliance=alliance_model).update(is_blue=True)
@classmethod @classmethod
def get_corporation(cls, corp_id): def get_corporation(cls, corp_id):
@ -123,13 +128,13 @@ class EveManager(object):
alliance = EveAllianceInfo.objects.get(alliance_id=corp.alliance_id) alliance = EveAllianceInfo.objects.get(alliance_id=corp.alliance_id)
except EveAllianceInfo.DoesNotExist: except EveAllianceInfo.DoesNotExist:
alliance = None alliance = None
EveCorporationInfo.objects.create( return EveCorporationInfo.objects.create(
corporation_id = corp.id, corporation_id=corp.id,
corporation_name = corp.name, corporation_name=corp.name,
corporation_ticker = corp.ticker, corporation_ticker=corp.ticker,
member_count = corp.members, member_count=corp.members,
alliance = alliance, alliance=alliance,
is_blue = is_blue, is_blue=is_blue,
) )
@staticmethod @staticmethod
@ -144,8 +149,9 @@ class EveManager(object):
model.alliance = EveAllianceInfo.objects.get(alliance_id=corp.alliance_id) model.alliance = EveAllianceInfo.objects.get(alliance_id=corp.alliance_id)
except EveAllianceInfo.DoesNotExist: except EveAllianceInfo.DoesNotExist:
model.alliance = None model.alliance = None
model.is_blue = model.is_blue if is_blue == None else is_blue model.is_blue = model.is_blue if is_blue is None else is_blue
model.save() model.save()
return model
@classmethod @classmethod
def get_itemtype(cls, type_id): def get_itemtype(cls, type_id):

View File

@ -12,6 +12,7 @@ from services.managers.eve_api_manager import EveApiManager
from eveonline.models import EveCharacter from eveonline.models import EveCharacter
from eveonline.models import EveCorporationInfo from eveonline.models import EveCorporationInfo
from eveonline.models import EveAllianceInfo from eveonline.models import EveAllianceInfo
from eveonline.providers import eve_adapter_factory, ObjectNotFound
from authentication.tasks import set_state from authentication.tasks import set_state
import logging import logging
import evelink import evelink
@ -101,12 +102,13 @@ def run_api_refresh():
@task @task
def update_corp(id): def update_corp(id, is_blue=None):
EveManager.update_corporation(id) EveManager.update_corporation(id, is_blue=is_blue)
@task @task
def update_alliance(id): def update_alliance(id, is_blue=None):
EveManager.update_alliance(id) EveManager.update_alliance(id, is_blue=is_blue)
EveManager.populate_alliance(id) EveManager.populate_alliance(id)
@ -117,27 +119,37 @@ def run_corp_update():
return return
# generate member corps # generate member corps
for corp_id in settings.STR_CORP_IDS: for corp_id in settings.STR_CORP_IDS + settings.STR_BLUE_CORP_IDS:
is_blue = True if corp_id in settings.STR_BLUE_CORP_IDS else False
try:
if EveCorporationInfo.objects.filter(corporation_id=corp_id).exists(): if EveCorporationInfo.objects.filter(corporation_id=corp_id).exists():
update_corp(corp_id) update_corp(corp_id, is_blue=is_blue)
else: else:
EveManager.create_corporation(corp_id) EveManager.create_corporation(corp_id, is_blue=is_blue)
except ObjectNotFound:
logger.warn('Bad corp ID in settings: %s' % corp_id)
# generate member alliances # generate member alliances
for alliance_id in settings.STR_ALLIANCE_IDS: for alliance_id in settings.STR_ALLIANCE_IDS + settings.STR_BLUE_ALLIANCE_IDS:
is_blue = True if alliance_id in settings.STR_BLUE_ALLIANCE_IDS else False
try:
if EveAllianceInfo.objects.filter(alliance_id=alliance_id).exists(): if EveAllianceInfo.objects.filter(alliance_id=alliance_id).exists():
logger.debug("Updating existing owner alliance model with id %s" % alliance_id) logger.debug("Updating existing owner alliance model with id %s" % alliance_id)
update_alliance(alliance_id) update_alliance(alliance_id, is_blue=is_blue)
else: else:
EveManager.create_alliance(alliance_id) EveManager.create_alliance(alliance_id, is_blue=is_blue)
EveManager.populate_alliance(alliance_id) EveManager.populate_alliance(alliance_id)
except ObjectNotFound:
logger.warn('Bad alliance ID in settings: %s' % alliance_id)
# update existing corp models # update existing corp models
for corp in EveCorporationInfo.objects.all(): for corp in EveCorporationInfo.objects.exclude(
corporation_id__in=settings.STR_CORP_IDS + settings.STR_BLUE_CORP_IDS):
update_corp.delay(corp.corporation_id) update_corp.delay(corp.corporation_id)
# update existing alliance models # update existing alliance models
for alliance in EveAllianceInfo.objects.all(): for alliance in EveAllianceInfo.objects.exclude(
alliance_id__in=settings.STR_ALLIANCE_IDS + settings.STR_BLUE_ALLIANCE_IDS):
update_alliance.delay(alliance.alliance_id) update_alliance.delay(alliance.alliance_id)
try: try:
@ -177,7 +189,7 @@ def run_corp_update():
logger.info("Alliance %s no longer meets minimum blue standing threshold" % alliance) logger.info("Alliance %s no longer meets minimum blue standing threshold" % alliance)
alliance.is_blue = False alliance.is_blue = False
alliance.save() alliance.save()
else: elif alliance.alliance_id not in settings.STR_BLUE_ALLIANCE_IDS:
logger.info("Alliance %s no longer in standings" % alliance) logger.info("Alliance %s no longer in standings" % alliance)
alliance.is_blue = False alliance.is_blue = False
alliance.save() alliance.save()
@ -189,7 +201,7 @@ def run_corp_update():
logger.info("Corp %s no longer meets minimum blue standing threshold" % corp) logger.info("Corp %s no longer meets minimum blue standing threshold" % corp)
corp.is_blue = False corp.is_blue = False
corp.save() corp.save()
else: elif corp.corporation_id not in settings.STR_BLUE_CORP_IDS:
if corp.alliance: if corp.alliance:
if not corp.alliance.is_blue: if not corp.alliance.is_blue:
logger.info("Corp %s and its alliance %s are no longer blue" % (corp, corp.alliance)) logger.info("Corp %s and its alliance %s are no longer blue" % (corp, corp.alliance))
@ -203,22 +215,8 @@ def run_corp_update():
logger.error("Model update failed with error code %s" % e.code) logger.error("Model update failed with error code %s" % e.code)
# delete unnecessary alliance models # delete unnecessary alliance models
for alliance in EveAllianceInfo.objects.filter(is_blue=False): EveAllianceInfo.objects.filter(is_blue=False).exclude(alliance_id__in=settings.STR_ALLIANCE_IDS).delete()
logger.debug("Checking to delete alliance %s" % alliance)
if not alliance.alliance_id in settings.STR_ALLIANCE_IDS:
logger.info("Deleting unnecessary alliance model %s" % alliance)
alliance.delete()
# delete unnecessary corp models # delete unnecessary corp models
for corp in EveCorporationInfo.objects.filter(is_blue=False): EveCorporationInfo.objects.filter(is_blue=False).exclude(corporation_id__in=settings.STR_CORP_IDS).exclude(
logger.debug("Checking to delete corp %s" % corp) alliance__alliance_id__in=settings.STR_ALLIANCE_IDS).delete()
if not corp.corporation_id in settings.STR_CORP_IDS:
logger.debug("Corp %s is not member corp" % corp)
if corp.alliance:
logger.debug("Corp %s has alliance %s" % (corp, corp.alliance))
if not corp.alliance.alliance_id in settings.STR_ALLIANCE_IDS:
logger.info("Deleting unnecessary corp model %s" % corp)
corp.delete()
else:
logger.info("Deleting unnecessary corp model %s" % corp)
corp.delete()

View File

@ -190,7 +190,7 @@ class EveApiManager:
logger.debug("Got corp standings from settings: %s" % results) logger.debug("Got corp standings from settings: %s" % results)
return results return results
else: else:
logger.warn("No corp API key supplied in settings. Unable to get standings.") logger.debug("No corp API key supplied in settings. Unable to get standings.")
return {} return {}
@staticmethod @staticmethod