values = d['result'] pchar, created = EVEPlayerCharacter.objects.get_or_create(id=character_id) # Set the character's name, avoid oddities in the XML feed if not values['characterName'] == {}: pchar.name = values['characterName'] else: pchar.name = "" pchar.security_status = values['securityStatus'] # Set corporation and join date corp, created = EVEPlayerCorporation.objects.get_or_create(pk=values['corporationID']) from eve_api.tasks.corporation import import_corp_details if created or not corp.name or corp.api_last_updated < (datetime.utcnow() - timedelta(hours=12)): import_corp_details.delay(values['corporationID']) pchar.corporation = corp pchar.corporation_date = values['corporationDate'] # Derrive Race value from the choices for v in API_RACES_CHOICES: val, race = v if race == values['race']: pchar.race = val break # Import employment history if its made available if 'employmentHistory' in values: reclist = pchar.employmenthistory.values_list('pk', flat=True) for emp in values['employmentHistory']:
try: doc = CachedDocument.objects.api_query('/eve/AllianceList.xml.aspx') except DocumentRetrievalError, exc: import_alliance_details.retry(exc=exc) return parsedoc = basic_xml_parse_doc(doc) if 'eveapi' in parsedoc and not 'error' in parsedoc['eveapi']: for alliance in parsedoc['eveapi']['result']['alliances']: 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.executor, created = EVEPlayerCorporation.objects.get_or_create(id=alliance['executorCorpID']) allobj.member_count = alliance['memberCount'] allobj.api_last_updated = datetime.utcnow() allobj.save() 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) # Import any corps missing from DB importlist = set(members) - set(EVEPlayerCorporation.objects.filter(id__in=members).values_list('id', flat=True)) for id in importlist: import_corp_details.delay(id) else: # We got a error, retry import_alliance_details.retry()