Coverage report: 97%

Files Functions Classes

coverage.py v7.17.0, created at 2026-10-22 22:47 +0000

      Statements   Branches   Total
File function   coverage statements missing excluded   coverage branches partial   coverage
src/fjc_biographies/__init__.py (no function)   100% 10 0 0   100% 0 0   100%
src/fjc_biographies/__main__.py main   100% 9 0 0   100% 2 0   100%
src/fjc_biographies/__main__.py _get_parser   100% 9 0 0   100% 0 0   100%
src/fjc_biographies/__main__.py (no function)   100% 10 0 2   100% 0 0   100%
src/fjc_biographies/downloader.py data_folder   50% 10 5 0   50% 6 1   50%
src/fjc_biographies/downloader.py download   100% 10 0 0   100% 4 0   100%
src/fjc_biographies/downloader.py raw_folder   100% 2 0 0   100% 0 0   100%
src/fjc_biographies/downloader.py _categories   100% 10 0 0   100% 6 0   100%
src/fjc_biographies/downloader.py _open   60% 5 2 0   50% 2 1   57%
src/fjc_biographies/downloader.py _save   100% 9 0 0   100% 0 0   100%
src/fjc_biographies/downloader.py (no function)   100% 19 0 0   100% 0 0   100%
src/fjc_biographies/main.py run   100% 15 0 0   100% 6 0   100%
src/fjc_biographies/main.py export   100% 5 0 0   100% 0 0   100%
src/fjc_biographies/main.py (no function)   100% 8 0 0   100% 0 0   100%
src/fjc_biographies/names.py add_permutations   100% 8 0 0   100% 2 0   100%
src/fjc_biographies/names.py columns   100% 5 0 0   100% 4 0   100%
src/fjc_biographies/names.py permutations   100% 14 0 0   100% 10 0   100%
src/fjc_biographies/names.py _brackets   100% 3 0 0   100% 2 0   100%
src/fjc_biographies/names.py _initial   100% 2 0 0   100% 0 0   100%
src/fjc_biographies/names.py _text   100% 3 0 0   100% 2 0   100%
src/fjc_biographies/names.py (no function)   100% 14 0 0   100% 0 0   100%
src/fjc_biographies/options.py (no function)   100% 14 0 0   100% 0 0   100%
src/fjc_biographies/parser.py build_roster   100% 30 0 0   100% 4 0   100%
src/fjc_biographies/parser.py code_careers   100% 7 0 0   100% 0 0   100%
src/fjc_biographies/parser.py load   100% 2 0 0   100% 0 0   100%
src/fjc_biographies/parser.py load_all   100% 2 0 0   100% 0 0   100%
src/fjc_biographies/parser.py read   100% 7 0 0   100% 0 0   100%
src/fjc_biographies/parser.py roster_by_judge   100% 14 0 0   100% 0 0   100%
src/fjc_biographies/parser.py tidy   100% 19 0 0   93% 14 1   97%
src/fjc_biographies/parser.py _circuit   89% 9 1 0   83% 6 1   87%
src/fjc_biographies/parser.py _column_name   100% 4 0 0   100% 2 0   100%
src/fjc_biographies/parser.py _histories   100% 3 0 0   100% 0 0   100%
src/fjc_biographies/parser.py _number   100% 4 0 0   100% 2 0   100%
src/fjc_biographies/parser.py _require   100% 4 0 0   100% 2 0   100%
src/fjc_biographies/parser.py _table   100% 3 0 0   100% 2 0   100%
src/fjc_biographies/parser.py _text   100% 2 0 0   100% 0 0   100%
src/fjc_biographies/parser.py _vote_share   100% 7 0 0   100% 4 0   100%
src/fjc_biographies/parser.py _year   100% 2 0 0   100% 0 0   100%
src/fjc_biographies/parser.py (no function)   100% 36 0 0   100% 0 0   100%
src/fjc_biographies/rules.py Rule.create   90% 31 3 0   86% 14 2   89%
src/fjc_biographies/rules.py Rule.variable   100% 1 0 0   100% 0 0   100%
src/fjc_biographies/rules.py Rule.apply   100% 38 0 0   91% 32 3   96%
src/fjc_biographies/rules.py Rule._split   79% 14 3 0   88% 8 1   82%
src/fjc_biographies/rules.py Rulebook.create   100% 1 0 0   100% 0 0   100%
src/fjc_biographies/rules.py Rulebook.load   100% 11 0 0   100% 6 0   100%
src/fjc_biographies/rules.py Rulebook.sections   100% 1 0 0   100% 0 0   100%
src/fjc_biographies/rules.py Rulebook.targets   100% 1 0 0   100% 0 0   100%
src/fjc_biographies/rules.py Rulebook.variables   100% 1 0 0   100% 0 0   100%
src/fjc_biographies/rules.py Rulebook.apply   100% 4 0 0   100% 2 0   100%
src/fjc_biographies/rules.py Rulebook.__add__   0% 2 2 0   100% 0 0   0%
src/fjc_biographies/rules.py Rulebook.__iter__   0% 1 1 0   100% 0 0   0%
src/fjc_biographies/rules.py Rulebook.__len__   100% 1 0 0   100% 0 0   100%
src/fjc_biographies/rules.py find_instructions   100% 18 0 0   100% 10 0   100%
src/fjc_biographies/rules.py split_names   100% 13 0 0   100% 8 0   100%
src/fjc_biographies/rules.py _convert   82% 11 2 0   67% 6 2   76%
src/fjc_biographies/rules.py _listify   67% 3 1 0   50% 2 1   60%
src/fjc_biographies/rules.py _read   94% 18 1 0   83% 6 1   92%
src/fjc_biographies/rules.py _to_bool   89% 9 1 0   83% 6 1   87%
src/fjc_biographies/rules.py _unique   100% 1 0 0   100% 0 0   100%
src/fjc_biographies/rules.py (no function)   100% 60 0 0   100% 0 0   100%
src/fjc_biographies/scores.py add_jcs   100% 16 0 0   100% 0 0   100%
src/fjc_biographies/scores.py add_martin_quinn   100% 8 0 0   100% 2 0   100%
src/fjc_biographies/scores.py martin_quinn_terms   100% 6 0 0   100% 0 0   100%
src/fjc_biographies/scores.py _fjc_files   100% 1 0 0   100% 0 0   100%
src/fjc_biographies/scores.py _insert   100% 8 0 0   100% 0 0   100%
src/fjc_biographies/scores.py _martin_quinn_file   100% 15 0 0   100% 6 0   100%
src/fjc_biographies/scores.py _require   100% 4 0 0   100% 2 0   100%
src/fjc_biographies/scores.py (no function)   100% 17 0 0   100% 0 0   100%
tests/conftest.py tables   100% 4 0 0   100% 0 0   100%
tests/conftest.py files   100% 1 0 0   100% 0 0   100%
tests/conftest.py requests   100% 5 0 0   100% 0 0   100%
tests/conftest.py requests.fake_open   100% 2 0 0   100% 0 0   100%
tests/conftest.py data_folder   100% 4 0 0   100% 0 0   100%
tests/conftest.py no_score_downloads   100% 4 0 0   100% 0 0   100%
tests/conftest.py no_score_downloads.refuse   100% 3 0 0   100% 0 0   100%
tests/conftest.py (no function)   100% 26 0 0   100% 0 0   100%
tests/test_download.py test_download   100% 9 0 0   100% 0 0   100%
tests/test_download.py test_download_everything   100% 5 0 0   100% 0 0   100%
tests/test_download.py test_download_unknown_category   100% 3 0 0   100% 0 0   100%
tests/test_download.py test_failed_download_leaves_no_file   100% 5 0 0   100% 0 0   100%
tests/test_download.py test_failed_download_leaves_no_file.refuse   100% 1 0 0   100% 0 0   100%
tests/test_download.py test_only_https   100% 2 0 0   100% 0 0   100%
tests/test_download.py test_data_folder   100% 4 0 0   100% 0 0   100%
tests/test_download.py (no function)   100% 11 0 0   100% 0 0   100%
tests/test_main.py test_save_both_formats   86% 14 2 0   100% 4 0   89%
tests/test_main.py test_version   100% 1 0 0   100% 0 0   100%
tests/test_main.py test_run   100% 14 0 0   100% 0 0   100%
tests/test_main.py test_cli   100% 6 0 0   100% 0 0   100%
tests/test_main.py test_cli_download_only   100% 4 0 0   100% 0 0   100%
tests/test_main.py (no function)   100% 13 0 0   100% 0 0   100%
tests/test_names.py test_permutations   100% 3 0 0   100% 0 0   100%
tests/test_names.py test_permutations_with_brackets   100% 8 0 0   100% 0 0   100%
tests/test_names.py test_permutations_with_missing_parts   100% 7 0 0   100% 0 0   100%
tests/test_names.py test_add_permutations   100% 13 0 0   100% 0 0   100%
tests/test_names.py test_roster_has_permutations   100% 9 0 0   100% 0 0   100%
tests/test_names.py (no function)   100% 11 0 0   100% 0 0   100%
tests/test_parser.py table   100% 2 0 0   100% 0 0   100%
tests/test_parser.py test_tidy_names_and_types   100% 13 0 0   100% 0 0   100%
tests/test_parser.py test_tidy_other_tables   100% 8 0 0   100% 0 0   100%
tests/test_parser.py test_tidy_dates_in_either_format   100% 3 0 0   100% 0 0   100%
tests/test_parser.py test_read   100% 7 0 0   100% 0 0   100%
tests/test_parser.py test_build_roster   100% 19 0 0   100% 0 0   100%
tests/test_parser.py test_build_roster_circuits   100% 12 0 0   100% 0 0   100%
tests/test_parser.py test_build_roster_appointments   100% 14 0 0   100% 2 0   100%
tests/test_parser.py test_build_roster_reassignment_takes_whole_appointment   100% 8 0 0   100% 0 0   100%
tests/test_parser.py test_build_roster_careers   100% 9 0 0   100% 0 0   100%
tests/test_parser.py test_build_roster_keeps_career_text   100% 11 0 0   100% 0 0   100%
tests/test_parser.py test_build_roster_from_paths   100% 7 0 0   100% 2 0   100%
tests/test_parser.py test_build_roster_merges_by_judge   100% 8 0 0   100% 0 0   100%
tests/test_parser.py test_build_roster_missing_columns   100% 7 0 0   100% 0 0   100%
tests/test_parser.py test_code_careers   100% 9 0 0   100% 0 0   100%
tests/test_parser.py test_code_careers_with_own_rulebook   100% 13 0 0   100% 0 0   100%
tests/test_parser.py test_code_careers_sorts_positions   100% 4 0 0   100% 0 0   100%
tests/test_parser.py test_build_roster_rulebook_clash   100% 5 0 0   100% 0 0   100%
tests/test_parser.py test_load   100% 8 0 0   100% 0 0   100%
tests/test_parser.py test_load_all   100% 7 0 0   100% 0 0   100%
tests/test_parser.py test_roster_by_judge   100% 26 0 0   100% 2 0   100%
tests/test_parser.py test_roster_by_judge_has_every_appointment   100% 13 0 0   100% 4 0   100%
tests/test_parser.py test_roster_by_judge_needs_a_roster   100% 2 0 0   100% 0 0   100%
tests/test_parser.py (no function)   100% 32 0 0   100% 0 0   100%
tests/test_rules.py make   100% 2 0 0   100% 0 0   100%
tests/test_rules.py apply   100% 1 0 0   100% 0 0   100%
tests/test_rules.py test_flag_count_and_matches   100% 3 0 0   100% 0 0   100%
tests/test_rules.py test_missing_targets_give_empty_values   100% 2 0 0   100% 0 0   100%
tests/test_rules.py test_label_uses_first_match_and_converts_numbers   100% 4 0 0   100% 0 0   100%
tests/test_rules.py test_label_searches_every_target   100% 2 0 0   100% 0 0   100%
tests/test_rules.py test_split_section_and_excerpts_make_new_sections   100% 9 0 0   100% 0 0   100%
tests/test_rules.py test_dates_excerpts_use_multiline_anchors   100% 3 0 0   100% 0 0   100%
tests/test_rules.py test_split_without_match_keeps_everything_first   100% 3 0 0   100% 0 0   100%
tests/test_rules.py test_remove_changes_later_rules_only   100% 2 0 0   100% 0 0   100%
tests/test_rules.py test_split_names   100% 3 0 0   100% 0 0   100%
tests/test_rules.py test_names_ignores_groups_in_pattern   100% 2 0 0   100% 0 0   100%
tests/test_rules.py test_invalid_rules   100% 3 0 0   100% 0 0   100%
tests/test_rules.py test_load_csv_from_excel   100% 6 0 0   100% 0 0   100%
tests/test_rules.py test_load_reports_file_and_row   100% 8 0 0   100% 0 0   100%
tests/test_rules.py test_find_instructions   100% 4 0 0   100% 0 0   100%
tests/test_rules.py test_folder_of_rules   100% 7 0 0   100% 2 0   100%
tests/test_rules.py test_files_named_twice_are_read_once   100% 4 0 0   100% 0 0   100%
tests/test_rules.py test_create   100% 3 0 0   100% 0 0   100%
tests/test_rules.py test_judges_rulebook   100% 7 0 0   100% 0 0   100%
tests/test_rules.py (no function)   100% 26 0 0   100% 0 0   100%
tests/test_scores.py martin_quinn   100% 3 0 0   100% 0 0   100%
tests/test_scores.py roster   100% 2 0 0   100% 0 0   100%
tests/test_scores.py computed   100% 6 0 0   100% 0 0   100%
tests/test_scores.py computed.download   100% 5 0 0   100% 2 0   100%
tests/test_scores.py computed.compute   100% 4 0 0   100% 0 0   100%
tests/test_scores.py test_martin_quinn_terms   100% 11 0 0   100% 0 0   100%
tests/test_scores.py test_add_martin_quinn   100% 13 0 0   100% 0 0   100%
tests/test_scores.py test_martin_quinn_by_judge   100% 5 0 0   100% 0 0   100%
tests/test_scores.py test_martin_quinn_file_is_needed   100% 13 0 0   100% 0 0   100%
tests/test_scores.py test_add_jcs   100% 12 0 0   100% 0 0   100%
tests/test_scores.py test_add_jcs_options   100% 4 0 0   100% 0 0   100%
tests/test_scores.py test_both_scores   100% 4 0 0   100% 0 0   100%
tests/test_scores.py test_scores_need_a_roster   100% 5 0 0   100% 0 0   100%
tests/test_scores.py test_run_with_scores   100% 10 0 0   100% 0 0   100%
tests/test_scores.py test_cli_with_scores   100% 5 0 0   100% 0 0   100%
tests/test_scores.py calls_files   100% 4 0 0   100% 0 0   100%
tests/test_scores.py (no function)   100% 29 0 0   100% 0 0   100%
Total     98% 1342 24 2   92% 210 15   97%

No items found using the specified filter.