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)
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')