tests/test_rest_api.py
    F 56:0 test_readiness_endpoint - A (3)
    F 71:0 test_stack_api_endpoint - A (3)
    F 79:0 test_recommendation_api_endpoint - A (3)
    F 64:0 test_liveness_endpoint - A (2)
    F 41:0 get_json_from_response - A (1)
    F 46:0 api_route_for - A (1)
    F 51:0 get_json_from_response - A (1)
tests/test_dependency_editor.py
    F 9:0 test_constructor - A (2)
tests/test_utils.py
    F 32:0 test_version_info_tuple - C (11)
    F 9:0 test_semantic_versioning - B (10)
    F 52:0 test_select_latest_version - A (3)
tests/test_stack_aggregator.py
    F 10:0 test_extract_component_details - A (4)
    F 40:0 test_extract_user_stack_package_licenses - A (2)
    F 47:0 mocked_get_dependency_data - A (2)
    F 54:0 test_extract_user_stack_package_licenses_2 - A (2)
    F 61:0 test_stack_aggregator_constructor - A (2)
    F 30:0 test_aggregate_stack_data - A (1)
    F 35:0 mocked_get_dependency_data_none - A (1)
tests/test_recommender.py
    C 29:0 TestRecommendationTask - A (2)
    M 32:4 TestRecommendationTask.test_call_insights_recommender_npm - A (2)
    F 11:0 mocked_requests_get - A (1)
tests/conftest.py
    F 11:0 client - A (2)
src/utils.py
    F 203:0 select_latest_version - B (9)
    F 68:0 create_package_dict - B (8)
    F 160:0 convert_version_to_proper_semantic - A (3)
    F 49:0 get_osio_user_count - A (2)
    F 188:0 version_info_tuple - A (2)
    F 239:0 get_session_retry - A (2)
    C 27:0 Postgres - A (1)
    M 30:4 Postgres.__init__ - A (1)
    M 44:4 Postgres.session - A (1)
src/rest_api.py
    F 44:0 dep_editor - A (5)
    F 68:0 recommender - A (5)
    F 94:0 stack_aggregator - A (5)
    F 13:0 setup_logging - A (2)
    F 32:0 readiness - A (1)
    F 38:0 liveness - A (1)
src/stack_aggregator.py
    F 141:0 _extract_unknown_licenses - C (11)
    F 231:0 perform_license_analysis - B (8)
    F 356:0 get_dependency_data - B (8)
    F 299:0 aggregate_stack_data - B (7)
    C 392:0 StackAggregator - B (7)
    M 395:4 StackAggregator.execute - B (7)
    F 108:0 _extract_conflict_packages - A (4)
    F 280:0 extract_user_stack_package_licenses - A (4)
    F 24:0 extract_component_details - A (3)
    F 208:0 _extract_license_outliers - A (3)
src/dependency_editor.py
    M 36:4 DependencyEditor.execute - A (2)
    C 13:0 DependencyEditor - A (1)
    M 16:4 DependencyEditor.__init__ - A (1)
    M 24:4 DependencyEditor.recommender_result - A (1)
    M 30:4 DependencyEditor.aggregator_result - A (1)
src/recommender.py
    M 149:4 GraphDB.filter_versions - D (22)
    M 421:4 RecommendationTask.execute - C (18)
    C 371:0 RecommendationTask - C (13)
    F 309:0 apply_license_filter - B (9)
    M 379:4 RecommendationTask.call_insights_recommender - B (7)
    C 95:0 GraphDB - B (6)
    M 257:4 GraphDB.get_topics_for_alt - B (6)
    M 270:4 GraphDB.get_topics_for_comp - A (5)
    M 98:4 GraphDB.execute_gremlin_dsl - A (3)
    M 125:4 GraphDB.get_version_information - A (3)
    F 287:0 invoke_license_analysis_service - A (2)
    M 117:4 GraphDB.get_response_data - A (1)

64 blocks (classes, functions, methods) analyzed.
Average complexity: A (4.25)