def ask_question(question_id, notification_type='question-ask-self_user'): '''Creates an in-app notification for a new question that has been asked to the user''' k = key[notification_type] question = Question.query.get(question_id) users = User.query.filter(User.id.in_([question.question_to, question.question_author])).all() for u in users: if u.id == question.question_author: question_author = u if u.id == question.question_to: question_to = u nobject = { 'notification_type': notification_type, 'text': helper.question_asked_text(question=question, question_author=question_author.first_name, question_to=question_to.first_name), 'icon': question_author.profile_picture, 'link': k['url'] % question.short_id, 'object_id': question_id } push_now = notification_decision.decide_question_push(question_to.id, question_id) notification = notification_logger(nobject=nobject, for_users=[question_to.id], push_at=datetime.datetime.now() if push_now else None) return notification
def question_upvote(user_id, question_id): try: should_be_pushed = notification_decision.decide_question_push(user_id=user_id, question_id=question_id) if should_be_pushed: n = Notification.query.filter(Notification.object_id == question_id, Notification.type == 'question-ask-self_user').first() if n is not None: pushed = UserPushNotification.query.filter(UserPushNotification.notification_id == n.id, UserPushNotification.user_id == user_id).count() if not pushed: push.send(notification_id=n.id, user_id=user_id) except ObjectNotFoundException: pass