Ejemplo n.º 1
0
def new_activity(request, token):

    if request.method == 'GET':
        success = HttpResponse(request.GET['hub.challenge'])
        failure = HttpResponseNotFound()

        topic = request.GET['hub.topic']
        subscription_exists = True if ActivitySubscription.objects.filter(
            feed_uri=topic, token=token).count() > 0 else False

        mode = request.GET['hub.mode']
        log.debug('Got verification request for mode %r on topic %r', mode, topic)
        if mode == 'subscribe':
            return success if subscription_exists else failure
        elif mode == 'unsubscribe':
            return failure if subscription_exists else success

        return HttpResponse("Unknown hub mode %r" % mode, status=400,
            content_type='text/plain')

    log.debug('Got pushed some feed data to %r!', request.build_absolute_uri())

    try:
        feed = ElementTree.fromstring(request.raw_post_data)
        entries = feed.findall('{http://www.w3.org/2005/Atom}entry')
        if entries is None:
            raise ValueError('No entries in this feed')
        for entry in entries:
            act = Activity.from_atom_entry(entry, request)
            if not act.pk:
                act.save()
    except Exception, exc:
        log.exception(exc)
        raise