def queue_character_tasks(keys): tasks = [] for name, taskfns in character_tasks.items(): current_time = get_current_time() apicall = APICall.objects.get(type='Character', name=name) targets = APIUpdate.objects.filter(apicall=apicall, apikey__in=keys) targets = targets.filter(Q(cached_until__lte=current_time) | Q(cached_until=None)) for target in targets: log.debug('Queued {0} with keyID {1} with APIUpdate {2}'.format( name, target.apikey.pk, target.pk )) if targets.count() > 0: log.info('Queued {0} {1}'.format( targets.count(), apicall )) for fn in taskfns: for target in targets: tasks.append(fn.s(target.pk)) else: log.info('No targets for {0} need updating'.format( apicall )) return tasks
def update_all_sheets(*args, **kwargs): tasks = [] #### Characters keys = APIKey.objects.filter(expired=False).exclude(type='Corporation') current_time = get_current_time() apicall = APICall.objects.get(type='Character', name='CharacterSheet') targets = APIUpdate.objects.filter(apicall=apicall, apikey__in=keys) targets = targets.filter( Q(cached_until__lte=current_time) | Q(cached_until=None)) if targets.count() > 0: log.info('Queued {0} {1}'.format(targets.count(), apicall)) for target in targets: tasks.append(fetch_charactersheet.s(target.pk)) else: log.info('No character sheets need updating.') #### Corporations corpkeys = APIKey.objects.filter(expired=False, type='Corporation') apicall = APICall.objects.get(type='Corporation', name='CorporationSheet') targets = APIUpdate.objects.filter(apicall=apicall, apikey__in=corpkeys) targets = targets.filter( Q(cached_until__lte=current_time) | Q(cached_until=None)) if targets.count() > 0: log.info('Queued {0} {1}'.format(targets.count(), apicall)) for target in targets: tasks.append(fetch_corporationsheet.s(target.pk)) else: log.info('No corporation sheets need updating') if len(tasks) > 0: group(tasks).apply_async(queue='transient')
def update_universe(): batch = [] for name, taskfn in API_MAP.items(): target, created = UniverseUpdate.objects.get_or_create(apicall=name) current_time = get_current_time() if created: batch.append(taskfn.s()) else: if not target.cached_until: batch.append(taskfn.s()) elif target.cached_until < current_time: batch.append(taskfn.s()) group(batch).apply_async() log.info('Universe update scheduled')
def queue_corporation_tasks(corpkeys): tasks = [] for name, taskfns in corporation_tasks.items(): current_time = get_current_time() apicall = APICall.objects.get(type='Corporation', name=name) targets = APIUpdate.objects.filter(apicall=apicall, apikey__in=corpkeys) targets = targets.filter( Q(cached_until__lte=current_time) | Q(cached_until=None)) if targets.count() > 0: log.debug('Queued {0} {1}'.format(targets.count(), apicall)) for fn in taskfns: for target in targets: tasks.append(fn(target.pk)) else: log.info('No targets for {0} need updating'.format(apicall)) return tasks
def update_apikey_sheets(apikey_pk): tasks = [] try: key = APIKey.objects.get(pk=apikey_pk, expired=False) except APIKey.DoesNotExist: return current_time = get_current_time() if key.type in ('Character', 'Account'): apicall = APICall.objects.get(type='Character', name='CharacterSheet') targets = APIUpdate.objects.filter(apicall=apicall, apikey=key) targets = targets.filter(Q(cached_until__lte=current_time) | Q(cached_until=None)) if targets.count() > 0: log.info('Queued {0} {1} for capsuler "{2}".'.format( targets.count(), apicall, key.owner )) for target in targets: tasks.append(fetch_charactersheet.s(target.pk)) else: log.info('No character sheets need updating.') else: apicall = APICall.objects.get(type='Corporation', name='CorporationSheet') targets = APIUpdate.objects.filter(apicall=apicall, apikey=key) targets = targets.filter(Q(cached_until__lte=current_time) | Q(cached_until=None)) if targets.count() > 0: log.info('Queued {0} {1} for capsuler "{2}".'.format( targets.count(), apicall, key.owner )) for target in targets: tasks.append(fetch_corporationsheet.s(target.pk)) else: log.info('No corporation sheets need updating') if len(tasks) > 0: group(tasks).apply_async(queue='transient')
def update_all_sheets(*args, **kwargs): tasks = [] #### Characters keys = APIKey.objects.filter(expired=False).exclude(type='Corporation') current_time = get_current_time() apicall = APICall.objects.get(type='Character', name='CharacterSheet') targets = APIUpdate.objects.filter(apicall=apicall, apikey__in=keys) targets = targets.filter(Q(cached_until__lte=current_time) | Q(cached_until=None)) if targets.count() > 0: log.info('Queued {0} {1}'.format( targets.count(), apicall )) for target in targets: tasks.append(fetch_charactersheet.s(target.pk)) else: log.info('No character sheets need updating.') #### Corporations corpkeys = APIKey.objects.filter(expired=False, type='Corporation') apicall = APICall.objects.get(type='Corporation', name='CorporationSheet') targets = APIUpdate.objects.filter(apicall=apicall, apikey__in=corpkeys) targets = targets.filter(Q(cached_until__lte=current_time) | Q(cached_until=None)) if targets.count() > 0: log.info('Queued {0} {1}'.format( targets.count(), apicall )) for target in targets: tasks.append(fetch_corporationsheet.s(target.pk)) else: log.info('No corporation sheets need updating') if len(tasks) > 0: group(tasks).apply_async(queue='transient')
def update_apikey_sheets(apikey_pk): tasks = [] try: key = APIKey.objects.get(pk=apikey_pk, expired=False) except APIKey.DoesNotExist: return current_time = get_current_time() if key.type in ('Character', 'Account'): apicall = APICall.objects.get(type='Character', name='CharacterSheet') targets = APIUpdate.objects.filter(apicall=apicall, apikey=key) targets = targets.filter( Q(cached_until__lte=current_time) | Q(cached_until=None)) if targets.count() > 0: log.info('Queued {0} {1} for capsuler "{2}".'.format( targets.count(), apicall, key.owner)) for target in targets: tasks.append(fetch_charactersheet.s(target.pk)) else: log.info('No character sheets need updating.') else: apicall = APICall.objects.get(type='Corporation', name='CorporationSheet') targets = APIUpdate.objects.filter(apicall=apicall, apikey=key) targets = targets.filter( Q(cached_until__lte=current_time) | Q(cached_until=None)) if targets.count() > 0: log.info('Queued {0} {1} for capsuler "{2}".'.format( targets.count(), apicall, key.owner)) for target in targets: tasks.append(fetch_corporationsheet.s(target.pk)) else: log.info('No corporation sheets need updating') if len(tasks) > 0: group(tasks).apply_async(queue='transient')