From bec05f1ee047bcd771ac76be31bbff736c5c2808 Mon Sep 17 00:00:00 2001 From: Andrew Williams Date: Fri, 19 Aug 2011 17:14:51 +0100 Subject: [PATCH] Refactor the alliance update function, try to avoid corps being left out without their alliance --- app/eve_api/tasks/alliance.py | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/app/eve_api/tasks/alliance.py b/app/eve_api/tasks/alliance.py index 2ffa539..0b73ef4 100644 --- a/app/eve_api/tasks/alliance.py +++ b/app/eve_api/tasks/alliance.py @@ -32,22 +32,18 @@ def import_alliance_details(): allobj, created = EVEPlayerAlliance.objects.get_or_create(pk=alliance['allianceID']) allobj.name = alliance['name'] allobj.ticker = alliance['shortName'] - allobj.date_founded = datetime.strptime(alliance['startDate'],"%Y-%m-%d %H:%M:%S") + allobj.date_founded = datetime.strptime(alliance['startDate'], "%Y-%m-%d %H:%M:%S") allobj.executor, created = EVEPlayerCorporation.objects.get_or_create(id=alliance['executorCorpID']) allobj.member_count = alliance['memberCount'] allobj.api_last_updated = datetime.utcnow() allobj.save() - corplist = allobj.eveplayercorporation_set.all().values_list('id', flat=True) + members = [int(corp['corporationID']) for corp in alliance['memberCorporations'] + EVEPlayerCorporation.objects.filter(id__in=members).update(alliance=allobj) + EVEPlayerCorporation.objects.filter(alliance=allobj).exclude(id__in=members).update(alliance=None) - validcorps = [] - for corp in alliance['memberCorporations']: - if int(corp['corporationID']) not in corplist: - import_corp_details.delay(corp['corporationID']) - validcorps.append(int(corp['corporationID'])) - - delcorps = set(corplist) - set(validcorps) - EVEPlayerCorporation.objects.filter(id__in=delcorps).update(alliance=None) + for id in members: + import_corp_details.delay(id) else: # We got a error, retry import_alliance_details.retry()