mirror of
https://github.com/nikdoof/test-auth.git
synced 2025-12-14 14:52:15 +00:00
Task execution optimizations, tries to reduce exec time of API import
This commit is contained in:
@@ -107,25 +107,24 @@ def import_apikey_func(api_userid, api_key, user=None, force_cache=False):
|
|||||||
account.api_last_updated = datetime.utcnow()
|
account.api_last_updated = datetime.utcnow()
|
||||||
account.save()
|
account.save()
|
||||||
|
|
||||||
|
tasklist = []
|
||||||
|
|
||||||
# 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 = []
|
||||||
for char in doc['result']['characters']:
|
for char in doc['result']['characters']:
|
||||||
import_eve_character.delay(char['characterID'], api_key, api_userid, callback=link_char_to_account.subtask(account=account.id))
|
tasklist.append(import_eve_character.subtask(char['characterID'], api_key, api_userid))
|
||||||
newcharlist.append(int(char['characterID']))
|
newcharlist.append(int(char['characterID']))
|
||||||
|
|
||||||
toremove = charlist - set(newcharlist)
|
toremove = charlist - set(newcharlist)
|
||||||
for char in account.characters.filter(id__in=toremove):
|
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:
|
||||||
|
tasklist.append(update_user_access.subtask(user=account.user.id))
|
||||||
|
|
||||||
|
ts = TaskSet(tasks=tasklist)
|
||||||
|
ts.apply_async()
|
||||||
|
|
||||||
return account
|
return account
|
||||||
|
|
||||||
|
|
||||||
@task(ignore_result=True)
|
|
||||||
def link_char_to_account(character, account):
|
|
||||||
acc = EVEAccount.objects.get(id=account)
|
|
||||||
char = EVEPlayerCharacter.objects.get(id=character)
|
|
||||||
|
|
||||||
acc.characters.add(char)
|
|
||||||
|
|
||||||
if acc.user:
|
|
||||||
update_user_access.delay(user=acc.user.id)
|
|
||||||
|
|||||||
@@ -64,15 +64,15 @@ def import_eve_character(character_id, api_key=None, user_id=None, callback=None
|
|||||||
pchar.attrib_willpower = values['attributes']['willpower']
|
pchar.attrib_willpower = values['attributes']['willpower']
|
||||||
pchar.attrib_memory = values['attributes']['memory']
|
pchar.attrib_memory = values['attributes']['memory']
|
||||||
|
|
||||||
|
|
||||||
# Process the character's skills
|
# Process the character's skills
|
||||||
pchar.total_sp = 0
|
pchar.total_sp = 0
|
||||||
for skill in values.get('skills', None):
|
for skill in values.get('skills', None):
|
||||||
skillobj, created = EVESkill.objects.get_or_create(id=skill['typeID'])
|
skillobj, created = EVESkill.objects.get_or_create(id=skill['typeID'])
|
||||||
charskillobj, created = EVEPlayerCharacterSkill.objects.get_or_create(skill=skillobj, character=pchar)
|
charskillobj, created = EVEPlayerCharacterSkill.objects.get_or_create(skill=skillobj, character=pchar)
|
||||||
charskillobj.level = int(skill['level'])
|
if created or not charskillobj.level == int(skill['level']) or not charskillobj.skillpoints == int(skill['skillpoints']):
|
||||||
charskillobj.skillpoints = int(skill['skillpoints'])
|
charskillobj.level = int(skill['level'])
|
||||||
charskillobj.save()
|
charskillobj.skillpoints = int(skill['skillpoints'])
|
||||||
|
charskillobj.save()
|
||||||
pchar.total_sp = pchar.total_sp + int(skill['skillpoints'])
|
pchar.total_sp = pchar.total_sp + int(skill['skillpoints'])
|
||||||
|
|
||||||
# Process the character's roles
|
# Process the character's roles
|
||||||
@@ -97,6 +97,10 @@ def import_eve_character(character_id, api_key=None, user_id=None, callback=None
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
acc = EVEAccount.objects.get(api_user_id=user_id)
|
acc = EVEAccount.objects.get(api_user_id=user_id)
|
||||||
|
|
||||||
|
if not char in acc.characters.all():
|
||||||
|
acc.characters.add(pchar)
|
||||||
|
|
||||||
if pchar.director and acc.api_keytype == API_KEYTYPE_FULL:
|
if pchar.director and acc.api_keytype == API_KEYTYPE_FULL:
|
||||||
from eve_api.tasks.corporation import import_corp_members
|
from eve_api.tasks.corporation import import_corp_members
|
||||||
import_corp_members.delay(api_key=api_key, api_userid=user_id, character_id=pchar.id)
|
import_corp_members.delay(api_key=api_key, api_userid=user_id, character_id=pchar.id)
|
||||||
|
|||||||
Reference in New Issue
Block a user