Exemple #1
0
        def _parse_issue(raw_issue: dict) -> dict:
            """Parse issue raw object structure.

            Parameters:
            ----------
            raw_issue:
                Raw issue object to be parsed.

            Returns:
            ----------
                Returns object containing parsed issue attributes.
            """
            issue = raw_issue.get("fields")
            history = raw_issue.get("changelog").get("histories")
            parsed_issue = {}

            config_parser = configparser.ConfigParser()
            config_parser.read(CONFIG_PARSE)

            for new_field in config_parser["DEFAULT"]:
                new_field = new_field.capitalize()
                maps = config_parser["DEFAULT"][new_field].split(".")

                func = FUNCTION_MAPPING.get(new_field)
                value = (_get_value(maps, issue[maps[0]]) if maps[0] in issue
                         and issue[maps[0]] is not None else None)
                if value is not None and func:
                    parsed_issue[new_field] = func(value)
                else:
                    parsed_issue[new_field] = (
                        value
                        if value is not None else REPLACE_MAPPING[new_field]
                        if new_field in REPLACE_MAPPING.keys() else "")

            parsed_issue["Key"] = raw_issue["key"] or ""
            parsed_issue["History"] = [{
                "Author":
                snapshot.get("author").get("displayName")
                if snapshot.get("author") else "",
                "Created":
                get_utc_datetime(snapshot.get("created"))
                if snapshot.get("created") else "",
                "Items": [{
                    "Field": item.get("field"),
                    "From": item.get("fromString"),
                    "To": item.get("toString"),
                } for item in snapshot.get("items")]
                if snapshot.get("items") else "",
            } for snapshot in history]

            parsed_issue["Description_tr"] = clean_text(
                parsed_issue["Description"])
            parsed_issue["Time to Resolve"] = calculate_ttr(
                parsed_issue["Resolved"], parsed_issue["Created"])

            for key in issue:
                if key not in parsed_issue:
                    parsed_issue[key] = str(issue[key])

            return parsed_issue
Exemple #2
0
    def post(self, request):
        description = clean_text(request.data.get("description"))

        if not description.strip():
            raise CannotAnalyzeDescriptionWarning

        training_parameters = get_training_parameters(request.user)

        models = load_models(request.user)

        probabilities = dict()
        for parameter in training_parameters:
            if parameter in ["Time to Resolve", "Priority"]:
                probabilities[parameter] = get_probabilities(
                    description,
                    training_parameters[parameter],
                    models[parameter],
                )
            elif parameter == "Resolution":
                probabilities["resolution"] = calculate_resolution_predictions(
                    description,
                    training_parameters[parameter],
                    models[parameter],
                )
            elif parameter == "areas_of_testing":
                probabilities[
                    parameter] = calculate_area_of_testing_predictions(
                        description,
                        training_parameters[parameter],
                        models[parameter],
                    )

        for probability in probabilities:
            if probability == "resolution":
                for resolution in probabilities[probability]:
                    resolution_obj = probabilities[probability][resolution]
                    for metric in resolution_obj:
                        resolution_obj[metric] = convert_to_integer(
                            resolution_obj[metric])
            else:
                for metric in probabilities[probability]:
                    probabilities[probability][metric] = convert_to_integer(
                        probabilities[probability][metric])

        redis_conn.set(
            f"user:{request.user.id}:description_assessment:description",
            dumps(description),
        )
        redis_conn.set(
            f"user:{request.user.id}:description_assessment:probabilities",
            dumps(probabilities),
        )

        context = {"probabilities": probabilities}

        return Response(context)
