Retrieve character objects from api keys.

This commit is contained in:
Adarnof 2016-12-19 20:56:14 -05:00
parent 8379fdd7d5
commit 604808b195
4 changed files with 28 additions and 26 deletions

View File

@ -3,7 +3,7 @@ from eveonline.models import EveCharacter
from eveonline.models import EveApiKeyPair
from eveonline.models import EveAllianceInfo
from eveonline.models import EveCorporationInfo
from eveonline.providers import eve_adapter_factory
from eveonline.providers import eve_adapter_factory, EveXmlProvider
from services.managers.eve_api_manager import EveApiManager
import logging
@ -33,7 +33,7 @@ class EveManager:
)
@staticmethod
def create_character(character_id, character_name, corporation_id,
def create_xml_character(character_id, character_name, corporation_id,
corporation_name, corporation_ticker, alliance_id,
alliance_name, user, api_id):
logger.debug("Creating model for character %s id %s" % (character_name, character_id))
@ -184,6 +184,12 @@ class EveManager:
model.is_blue = model.is_blue if is_blue == None else is_blue
model.save()
@staticmethod
def get_characters_from_api(api):
char_result = EveApiManager.get_characters_from_api(api.api_id, api.api_key).result
provider = EveXmlProvider(adapter=adapter)
return [provider._build_character(result) for id, result in char_result.items()]
@staticmethod
def get_api_key_pairs(user):
if EveApiKeyPair.objects.filter(user=user).exists():

View File

@ -217,6 +217,15 @@ class EveXmlProvider(EveProvider):
)
return model
def _build_character(self, result):
return Character(
self.adapter,
result['id'],
result['name'],
result['corp']['id'],
result['alliance']['id'],
)
def get_character(self, id):
api = evelink.eve.EVE(api=self.api)
try:
@ -225,14 +234,7 @@ class EveXmlProvider(EveProvider):
if int(e.code) == 105:
raise ObjectNotFound(id, 'character')
raise e
model = Character(
self.adapter,
id,
charinfo['name'],
charinfo['corp']['id'],
charinfo['alliance']['id'],
)
return model
return self._build_character(charinfo)
class EveAdapter(EveProvider):

View File

@ -27,21 +27,16 @@ def refresh_api(api):
try:
EveApiManager.validate_api(api.api_id, api.api_key, api.user)
# Update characters
characters = EveApiManager.get_characters_from_api(api.api_id, api.api_key)
EveManager.update_characters_from_list(characters)
new_character = False
for char in characters.result:
# Ensure we have a model for all characters on key
if not EveManager.check_if_character_exist(characters.result[char]['name']):
logger.debug(
"API key %s has a new character on the account: %s" % (api.api_id, characters.result[char]['name']))
new_character = True
if new_character:
logger.debug("Creating new character %s from api key %s" % (characters.result[char]['name'], api.api_id))
EveManager.create_characters_from_list(characters, api.user, api.api_id)
characters = EveManager.get_characters_from_api(api)
for c in characters:
try:
EveManager.update_character_obj(c)
except EveCharacter.DoesNotExist:
logger.debug("API key %s has a new character on the account: %s" % (api.api_id, c))
EveManager.create_character_obj(c, api.user, api.api_id)
current_chars = EveCharacter.objects.filter(api_id=api.api_id)
for c in current_chars:
if not int(c.character_id) in characters.result:
if not int(c.character_id) in [c.id for c in characters]:
logger.info("Character %s no longer found on API ID %s" % (c, api.api_id))
c.delete()
except evelink.api.APIError as e:

View File

@ -46,9 +46,8 @@ def add_api_key(request):
api_key.save()
owner = request.user
# Grab characters associated with the key pair
characters = EveApiManager.get_characters_from_api(form.cleaned_data['api_id'],
form.cleaned_data['api_key'])
EveManager.create_characters_from_list(characters, owner, form.cleaned_data['api_id'])
characters = EveManager.get_characters_from_api(api_key)
[EveManager.create_character_with_id(c.id, owner, api_key.api_id) for c in characters if not EveCharacter.objects.filter(character_id=c.id).exists()]
logger.info("Successfully processed api add form for user %s" % request.user)
if not settings.API_SSO_VALIDATION:
messages.success(request, 'Added API key %s to your account.' % form.cleaned_data['api_id'])