Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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')
Ejemplo n.º 3
0
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')
Ejemplo n.º 4
0
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')
Ejemplo n.º 5
0
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
Ejemplo n.º 6
0
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')
Ejemplo n.º 7
0
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')
Ejemplo n.º 8
0
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')