2010-08-30 18:41:53 -04:00
|
|
|
import datetime
|
2010-08-16 12:55:45 -04:00
|
|
|
from utils import log as logging
|
2010-07-25 23:13:27 -04:00
|
|
|
from django.shortcuts import get_object_or_404
|
2010-08-25 20:43:35 -04:00
|
|
|
from django.http import HttpResponseForbidden
|
2010-08-25 21:02:21 -04:00
|
|
|
from apps.rss_feeds.models import Feed, merge_feeds
|
2010-08-25 20:43:35 -04:00
|
|
|
from utils.user_functions import ajax_login_required
|
|
|
|
from utils import json, feedfinder
|
2010-07-28 18:18:01 -04:00
|
|
|
from utils.feed_functions import relative_timeuntil, relative_timesince
|
2010-07-25 23:13:27 -04:00
|
|
|
|
|
|
|
@json.json_view
|
|
|
|
def load_feed_statistics(request):
|
|
|
|
stats = dict()
|
|
|
|
feed_id = request.GET['feed_id']
|
|
|
|
feed = get_object_or_404(Feed, pk=feed_id)
|
|
|
|
|
|
|
|
# Dates of last and next update
|
2010-07-28 18:18:01 -04:00
|
|
|
stats['last_update'] = relative_timesince(feed.last_update)
|
|
|
|
stats['next_update'] = relative_timeuntil(feed.next_scheduled_update)
|
2010-07-25 23:13:27 -04:00
|
|
|
|
|
|
|
# Minutes between updates
|
2010-07-26 22:21:58 -04:00
|
|
|
update_interval_minutes, random_factor = feed.get_next_scheduled_update()
|
|
|
|
stats['update_interval_minutes'] = update_interval_minutes
|
2010-07-25 23:13:27 -04:00
|
|
|
|
|
|
|
# Stories per month - average and month-by-month breakout
|
2010-08-13 11:03:07 -04:00
|
|
|
average_stories_per_month, story_count_history = feed.average_stories_per_month, feed.story_count_history
|
2010-07-26 14:37:17 -04:00
|
|
|
stats['average_stories_per_month'] = average_stories_per_month
|
2010-08-13 11:03:07 -04:00
|
|
|
stats['story_count_history'] = story_count_history and json.decode(story_count_history)
|
2010-07-25 23:13:27 -04:00
|
|
|
|
|
|
|
# Subscribers
|
|
|
|
stats['subscriber_count'] = feed.num_subscribers
|
|
|
|
|
2010-08-15 12:04:26 -04:00
|
|
|
logging.info(" ---> [%s] Statistics: %s" % (request.user, feed))
|
2010-08-02 23:09:47 -04:00
|
|
|
|
2010-08-25 10:18:08 -04:00
|
|
|
return stats
|
|
|
|
|
2010-08-25 20:43:35 -04:00
|
|
|
@ajax_login_required
|
2010-08-25 10:18:08 -04:00
|
|
|
@json.json_view
|
|
|
|
def exception_retry(request):
|
|
|
|
feed_id = request.POST['feed_id']
|
2010-08-30 18:41:53 -04:00
|
|
|
reset_fetch = request.POST.get('reset_fetch', False)
|
2010-08-25 10:18:08 -04:00
|
|
|
feed = get_object_or_404(Feed, pk=feed_id)
|
|
|
|
|
2010-08-30 18:41:53 -04:00
|
|
|
feed.next_scheduled_update = datetime.datetime.now()
|
2010-08-26 10:04:32 -04:00
|
|
|
feed.has_page_exception = False
|
|
|
|
feed.has_feed_exception = False
|
2010-08-30 18:41:53 -04:00
|
|
|
if reset_fetch:
|
|
|
|
feed.fetched_once = False
|
2010-08-25 10:18:08 -04:00
|
|
|
feed.save()
|
|
|
|
|
2010-08-30 18:41:53 -04:00
|
|
|
feed.update()
|
|
|
|
|
2010-08-25 20:43:35 -04:00
|
|
|
return {'code': 1}
|
|
|
|
|
|
|
|
|
|
|
|
@ajax_login_required
|
|
|
|
@json.json_view
|
|
|
|
def exception_change_feed_address(request):
|
|
|
|
feed_id = request.POST['feed_id']
|
|
|
|
feed = get_object_or_404(Feed, pk=feed_id)
|
2010-08-25 21:02:21 -04:00
|
|
|
feed_address = request.POST['feed_address']
|
2010-08-25 20:43:35 -04:00
|
|
|
|
2010-08-27 18:35:33 -04:00
|
|
|
if not feed.has_feed_exception and not feed.has_page_exception:
|
2010-08-25 20:43:35 -04:00
|
|
|
logging.info(" ***********> [%s] Incorrect feed address change: %s" % (request.user, feed))
|
|
|
|
return HttpResponseForbidden()
|
|
|
|
|
2010-08-26 10:04:32 -04:00
|
|
|
feed.has_feed_exception = False
|
2010-08-25 20:43:35 -04:00
|
|
|
feed.active = True
|
|
|
|
feed.fetched_once = False
|
2010-08-25 21:02:21 -04:00
|
|
|
feed.feed_address = feed_address
|
2010-08-30 18:41:53 -04:00
|
|
|
feed.next_scheduled_update = datetime.datetime.now()
|
2010-08-25 21:02:21 -04:00
|
|
|
try:
|
|
|
|
feed.save()
|
|
|
|
except:
|
|
|
|
original_feed = Feed.objects.get(feed_address=feed_address)
|
2010-08-30 18:41:53 -04:00
|
|
|
original_feed.next_scheduled_update = datetime.datetime.now()
|
2010-08-26 10:04:32 -04:00
|
|
|
original_feed.has_feed_exception = False
|
2010-08-25 21:02:21 -04:00
|
|
|
original_feed.active = True
|
|
|
|
original_feed.save()
|
|
|
|
merge_feeds(original_feed.pk, feed.pk)
|
2010-08-25 20:43:35 -04:00
|
|
|
|
|
|
|
return {'code': 1}
|
|
|
|
|
|
|
|
@ajax_login_required
|
|
|
|
@json.json_view
|
|
|
|
def exception_change_feed_link(request):
|
|
|
|
feed_id = request.POST['feed_id']
|
|
|
|
feed = get_object_or_404(Feed, pk=feed_id)
|
|
|
|
feed_link = request.POST['feed_link']
|
|
|
|
code = -1
|
|
|
|
|
2010-08-26 12:37:03 -04:00
|
|
|
if not feed.has_page_exception and not feed.has_feed_exception:
|
2010-08-26 10:04:32 -04:00
|
|
|
logging.info(" ***********> [%s] Incorrect feed link change: %s" % (request.user, feed))
|
2010-08-25 21:02:21 -04:00
|
|
|
# This Forbidden-403 throws an error, which sounds pretty good to me right now
|
2010-08-25 20:43:35 -04:00
|
|
|
return HttpResponseForbidden()
|
|
|
|
|
|
|
|
feed_address = feedfinder.feed(feed_link)
|
|
|
|
if feed_address:
|
|
|
|
code = 1
|
2010-08-26 10:04:32 -04:00
|
|
|
feed.has_page_exception = False
|
2010-08-25 20:43:35 -04:00
|
|
|
feed.active = True
|
|
|
|
feed.fetched_once = False
|
|
|
|
feed.feed_link = feed_link
|
|
|
|
feed.feed_address = feed_address
|
2010-08-30 18:41:53 -04:00
|
|
|
feed.next_scheduled_update = datetime.datetime.now()
|
2010-08-25 21:02:21 -04:00
|
|
|
try:
|
|
|
|
feed.save()
|
|
|
|
except:
|
|
|
|
original_feed = Feed.objects.get(feed_address=feed_address)
|
2010-08-30 18:41:53 -04:00
|
|
|
original_feed.next_scheduled_update = datetime.datetime.now()
|
2010-08-26 10:04:32 -04:00
|
|
|
original_feed.has_page_exception = False
|
2010-08-25 21:02:21 -04:00
|
|
|
original_feed.active = True
|
|
|
|
original_feed.save()
|
|
|
|
merge_feeds(original_feed.pk, feed.pk)
|
2010-08-25 20:43:35 -04:00
|
|
|
|
|
|
|
return {'code': code}
|
|
|
|
|
|
|
|
|