Refactor the alliance update function, try to avoid corps being left out without their alliance

This commit is contained in:
2011-08-19 17:14:51 +01:00
parent db145ac3f0
commit bec05f1ee0

View File

@@ -32,22 +32,18 @@ def import_alliance_details():
allobj, created = EVEPlayerAlliance.objects.get_or_create(pk=alliance['allianceID']) allobj, created = EVEPlayerAlliance.objects.get_or_create(pk=alliance['allianceID'])
allobj.name = alliance['name'] allobj.name = alliance['name']
allobj.ticker = alliance['shortName'] 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.executor, created = EVEPlayerCorporation.objects.get_or_create(id=alliance['executorCorpID'])
allobj.member_count = alliance['memberCount'] allobj.member_count = alliance['memberCount']
allobj.api_last_updated = datetime.utcnow() allobj.api_last_updated = datetime.utcnow()
allobj.save() 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 id in members:
for corp in alliance['memberCorporations']: import_corp_details.delay(id)
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)
else: else:
# We got a error, retry # We got a error, retry
import_alliance_details.retry() import_alliance_details.retry()