Esempio n. 1
0
def add_subscription(request):
    """
    This is complicated. (tm)
    A subscription can be:
    1) A user's service: The subscription has to be created if it doesn't exist
    before and the user will be its owner (only subscriber)
    2) A socnode feed: in this case, create the subscription only if it doesn't
    exist before and append the user to its subscribers.
    """
    host = 'http://%s' % request.get_host()
    if request.method == 'POST':
        surl = request.POST.get('surl', '')
        is_service = request.POST.get('is_service', '0')
        subscription_kind = 'service' if is_service=='1' else 'friend'
        subscription =  url_to_subscription(surl)
        if subscription:
            hub = subscription.hub
            subscription.is_service = True if is_service=='1' else False
            msg = '%s is on %s' % (surl, hub)
            # is there any similar subscription?
            similar = Subscription.all().filter('feed_url = ', subscription.feed_url)
            if similar and not subscription.is_service:
                subscription = similar[0]
                created = False
            else:
                created = True
            subscription.subscribers.append(request.user.key())
            subscription.save()
            post_subscribe.send(sender=Subscription, instance=subscription, 
                host=host, created=created)
        else:
            msg = '%s is not a valid feed url' % surl
        return HttpResponseRedirect('/subscriptions/?kind=%s' %
                subscription_kind)
Esempio n. 2
0
def list_subscriptions(request):
    kind = request.GET.get("kind", 'friend')
    his_subscriptions = Subscription.all().filter('subscribers = ',
            request.user.key())
    if kind == 'service':
        his_subscriptions.filter('is_service = ', True)
    elif kind == 'friend':
        his_subscriptions.filter('is_service = ', False)
    extra_context = {'kind': kind}
    return object_list(request, his_subscriptions, paginate_by=10,
            extra_context=extra_context)
Esempio n. 3
0
def cron_job(request):
    """
    fetch subscriptions that aren't connected to a hub.
    """
    nohub_subscriptions = Subscription.all().filter('hub = ', "")
    keys = [str(s.key()) for s in nohub_subscriptions]
    # now launch eftching tasks
    for key in keys:
        logging.info('task set to fetch subscription %s' % key)
        taskqueue.add(url='/subscriptions/fetch_feed/', params={'key': key})
    return HttpResponse('done')