def storynew(): if 'username' in session: user = session['username'] form = StoryForm() if form.validate_on_submit(): uid = dbsession.query(User.id).filter_by(name=user).first() newstory = Story(form.title.data) newstory.text = markdown.markdown(form.body.data) newstory.uid = uid[0] newstory.adult = form.adult.data tagslist = form.tags.data tagslist = tagslist.split(',') for tagitem in tagslist: tagitem = tagitem.strip() tagitem = tagitem.lower() tag = dbsession.query(Tag).filter_by(tagname=tagitem).first() if tag is None: tag = Tag(tagitem) newstory.tags.append(tag) dbsession.add(newstory) dbsession.commit() return redirect("~"+user) return render_template("storynew.html", form=form) else: return render_template("storynew.html")
def get(self): n_recommended_stories = random.randint(4, 7) stories = Story.objects() pipeline = [ {"$sample": {"size": n_recommended_stories}}, {"$project": {"story_id": 1, "author": 1, "title": 1}}, {"$project": {"_id": 0}} ] recommended_stories = list(stories.aggregate(pipeline)) recommended_stories = dumps(recommended_stories) return Response(recommended_stories, mimetype="application/json", status=200)
def get(self, args): text_to_search = args["text"] if text_to_search != "": stories = Story.objects(Q(author__icontains=text_to_search) | \ Q(title__icontains=text_to_search)) pipeline = [{"$project": {"story_id": 1, "author": 1, "title": 1, "reading_time_min": 1, "short_content": {"$substrCP": ["$content", 0, 100] } }}, {"$project": {"_id": 0}}] stories = list(stories.aggregate(pipeline)) stories = dumps(stories) return Response(stories, mimetype="application/json", status=200) time_limit = args["limit"] time_limits = [5, 15, 30, 60] if time_limit is not None and \ time_limit in time_limits: prev_time_limit = 0 for t in time_limits: if time_limit == t: break else: prev_time_limit = t stories = Story.objects(reading_time_min__lte=time_limit, reading_time_min__gte=prev_time_limit) pipeline = [{"$project": {"story_id": 1, "author": 1, "title": 1, "reading_time_min": 1, "short_content": {"$substrCP": ["$content", 0, 100] } }}, {"$project": {"_id": 0}}, {"$sort": { "reading_time_min": -1}}] stories = list(stories.aggregate(pipeline)) stories = dumps(stories) return Response(stories, mimetype="application/json", status=200) return "", 404
def put(self): user_id = get_jwt_identity() body = request.get_json() if not Story.objects(story_id=body["story_id"]): return {"msg": "No story with such id found"}, 404 user = User.objects.get(id=user_id) user.update(push__history=body["story_id"]) user.save() return '', 200
def get(self): user_id = get_jwt_identity() user = User.objects.get(id=user_id) history_stories = Story.objects(story_id__in=user.history) pipeline = [{"$project": {"story_id": 1, "author": 1, "title": 1, "reading_time_min": 1, "short_content": {"$substrCP": ["$content", 0, 100] } }}, {"$project": {"_id": 0}}] history_stories = list(history_stories.aggregate(pipeline)) history_stories = dumps(history_stories) return Response(history_stories, mimetype="application/json", status=200)
def get(self, id): if not Story.objects(story_id=id): return {"msg": "No story with such id found"}, 404 story = Story.objects.get(story_id=id).to_json() return Response(story, mimetype="application/json", status=200)
if __name__ == '__main__': password = '******' from db import User, Story, addDefault, refresh_db, session as dbsession import random import loremipsum for adduser in range(1,1000): username = "******" % (adduser) user = User(username,'',password) user.species = 'Automatic' user.bio = 'Automatic bio' user.email = '*****@*****.**' user.minorflag = True user.accepttos =True dbsession.add(user) dbsession.commit() for addstories in range(1,20000): newstory = Story(loremipsum.generate_sentence()[2]) newstory.text = loremipsum.generate_paragraph()[2] newstory.adult = True newstory.uid = random.randrange(1000)+1 dbsession.add(newstory) dbsession.commit()