From 7e39492cd46256e3b7915e169d0758aae33b86b7 Mon Sep 17 00:00:00 2001 From: Raymond Yee Date: Tue, 31 Jan 2012 11:54:48 -0800 Subject: [PATCH 1/6] Debugging the wishlist functionality --- frontend/views.py | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/frontend/views.py b/frontend/views.py index 75fdaa6b..554fbcba 100755 --- a/frontend/views.py +++ b/frontend/views.py @@ -832,16 +832,27 @@ def search(request): @login_required @csrf_exempt def wishlist(request): + logger.info("in wishlist!") googlebooks_id = request.POST.get('googlebooks_id', None) remove_work_id = request.POST.get('remove_work_id', None) add_work_id = request.POST.get('add_work_id', None) + logger.info("about to print again...") + logger.info("googlebooks_id %s, remove_work_id %s, add_work_id %s " %( googlebooks_id, remove_work_id, add_work_id)) if googlebooks_id: - edition = bookloader.add_by_googlebooks_id(googlebooks_id) - # add related editions asynchronously - tasks.populate_edition.delay(edition) - request.user.wishlist.add_work(edition.work,'user') + try: + edition = bookloader.add_by_googlebooks_id(googlebooks_id) + if edition.new: + # add related editions asynchronously + tasks.populate_edition.delay(edition) + request.user.wishlist.add_work(edition.work,'user') + except bookloader.LookupFailure: + logger.warning("failed to load googlebooks_id %s" % googlebooks_id) + except Exception, e: + logger.warning("Error in wishlist adding %s" % (e)) # TODO: redirect to work page, when it exists return HttpResponseRedirect('/') + + return HttpResponseRedirect('/') elif remove_work_id: work = models.Work.objects.get(id=int(remove_work_id)) request.user.wishlist.remove_work(work) From 7f2cc341d52c77f65c8809f5c62c6a877fff544b Mon Sep 17 00:00:00 2001 From: Raymond Yee Date: Tue, 31 Jan 2012 14:02:01 -0800 Subject: [PATCH 2/6] Trying to nail down what happens to editions tied to orphan that we delete --- core/management/commands/check_works_integrity.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/core/management/commands/check_works_integrity.py b/core/management/commands/check_works_integrity.py index 374517b1..1f398796 100644 --- a/core/management/commands/check_works_integrity.py +++ b/core/management/commands/check_works_integrity.py @@ -10,6 +10,10 @@ class Command(BaseCommand): print "Last 20 Works without identifiers: " for w in models.Work.objects.filter(identifiers__isnull=True).order_by('-created')[0:20]: print "id: %d | title: %s | created: %s" % (w.id, w.title, w.created) + + # models.Work.objects.filter(identifiers__isnull=True).filter(editions__isnull=False)[0].identifiers.all() + print "Number of editions that are currently tied to Works w/o identifiers ", \ + models.Work.objects.filter(identifiers__isnull=True).filter(editions__isnull=False).count() print "Number of Identifiers not tied to Works (should be 0): ", \ models.Identifier.objects.filter(work__isnull=True).count() From 3957c9f96af693793ba17537f54272c6599ee6ac Mon Sep 17 00:00:00 2001 From: Raymond Yee Date: Tue, 31 Jan 2012 14:19:10 -0800 Subject: [PATCH 3/6] Print out the number of Editions tied to Works w/o identifiers --- core/management/commands/check_works_integrity.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/core/management/commands/check_works_integrity.py b/core/management/commands/check_works_integrity.py index 1f398796..18065f78 100644 --- a/core/management/commands/check_works_integrity.py +++ b/core/management/commands/check_works_integrity.py @@ -13,8 +13,7 @@ class Command(BaseCommand): # models.Work.objects.filter(identifiers__isnull=True).filter(editions__isnull=False)[0].identifiers.all() print "Number of editions that are currently tied to Works w/o identifiers ", \ - models.Work.objects.filter(identifiers__isnull=True).filter(editions__isnull=False).count() - + models.Edition.objects.filter(work__identifiers__isnull=True).count() print "Number of Identifiers not tied to Works (should be 0): ", \ models.Identifier.objects.filter(work__isnull=True).count() print "Number of Editions not tied to a Work (should be 0): ", models.Edition.objects.filter(work__isnull=True).count() From 886233a68a2ba915981906a1cc672dee33e680fd Mon Sep 17 00:00:00 2001 From: Raymond Yee Date: Tue, 31 Jan 2012 14:56:34 -0800 Subject: [PATCH 4/6] Filter the popular and new lists to show only works that are on a wishlist https://www.pivotaltracker.com/story/show/24232005 --- frontend/views.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/frontend/views.py b/frontend/views.py index 0107e4e3..dc1f7a77 100755 --- a/frontend/views.py +++ b/frontend/views.py @@ -201,9 +201,11 @@ class WorkListView(ListView): def get_queryset(self): facet = self.kwargs['facet'] if (facet == 'popular'): - return models.Work.objects.annotate(wished=Count('wishlists')).order_by('-wished') + return models.Work.objects.filter(wishlists__isnull=False).annotate(wished=Count('wishlists')).order_by('-wished') elif (facet == 'recommended'): return models.Work.objects.filter(wishlists__user=recommended_user) + elif (facet == 'new'): + return models.Work.objects.filter(wishlists__isnull=False).order_by('-created') else: return models.Work.objects.all().order_by('-created') From 2610be2c35a62bc78fe2aa6b869144c3ab43d778 Mon Sep 17 00:00:00 2001 From: Raymond Yee Date: Tue, 31 Jan 2012 15:07:40 -0800 Subject: [PATCH 5/6] Need a distinct() to properly filter out duplicates for popular and new list --- frontend/views.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/views.py b/frontend/views.py index dc1f7a77..eec10dad 100755 --- a/frontend/views.py +++ b/frontend/views.py @@ -201,11 +201,11 @@ class WorkListView(ListView): def get_queryset(self): facet = self.kwargs['facet'] if (facet == 'popular'): - return models.Work.objects.filter(wishlists__isnull=False).annotate(wished=Count('wishlists')).order_by('-wished') + return models.Work.objects.filter(wishlists__isnull=False).distinct().annotate(wished=Count('wishlists')).order_by('-wished') elif (facet == 'recommended'): return models.Work.objects.filter(wishlists__user=recommended_user) elif (facet == 'new'): - return models.Work.objects.filter(wishlists__isnull=False).order_by('-created') + return models.Work.objects.filter(wishlists__isnull=False).distinct().order_by('-created') else: return models.Work.objects.all().order_by('-created') From 268e188082fd93b999604020cc17cd6e7a451dc9 Mon Sep 17 00:00:00 2001 From: Raymond Yee Date: Tue, 31 Jan 2012 15:15:03 -0800 Subject: [PATCH 6/6] Clean up the debugging messages I had left in frontend.views.wishlist --- frontend/views.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/frontend/views.py b/frontend/views.py index eec10dad..945b97dc 100755 --- a/frontend/views.py +++ b/frontend/views.py @@ -841,8 +841,7 @@ def wishlist(request): googlebooks_id = request.POST.get('googlebooks_id', None) remove_work_id = request.POST.get('remove_work_id', None) add_work_id = request.POST.get('add_work_id', None) - logger.info("about to print again...") - logger.info("googlebooks_id %s, remove_work_id %s, add_work_id %s " %( googlebooks_id, remove_work_id, add_work_id)) + if googlebooks_id: try: edition = bookloader.add_by_googlebooks_id(googlebooks_id) @@ -856,8 +855,6 @@ def wishlist(request): logger.warning("Error in wishlist adding %s" % (e)) # TODO: redirect to work page, when it exists return HttpResponseRedirect('/') - - return HttpResponseRedirect('/') elif remove_work_id: work = models.Work.objects.get(id=int(remove_work_id)) request.user.wishlist.remove_work(work)