mirror of
https://gitlab.com/allianceauth/allianceauth.git
synced 2025-07-16 16:00:17 +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 EveApiKeyPair
|
||||||
from eveonline.models import EveAllianceInfo
|
from eveonline.models import EveAllianceInfo
|
||||||
from eveonline.models import EveCorporationInfo
|
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
|
from services.managers.eve_api_manager import EveApiManager
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
@ -33,7 +33,7 @@ class EveManager:
|
|||||||
)
|
)
|
||||||
|
|
||||||
@staticmethod
|
@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,
|
corporation_name, corporation_ticker, alliance_id,
|
||||||
alliance_name, user, api_id):
|
alliance_name, user, api_id):
|
||||||
logger.debug("Creating model for character %s id %s" % (character_name, character_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.is_blue = model.is_blue if is_blue == None else is_blue
|
||||||
model.save()
|
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
|
@staticmethod
|
||||||
def get_api_key_pairs(user):
|
def get_api_key_pairs(user):
|
||||||
if EveApiKeyPair.objects.filter(user=user).exists():
|
if EveApiKeyPair.objects.filter(user=user).exists():
|
||||||
|
@ -217,6 +217,15 @@ class EveXmlProvider(EveProvider):
|
|||||||
)
|
)
|
||||||
return model
|
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):
|
def get_character(self, id):
|
||||||
api = evelink.eve.EVE(api=self.api)
|
api = evelink.eve.EVE(api=self.api)
|
||||||
try:
|
try:
|
||||||
@ -225,14 +234,7 @@ class EveXmlProvider(EveProvider):
|
|||||||
if int(e.code) == 105:
|
if int(e.code) == 105:
|
||||||
raise ObjectNotFound(id, 'character')
|
raise ObjectNotFound(id, 'character')
|
||||||
raise e
|
raise e
|
||||||
model = Character(
|
return self._build_character(charinfo)
|
||||||
self.adapter,
|
|
||||||
id,
|
|
||||||
charinfo['name'],
|
|
||||||
charinfo['corp']['id'],
|
|
||||||
charinfo['alliance']['id'],
|
|
||||||
)
|
|
||||||
return model
|
|
||||||
|
|
||||||
|
|
||||||
class EveAdapter(EveProvider):
|
class EveAdapter(EveProvider):
|
||||||
|
@ -27,21 +27,16 @@ def refresh_api(api):
|
|||||||
try:
|
try:
|
||||||
EveApiManager.validate_api(api.api_id, api.api_key, api.user)
|
EveApiManager.validate_api(api.api_id, api.api_key, api.user)
|
||||||
# Update characters
|
# Update characters
|
||||||
characters = EveApiManager.get_characters_from_api(api.api_id, api.api_key)
|
characters = EveManager.get_characters_from_api(api)
|
||||||
EveManager.update_characters_from_list(characters)
|
for c in characters:
|
||||||
new_character = False
|
try:
|
||||||
for char in characters.result:
|
EveManager.update_character_obj(c)
|
||||||
# Ensure we have a model for all characters on key
|
except EveCharacter.DoesNotExist:
|
||||||
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, c))
|
||||||
logger.debug(
|
EveManager.create_character_obj(c, api.user, api.api_id)
|
||||||
"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)
|
|
||||||
current_chars = EveCharacter.objects.filter(api_id=api.api_id)
|
current_chars = EveCharacter.objects.filter(api_id=api.api_id)
|
||||||
for c in current_chars:
|
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))
|
logger.info("Character %s no longer found on API ID %s" % (c, api.api_id))
|
||||||
c.delete()
|
c.delete()
|
||||||
except evelink.api.APIError as e:
|
except evelink.api.APIError as e:
|
||||||
|
@ -46,9 +46,8 @@ def add_api_key(request):
|
|||||||
api_key.save()
|
api_key.save()
|
||||||
owner = request.user
|
owner = request.user
|
||||||
# Grab characters associated with the key pair
|
# Grab characters associated with the key pair
|
||||||
characters = EveApiManager.get_characters_from_api(form.cleaned_data['api_id'],
|
characters = EveManager.get_characters_from_api(api_key)
|
||||||
form.cleaned_data['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()]
|
||||||
EveManager.create_characters_from_list(characters, owner, form.cleaned_data['api_id'])
|
|
||||||
logger.info("Successfully processed api add form for user %s" % request.user)
|
logger.info("Successfully processed api add form for user %s" % request.user)
|
||||||
if not settings.API_SSO_VALIDATION:
|
if not settings.API_SSO_VALIDATION:
|
||||||
messages.success(request, 'Added API key %s to your account.' % form.cleaned_data['api_id'])
|
messages.success(request, 'Added API key %s to your account.' % form.cleaned_data['api_id'])
|
||||||
|
Loading…
x
Reference in New Issue
Block a user