def removeAnsVote(self, ansID): USERS_COLLECTION.find_one_and_update( {'_id': self.username}, {'$pull': { 'voted_ans': { 'ansID': ansID } }})
def __init__(self, username, email=None, firstname=None, lastname=None, password=None, db=False): self.username = username self.email = email self.firstname = firstname self.lastname = lastname self.password = password if db: USERS_COLLECTION.insert_one({ '_id': self.username, 'email': self.email, 'firstname': self.firstname, 'lastname': self.lastname, 'password': generate_password_hash(self.password), 'quesPosted': [], 'ansPosted': [], 'bookmarks': [], 'karma': 0, 'voted_ques': [], 'voted_ans': [], 'commentPosted': [] })
def updateQuesVote(self, quesID, vote): USERS_COLLECTION.find_one_and_update( { '_id': self.username, 'voted_ques.quesID': quesID }, {'$set': { 'voted_ques.$.vote': vote }})
def updateAnsVote(self, ansID, vote): USERS_COLLECTION.find_one_and_update( { '_id': self.username, 'voted_ans.ansID': ansID }, {'$set': { 'voted_ans.$.vote': vote }})
def removeQuesVote(self, quesID): USERS_COLLECTION.find_one_and_update( {'_id': self.username}, {'$pull': { 'voted_ques': { 'quesID': quesID } }})
def addQuesVote(self, quesID, vote): USERS_COLLECTION.find_one_and_update( {'_id': self.username}, {'$addToSet': { 'voted_ques': { 'quesID': quesID, 'vote': vote } }})
def addAnsVote(self, ansID, vote): USERS_COLLECTION.find_one_and_update( {'_id': self.username}, {'$addToSet': { 'voted_ans': { 'ansID': ansID, 'vote': vote } }})
def setBookmark(self, quesID): bookmarked = (USERS_COLLECTION.find_one({'_id': self.username}))['bookmarks'] if quesID in bookmarked: USERS_COLLECTION.update_one({'_id': self.username}, {'$pull': { 'bookmarks': quesID }}) return False else: USERS_COLLECTION.find_one_and_update( {'_id': self.username}, {'$addToSet': { 'bookmarks': quesID }}) return True
def profile(userID): user = USERS_COLLECTION.find_one({'_id': userID}) quesPosted = user['quesPosted'] for i in range(len(quesPosted)): quesPosted[i] = ObjectId(quesPosted[i]) bookmarks = [] bques = user['bookmarks'] for i in range(0, len(bques)): bques[i] = ObjectId(bques[i]) for q in QUESTIONS_COLLECTION.find({'_id': {'$in': bques}}): bookmarks.append(q) ques = [] for q in QUESTIONS_COLLECTION.find({'_id': {'$in': quesPosted}}): ques.append(q) data = { 'userID': user['_id'], 'fname': user['firstname'], 'lname': user['lastname'], 'email': user['email'], 'karma': user['karma'], 'quesPosted': ques } return render_template('profile.html', title='HoverSpace | Profile', data=data, bookmarks=bookmarks)
def signup(): form = SignUpForm() if request.method == 'POST' and form.validate_on_submit(): user = USERS_COLLECTION.find_one( {'email': form.email.data} ) if user: flash("You have already signed up from this email id", category='error') else: user = USERS_COLLECTION.find_one( {'_id': form.username.data} ) if user: flash("That username has already been taken", category='error') else: user_obj = User(form.username.data, form.email.data, form.firstname.data, form.lastname.data, form.password.data, db=True) flash("SignUp successfull!", category='success') return redirect(url_for('login')) return render_template('signup.html', title='HoverSpace | Signup', form=form)
def alreadyVotedAns(self, ansID): try: voted_ans = list() voted_ans = (USERS_COLLECTION.find_one({'_id': self.username }))['voted_ans'] for ans in voted_ans: if ans['ansID'] == ansID: return True return False except: return False
def login(): form = LoginForm() if request.method == 'POST' and form.validate_on_submit(): user = USERS_COLLECTION.find_one({"_id": form.username.data}) if user and User.validate_login(user['password'], form.password.data): user_obj = User(user['_id']) login_user(user_obj, remember=True) flash("Logged in successfully!", category='success') return redirect(url_for('home')) flash("Wrong username or password!", category='error') return render_template('login.html', title='HoverSpace | Login', form=form)
def voteAns(self, ansID, voteType): fl = False status = {'votesChange': None, 'type': None} voteChange = 0 vote = None try: voted_ans = list() voted_ans = (USERS_COLLECTION.find_one({'_id': self.username }))['voted_ans'] for ans in voted_ans: if ans['ansID'] == ansID: if ans['vote'] == 1: if voteType == 'up': self.removeAnsVote(ansID) voteChange = -1 else: self.updateAnsVote(ansID, -1) voteChange = -2 vote = "downvote" else: if voteType == 'up': self.updateAnsVote(ansID, 1) voteChange = 2 vote = "upvote" else: self.removeAnsVote(ansID) voteChange = 1 fl = True if not fl: if voteType == "up": self.addAnsVote(ansID, 1) voteChange = 1 vote = "upvote" else: self.addAnsVote(ansID, -1) voteChange = -1 vote = "downvote" status = {'votesChange': voteChange, 'type': vote} return status except: print("voteQues except") status = {'votesChange': voteChange, 'type': vote} return status
def home(): form = SearchForm() if request.method == "POST": l = [] for selected in srch.search(form.srch_term.data): q = QuestionMethods(selected) l.append(q.getQuestion()) return render_template('search.html', title='HoverSpace | Search', result=l) questions = QUESTIONS_COLLECTION.find({ 'flag': 'False' }).sort('timestamp', pymongo.DESCENDING) feed = list() for record in questions: try: story = { 'short_description': record['short_description'], 'long_description': record['long_description'], 'ques_url': url_for('viewQuestion', quesID=str(record['_id'])), 'postedBy': record['postedBy'], 'ansCount': len(record['ansID']), 'votes': record['votes'], 'timestamp': record['timestamp'] } if record['accepted_ans']: story['answer'] = ANSWERS_COLLECTION.find_one( {'_id': ObjectId(record['accepted_ans'])}) feed.append(story) topcontributors = USERS_COLLECTION.find().sort( 'karma', pymongo.DESCENDING).limit(10) tags = [] for tag in TAGS_COLLECTION.find(): tags.append(tag['_id']) except KeyError: pass return render_template('home.html', title='HoverSpace | Home', feed=feed, form=form, tags=tags, topcontributors=topcontributors)
def update_comments(self, commentID): USERS_COLLECTION.find_one_and_update( {'_id': self.username}, {'$addToSet': { 'commentPosted': commentID }})
def load_user(username): u = USERS_COLLECTION.find_one({"_id": username}) if not u: return None return User(u['_id'])
def update_answers(self, ansID): USERS_COLLECTION.find_one_and_update({'_id': self.username}, {'$addToSet': {'ansPosted': ansID}})
def update_questions(self, quesID): USERS_COLLECTION.find_one_and_update({'_id': self.username}, {'$addToSet': {'quesPosted': quesID}})
def update_karma(self, karma): USERS_COLLECTION.find_one_and_update({'_id': self.username}, {'$inc': { 'karma': karma }})