Exemple #3
0
    def post(self, request):
        def _convert_to_integer(value):
            return int(floor((value * 100) + 0.5))

        description = clean_text(request.data.get("description"))

        if not description.strip():
            raise DescriptionCantAnalyzedWarning

        archive_path = get_archive_path(request.user)
        training_parameters = read_from_archive(
            archive_path, TRAINING_PARAMETERS_FILENAME
        )
        probabilities = {}
        probabilities["resolution"] = calculate_resolution_predictions(
            description, training_parameters["Resolution"], archive_path
        )
        probabilities[
            "areas_of_testing"
        ] = calculate_area_of_testing_predictions(
            description, training_parameters["areas_of_testing"], archive_path
        )

        for metric in ["Time to Resolve", "Priority"]:
            probabilities[metric] = get_probabilities(
                description,
                training_parameters[metric],
                read_from_archive(archive_path, metric + ".sav"),
            )

        for probability in probabilities:
            if probability == "resolution":
                for resolution in probabilities[probability]:
                    resolution_obj = probabilities[probability][resolution]
                    for metric in resolution_obj:
                        resolution_obj[metric] = _convert_to_integer(
                            resolution_obj[metric]
                        )
            else:
                for metric in probabilities[probability]:
                    probabilities[probability][metric] = _convert_to_integer(
                        probabilities[probability][metric]
                    )

        redis_conn.set(f"description:{request.user.id}", dumps(description))
        redis_conn.set(
            f"probabilities:{request.user.id}", dumps(probabilities)
        )

        context = {"probabilities": probabilities}

        return Response(context)
    def test_clean_text_expressions_basic(self):
        text = r"[email protected] is test email. <head> is tag in html. http://test.com {Test.test}"

        clear_text = clean_text(text)
        assert clear_text == "is test email is tag html"
    def test_clean_text_expressions_final(self):
        text = "test for test +100500$\t s t  "

        clear_text = clean_text(text)
        assert clear_text == "test test"
    def test_clean_text_expressions_specific(self):
        text = "Datetime 1234-12-12 21:21:21,123 "

        clear_text = clean_text(text)
        assert clear_text == "datetime"
Exemple #7
0
        def _parse_issue(raw_issue: dict) -> dict:
            """ Parse issue raw object structure.

            Parameters:
            ----------
            raw_issue:
                Raw issue object to be parsed.

            Returns:
            ----------
                Returns object containing parsed issue attributes.
            """
            fields = raw_issue.get("fields")
            history = raw_issue.get("changelog").get("histories")

            parsed_issue = {
                "Project":
                fields["Project"].get("name")
                if fields.get("Project") else "" or "",
                "Attachments":
                len(fields.get("Attachment") or []),
                "Priority":
                fields["Priority"].get("name")
                if fields.get("Priority") else "" or "",
                "Resolved":
                get_utc_datetime(fields["Resolved"])
                if fields.get("Resolved") else None,
                "Updated":
                get_utc_datetime(fields["Updated"])
                if fields.get("Updated") else None,
                "Labels":
                ",".join(fields["Labels"] or ""),
                "Created":
                get_utc_datetime(fields["Created"]),
                "Comments":
                len(fields["Comment"].get("comments") or []),
                "Status":
                fields["Status"]["name"],
                "Key":
                raw_issue["key"] or "",
                "Summary":
                fields["Summary"] or "",
                "Resolution":
                fields["Resolution"].get("name", "Unresolved")
                if fields.get("Resolution") else "Unresolved",
                "Description":
                fields["Description"] or "",
                "Components":
                ",".join([
                    component["name"] for component in fields["Component/s"]
                ]),
                "Version":
                ",".join([el["name"] for el in fields["Versions"]])
                if fields.get("Versions") else "",
                "Assignee":
                fields.get("Assignee").get("displayName")
                if fields.get("Assignee") else "" or "",
                "Reporter":
                fields.get("Reporter").get("displayName")
                if fields.get("Reporter") else "" or "",
                "History": [{
                    "Author":
                    snapshot.get("author").get("displayName")
                    if snapshot.get("author") else "",
                    "Created":
                    get_utc_datetime(snapshot.get("created"))
                    if snapshot.get("created") else "",
                    "Items": [{
                        "Field": item.get("field"),
                        "From": item.get("fromString"),
                        "To": item.get("toString"),
                    } for item in snapshot.get("items")]
                    if snapshot.get("items") else "",
                } for snapshot in history],
            }

            parsed_issue["Description_tr"] = clean_text(
                parsed_issue["Description"])
            parsed_issue["Time to Resolve"] = calculate_ttr(
                parsed_issue["Resolved"], parsed_issue["Created"])

            for key in fields:
                if key not in parsed_issue:
                    parsed_issue[key] = str(fields[key])

            return parsed_issue