Пример #1
0
def predict_and_score():
    input_json = request.get_json()

    # Get the response if already cached earlier
    # Sort package_list elements first
    for i in input_json:
        i['package_list'] = sorted(i['package_list'])

    hash_key = hashlib.sha224(
        json.dumps(input_json, sort_keys=True).encode('utf-8')).hexdigest()
    if hash_key not in hash_dict:

        app.logger.info("Analyzing the given EPV")
        app.logger.info(input_json)

        response = {
            "message": "Failed to load model, Kronos Region not available"
        }

        if app.scoring_status:
            response = score_eco_user_package_dict(
                user_request=input_json,
                user_eco_kronos_dict=app.user_eco_kronos_dict,
                eco_to_kronos_dependency_dict=app.
                eco_to_kronos_dependency_dict,
                all_package_list_obj=app.all_package_list_obj,
                package_frequency_dict=app.package_frequency_dict)

        app.logger.info("Sending back Kronos Response")
        app.logger.info(response)
        hash_dict[hash_key] = response
    else:
        response = hash_dict[hash_key]
    return flask.jsonify(response)
    def test_score_eco_user_package_dict(self):
        """Test the dependency dict deserialization, frequency list deserialization etc."""
        input_data_store = LocalFileSystem(
            "tests/data/data_pgm/input-score-data/")
        self.assertIsNotNone(input_data_store)

        output_data_store = LocalFileSystem(
            "tests/data/data_pgm/output-score-data/")
        self.assertIsNotNone(output_data_store)

        frequency_dict_data_store = LocalFileSystem(
            src_dir="tests/data/data_apollo/")
        self.assertIsNotNone(frequency_dict_data_store)

        user_eco_kronos_dict = load_user_eco_to_kronos_model_dict(
            input_kronos_data_store=input_data_store, additional_path="")

        self.assertIsNotNone(user_eco_kronos_dict)

        eco_to_kronos_dependency_dict = get_eco_to_kronos_dependency_dict(
            data_store=input_data_store, folderpath="data_kronos_dependency")

        self.assertIsNotNone(eco_to_kronos_dependency_dict)

        user_request = [{
            "ecosystem": "pypi",
            "comp_package_count_threshold": 10,
            "alt_package_count_threshold": 1,
            "outlier_probability_threshold": 0.61,
            "unknown_packages_ratio_threshold": 0.4,
            "outlier_package_count_threshold": 2,
            "package_list": ["p1", "p2", "p3", "np1"]
        }]

        frequency_dict = frequency_dict_data_store.read_json_file(
            filename=KD_PACKAGE_FREQUENCY)
        self.assertIsNotNone(frequency_dict)
        all_package_list_obj = RecommendationValidator.load_package_list_local(
            input_folder_name="tests/data/data_recom_valid/",
            additional_path="")

        response = score_eco_user_package_dict(
            user_request,
            user_eco_kronos_dict=user_eco_kronos_dict,
            eco_to_kronos_dependency_dict=eco_to_kronos_dependency_dict,
            all_package_list_obj=all_package_list_obj,
            package_frequency_dict=frequency_dict,
            use_filters=USE_FILTERS)

        self.assertIsNotNone(response)

        output_data_store.write_json_file(filename="response.json",
                                          contents=response)

        expected_response = output_data_store.read_json_file(
            filename="expected_response.json")
        self.assertIsNotNone(expected_response)

        self.assertDictEqual(response[0], expected_response[0])
Пример #3
0
    def predict_and_score(self, input_json):
        """Call the scoring fcuntion of Kronos Online Scoring.

        :return: The recommendation JSON result."""

        return score_eco_user_package_dict(
            user_request=input_json,
            user_eco_kronos_dict=self.user_eco_kronos_dict,
            eco_to_kronos_dependency_dict=self.eco_to_kronos_dependency_dict,
            all_package_list_obj=None)
Пример #4
0
        def test_score_eco_user_package_dict(self):
            input_data_store = LocalFileSystem(
                "tests/data/data_pgm/input-score-data/")
            self.assertTrue(input_data_store is not None)

            output_data_store = LocalFileSystem(
                "tests/data/data_pgm/output-score-data/")
            self.assertTrue(output_data_store is not None)

            user_eco_kronos_dict = load_user_eco_to_kronos_model_dict(
                input_kronos_data_store=input_data_store, additional_path="")

            self.assertTrue(user_eco_kronos_dict is not None)

            eco_to_kronos_dependency_dict = get_eco_to_kronos_dependency_dict(
                data_store=input_data_store,
                folderpath="data_kronos_dependency")

            self.assertTrue(eco_to_kronos_dependency_dict is not None)

            user_request = [{
                "ecosystem":
                "pypi",
                "comp_package_count_threshold":
                10,
                "alt_package_count_threshold":
                1,
                "outlier_probability_threshold":
                0.61,
                "unknown_packages_ratio_threshold":
                0.4,
                "outlier_package_count_threshold":
                2,
                "package_list": ["p1", "p2", "p3", "np1", "p2", "p3", "p1"]
            }]

            response = score_eco_user_package_dict(
                user_request,
                user_eco_kronos_dict=user_eco_kronos_dict,
                eco_to_kronos_dependency_dict=eco_to_kronos_dependency_dict,
                all_package_list_obj=None)

            self.assertTrue(response is not None)

            output_data_store.write_json_file(filename="response.json",
                                              contents=response)

            expected_response = output_data_store.read_json_file(
                filename="expected_response.json")
            self.assertTrue(expected_response is not None)

            self.assertDictEqual(response[0], expected_response[0])
Пример #5
0
def predict_and_score():
    input_json = request.get_json()

    app.logger.info("Analyzing the given EPV")
    app.logger.info(input_json)

    response = {"message": "Failed to load model, Kronos Region not available"}

    if app.scoring_status:
        response = score_eco_user_package_dict(
            user_request=input_json,
            user_eco_kronos_dict=app.user_eco_kronos_dict,
            eco_to_kronos_dependency_dict=app.eco_to_kronos_dependency_dict,
            all_package_list_obj=app.all_package_list_obj)

    app.logger.info("Sending back Kronos Response")
    app.logger.info(response)

    return flask.jsonify(response)