def suggest_question(): access_token = session.get("access_token", None) if g.user is None or access_token is None: abort(404) url = request.args.get("question", None) if (url is None): return jsonify(**{"status": False, "msg": gettext("Wrong params")}) unquoted = urllib.unquote(url) parsed = urlparse(unquoted) if parsed.hostname != STACKOVERFLOW_HOSTNAME: return jsonify( **{ "status": False, "msg": gettext("Question should be on hostname: %s") % STACKOVERFLOW_HOSTNAME }) question_id = -1 try: question_id = int(re.findall('\d+', parsed.path)[0]) except: return jsonify( **{ "status": False, "msg": gettext("Cannot parse question_id. Path: %s, re: %s") % (parsed.path, re.findall('\d+', parsed.path)) }) if question_id < 0: return jsonify( **{ "status": True, "msg": gettext("Not valid question_id: %s") % (str(question_id)) }) url = STACKEXCHANGE_QUESTION_API_ENDPOINT.replace("{id}", str(question_id)) params = { "access_token": access_token, "key": STACKEXCHANGE_CLIENT_KEY, "site": STACKOVERFLOW_SITE_PARAM, "order": "desc", "sort": "votes", } r = requests.get(url, data=params) data = json.loads(r.text) if data.get("items", None) is None: return jsonify(**{ "status": False, "msg": gettext("There are no items: %s") % r.text }) view_count = 0 q_id = 0 for item in data["items"]: if item.get("view_count", None) is not None: view_count = item["view_count"] if item.get("question_id", None) is not None: q_id = int(item["question_id"]) if question_id != q_id: return jsonify( **{ "status": False, "msg": gettext("Question ids are different: %s != %s, text: %s") % (str(question_id), str(q_id), r.text) }) pg_session = db_session() suggested_question_count = pg_session.query(func.count( Question.id)).filter( and_(Question.question_id == question_id, Question.question_type == Question.question_type_suggested)).scalar() if suggested_question_count > 0: return jsonify( **{ "status": False, "msg": gettext("The suggestion is already existed in the list") }) question = Question(Question.question_type_suggested, question_id, view_count, suggested_user_id=g.user.id) pg_session.add(question) pg_session.commit() association = pg_session.query(func.count( Association.id)).filter(Association.soen_id == question_id).scalar() if association > 0: question.is_associated = True pg_session.commit() pg_session.close() return jsonify( **{ "status": False, "msg": gettext( "Suggestion was added but the association for it is already existed." ) }) pg_session.close() return jsonify(**{"status": True, "msg": gettext("Suggestion was added")})