Fixing miscellaneous issues that have been throwing exceptions. Feed importing, google reader, loading feeds/pages, approving feeds. ALl with bad requests now let the user down easily as opposed to 500ing.

This commit is contained in:
Samuel Clay 2011-02-03 18:38:10 -05:00
parent 969f7e0d4c
commit 53d759520f
3 changed files with 51 additions and 32 deletions

View file

@ -85,6 +85,7 @@ def reader_authorize(request):
def reader_callback(request):
access_token_url = 'https://www.google.com/accounts/OAuthGetAccessToken'
consumer = oauth.Consumer(settings.OAUTH_KEY, settings.OAUTH_SECRET)
user_token = None
if request.user.is_authenticated():
user_token = OAuthToken.objects.get(user=request.user)
@ -98,31 +99,35 @@ def reader_callback(request):
user_token = user_tokens[0]
user_token.session_id = request.session.session_key
user_token.save()
# logging.info("Google Reader request.GET: %s" % request.GET)
# Authenticated in Google, so verify and fetch access tokens
token = oauth.Token(user_token.request_token, user_token.request_token_secret)
token.set_verifier(request.GET['oauth_verifier'])
client = oauth.Client(consumer, token)
resp, content = client.request(access_token_url, "POST")
access_token = dict(urlparse.parse_qsl(content))
# logging.info(" ---> [%s] OAuth Reader Content: %s -- %s" % (request.user, token, access_token))
user_token.access_token = access_token.get('oauth_token')
user_token.access_token_secret = access_token.get('oauth_token_secret')
try:
user_token.save()
except IntegrityError:
if user_token and request.GET.get('oauth_verifier'):
# logging.info("Google Reader request.GET: %s" % request.GET)
# Authenticated in Google, so verify and fetch access tokens
token = oauth.Token(user_token.request_token, user_token.request_token_secret)
token.set_verifier(request.GET['oauth_verifier'])
client = oauth.Client(consumer, token)
resp, content = client.request(access_token_url, "POST")
access_token = dict(urlparse.parse_qsl(content))
# logging.info(" ---> [%s] OAuth Reader Content: %s -- %s" % (request.user, token, access_token))
user_token.access_token = access_token.get('oauth_token')
user_token.access_token_secret = access_token.get('oauth_token_secret')
try:
user_token.save()
except IntegrityError:
logging.info(" ***> [%s] Bad token from Google Reader. Re-authenticating." % (request.user,))
return HttpResponseRedirect(reverse('google-reader-authorize'))
# Fetch imported feeds on next page load
request.session['import_from_google_reader'] = True
logging.info(" ---> [%s] ~BB~FW~SBFinishing Google Reader import - %s" % (request.user, request.META['REMOTE_ADDR'],))
if request.user.is_authenticated():
return HttpResponseRedirect(reverse('index'))
else:
logging.info(" ***> [%s] Bad token from Google Reader. Re-authenticating." % (request.user,))
return HttpResponseRedirect(reverse('google-reader-authorize'))
# Fetch imported feeds on next page load
request.session['import_from_google_reader'] = True
logging.info(" ---> [%s] ~BB~FW~SBFinishing Google Reader import - %s" % (request.user, request.META['REMOTE_ADDR'],))
if request.user.is_authenticated():
return HttpResponseRedirect(reverse('index'))
return HttpResponseRedirect(reverse('google-reader-authorize'))
return HttpResponseRedirect(reverse('import-signup'))
@json.json_view

View file

@ -1,6 +1,7 @@
import datetime
import time
import random
import re
from django.shortcuts import render_to_response, get_object_or_404
from django.contrib.auth.decorators import login_required
from django.template import RequestContext
@ -274,9 +275,14 @@ def load_single_feed(request):
page = int(request.REQUEST.get('page', 0))
if page:
offset = limit * page
feed_id = int(request.REQUEST.get('feed_id', 0))
feed_id = None
try:
feed_id = int(request.GET.get('feed_id', 0))
except ValueError:
feed_id_matches = re.search(r'(\d+)', request.GET['feed_id'])
if feed_id_matches: feed_id = int(feed_id_matches.group(1))
dupe_feed_id = None
if feed_id == 0:
if not feed_id:
raise Http404
try:
@ -368,8 +374,13 @@ def load_single_feed(request):
return data
def load_feed_page(request):
feed_id = int(request.GET.get('feed_id', 0))
if feed_id == 0:
feed_id = None
try:
feed_id = int(request.GET.get('feed_id', 0))
except ValueError:
feed_id_matches = re.search(r'(\d+)', request.GET['feed_id'])
if feed_id_matches: feed_id = int(feed_id_matches.group(1))
if not feed_id:
raise Http404
data = MFeedPage.get_data(feed_id=feed_id)
@ -442,7 +453,10 @@ def load_river_stories(request):
feed_counts = {}
feed_last_reads = {}
for feed_id in feed_ids:
usersub = UserSubscription.objects.get(feed__pk=feed_id, user=user)
try:
usersub = UserSubscription.objects.get(feed__pk=feed_id, user=user)
except UserSubscription.DoesNotExist:
continue
feed_counts[feed_id] = (usersub.unread_count_negative * 1+
usersub.unread_count_neutral * 10+
usersub.unread_count_positive * 20)
@ -826,7 +840,7 @@ def get_feeds_trainer(request):
@ajax_login_required
@json.json_view
def save_feed_chooser(request):
approved_feeds = [int(feed_id) for feed_id in request.POST.getlist('approved_feeds')][:64]
approved_feeds = [int(feed_id) for feed_id in request.POST.getlist('approved_feeds') if feed_id][:64]
activated = 0
usersubs = UserSubscription.objects.filter(user=request.user)

View file

@ -747,7 +747,7 @@ class FeedIcon(models.Model):
super(FeedIcon, self).save(*args, **kwargs)
except (IntegrityError, OperationError), e:
print "Error on Icon: %s" % e
if self.id: self.delete()
if getattr(self, 'id'): self.delete()
class MFeedPage(mongo.Document):
@ -799,7 +799,7 @@ class MStory(mongo.Document):
meta = {
'collection': 'stories',
'indexes': ['story_date', ('story_feed_id', '-story_date')],
'indexes': [('story_feed_id', '-story_date')],
'ordering': ['-story_date'],
'allow_inheritance': False,
}