moderne-visualizations-misc 0.71.1__tar.gz → 0.72.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/PKG-INFO +1 -1
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/README.md +6 -2
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/composite_recipe_results_sankey.ipynb +24 -34
- moderne_visualizations_misc-0.72.0/moderne_visualizations_misc/dependency_vulnerabilities.ipynb +45 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc.egg-info/PKG-INFO +1 -1
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/pyproject.toml +1 -1
- moderne_visualizations_misc-0.71.1/moderne_visualizations_misc/dependency_vulnerabilities.ipynb +0 -1351
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/MANIFEST.in +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/__init__.py +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/call_graph_data_grid.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/call_graph_uml.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/cobol_find_copybook.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/cobol_relationships.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/cobol_relationships_data_grid.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/comment_language_distribution.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/dependency_tree_view.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/dependency_tree_view_nodejs.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/dependency_tree_view_nodejs_build_tools.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/dependency_tree_view_nodejs_db.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/dependency_tree_view_nodejs_forms.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/dependency_tree_view_nodejs_lint.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/dependency_tree_view_nodejs_rtc.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/dependency_tree_view_nodejs_security.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/dependency_tree_view_nodejs_ss.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/dependency_tree_view_nodejs_state.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/dependency_tree_view_nodejs_testing.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/dependency_tree_view_nodejs_ui.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/dependency_tree_view_nodejs_utility.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/dependency_usage_violin.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/dependency_usage_violin_gradle.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/dependency_usage_violin_jackson.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/dependency_usage_violin_maven.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/dependency_usage_violin_nodejs.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/dependency_usage_violin_nodejs_build_tools.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/dependency_usage_violin_nodejs_db.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/dependency_usage_violin_nodejs_forms.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/dependency_usage_violin_nodejs_lint.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/dependency_usage_violin_nodejs_rtc.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/dependency_usage_violin_nodejs_security.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/dependency_usage_violin_nodejs_ss.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/dependency_usage_violin_nodejs_state.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/dependency_usage_violin_nodejs_testing.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/dependency_usage_violin_nodejs_ui.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/dependency_usage_violin_nodejs_utility.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/dependency_usage_violin_nuget.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/dependency_vulnerabilities_npm.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/dependency_vulnerabilities_nuget.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/effective_maven_settings.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/embeddings_clustering.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/eslint_problems.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/eslint_problems_by_repo.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/find_methods.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/find_methods_ai.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/find_methods_ai_generate_yaml.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/find_source_files.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/get_embeddings_and_cluster.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/github_secrets_in_use.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/gradle_wrappers.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/call_graph_data_grid.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/call_graph_uml.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/cobol_find_copybook.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/cobol_relationships.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/cobol_relationships_data_grid.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/comment_language_distribution.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/composite_recipe_results_sankey.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/dependency_tree_view.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/dependency_tree_view_nodejs.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/dependency_tree_view_nodejs_build_tools.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/dependency_tree_view_nodejs_db.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/dependency_tree_view_nodejs_forms.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/dependency_tree_view_nodejs_lint.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/dependency_tree_view_nodejs_rtc.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/dependency_tree_view_nodejs_security.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/dependency_tree_view_nodejs_ss.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/dependency_tree_view_nodejs_state.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/dependency_tree_view_nodejs_testing.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/dependency_tree_view_nodejs_ui.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/dependency_tree_view_nodejs_utility.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/dependency_usage_violin.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/dependency_usage_violin_gradle.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/dependency_usage_violin_jackson.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/dependency_usage_violin_maven.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/dependency_usage_violin_nodejs.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/dependency_usage_violin_nodejs_build_tools.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/dependency_usage_violin_nodejs_db.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/dependency_usage_violin_nodejs_forms.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/dependency_usage_violin_nodejs_lint.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/dependency_usage_violin_nodejs_rtc.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/dependency_usage_violin_nodejs_security.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/dependency_usage_violin_nodejs_ss.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/dependency_usage_violin_nodejs_state.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/dependency_usage_violin_nodejs_testing.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/dependency_usage_violin_nodejs_ui.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/dependency_usage_violin_nodejs_utility.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/dependency_usage_violin_nuget.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/dependency_vulnerabilities.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/dependency_vulnerabilities_npm.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/dependency_vulnerabilities_nuget.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/eslint_problems.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/eslint_problems_by_repo.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/find_methods.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/find_methods_ai.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/find_methods_ai_generate_yaml.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/github_secrets_in_use.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/gradle_wrappers.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/language_composition.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/language_composition_by_folder.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/language_composition_by_repo.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/maven_parent_poms.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/parse_failure_stacktraces.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/recipe_performance.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/spring_component_relationships.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/spring_component_relationships_data_grid.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/spring_components_data_grid.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/sql_crud.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/text_matches_tree_grid.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/ui5lint_rule_treemap.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/images/ui5lint_violations_heatmap.300.png +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/java_versions_by_sourceset.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/java_versions_in_use.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/language_composition.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/language_composition_by_folder.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/language_composition_by_repo.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/lst_provenance.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/maven_parent_poms.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/parse_failure_stacktraces.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/recipe_performance.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/recommendations.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/resources/plantuml.jar +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/reusable/tree_view_nodejs.py +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/reusable/violin_nodejs.py +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/call_graph_data_grid.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/call_graph_uml.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/cobol_find_copybook.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/cobol_relationships.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/cobol_relationships_data_grid.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/comment_language_distribution.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/composite_recipe_results_sankey.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/dependency_tree_view.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/dependency_tree_view_nodejs.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/dependency_tree_view_nodejs_build_tools.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/dependency_tree_view_nodejs_db.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/dependency_tree_view_nodejs_forms.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/dependency_tree_view_nodejs_lint.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/dependency_tree_view_nodejs_rtc.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/dependency_tree_view_nodejs_security.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/dependency_tree_view_nodejs_ss.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/dependency_tree_view_nodejs_state.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/dependency_tree_view_nodejs_testing.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/dependency_tree_view_nodejs_ui.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/dependency_tree_view_nodejs_utility.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/dependency_usage_violin.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/dependency_usage_violin_gradle.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/dependency_usage_violin_jackson.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/dependency_usage_violin_maven.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/dependency_usage_violin_nodejs.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/dependency_usage_violin_nodejs_build_tools.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/dependency_usage_violin_nodejs_db.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/dependency_usage_violin_nodejs_forms.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/dependency_usage_violin_nodejs_lint.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/dependency_usage_violin_nodejs_rtc.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/dependency_usage_violin_nodejs_security.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/dependency_usage_violin_nodejs_ss.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/dependency_usage_violin_nodejs_state.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/dependency_usage_violin_nodejs_testing.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/dependency_usage_violin_nodejs_ui.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/dependency_usage_violin_nodejs_utility.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/dependency_usage_violin_nuget.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/dependency_vulnerabilities.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/dependency_vulnerabilities_npm.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/dependency_vulnerabilities_nuget.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/effective_maven_settings.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/embeddings_clustering.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/eslint_problems.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/eslint_problems_by_repo.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/find_methods.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/find_methods_ai.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/find_methods_ai_generate_yaml.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/find_source_files.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/get_embeddings_and_cluster.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/github_secrets_in_use.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/gradle_wrappers.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/java_versions_by_sourceset.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/java_versions_in_use.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/language_composition.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/language_composition_by_folder.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/language_composition_by_repo.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/lst_provenance.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/maven_parent_poms.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/parse_failure_stacktraces.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/recipe_performance.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/recommendations.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/spring_component_relationships.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/spring_component_relationships_data_grid.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/spring_components_data_grid.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/sql_crud.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/text_matches_tree_grid.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/ui5lint_rule_treemap.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/specs/ui5lint_violations_heatmap.yml +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/spring_component_relationships.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/spring_component_relationships_data_grid.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/spring_components_data_grid.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/sql_crud.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/text_matches_tree_grid.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/ui5lint_rule_treemap.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc/ui5lint_violations_heatmap.ipynb +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc.egg-info/SOURCES.txt +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc.egg-info/dependency_links.txt +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc.egg-info/requires.txt +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/moderne_visualizations_misc.egg-info/top_level.txt +0 -0
- {moderne_visualizations_misc-0.71.1 → moderne_visualizations_misc-0.72.0}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: moderne_visualizations_misc
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.72.0
|
|
4
4
|
Summary: Miscellaneous visualizations for the Moderne platform
|
|
5
5
|
Author-email: Jonathan Schneider <jonathan@moderne.io>, Kyle Scully <kyle@moderne.io>
|
|
6
6
|
License: Apache-2.0
|
|
@@ -18,13 +18,17 @@ jupyter notebook
|
|
|
18
18
|
|
|
19
19
|
## Contributing
|
|
20
20
|
|
|
21
|
-
Install [
|
|
21
|
+
* Install a Python version >= 3.9 and < 3.13 (3.9 recommended). [pyenv](https://github.com/pyenv/pyenv) makes this easy.
|
|
22
22
|
|
|
23
|
-
Install
|
|
23
|
+
* Install [uv](https://docs.astral.sh/uv/getting-started/installation/)
|
|
24
|
+
|
|
25
|
+
* Install development requirements:
|
|
24
26
|
|
|
25
27
|
```bash
|
|
26
28
|
uv sync --dev
|
|
27
29
|
source .venv/bin/activate
|
|
30
|
+
# or on Windows
|
|
31
|
+
source .venv/Scripts/activate
|
|
28
32
|
```
|
|
29
33
|
|
|
30
34
|
Run type checking:
|
|
@@ -31,9 +31,8 @@
|
|
|
31
31
|
"# Filter the data frame to only include rows where repositoryWithBranch contain\n",
|
|
32
32
|
"# a term in the repository_filter (case insensitive)\n",
|
|
33
33
|
"if len(repository_filter) > 0:\n",
|
|
34
|
-
" df = df[\n",
|
|
35
|
-
"
|
|
36
|
-
" ]"
|
|
34
|
+
" df = df[df[\"repositoryWithBranch\"].str.contains(\n",
|
|
35
|
+
" \"|\".join(repository_filter), case=False)]"
|
|
37
36
|
]
|
|
38
37
|
},
|
|
39
38
|
{
|
|
@@ -54,31 +53,6 @@
|
|
|
54
53
|
" .reset_index(name=\"count\")\n",
|
|
55
54
|
")\n",
|
|
56
55
|
"\n",
|
|
57
|
-
"\n",
|
|
58
|
-
"def shorten_ids(df, cols):\n",
|
|
59
|
-
" \"\"\"\n",
|
|
60
|
-
" Shorten IDs in cols by using the artifact names if there are name collisions\n",
|
|
61
|
-
" \"\"\"\n",
|
|
62
|
-
" sep = \".\"\n",
|
|
63
|
-
" df = df.copy()\n",
|
|
64
|
-
" for col in cols:\n",
|
|
65
|
-
" # count how many distinct IDs share each suffix\n",
|
|
66
|
-
" unique_ids = df[col].unique()\n",
|
|
67
|
-
" suffixes = pd.Series(unique_ids).str.rsplit(pat=sep, n=1).str[-1]\n",
|
|
68
|
-
" suffix_counts = suffixes.value_counts()\n",
|
|
69
|
-
"\n",
|
|
70
|
-
" # pick either full ID or suffix per row\n",
|
|
71
|
-
" row_suffix = df[col].str.rsplit(pat=sep, n=1).str[-1]\n",
|
|
72
|
-
" df[col] = np.where(\n",
|
|
73
|
-
" row_suffix.map(suffix_counts) > 1,\n",
|
|
74
|
-
" df[col], # conflict → full ID\n",
|
|
75
|
-
" row_suffix, # unique → artifact name\n",
|
|
76
|
-
" )\n",
|
|
77
|
-
" return df\n",
|
|
78
|
-
"\n",
|
|
79
|
-
"\n",
|
|
80
|
-
"recipe_counts = shorten_ids(recipe_counts, [\"parentRecipe\", \"recipe\"])\n",
|
|
81
|
-
"\n",
|
|
82
56
|
"# sort recipe_counts by count\n",
|
|
83
57
|
"recipe_counts = recipe_counts.sort_values(by=[\"count\"], ascending=False)\n",
|
|
84
58
|
"\n",
|
|
@@ -111,9 +85,8 @@
|
|
|
111
85
|
"# convert the 'count' column to a list\n",
|
|
112
86
|
"value = list(recipe_counts[\"count\"])\n",
|
|
113
87
|
"\n",
|
|
114
|
-
"# Format labels with node names and counts\n",
|
|
115
|
-
"\n",
|
|
116
88
|
"\n",
|
|
89
|
+
"# Format labels with node names and counts\n",
|
|
117
90
|
"def getCount(node):\n",
|
|
118
91
|
" left = recipe_counts[recipe_counts[\"recipe\"] == node][\"count\"].sum()\n",
|
|
119
92
|
" if left == 0:\n",
|
|
@@ -122,7 +95,12 @@
|
|
|
122
95
|
" return left\n",
|
|
123
96
|
"\n",
|
|
124
97
|
"\n",
|
|
125
|
-
"
|
|
98
|
+
"def short_name(node):\n",
|
|
99
|
+
" return node.split(\".\")[-1]\n",
|
|
100
|
+
"\n",
|
|
101
|
+
"\n",
|
|
102
|
+
"formatted_labels = [f\"{short_name(node)} - {getCount(node)}\" for node in all_nodes]\n",
|
|
103
|
+
"\n",
|
|
126
104
|
"base_colors = [\n",
|
|
127
105
|
" \"#2f42ff\",\n",
|
|
128
106
|
" \"#7e9bd2\",\n",
|
|
@@ -148,6 +126,13 @@
|
|
|
148
126
|
" colors.append(base_colors[i % len(base_colors)])\n",
|
|
149
127
|
"\n",
|
|
150
128
|
"\n",
|
|
129
|
+
"# Create custom data for links to show full node names\n",
|
|
130
|
+
"link_customdata = []\n",
|
|
131
|
+
"for i in range(len(source)):\n",
|
|
132
|
+
" source_name = all_nodes[source[i]]\n",
|
|
133
|
+
" target_name = all_nodes[target[i]]\n",
|
|
134
|
+
" link_customdata.append([source_name, target_name])\n",
|
|
135
|
+
"\n",
|
|
151
136
|
"# Create the Sankey diagram\n",
|
|
152
137
|
"fig = go.Figure(\n",
|
|
153
138
|
" data=[\n",
|
|
@@ -158,11 +143,16 @@
|
|
|
158
143
|
" line=dict(color=\"black\", width=0.5),\n",
|
|
159
144
|
" label=formatted_labels,\n",
|
|
160
145
|
" color=colors,\n",
|
|
146
|
+
" customdata=all_nodes,\n",
|
|
147
|
+
" hovertemplate=\"<b>%{customdata}</b><extra></extra>\",\n",
|
|
148
|
+
"\n",
|
|
161
149
|
" ),\n",
|
|
162
150
|
" link=dict(\n",
|
|
163
151
|
" source=source,\n",
|
|
164
152
|
" target=target,\n",
|
|
165
153
|
" value=value,\n",
|
|
154
|
+
" customdata=link_customdata,\n",
|
|
155
|
+
" hovertemplate=\"<b>Source:</b> %{customdata[0]}<br><b>Target:</b> %{customdata[1]}<br><b>Count:</b> %{value}<extra></extra>\",\n",
|
|
166
156
|
" ),\n",
|
|
167
157
|
" )\n",
|
|
168
158
|
" ]\n",
|
|
@@ -172,16 +162,16 @@
|
|
|
172
162
|
"fig.update_layout(\n",
|
|
173
163
|
" title_text=\"Recipes that made changes\",\n",
|
|
174
164
|
" font_size=10,\n",
|
|
175
|
-
" height=max(len(all_nodes) *
|
|
165
|
+
" height=max(len(all_nodes) * 10, 500),\n",
|
|
176
166
|
")\n",
|
|
177
167
|
"\n",
|
|
178
|
-
"fig.show()"
|
|
168
|
+
"fig.show()\n"
|
|
179
169
|
]
|
|
180
170
|
}
|
|
181
171
|
],
|
|
182
172
|
"metadata": {
|
|
183
173
|
"kernelspec": {
|
|
184
|
-
"display_name": "
|
|
174
|
+
"display_name": "moderne-visualizations-misc",
|
|
185
175
|
"language": "python",
|
|
186
176
|
"name": "python3"
|
|
187
177
|
},
|
moderne_visualizations_misc-0.72.0/moderne_visualizations_misc/dependency_vulnerabilities.ipynb
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"cells": [
|
|
3
|
+
{
|
|
4
|
+
"cell_type": "code",
|
|
5
|
+
"execution_count": 3,
|
|
6
|
+
"metadata": {
|
|
7
|
+
"tags": [
|
|
8
|
+
"parameters"
|
|
9
|
+
]
|
|
10
|
+
},
|
|
11
|
+
"outputs": [],
|
|
12
|
+
"source": [
|
|
13
|
+
"repository_filter: list[str] = []"
|
|
14
|
+
]
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"cell_type": "code",
|
|
18
|
+
"execution_count": null,
|
|
19
|
+
"metadata": {},
|
|
20
|
+
"outputs": [],
|
|
21
|
+
"source": "import pandas as pd\nimport warnings\nimport plotly.graph_objects as go\nimport code_data_science.data_table as dt\n\nwarnings.simplefilter(\"ignore\")\n\ndf = dt.read_csv(\"../samples/dependency_vulnerabilities.csv\")\n\ndf[\"repositoryWithBranch\"] = df[\"repositoryPath\"] + \"/\" + df[\"repositoryBranch\"]\n\n# Filter the data frame to only include rows where repositoryWithBranch contain\n# a term in the repository_filter (case insensitive)\nif len(repository_filter) > 0:\n df = df[\n df[\"repositoryWithBranch\"].str.contains(\"|\".join(repository_filter), case=False)\n ]\n\n\ndef create_bar_plot(df_direct, df_transitive):\n if df_direct is None or df_transitive is None:\n # Create empty dataframes with the correct structure\n fix_types = [\"Patch\", \"Minor\", \"Major\", \"No fixed version\"]\n df_direct = pd.DataFrame({\n \"Type\": fix_types,\n \"Low\": [0] * 4,\n \"Moderate\": [0] * 4,\n \"High\": [0] * 4,\n \"Critical\": [0] * 4,\n })\n df_transitive = pd.DataFrame({\n \"Type\": fix_types,\n \"Low\": [0] * 4,\n \"Moderate\": [0] * 4,\n \"High\": [0] * 4,\n \"Critical\": [0] * 4,\n })\n\n fig = go.Figure()\n \n # Define colors for severity levels\n colors = {\n \"Critical\": \"#FF5B5B\",\n \"High\": \"#FABA49\",\n \"Moderate\": \"#FEE968\",\n \"Low\": \"#52BBA0\"\n }\n \n # Calculate totals for percentage calculations\n df_direct[\"Total\"] = df_direct[[\"Critical\", \"High\", \"Moderate\", \"Low\"]].sum(axis=1)\n df_transitive[\"Total\"] = df_transitive[[\"Critical\", \"High\", \"Moderate\", \"Low\"]].sum(axis=1)\n grand_total = df_direct[\"Total\"].sum() + df_transitive[\"Total\"].sum()\n \n # Add traces for direct dependencies\n for i, severity in enumerate([\"Critical\", \"High\", \"Moderate\", \"Low\"]):\n # Calculate percentages for hover\n percentages_direct = []\n for idx in range(len(df_direct)):\n count = df_direct.iloc[idx][severity]\n total_in_category = df_direct.iloc[idx][\"Total\"] + df_transitive.iloc[idx][\"Total\"]\n pct_of_category = (count / total_in_category * 100) if total_in_category > 0 else 0\n pct_of_all = (count / grand_total * 100) if grand_total > 0 else 0\n percentages_direct.append({\n \"category_pct\": round(pct_of_category, 1),\n \"total_pct\": round(pct_of_all, 1)\n })\n \n fig.add_trace(go.Bar(\n name=severity,\n x=df_direct[\"Type\"],\n y=df_direct[severity],\n marker_color=colors[severity],\n legendgroup=severity,\n offsetgroup=\"direct\",\n showlegend=True,\n customdata=percentages_direct,\n hovertemplate=(\n '<b>%{x}</b><br>' +\n f'{severity} (Direct): %{{y}}<br>' +\n 'Percent of %{x}: %{customdata.category_pct}%<br>' +\n 'Percent of all: %{customdata.total_pct}%' +\n '<extra></extra>'\n )\n ))\n \n # Add traces for transitive dependencies\n for i, severity in enumerate([\"Critical\", \"High\", \"Moderate\", \"Low\"]):\n # Calculate percentages for hover\n percentages_transitive = []\n for idx in range(len(df_transitive)):\n count = df_transitive.iloc[idx][severity]\n total_in_category = df_direct.iloc[idx][\"Total\"] + df_transitive.iloc[idx][\"Total\"]\n pct_of_category = (count / total_in_category * 100) if total_in_category > 0 else 0\n pct_of_all = (count / grand_total * 100) if grand_total > 0 else 0\n percentages_transitive.append({\n \"category_pct\": round(pct_of_category, 1),\n \"total_pct\": round(pct_of_all, 1)\n })\n \n fig.add_trace(go.Bar(\n name=f'{severity} ', # Add space to make it different from direct\n x=df_transitive[\"Type\"],\n y=df_transitive[severity],\n marker_color=colors[severity],\n marker_pattern_shape=\"/\",\n legendgroup=severity,\n offsetgroup=\"transitive\",\n showlegend=False, # Hide from legend since we'll use annotations\n customdata=percentages_transitive,\n hovertemplate=(\n '<b>%{x}</b><br>' +\n f'{severity} (Transitive): %{{y}}<br>' +\n 'Percent of %{x}: %{customdata.category_pct}%<br>' +\n 'Percent of all: %{customdata.total_pct}%' +\n '<extra></extra>'\n )\n ))\n \n # Update layout with improved legend\n fig.update_layout(\n xaxis={\"title\": \"Type of version required to fix vulnerability\"},\n yaxis={\"title\": \"Vulnerability count\"},\n barmode='group',\n bargap=0.15,\n bargroupgap=0.05,\n margin=dict(l=0, r=0, t=60, b=60),\n legend=dict(\n orientation=\"v\",\n yanchor=\"top\",\n y=0.95,\n xanchor=\"left\",\n x=1.02,\n title=dict(\n text=\"Severity Level<br><sub>Solid: Direct | Striped: Transitive</sub>\",\n font=dict(size=12)\n )\n ),\n annotations=[\n dict(\n text=\"<b>Dependency Vulnerabilities by Fix Type</b>\",\n xref=\"paper\",\n yref=\"paper\",\n x=0.5,\n y=1.05,\n showarrow=False,\n font=dict(size=14)\n )\n ]\n )\n \n return fig\n\n\n# Exit early if there are no stack traces and render a plot with a message\nif len(df) == 0:\n fig = create_bar_plot(None, None)\n fig.update_yaxes(range=[0, 10])\n fig.show(render=\"plotly_mimetype\")\nelse:\n\n def get_semver_fix(version, fixed_version):\n \"\"\"\n looks at current version and fixed version and determines if the fix is a major, minor, patch version, or no fix\n \"\"\"\n version_components = version.split(\".\")\n fixed_components = fixed_version.split(\".\")\n\n # if fixed version is empty, return \"No fixed version\"\n if fixed_version == \"\":\n return \"No fixed version\"\n\n if len(version_components) < 3:\n # fill in the missing version components with 0\n for i in range(3 - len(version_components)):\n version_components.append(\"0\")\n if len(fixed_components) < 3:\n # fill in the missing version components with 0\n for i in range(3 - len(fixed_components)):\n fixed_components.append(\"0\")\n\n elif version_components[0] != fixed_components[0]:\n return \"Major\"\n elif version_components[1] != fixed_components[1]:\n return \"Minor\"\n elif version_components[2] != fixed_components[2]:\n return \"Patch\"\n else:\n return \"Unknown\"\n\n # drop unnecessary columns except depth which we need\n df = df.drop(\n columns=[\n \"repositoryOrigin\",\n \"repositoryPath\",\n \"repositoryBranch\",\n \"repositoryWithBranch\",\n \"cve\",\n \"groupId\",\n \"artifactId\",\n \"summary\",\n ]\n )\n\n # fill NaN values with empty string\n df[\"fixedVersion\"] = df[\"fixedVersion\"].fillna(\"\")\n df[\"version\"] = df[\"version\"].fillna(\"\")\n # make sure version and fixedVersion is a string\n df[\"fixedVersion\"] = df[\"fixedVersion\"].astype(str)\n df[\"version\"] = df[\"version\"].astype(str)\n\n # add column 'semverFix' to dataframe\n df[\"semverFix\"] = df.apply(\n lambda x: get_semver_fix(x[\"version\"], x[\"fixedVersion\"]), axis=1\n )\n \n # Split into direct and transitive\n df_direct = df[df[\"depth\"] == 0]\n df_transitive = df[df[\"depth\"] != 0]\n \n # Define the order for fix types\n fix_order = [\"Patch\", \"Minor\", \"Major\", \"No fixed version\"]\n \n # Create aggregated data for direct dependencies\n direct_data = []\n for fix_type in fix_order:\n fix_df = df_direct[df_direct[\"semverFix\"] == fix_type]\n severity_counts = fix_df[\"severity\"].value_counts()\n direct_data.append({\n \"Type\": fix_type,\n \"Critical\": severity_counts.get(\"CRITICAL\", 0),\n \"High\": severity_counts.get(\"HIGH\", 0),\n \"Moderate\": severity_counts.get(\"MODERATE\", 0),\n \"Low\": severity_counts.get(\"LOW\", 0)\n })\n df_direct_plot = pd.DataFrame(direct_data)\n \n # Create aggregated data for transitive dependencies\n transitive_data = []\n for fix_type in fix_order:\n fix_df = df_transitive[df_transitive[\"semverFix\"] == fix_type]\n severity_counts = fix_df[\"severity\"].value_counts()\n transitive_data.append({\n \"Type\": fix_type,\n \"Critical\": severity_counts.get(\"CRITICAL\", 0),\n \"High\": severity_counts.get(\"HIGH\", 0),\n \"Moderate\": severity_counts.get(\"MODERATE\", 0),\n \"Low\": severity_counts.get(\"LOW\", 0)\n })\n df_transitive_plot = pd.DataFrame(transitive_data)\n\n fig = create_bar_plot(df_direct_plot, df_transitive_plot)\n\n # Show the figure\n fig.show(render=\"plotly_mimetype\")"
|
|
22
|
+
}
|
|
23
|
+
],
|
|
24
|
+
"metadata": {
|
|
25
|
+
"kernelspec": {
|
|
26
|
+
"display_name": "Python 3 (ipykernel)",
|
|
27
|
+
"language": "python",
|
|
28
|
+
"name": "python3"
|
|
29
|
+
},
|
|
30
|
+
"language_info": {
|
|
31
|
+
"codemirror_mode": {
|
|
32
|
+
"name": "ipython",
|
|
33
|
+
"version": 3
|
|
34
|
+
},
|
|
35
|
+
"file_extension": ".py",
|
|
36
|
+
"mimetype": "text/x-python",
|
|
37
|
+
"name": "python",
|
|
38
|
+
"nbconvert_exporter": "python",
|
|
39
|
+
"pygments_lexer": "ipython3",
|
|
40
|
+
"version": "3.12.2"
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
"nbformat": 4,
|
|
44
|
+
"nbformat_minor": 4
|
|
45
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: moderne_visualizations_misc
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.72.0
|
|
4
4
|
Summary: Miscellaneous visualizations for the Moderne platform
|
|
5
5
|
Author-email: Jonathan Schneider <jonathan@moderne.io>, Kyle Scully <kyle@moderne.io>
|
|
6
6
|
License: Apache-2.0
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# @see https://packaging.python.org/en/latest/specifications/declaring-project-metadata/
|
|
2
2
|
[project]
|
|
3
3
|
name = "moderne_visualizations_misc"
|
|
4
|
-
version = "0.
|
|
4
|
+
version = "0.72.0"
|
|
5
5
|
description = "Miscellaneous visualizations for the Moderne platform"
|
|
6
6
|
authors = [
|
|
7
7
|
{ name = "Jonathan Schneider", email = "jonathan@moderne.io" },
|