mirror of
https://gitlab.com/allianceauth/allianceauth.git
synced 2025-07-13 22:40:16 +02:00
Retrieve character objects from api keys.
This commit is contained in:
parent
8379fdd7d5
commit
604808b195
@ -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():
|
||||
|
@ -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):
|
||||
|
@ -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:
|
||||
|
@ -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'])
|
||||
|
Loading…
x
Reference in New Issue
Block a user