def bootstrap_userstories(): print "Mongo DB userstories: %s" % MUserStory.objects().count() # db.userstories.drop() print "Dropped! Mongo DB userstories: %s" % MUserStory.objects().count() print "UserStories: %s" % UserStory.objects.all().count() pprint(db.userstories.index_information()) userstories = UserStory.objects.all().values() for userstory in userstories: try: story = Story.objects.get(pk=userstory['story_id']) except Story.DoesNotExist: continue try: userstory['story'] = MStory.objects( story_feed_id=story.story_feed.pk, story_guid=story.story_guid)[0] except: print '!', continue print '.', del userstory['id'] del userstory['opinion'] del userstory['story_id'] try: MUserStory(**userstory).save() except: print '\n\n!\n\n' continue print "\nMongo DB userstories: %s" % MUserStory.objects().count()
def mark_story_as_read(request): story_ids = request.REQUEST.getlist('story_id') feed_id = int(request.REQUEST['feed_id']) try: usersub = UserSubscription.objects.select_related('feed').get( user=request.user, feed=feed_id) except (UserSubscription.DoesNotExist, Feed.DoesNotExist): duplicate_feed = DuplicateFeed.objects.filter( duplicate_feed_id=feed_id) if duplicate_feed: try: usersub = UserSubscription.objects.get( user=request.user, feed=duplicate_feed[0].feed) except (UserSubscription.DoesNotExist, Feed.DoesNotExist): return dict(code=-1) else: return dict(code=-1) if not usersub.needs_unread_recalc: usersub.needs_unread_recalc = True usersub.save() data = dict(code=0, payload=story_ids) if len(story_ids) > 1: logging.user( request.user, "~FYRead %s stories in feed: %s" % (len(story_ids), usersub.feed)) else: logging.user(request.user, "~FYRead story in feed: %s" % (usersub.feed)) for story_id in story_ids: try: story = MStory.objects(story_feed_id=feed_id, story_guid=story_id)[0] except IndexError: # Story has been deleted, probably by feed_fetcher. continue now = datetime.datetime.utcnow() date = now if now > story.story_date else story.story_date # For handling future stories m = MUserStory(story=story, user_id=request.user.pk, feed_id=feed_id, read_date=date) try: m.save() except OperationError: logging.user( request.user, "~BRMarked story as read: Duplicate Story -> %s" % (story_id)) m = MUserStory.objects.get(story=story, user_id=request.user.pk, feed_id=feed_id) m.read_date = date m.save() return data