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