Exemplo n.º 1
0
def send_async(func, spooler, sender, instance=None, timeout=None, signal=None, **kwargs):
    
    # persists modified_attrs if available for async signal handler
    if getattr(instance, '_modified_attrs_were', None):
        kwargs['_modified_attrs'] = instance._modified_attrs_were
    # raises a ValueError if the kwargs cannot be encoded to json
    kwargs_data = simplejson.dumps(kwargs, cls=DjangoJSONEncoder)

    # Make a datum
    data = {
        "func_name": func.__name__,
        "func_module": func.__module__,
        "sender": "%s__%s" % (sender._meta.app_label, sender.__name__) \
            if sender is not None else 'None',
        "instance": instance.id if instance else None,
        "kwargs": kwargs_data,
        "create_time": time.time(),
        "spooler": spooler,
    }
    if timeout:
        data['timeout'] = timeout

    if hasattr(connection, 'mapper'):
        data['affinity'] = simplejson.dumps(connection.mapper._affinity, cls=DjangoJSONEncoder)

    if getattr(settings, 'DISABLE_SIGASYNC_SPOOL', False):
        spoolqueue = get_spoolqueue(spooler)
        spoolqueue.submit(data)
        spoolqueue.process()
    else:
        enqueue_datum(data, spooler)
Exemplo n.º 2
0
def spooler_http_gateway(request, spooler):
    logger = logging.getLogger("sigasync.views.spooler_http_gateway")
    data = request.POST.copy()
    cleaned_data = {}
    
    for k in data:
        cleaned_data[k] = data.getlist(k) if len(data.getlist(k)) > 1 else data.get(k)
    
    spoolqueue = get_spoolqueue(spooler)
    # This can't use submit() because that does the http post
    spoolqueue._submit_datum(urlencode(cleaned_data))
    if getattr(settings, 'DISABLE_SIGASYNC_SPOOL', False):
        spoolqueue.process()
    return HttpResponse('OK')