def test_resolve_issue_uid_to_slug(self): # id for issue self.assertEqual(lib.resolve_issue_uid_to_slug(uid=1), 'town-has-to-cut-spending') self.assertEqual(lib.resolve_issue_uid_to_slug(uid=5), 'unterstutzung-der-sekretariate') # id for no issue self.assertEqual(lib.resolve_issue_uid_to_slug(uid=0), None) self.assertEqual(lib.resolve_issue_uid_to_slug(uid=22222222), None) self.assertEqual(lib.resolve_issue_uid_to_slug(uid=-4), None)
def find_statements_fn(request): """ Receives search requests, queries database to find all occurrences and returns these results with the correct URL to get directly access to the location in the discussion. :param request: :return: json conform dictionary of all occurrences """ api_data = dict() api_data["issue"] = request.matchdict["issue"] api_data["mode"] = request.matchdict["type"] api_data["value"] = request.matchdict["value"] results = dbas.fuzzy_search(request, api_data=api_data) issue_uid = api_data["issue"] return_dict = dict() return_dict["distance_name"] = results["distance_name"] return_dict["values"] = [] for statement in results["values"]: statement_uid = statement["statement_uid"] statement["issue"] = { "uid": issue_uid, "slug": resolve_issue_uid_to_slug(issue_uid) } statement["url"] = url_to_statement( api_data["issue"], statement_uid) # TODO I think I do not use this any more statement["arguments"] = get_all_arguments_with_text_by_statement_id( statement_uid) return_dict["values"].append(statement) return return_dict
def url_to_statement(issue_uid, statement_uid, agree=True): """ Generate URL to given statement_uid in specific issue (by slug). Used to directly jump into the discussion. :param issue_uid: uid of current issue :type issue_uid: id :param statement_uid: Statement id to generate the link to :type statement_uid: int :param agree: Indicate (dis-)agreement with a statement :type agree: boolean :return: direct URL to jump to the provided statement :rtype: str """ if isinstance(agree, str): if agree == "true": mode = "agree" else: mode = "disagree" else: mode = "agree" if agree is True else "disagree" slug = resolve_issue_uid_to_slug(issue_uid) url_manager = UrlManager(slug=slug) return "api/" + url_manager.get_url_for_justifying_statement( statement_uid, mode)
def get_arguments_by_statement_uid(db_statement: Statement, db_issue: Issue) -> dict: """ Collects every argument which uses the given statement :param db_statement: Statement :param db_issue: issue :rtype: dict :return: prepared collection with several arguments """ slug = resolve_issue_uid_to_slug(db_issue.uid) _um = UrlManager(slug) return {'arguments': get_all_arguments_with_text_and_url_by_statement_id(db_statement, _um, True, is_jump=True)}