def __build_single_argument(db_argument: Argument, rearrange_intro: bool, with_html_tag: bool, colored_position: bool, attack_type: str, _t: Translator, start_with_intro: bool, is_users_opinion: bool, anonymous_style: bool, support_counter_argument: bool = False, author_uid=None): """ Build up argument text for a single argument Please, do not touch this! :param rearrange_intro: Boolean :param with_html_tag: Boolean :param colored_position: Boolean :param attack_type: String :param _t: Translator :param start_with_intro: Boolean :param is_users_opinion: Boolean :param anonymous_style: Boolean :param support_counter_argument: Boolean :param author_uid: User.uid :return: String """ premises_text = db_argument.get_premisegroup_text() conclusion_text = db_argument.get_conclusion_text() lang = db_argument.lang if lang != 'de': premises_text = start_with_small(premises_text) tag_dict = __get_tags_for_building_single_argument(with_html_tag, attack_type, colored_position, premises_text, conclusion_text) premises_text = tag_dict['premise'] conclusion_text = tag_dict['conclusion'] sb = tag_dict['tag_begin'] sb_none = tag_dict['tag_none'] se = tag_dict['tag_end'] marked_element = False if author_uid: db_marked = DBDiscussionSession.query(MarkedArgument).filter(MarkedArgument.argument_uid == db_argument.uid, MarkedArgument.author_uid == author_uid).first() marked_element = db_marked is not None you_have_the_opinion_that = _t.get(_.youHaveTheOpinionThat).format('').strip() if lang == 'de': ret_value = __build_single_argument_for_de(_t, sb, se, you_have_the_opinion_that, start_with_intro, anonymous_style, rearrange_intro, db_argument, attack_type, sb_none, marked_element, lang, premises_text, conclusion_text, is_users_opinion, support_counter_argument) else: ret_value = __build_single_argument_for_en(_t, sb, se, you_have_the_opinion_that, marked_element, conclusion_text, premises_text, db_argument) return ret_value.replace(' ', ' ')
def get_user_with_same_opinion_for_premisegroups_of_arg( db_argument: Argument, db_premises: List[Premise], db_user: User, lang: str, main_page: str): """ Returns nested dictionary with all kinds of information about the votes of the premisegroups. :param db_argument: :param db_premises: :param db_user: User :param lang: language :param main_page: url :return: {'users':[{nickname1.avatar_url, nickname1.vote_timestamp}*]} """ _t = Translator(lang) all_users = [] text = db_argument.get_premisegroup_text() premise_statement_uids = [p.statement_uid for p in db_premises] db_clicks = DBDiscussionSession.query(ClickedStatement).filter( ClickedStatement.statement_uid.in_(premise_statement_uids), ClickedStatement.is_up_vote == True, ClickedStatement.is_valid == True, ClickedStatement.author_uid != db_user.uid).all() db_seens = DBDiscussionSession.query(SeenStatement).filter( SeenStatement.statement_uid.in_(premise_statement_uids)).all() for click in db_clicks: click_user = DBDiscussionSession.query(User).get(click.author_uid) users_dict = create_users_dict(click_user, click.timestamp, main_page, lang) all_users.append(users_dict) return { 'uid': str(db_argument.uid), 'text': '... {} {}'.format(_t.get(_.because).lower(), text), 'users': all_users, 'message': __get_text_for_clickcount(len(db_clicks), db_user.uid, _t), 'seen_by': len(db_seens) }
def __build_val_for_jump(db_argument: Argument, tag_premise, tag_conclusion, tag_end, _t) -> str: premises = db_argument.get_premisegroup_text() if premises[-1] != '.': premises += '.' conclusion = db_argument.get_conclusion_text() because = _t.get(_.because).lower() conclusion = tag_conclusion + conclusion + tag_end premises = tag_premise + premises + tag_end intro = (start_con + _t.get(_.isNotRight).lower() + end_tag) if not db_argument.is_supportive else '' ret_value = '{} {} {} {}'.format(conclusion, intro, because, premises) if _t.get_lang() == 'de': intro = _t.get( _.itIsTrueThatAnonymous) if db_argument.is_supportive else _t.get( _.itIsFalseThatAnonymous) intro = start_with_capital(intro) intro = (start_pro if db_argument.is_supportive else start_con) + intro + end_tag ret_value = '{} {}, {} {}'.format(intro, conclusion, because, premises) return ret_value
def __get_dict_for_argumentation(self, user_arg: Argument, confrontation_arg_uid: int, history: str, attack: Relations, nickname: str, is_supportive: bool) -> dict: """ Returns dict() for the reaction step :param user_arg: Argument :param confrontation_arg_uid: Argument.uid :param history: String :param attack: String :param nickname: User.nickname :param is_supportive: Boolean :return: dict() """ premise = user_arg.get_premisegroup_text() conclusion = get_text_for_conclusion(user_arg) db_confrontation = DBDiscussionSession.query(Argument).get( confrontation_arg_uid) confr = db_confrontation.get_premisegroup_text() sys_conclusion = (db_confrontation.get_conclusion_text()) if attack == Relations.UNDERMINE: if db_confrontation.conclusion_uid != 0: premise = db_confrontation.get_conclusion_text() else: premise = get_text_for_argument_uid( db_confrontation.argument_uid, True, colored_position=True, attack_type=attack) # did the user changed his opinion? history = history_handler.split(history) user_changed_opinion = len(history) > 1 and '/undercut/' in history[-2] # argumentation is a reply for an argument, if the arguments conclusion of the user is no position conclusion_uid = user_arg.conclusion_uid tmp_arg = user_arg while not conclusion_uid: tmp_arg = DBDiscussionSession.query(Argument).get( tmp_arg.argument_uid) conclusion_uid = tmp_arg.conclusion_uid db_statement = DBDiscussionSession.query(Statement).get(conclusion_uid) reply_for_argument = not (db_statement and db_statement.is_position) support_counter_argument = 'reaction' in self.history.split('-')[-1] current_argument = get_text_for_argument_uid( user_arg.uid, nickname=nickname, with_html_tag=True, colored_position=True, user_changed_opinion=user_changed_opinion, attack_type=attack, minimize_on_undercut=True, support_counter_argument=support_counter_argument) current_argument = start_with_capital(current_argument) if self.lang != 'de': premise = start_with_small(premise) # check for support and build text _tn = Translator(self.lang) user_text = (_tn.get(_.otherParticipantsConvincedYouThat) + ': ') if user_changed_opinion else '' user_text += current_argument if current_argument != '' else premise sys_text, gender = get_text_for_confrontation( self.lang, nickname, premise, conclusion, sys_conclusion, is_supportive, attack, confr, reply_for_argument, not user_arg.is_supportive, user_arg, db_confrontation) gender_of_counter_arg = gender return { 'user': user_text, 'sys': sys_text, 'gender': gender_of_counter_arg, 'confrontation': db_confrontation }