mirror of
https://github.com/nikdoof/test-auth.git
synced 2025-12-13 22:32:15 +00:00
Add task to import multiple characters in one run, allowing for easier permission callbacks
This commit is contained in:
@@ -9,7 +9,7 @@ from eve_proxy.models import CachedDocument
|
|||||||
from eve_api.models import EVEAccount, EVEPlayerCharacter
|
from eve_api.models import EVEAccount, EVEPlayerCharacter
|
||||||
from eve_api.app_defines import *
|
from eve_api.app_defines import *
|
||||||
from eve_api.utils import basic_xml_parse_doc
|
from eve_api.utils import basic_xml_parse_doc
|
||||||
from eve_api.tasks.character import import_eve_character
|
from eve_api.tasks.character import import_eve_characters
|
||||||
from eve_api.tasks.corporation import import_corp_members, import_corp_details
|
from eve_api.tasks.corporation import import_corp_members, import_corp_details
|
||||||
|
|
||||||
from sso.tasks import update_user_access
|
from sso.tasks import update_user_access
|
||||||
@@ -111,20 +111,15 @@ def import_apikey_func(api_userid, api_key, user=None, force_cache=False):
|
|||||||
|
|
||||||
# Process the account's character list
|
# Process the account's character list
|
||||||
charlist = set(account.characters.all().values_list('id', flat=True))
|
charlist = set(account.characters.all().values_list('id', flat=True))
|
||||||
newcharlist = []
|
newcharlist = [char['characterID'] char in doc['result']['characters']]
|
||||||
for char in doc['result']['characters']:
|
|
||||||
tasklist.append(import_eve_character.subtask(args=(char['characterID'], api_key, api_userid)))
|
|
||||||
newcharlist.append(int(char['characterID']))
|
|
||||||
|
|
||||||
toremove = charlist - set(newcharlist)
|
for char in account.characters.filter(id__in=set(charlist - set(newcharlist)):
|
||||||
for char in account.characters.filter(id__in=toremove):
|
|
||||||
account.characters.remove(char)
|
account.characters.remove(char)
|
||||||
|
|
||||||
# If we have a user, update their details in the taskset
|
|
||||||
if account.user:
|
if account.user:
|
||||||
tasklist.append(update_user_access.subtask(kwargs={'user': account.user.id }))
|
cb = update_user_access.subtask(kwargs={'user': account.user.id })
|
||||||
|
else:
|
||||||
ts = TaskSet(tasks=tasklist)
|
cb = None
|
||||||
ts.apply_async()
|
import_eve_characters.delay(newcharlist, api_key, api_userid, callback=cb)
|
||||||
|
|
||||||
return account
|
return account
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ from datetime import datetime, timedelta
|
|||||||
from xml.dom import minidom
|
from xml.dom import minidom
|
||||||
|
|
||||||
from celery.decorators import task
|
from celery.decorators import task
|
||||||
|
from celery.task.set import subtask
|
||||||
|
|
||||||
from eve_proxy.models import CachedDocument
|
from eve_proxy.models import CachedDocument
|
||||||
|
|
||||||
@@ -14,10 +15,33 @@ from eve_api.utils import basic_xml_parse, basic_xml_parse_doc
|
|||||||
def import_eve_character(character_id, api_key=None, user_id=None, callback=None):
|
def import_eve_character(character_id, api_key=None, user_id=None, callback=None):
|
||||||
"""
|
"""
|
||||||
Imports a character from the API, providing a API key will populate
|
Imports a character from the API, providing a API key will populate
|
||||||
further details
|
further details. Returns a single EVEPlayerCharacter object
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
pchar = import_eve_character_func(character_id, api_key, user_id)
|
||||||
|
if callback:
|
||||||
|
subtask(callback).delay(character=pchar.id)
|
||||||
|
else:
|
||||||
|
return pchar
|
||||||
|
|
||||||
|
|
||||||
|
@task()
|
||||||
|
def import_eve_characters(character_list, api_key=None, user_id=None, callback=None):
|
||||||
|
"""
|
||||||
|
Imports characters from the API, providing a API key will populate
|
||||||
|
further details. Returns a list of EVEPlayerCharacter objects
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
results = [import_eve_character_func(char, api_key, user_id) for char in character_list]
|
||||||
|
if callback:
|
||||||
|
subtask(callback).delay(characters=results)
|
||||||
|
else:
|
||||||
|
return results
|
||||||
|
|
||||||
|
|
||||||
|
def import_eve_character_func(character_id, api_key=None, user_id=None):
|
||||||
char_doc = CachedDocument.objects.api_query('/eve/CharacterInfo.xml.aspx',
|
char_doc = CachedDocument.objects.api_query('/eve/CharacterInfo.xml.aspx',
|
||||||
params={'characterID': character_id},
|
params={'characterID': character_id},
|
||||||
no_cache=False)
|
no_cache=False)
|
||||||
@@ -107,7 +131,4 @@ def import_eve_character(character_id, api_key=None, user_id=None, callback=None
|
|||||||
except EVEAccount.DoesNotExist:
|
except EVEAccount.DoesNotExist:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
if callback:
|
return pchar
|
||||||
callback.delay(character=pchar.id)
|
|
||||||
else:
|
|
||||||
return pchar
|
|
||||||
|
|||||||
Reference in New Issue
Block a user