Files
LEDMatrix/docs/DEPRECATIONS_3.8.md
T
ChuckandClaude Opus 5.5 7e066174d9 chore: remove dead code, deprecate unused plugin APIs (over-engineering audit)
Whole-tree audit. Every symbol was checked against core, the plugin
monorepo and all eight third-party plugins in plugins.json first.

- Deprecate (removal 3.10.0) plugin-facing methods nothing calls:
  LogoDownloader bulk download, ConfigManager backup/secret wrappers,
  APIHelper extras, BackgroundDataService poll API, PluginManager /
  PluginStateManager info readers, and a few CacheManager, FontManager,
  BaseOddsManager, DynamicTeamResolver methods and PluginTestCase.
  plugin_api_usage.py learns their receiver names; DEPRECATIONS doc
  regenerated.
- Remove core-internal dead code: CacheMetrics, Vegas status/stats
  plumbing, sync "new cycle" message (followers ignore unknown types),
  unused operation types, test-only PluginCatalog readers, IPC to_dict
  and ping, _parse_form_value, CacheStrategyProtocol, ErrorAggregator
  callbacks, duplicate web response helpers.
- Web UI: drop never-mounted json-file-manager.js, the example widget,
  utils/error_handler.js, four uncalled PluginAPI methods, and 29
  escapeHtml shims (call window.LEDEscape directly). Public globals,
  BaseWidget and widget names unchanged.
- Remove six one-off scripts (owner decision) and the unused markupsafe
  and pytest-mock pins.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-06 18:27:40 -04:00

44 KiB

Deprecated plugin APIs: usage scan

Generated by scripts/plugin_api_usage.py — do not edit by hand; re-run it (see How to re-run).

  • Scanned: 2026-10-05, core 3.8.2
  • Monorepo: ChuckBuilds/ledmatrix-plugins (main @ 662fb86f), 46 plugins
  • Third-party plugins: 8 with their own repo in plugins.json (f1-live, gif-player, pga-tour-leaderboard, plex-marquee, ledmatrix-dresden-departures, tidbyt-baseball-scoreboard, sleeper-fantasy, ledmatrix-nascar)

45 deprecated methods: 31 unused, 3 still used, 11 need review.

Counted per plugin: a call is <receiver>.method on an object named like the owner (cache_manager, display_manager, font_manager, plugin_manager), or on self/super() in a subclass; an override is def method in a subclass of the owner. Review hits are .method on a receiver whose type the scan cannot tell. Internal hits sit inside another deprecated core method and go with it. Unrelated hits are a different class's own method with the same name (a name collision), and never block removal; neither do hits in test files.

Method Removal Core Plugins (calls / overrides) Name collisions & tests Verdict
BackgroundDataService.get_result 3.10.0 core tests (15 test reviews) — — unused — safe to remove in 3.10.0
BackgroundDataService.is_request_complete 3.10.0 core tests (11 test reviews) — — unused — safe to remove in 3.10.0
BackgroundDataService.get_request_status 3.10.0 core tests (2 test reviews) — — unused — safe to remove in 3.10.0
BaseOddsManager.get_odds_for_games 3.10.0 core tests (3 test reviews) — — unused — safe to remove in 3.10.0
BaseOddsManager.format_odds_summary 3.10.0 core tests (5 test reviews) — — unused — safe to remove in 3.10.0
CacheManager.load_cache 3.10.0 core tests (1 test review) — — unused — safe to remove in 3.10.0
CacheManager.generate_sport_cache_key 3.10.0 core tests (2 test calls, 1 test review) — — unused — safe to remove in 3.10.0
APIHelper.fetch_espn_scoreboard 3.10.0 core tests (1 test call, 4 test reviews) — football-scoreboard (1 test review); hockey-scoreboard (1 test review); ufc-scoreboard (3 test reviews) unused — safe to remove in 3.10.0
APIHelper.fetch_espn_standings 3.10.0 core tests (1 test review) — — unused — safe to remove in 3.10.0
APIHelper.fetch_espn_rankings 3.10.0 core tests (1 test review) — — unused — safe to remove in 3.10.0
APIHelper.set_cache 3.10.0 core tests (1 test call, 1 test review) — — unused — safe to remove in 3.10.0
APIHelper.get_cache 3.10.0 core tests (1 test call) — — unused — safe to remove in 3.10.0
APIHelper.set_rate_limit 3.10.0 core tests (10 test calls, 3 test reviews) — — unused — safe to remove in 3.10.0
APIHelper.get_request_stats 3.10.0 — — — unused — safe to remove in 3.10.0
ConfigManager.rollback_config 3.10.0 core (1 internal); core tests (1 test review) — — unused — safe to remove in 3.10.0
ConfigManager.list_backups 3.10.0 core (1 internal); core tests (1 test review) — — unused — safe to remove in 3.10.0
ConfigManager.validate_config_file 3.10.0 core (1 internal) — — unused — safe to remove in 3.10.0
ConfigManager.get_secret 3.10.0 core tests (5 test calls, 1 test review) — — unused — safe to remove in 3.10.0
ConfigManager.cleanup_orphaned_plugin_configs 3.10.0 core tests (2 test calls, 1 test review) — — unused — safe to remove in 3.10.0
ConfigManager.validate_all_plugin_configs 3.10.0 core tests (1 test call, 1 test review) — — unused — safe to remove in 3.10.0
DynamicTeamResolver.get_available_dynamic_teams 3.10.0 — — — unused — safe to remove in 3.10.0
DynamicTeamResolver.is_dynamic_team 3.10.0 — — — unused — safe to remove in 3.10.0
FontManager.get_native_bdf_size 3.10.0 core tests (3 test calls) — — unused — safe to remove in 3.10.0
FontManager.measure_text 3.10.0 core tests (5 test calls) — — unused — safe to remove in 3.10.0
LogoDownloader.fetch_teams_data 3.10.0 core (2 internals) — — still used by core — keep or migrate first
LogoDownloader.extract_teams_from_data 3.10.0 core (2 internals) — — still used by core — keep or migrate first
LogoDownloader.download_missing_logos_for_league 3.10.0 core (1 call, 1 internal); core tests (2 test calls) — — still used by core — keep or migrate first
LogoDownloader.download_all_ncaa_football_logos 3.10.0 core tests (2 test calls) — — unused — safe to remove in 3.10.0
LogoDownloader.download_all_missing_logos 3.10.0 — — — unused — safe to remove in 3.10.0
LogoDownloader.convert_image_to_rgba 3.10.0 core (1 internal) — — unused — safe to remove in 3.10.0
LogoDownloader.convert_all_logos_to_rgba 3.10.0 — — — unused — safe to remove in 3.10.0
BasePlugin.get_supported_vegas_modes 3.9.0 core tests (2 test reviews) — — unused — safe to remove in 3.9.0
BasePlugin.get_vegas_segment_width 3.9.0 core tests (1 test review) — — unused — safe to remove in 3.9.0
PluginManager.get_all_plugins 3.10.0 — football-scoreboard (1 review) football-scoreboard (2 test reviews); hockey-scoreboard (1 test review) needs review: possible use in football-scoreboard
PluginManager.get_plugin_info 3.10.0 core (12 reviews, 1 internal); core tests (6 test calls, 9 test reviews) — — needs review: possible use in core
PluginManager.get_all_plugin_info 3.10.0 core (3 reviews); core tests (2 test calls, 11 test reviews) — — needs review: possible use in core
PluginManager.get_plugin_display_modes 3.10.0 core (4 reviews); core tests (3 test calls, 5 test reviews) — — needs review: possible use in core
PluginManager.find_plugin_for_mode 3.10.0 core (2 reviews) — — needs review: possible use in core
PluginStateManager.is_loaded 3.10.0 core (1 internal) — — needs review: possible use in core
PluginStateManager.is_running 3.10.0 core (1 internal) — — needs review: possible use in core
PluginStateManager.is_error 3.10.0 core (1 internal) — — needs review: possible use in core
PluginStateManager.get_error_info 3.10.0 core (1 internal); core tests (4 test calls) — — needs review: possible use in core
PluginStateManager.get_last_update 3.10.0 core (1 internal) — — needs review: possible use in core
PluginStateManager.get_state_info 3.10.0 core (1 internal); core tests (7 test reviews) — — needs review: possible use in core
PluginTestCase.setUp 3.10.0 — — basketball-scoreboard (2 test unrelateds); cricket-scoreboard (1 test unrelated); hockey-scoreboard (1 test unrelated); nrl-scoreboard (1 test unrelated) unused — safe to remove in 3.10.0

Unused — safe to remove (31)

BackgroundDataService.get_result, BackgroundDataService.is_request_complete, BackgroundDataService.get_request_status, BaseOddsManager.get_odds_for_games, BaseOddsManager.format_odds_summary, CacheManager.load_cache, CacheManager.generate_sport_cache_key, APIHelper.fetch_espn_scoreboard, APIHelper.fetch_espn_standings, APIHelper.fetch_espn_rankings, APIHelper.set_cache, APIHelper.get_cache, APIHelper.set_rate_limit, APIHelper.get_request_stats, ConfigManager.rollback_config, ConfigManager.list_backups, ConfigManager.validate_config_file, ConfigManager.get_secret, ConfigManager.cleanup_orphaned_plugin_configs, ConfigManager.validate_all_plugin_configs, DynamicTeamResolver.get_available_dynamic_teams, DynamicTeamResolver.is_dynamic_team, FontManager.get_native_bdf_size, FontManager.measure_text, LogoDownloader.download_all_ncaa_football_logos, LogoDownloader.download_all_missing_logos, LogoDownloader.convert_image_to_rgba, LogoDownloader.convert_all_logos_to_rgba, BasePlugin.get_supported_vegas_modes, BasePlugin.get_vegas_segment_width, PluginTestCase.setUp

Still used — keep or migrate first (3)

LogoDownloader.fetch_teams_data, LogoDownloader.extract_teams_from_data, LogoDownloader.download_missing_logos_for_league

Needs review (11)

PluginManager.get_all_plugins, PluginManager.get_plugin_info, PluginManager.get_all_plugin_info, PluginManager.get_plugin_display_modes, PluginManager.find_plugin_for_mode, PluginStateManager.is_loaded, PluginStateManager.is_running, PluginStateManager.is_error, PluginStateManager.get_error_info, PluginStateManager.get_last_update, PluginStateManager.get_state_info

Every hit

File paths are relative to the plugin's directory (core: the repo root).

Method Where File:line Kind Code
BackgroundDataService.get_result core tests test/test_background_data_service.py:85 test review result = service.get_result(req_id)
BackgroundDataService.get_result core tests test/test_background_data_service.py:107 test review seen["filed"] = service.get_result(result.request_id) is result
BackgroundDataService.get_result core tests test/test_background_data_service.py:148 test review result = service.get_result(req_id)
BackgroundDataService.get_result core tests test/test_background_data_service.py:165 test review result = service.get_result(req_id)
BackgroundDataService.get_result core tests test/test_background_data_service.py:254 test review assert service.get_result("unknown") is None
BackgroundDataService.get_result core tests test/test_background_data_service.py:391 test review assert service.get_result(rid).cached is True
BackgroundDataService.get_result core tests test/test_background_fetch_dedupe.py:198 test review assert service.get_result(req).success is True
BackgroundDataService.get_result core tests test/test_background_payload_release.py:85 test review result = service.get_result(req_id)
BackgroundDataService.get_result core tests test/test_background_payload_release.py:117 test review stored = service.get_result(req_id)
BackgroundDataService.get_result core tests test/test_background_payload_release.py:144 test review assert service.get_result(req_id).data == PAYLOAD
BackgroundDataService.get_result core tests test/test_background_payload_release.py:154 test review stored = service.get_result(req_id)
BackgroundDataService.get_result core tests test/test_background_payload_release.py:171 test review assert service.get_result(req_id).data is None
BackgroundDataService.get_result core tests test/test_background_payload_release.py:193 test review assert service.get_result(req_id).data == PAYLOAD
BackgroundDataService.get_result core tests test/test_background_payload_release.py:278 test review stored = service.get_result(first)
BackgroundDataService.get_result core tests test/test_fetch_service.py:703 test review assert bds.get_result(request_id).success
BackgroundDataService.is_request_complete core tests test/test_background_data_service.py:145 test review while not service.is_request_complete(req_id) and time.time() < deadline:
BackgroundDataService.is_request_complete core tests test/test_background_data_service.py:162 test review while not service.is_request_complete(req_id) and time.time() < deadline:
BackgroundDataService.is_request_complete core tests test/test_background_data_service.py:194 test review while not service.is_request_complete(req_id) and time.time() < deadline:
BackgroundDataService.is_request_complete core tests test/test_background_data_service.py:211 test review while not service.is_request_complete(req_id) and time.time() < deadline:
BackgroundDataService.is_request_complete core tests test/test_background_data_service.py:246 test review assert service.is_request_complete("r2") is False
BackgroundDataService.is_request_complete core tests test/test_background_data_service.py:251 test review assert service.is_request_complete("r3") is True
BackgroundDataService.is_request_complete core tests test/test_background_data_service_espn_ranges.py:91 test review while not service.is_request_complete(request_id) and time.time() < deadline:
BackgroundDataService.is_request_complete core tests test/test_background_data_service_espn_ranges.py:154 test review while not service.is_request_complete(request_id) and time.time() < deadline:
BackgroundDataService.is_request_complete core tests test/test_background_fetch_dedupe.py:55 test review while not service.is_request_complete(req_id) and time.time() < deadline:
BackgroundDataService.is_request_complete core tests test/test_background_payload_release.py:67 test review while not service.is_request_complete(req_id) and time.time() < deadline:
BackgroundDataService.is_request_complete core tests test/test_fetch_service.py:701 test review while not bds.is_request_complete(request_id) and time.monotonic() < deadline:
BackgroundDataService.get_request_status core tests test/test_background_data_service.py:223 test review assert service.get_request_status("nonexistent") is None
BackgroundDataService.get_request_status core tests test/test_background_fetch_dedupe.py:448 test review assert service.get_request_status(rid) is FetchStatus.CANCELLED, (
BaseOddsManager.get_odds_for_games core tests test/test_base_odds_manager.py:356 test review result = manager.get_odds_for_games(games)
BaseOddsManager.get_odds_for_games core tests test/test_base_odds_manager.py:374 test review result = manager.get_odds_for_games(games)
BaseOddsManager.get_odds_for_games core tests test/test_base_odds_manager.py:385 test review result = manager.get_odds_for_games([game])
BaseOddsManager.format_odds_summary core tests test/test_base_odds_manager.py:322 test review result = manager.format_odds_summary({
BaseOddsManager.format_odds_summary core tests test/test_base_odds_manager.py:329 test review result = manager.format_odds_summary(FULL_EXTRACTED)
BaseOddsManager.format_odds_summary core tests test/test_base_odds_manager.py:333 test review assert manager.format_odds_summary(None) == 'No odds available'
BaseOddsManager.format_odds_summary core tests test/test_base_odds_manager.py:336 test review assert manager.format_odds_summary({}) == 'No odds available'
BaseOddsManager.format_odds_summary core tests test/test_base_odds_manager.py:339 test review assert manager.format_odds_summary(
CacheManager.load_cache core tests test/conftest.py:219 test review mock.load_cache = Mock(side_effect=mock_get)
CacheManager.generate_sport_cache_key core tests test/test_background_data_service.py:42 test review m.generate_sport_cache_key.return_value = "test_key"
CacheManager.generate_sport_cache_key core tests test/test_background_data_service.py:356 test call expected = CacheManager.generate_sport_cache_key(None, sport, date_str)
CacheManager.generate_sport_cache_key core tests test/test_background_data_service.py:367 test call theirs = cm_module.CacheManager.generate_sport_cache_key(None, "nba")
APIHelper.fetch_espn_scoreboard core tests test/test_api_helper.py:214 test review result = helper.fetch_espn_scoreboard('football', 'nfl')
APIHelper.fetch_espn_scoreboard core tests test/test_api_helper.py:230 test review helper.fetch_espn_scoreboard('basketball', 'nba', date='20250115')
APIHelper.fetch_espn_scoreboard core tests test/test_api_helper.py:239 test review helper.fetch_espn_scoreboard('basketball', 'nba', date='20250115', cache_key='mine')
APIHelper.fetch_espn_scoreboard core tests test/test_api_helper.py:251 test review assert helper.fetch_espn_scoreboard('basketball', 'nba', date='20250115') == {
APIHelper.fetch_espn_scoreboard core tests test/test_espn_scoreboard_cache.py:199 test call helper.fetch_espn_scoreboard("football", "nfl", date=self.DAY)
APIHelper.fetch_espn_scoreboard football-scoreboard test_espn_date_ranges.py:119 test review helper = sys.modules[sports.fetch_espn_scoreboard.__module__]
APIHelper.fetch_espn_scoreboard hockey-scoreboard test_espn_date_ranges.py:106 test review helper = sys.modules[sports.fetch_espn_scoreboard.__module__]
APIHelper.fetch_espn_scoreboard ufc-scoreboard test_every_bout_is_its_own_fight.py:103 test review _real_fetch = sports.fetch_espn_scoreboard
APIHelper.fetch_espn_scoreboard ufc-scoreboard test_every_bout_is_its_own_fight.py:108 test review sports.fetch_espn_scoreboard = lambda *a, **k: board(name)
APIHelper.fetch_espn_scoreboard ufc-scoreboard test_every_bout_is_its_own_fight.py:113 test review sports.fetch_espn_scoreboard = _real_fetch
APIHelper.fetch_espn_standings core tests test/test_api_helper.py:258 test review helper.fetch_espn_standings('football', 'nfl')
APIHelper.fetch_espn_rankings core tests test/test_api_helper.py:269 test review helper.fetch_espn_rankings('football', 'college-football')
APIHelper.set_cache core tests test/test_api_helper.py:128 test review helper.set_cache('k', {'a': 1}, ttl=42)
APIHelper.set_cache core tests test/test_api_helper.py:350 test call assert helper.set_cache('k', {'a': 1}) is None
APIHelper.get_cache core tests test/test_api_helper.py:348 test call assert helper.get_cache('k') is None
APIHelper.set_rate_limit core tests test/test_api_helper.py:42 test call helper.set_rate_limit(0)
APIHelper.set_rate_limit core tests test/test_api_helper.py:57 test review helper.set_rate_limit(5)
APIHelper.set_rate_limit core tests test/test_api_helper.py:72 test review helper.set_rate_limit(5)
APIHelper.set_rate_limit core tests test/test_api_helper.py:91 test review helper.set_rate_limit(5)
APIHelper.set_rate_limit core tests test/test_api_helper.py:150 test call helper.set_rate_limit(0)
APIHelper.set_rate_limit core tests test/test_api_helper.py:305 test call helper.set_rate_limit(0)
APIHelper.set_rate_limit core tests test/test_api_helper.py:313 test call helper.set_rate_limit(0)
APIHelper.set_rate_limit core tests test/test_api_helper.py:326 test call helper.set_rate_limit(0)
APIHelper.set_rate_limit core tests test/test_api_helper.py:334 test call helper.set_rate_limit(0)
APIHelper.set_rate_limit core tests test/test_api_helper.py:346 test call helper.set_rate_limit(0)
APIHelper.set_rate_limit core tests test/test_espn_scoreboard_cache.py:197 test call helper.set_rate_limit(0)
APIHelper.set_rate_limit core tests test/test_fetch_service.py:726 test call helper.set_rate_limit(0)
APIHelper.set_rate_limit core tests test/test_fetch_service.py:1143 test call helper.set_rate_limit(0)
ConfigManager.rollback_config core src/config_manager.py:191 internal (in ConfigManager.rollback_config) success = atomic_mgr.rollback_config(backup_version)
ConfigManager.rollback_config core src/config_manager_atomic.py:297 unrelated def rollback_config(self, backup_version: Optional[str] = None) -> bool:
ConfigManager.rollback_config core tests test/test_config_durable_writes.py:345 test review assert manager.rollback_config()
ConfigManager.list_backups core src/config_manager.py:212 internal (in ConfigManager.list_backups) return atomic_mgr.list_backups()
ConfigManager.list_backups core src/config_manager_atomic.py:334 unrelated def list_backups(self) -> List[BackupInfo]:
ConfigManager.list_backups core src/config_manager_atomic.py:309 unrelated backups = self.list_backups()
ConfigManager.list_backups core tests test/test_config_durable_writes.py:323 test review assert [b.path for b in manager.list_backups()] == [
ConfigManager.validate_config_file core src/config_manager.py:226 internal (in ConfigManager.validate_config_file) return atomic_mgr.validate_config_file(config_path)
ConfigManager.validate_config_file core src/config_manager_atomic.py:426 unrelated def validate_config_file(self, config_path: Optional[str] = None) -> ValidationResult:
ConfigManager.get_secret core tests test/conftest.py:246 test review mock.get_secret = Mock(side_effect=mock_get_secret)
ConfigManager.get_secret core tests test/test_config_manager.py:317 test call assert manager.get_secret("api_key") == "secret123"
ConfigManager.get_secret core tests test/test_config_manager.py:318 test call assert manager.get_secret("token") == "token456"
ConfigManager.get_secret core tests test/test_config_manager.py:319 test call assert manager.get_secret("nonexistent") is None
ConfigManager.get_secret core tests test/test_config_manager.py:325 test call assert manager.get_secret("api_key") is None
ConfigManager.get_secret core tests test/test_config_manager.py:337 test call assert manager.get_secret("api_key") is None
ConfigManager.cleanup_orphaned_plugin_configs core tests test/test_config_manager.py:447 test call removed = manager.cleanup_orphaned_plugin_configs(["plugin1", "plugin2"])
ConfigManager.cleanup_orphaned_plugin_configs core tests test/test_core_config_key_adopters.py:80 test review removed = manager.cleanup_orphaned_plugin_configs(['installed'])
ConfigManager.cleanup_orphaned_plugin_configs core tests test/test_web_auth.py:616 test call config_manager.cleanup_orphaned_plugin_configs([])
ConfigManager.validate_all_plugin_configs core tests test/test_core_config_key_adopters.py:91 test review results = manager.validate_all_plugin_configs(schema_manager)
ConfigManager.validate_all_plugin_configs core tests test/test_retired_plugin_config_keys.py:112 test call results = config_manager.validate_all_plugin_configs(schema_manager)
FontManager.get_native_bdf_size core tests test/test_font_manager.py:104 test call assert fm.get_native_bdf_size("five_by_seven") == 7
FontManager.get_native_bdf_size core tests test/test_font_manager.py:107 test call assert fm.get_native_bdf_size("press_start") is None
FontManager.get_native_bdf_size core tests test/test_font_manager.py:110 test call assert fm.get_native_bdf_size("no-such-family") is None
FontManager.measure_text core tests test/test_font_manager.py:116 test call width, height, baseline = fm.measure_text("SCORE", font)
FontManager.measure_text core tests test/test_font_manager.py:119 test call assert fm.measure_text("SCORE", font) == (width, height, baseline)
FontManager.measure_text core tests test/test_font_manager.py:124 test call short, _, _ = fm.measure_text("AB", font)
FontManager.measure_text core tests test/test_font_manager.py:125 test call long, _, _ = fm.measure_text("ABCD", font)
FontManager.measure_text core tests test/test_font_manager.py:132 test call fm.measure_text("X", font)
LogoDownloader.fetch_teams_data core src/logo_downloader.py:639 internal (in LogoDownloader.download_missing_logos_for_league) data = self.fetch_teams_data(league)
LogoDownloader.fetch_teams_data core src/logo_downloader.py:695 internal (in LogoDownloader.download_all_ncaa_football_logos) data = self.fetch_teams_data(league)
LogoDownloader.extract_teams_from_data core src/logo_downloader.py:645 internal (in LogoDownloader.download_missing_logos_for_league) teams = self.extract_teams_from_data(data, league)
LogoDownloader.extract_teams_from_data core src/logo_downloader.py:701 internal (in LogoDownloader.download_all_ncaa_football_logos) teams = self.extract_teams_from_data(data, league)
LogoDownloader.download_missing_logos_for_league core src/logo_downloader.py:786 internal (in LogoDownloader.download_all_missing_logos) downloaded, failed = self.download_missing_logos_for_league(league, force_download)
LogoDownloader.download_missing_logos_for_league core src/logo_downloader.py:1034 call return downloader.download_missing_logos_for_league(league, force_download)
LogoDownloader.download_missing_logos_for_league core tests test/test_logo_downloader.py:292 test call downloader.download_missing_logos_for_league("nfl")
LogoDownloader.download_missing_logos_for_league core tests test/test_logo_downloader.py:304 test call downloader.download_missing_logos_for_league("nfl")
LogoDownloader.download_all_ncaa_football_logos core tests test/test_logo_downloader.py:319 test call downloader.download_all_ncaa_football_logos()
LogoDownloader.download_all_ncaa_football_logos core tests test/test_logo_downloader.py:332 test call downloader.download_all_ncaa_football_logos()
LogoDownloader.convert_image_to_rgba core src/logo_downloader.py:897 internal (in LogoDownloader.convert_all_logos_to_rgba) if self.convert_image_to_rgba(logo_file):
BasePlugin.get_supported_vegas_modes core tests test/test_vegas_participation.py:356 test review assert plugin.get_supported_vegas_modes() == [
BasePlugin.get_supported_vegas_modes core tests test/test_vegas_participation.py:358 test review assert plugin.get_supported_vegas_modes()
BasePlugin.get_vegas_segment_width core tests test/test_vegas_participation.py:359 test review assert plugin.get_vegas_segment_width() == 2
PluginManager.get_all_plugins core src/plugin_system/testing/mocks.py:218 unrelated def get_all_plugins(self) -> Dict[str, Any]:
PluginManager.get_all_plugins football-scoreboard emulator_demo.py:68 review mock_plugin_manager.get_all_plugins = Mock(return_value=[])
PluginManager.get_all_plugins football-scoreboard test_dynamic_duration.py:64 test review mock_plugin_manager.get_all_plugins = Mock(return_value=[])
PluginManager.get_all_plugins football-scoreboard test_football_plugin.py:74 test review mock_plugin_manager.get_all_plugins = Mock(return_value=[])
PluginManager.get_all_plugins hockey-scoreboard test_hockey_emulator.py:99 test review mock_plugin_manager.get_all_plugins = Mock(return_value=[])
PluginManager.get_plugin_info core src/plugin_system/plugin_catalog.py:120 unrelated def get_plugin_info(self, plugin_id: str) -> Optional[Dict[str, Any]]:
PluginManager.get_plugin_info core src/plugin_system/plugin_catalog.py:133 unrelated return [info for info in (self.get_plugin_info(pid) for pid in ids) if info]
PluginManager.get_plugin_info core src/plugin_system/plugin_manager.py:1001 internal (in PluginManager.get_all_plugin_info) return [info for info in [self.get_plugin_info(pid) for pid in pids] if info]
PluginManager.get_plugin_info core src/plugin_system/store_install.py:208 review plugin_info = self.get_plugin_info(plugin_id, fetch_latest_from_github=True, force_refresh=True)
PluginManager.get_plugin_info core src/plugin_system/store_registry.py:801 unrelated def get_plugin_info(self, plugin_id: str, fetch_latest_from_github: bool = True, force_refresh: bool = False) -> Optional[Dict]:
PluginManager.get_plugin_info core src/plugin_system/store_update.py:357 review plugin_info_remote = self.get_plugin_info(plugin_id, fetch_latest_from_github=True, force_refresh=True)
PluginManager.get_plugin_info core src/plugin_system/store_update.py:362 review plugin_info_remote = self.get_plugin_info(alt_id, fetch_latest_from_github=True, force_refresh=True)
PluginManager.get_plugin_info core src/plugin_system/store_update.py:685 review plugin_info_remote = self.get_plugin_info(plugin_id, fetch_latest_from_github=True, force_refresh=True)
PluginManager.get_plugin_info core src/plugin_system/store_update.py:691 review plugin_info_remote = self.get_plugin_info(alt_id, fetch_latest_from_github=True, force_refresh=True)
PluginManager.get_plugin_info core src/plugin_system/testing/mocks.py:223 unrelated def get_plugin_info(self, plugin_id: str) -> Optional[Dict[str, Any]]:
PluginManager.get_plugin_info core web_interface/blueprints/api_v3/plugin_store.py:216 review remote_info = api_v3.plugin_store_manager.get_plugin_info(plugin_id, fetch_latest_from_github=True)
PluginManager.get_plugin_info core web_interface/blueprints/api_v3/plugin_store.py:334 review plugin_info = api_v3.plugin_store_manager.get_plugin_info(plugin_id)
PluginManager.get_plugin_info core web_interface/blueprints/api_v3/plugin_store.py:545 review elif not api_v3.plugin_store_manager.get_plugin_info(plugin_id):
PluginManager.get_plugin_info core web_interface/blueprints/api_v3/plugin_store.py:602 review elif not api_v3.plugin_store_manager.get_plugin_info(plugin_id):
PluginManager.get_plugin_info core web_interface/blueprints/pages_v3.py:224 review info = pages_v3.plugin_catalog.get_plugin_info(pid) or {}
PluginManager.get_plugin_info core web_interface/blueprints/pages_v3.py:722 review plugin_info = pages_v3.plugin_catalog.get_plugin_info(plugin_id)
PluginManager.get_plugin_info core web_interface/blueprints/pages_v3.py:727 review plugin_info = pages_v3.plugin_catalog.get_plugin_info(plugin_id)
PluginManager.get_plugin_info core tests test/test_api_v3_plugin_install_endpoints.py:111 test review manager.get_plugin_info.return_value = None
PluginManager.get_plugin_info core tests test/test_api_v3_plugin_install_endpoints.py:119 test review manager.get_plugin_info.return_value = {"id": "clock"}
PluginManager.get_plugin_info core tests test/test_pages_v3_path_guards.py:47 test call plugin_manager.get_plugin_info.return_value = {"name": "Weather", "version": "1.0.0"}
PluginManager.get_plugin_info core tests test/test_registry_id_resolution.py:81 test review _ids(store.get_plugin_info("ledmatrix-weather", fetch_latest_from_github=False))
PluginManager.get_plugin_info core tests test/test_store_manager_caches.py:612 test review info = self.sm.get_plugin_info("foo", fetch_latest_from_github=True, force_refresh=True)
PluginManager.get_plugin_info core tests test/test_store_non_plugin_entries.py:37 test review store.get_plugin_info = MagicMock(return_value=dict(SKIN))
PluginManager.get_plugin_info core tests test/test_web_plugin_dir_resolution.py:86 test review api.plugin_store_manager.get_plugin_info = MagicMock(return_value=None)
PluginManager.get_plugin_info core tests test/test_web_plugin_dir_resolution.py:118 test review api.plugin_store_manager.get_plugin_info = MagicMock(return_value=None)
PluginManager.get_plugin_info core tests test/test_web_plugin_dir_resolution.py:178 test call plugin_manager.get_plugin_info.return_value = {"id": "weather", "name": "Weather"}
PluginManager.get_plugin_info core tests test/web_interface/test_plugin_config_form_defaults.py:119 test call pm.get_plugin_info.return_value = {"name": "Demo", "version": "1.0.0"}
PluginManager.get_plugin_info core tests test/web_interface/test_plugin_config_schema_expansion.py:88 test call pm.get_plugin_info.return_value = {"id": plugin_id, "name": plugin_id}
PluginManager.get_plugin_info core tests test/web_interface/test_plugin_widget_route.py:226 test call pm.get_plugin_info.return_value = {"id": plugin_id, "name": plugin_id}
PluginManager.get_plugin_info core tests test/web_interface/test_plugin_widget_route.py:228 test call pm.get_plugin_info.return_value["version"] = version
PluginManager.get_plugin_info core tests test/web_interface/test_update_all_plugins.py:41 test review sm.get_plugin_info.return_value = None
PluginManager.get_plugin_info core tests test/web_interface/test_web_process_runs_no_plugin_code.py:132 test review store.get_plugin_info.return_value = None
PluginManager.get_all_plugin_info core src/plugin_system/plugin_catalog.py:129 unrelated def get_all_plugin_info(self) -> List[Dict[str, Any]]:
PluginManager.get_all_plugin_info core web_interface/blueprints/api_v3/plugins.py:68 review all_plugin_info = api_v3.plugin_catalog.get_all_plugin_info()
PluginManager.get_all_plugin_info core web_interface/blueprints/pages_v3.py:209 review pi.get('id') for pi in pages_v3.plugin_catalog.get_all_plugin_info()
PluginManager.get_all_plugin_info core web_interface/blueprints/pages_v3.py:559 review infos = sorted(pages_v3.plugin_catalog.get_all_plugin_info(),
PluginManager.get_all_plugin_info core tests test/test_api_v3_installed_display_modes.py:30 test review api.plugin_catalog.get_all_plugin_info = MagicMock(return_value=[info])
PluginManager.get_all_plugin_info core tests test/test_api_v3_installed_plugin_icon.py:24 test review api.plugin_catalog.get_all_plugin_info = MagicMock(return_value=[info])
PluginManager.get_all_plugin_info core tests test/test_installed_list_registry_offline.py:71 test review api.plugin_catalog.get_all_plugin_info = MagicMock(return_value=[
PluginManager.get_all_plugin_info core tests test/test_onboarding_checklist.py:68 test review mock_pm.get_all_plugin_info.return_value = []
PluginManager.get_all_plugin_info core tests test/test_plugin_manager_load_failures.py:78 test call infos = {i["id"]: i for i in pm.get_all_plugin_info()}
PluginManager.get_all_plugin_info core tests test/test_plugin_runtime_snapshot.py:422 test review api.plugin_catalog.get_all_plugin_info = MagicMock(return_value=[
PluginManager.get_all_plugin_info core tests test/test_vegas_participation.py:447 test review api.plugin_catalog.get_all_plugin_info = MagicMock(return_value=[info])
PluginManager.get_all_plugin_info core tests test/test_web_api.py:551 test review mock_plugin_catalog.get_all_plugin_info.return_value = [
PluginManager.get_all_plugin_info core tests test/test_web_api.py:570 test review mock_plugin_catalog.get_all_plugin_info.return_value = [
PluginManager.get_all_plugin_info core tests test/test_web_api.py:592 test review mock_plugin_catalog.get_all_plugin_info.return_value = [
PluginManager.get_all_plugin_info core tests test/test_web_plugin_dir_resolution.py:61 test review api.plugin_catalog.get_all_plugin_info = MagicMock(return_value=[info])
PluginManager.get_all_plugin_info core tests test/test_web_plugin_dir_resolution.py:195 test call plugin_manager.get_all_plugin_info.assert_not_called()
PluginManager.get_all_plugin_info core tests test/test_web_smoke.py:95 test review mock_pm.get_all_plugin_info.return_value = [
PluginManager.get_plugin_display_modes core src/plugin_system/plugin_catalog.py:175 unrelated def get_plugin_display_modes(self, plugin_id: str) -> List[str]:
PluginManager.get_plugin_display_modes core web_interface/blueprints/api_v3/display.py:197 review plugin_modes = api_v3.plugin_catalog.get_plugin_display_modes(plugin_id) or [plugin_id]
PluginManager.get_plugin_display_modes core web_interface/blueprints/api_v3/display.py:267 review modes = api_v3.plugin_catalog.get_plugin_display_modes(resolved_plugin)
PluginManager.get_plugin_display_modes core web_interface/blueprints/api_v3/plugins.py:157 review declared_modes = api_v3.plugin_catalog.get_plugin_display_modes(plugin_id)
PluginManager.get_plugin_display_modes core web_interface/blueprints/pages_v3.py:565 review modes = pages_v3.plugin_catalog.get_plugin_display_modes(pid) or [pid]
PluginManager.get_plugin_display_modes core tests test/test_api_v3_display_modes.py:40 test call pm.get_plugin_display_modes = MagicMock(
PluginManager.get_plugin_display_modes core tests test/test_api_v3_display_modes.py:100 test call pm.get_plugin_display_modes = MagicMock(return_value=[])
PluginManager.get_plugin_display_modes core tests test/test_api_v3_display_modes.py:122 test call pm.get_plugin_display_modes = MagicMock(
PluginManager.get_plugin_display_modes core tests test/test_api_v3_installed_display_modes.py:31 test review api.plugin_catalog.get_plugin_display_modes = MagicMock(return_value=declared_modes)
PluginManager.get_plugin_display_modes core tests test/test_api_v3_installed_display_modes.py:39 test review api.plugin_catalog.get_plugin_display_modes.assert_any_call('football-scoreboard')
PluginManager.get_plugin_display_modes core tests test/test_installed_list_registry_offline.py:75 test review api.plugin_catalog.get_plugin_display_modes = MagicMock(return_value=[])
PluginManager.get_plugin_display_modes core tests test/test_onboarding_checklist.py:69 test review mock_pm.get_plugin_display_modes.side_effect = lambda pid: []
PluginManager.get_plugin_display_modes core tests test/test_web_smoke.py:99 test review mock_pm.get_plugin_display_modes.side_effect = (
PluginManager.find_plugin_for_mode core src/plugin_system/plugin_catalog.py:186 unrelated def find_plugin_for_mode(self, mode: str) -> Optional[str]:
PluginManager.find_plugin_for_mode core web_interface/blueprints/api_v3/display.py:271 review resolved_plugin = api_v3.plugin_catalog.find_plugin_for_mode(resolved_mode)
PluginManager.find_plugin_for_mode core web_interface/blueprints/api_v3/display.py:276 review resolved_plugin = api_v3.plugin_catalog.find_plugin_for_mode(resolved_mode)
PluginStateManager.is_loaded core src/plugin_system/plugin_state.py:299 internal (in PluginStateManager.get_state_info) 'is_loaded': self.is_loaded(plugin_id),
PluginStateManager.is_running core src/plugin_system/plugin_state.py:301 internal (in PluginStateManager.get_state_info) 'is_running': self.is_running(plugin_id),
PluginStateManager.is_error core src/plugin_system/plugin_state.py:302 internal (in PluginStateManager.get_state_info) 'is_error': self.is_error(plugin_id),
PluginStateManager.get_error_info core src/plugin_system/plugin_state.py:305 internal (in PluginStateManager.get_state_info) 'error_info': self.get_error_info(plugin_id),
PluginStateManager.get_error_info core tests test/test_async_plugin_updates.py:236 test call error = pm.state_manager.get_error_info(plugin_id)
PluginStateManager.get_error_info core tests test/test_plugin_hang_containment.py:191 test call error_info = pm.state_manager.get_error_info('hung')
PluginStateManager.get_error_info core tests test/test_sports_sunset_matrix.py:212 test call f"{manager.state_manager.get_error_info(plugin_id)}"
PluginStateManager.get_error_info core tests test/test_sports_sunset_matrix.py:285 test call info = manager.state_manager.get_error_info(plugin_id)
PluginStateManager.get_last_update core src/plugin_system/plugin_state.py:304 internal (in PluginStateManager.get_state_info) 'last_update': self.get_last_update(plugin_id),
PluginStateManager.get_state_info core src/plugin_system/plugin_manager.py:987 internal (in PluginManager.get_plugin_info) info['state'] = self.state_manager.get_state_info(plugin_id)
PluginStateManager.get_state_info core tests test/test_plugin_state_transition_count.py:39 test review info = manager.get_state_info("clock")
PluginStateManager.get_state_info core tests test/test_plugin_state_transition_count.py:51 test review info = manager.get_state_info("clock")
PluginStateManager.get_state_info core tests test/test_plugin_state_transition_count.py:62 test review assert manager.get_state_info("clock")["state_history_count"] == 101
PluginStateManager.get_state_info core tests test/test_plugin_state_transition_count.py:63 test review assert manager.get_state_info("weather")["state_history_count"] == 1
PluginStateManager.get_state_info core tests test/test_plugin_state_transition_count.py:74 test review info = manager.get_state_info("clock")
PluginStateManager.get_state_info core tests test/test_plugin_state_transition_count.py:95 test review info = m.get_state_info("clock")
PluginStateManager.get_state_info core tests test/test_plugin_state_transition_count.py:130 test review info = manager.get_state_info("clock")

Sources scanned

Source Group Python files Hits
core core 188 50
core tests core-tests 416 176
7-segment-clock monorepo 3 0
afl-scoreboard monorepo 36 0
baseball-scoreboard monorepo 71 0
basketball-scoreboard monorepo 51 2
birdnet-go monorepo 3 0
blackjack monorepo 7 0
calendar monorepo 5 0
christmas-countdown monorepo 3 0
clock-simple monorepo 2 0
countdown monorepo 5 0
cricket-scoreboard monorepo 8 1
f1-scoreboard monorepo 15 0
fantasy-blitz monorepo 13 0
football-scoreboard monorepo 78 4
geochron monorepo 10 0
hello-world monorepo 2 0
hockey-scoreboard monorepo 57 3
incoming-packages monorepo 8 0
jellyfin-now-playing monorepo 4 0
lacrosse-scoreboard monorepo 41 0
ledmatrix-elections monorepo 12 0
ledmatrix-flights monorepo 48 0
ledmatrix-leaderboard monorepo 10 0
ledmatrix-music monorepo 12 0
ledmatrix-stocks monorepo 7 0
ledmatrix-weather monorepo 15 0
march-madness monorepo 4 0
masters-tournament monorepo 10 0
mqtt-notifications monorepo 4 0
news monorepo 7 0
nfl-draft monorepo 3 0
nfl-stat-leaders monorepo 8 0
nrl-scoreboard monorepo 31 1
odds-ticker monorepo 10 0
of-the-day monorepo 14 0
olympics monorepo 16 0
on-air monorepo 3 0
pomodoro-timer monorepo 3 0
soccer-scoreboard monorepo 50 0
static-image monorepo 4 0
stock-news monorepo 4 0
text-display monorepo 4 0
tide-display monorepo 3 0
ufc-scoreboard monorepo 40 3
web-ui-info monorepo 2 0
youtube-stats monorepo 5 0
f1-live third-party 10 0
gif-player third-party 1 0
pga-tour-leaderboard third-party 2 0
plex-marquee third-party 1 0
ledmatrix-dresden-departures third-party 1 0
tidbyt-baseball-scoreboard third-party 2 0
sleeper-fantasy third-party 1 0
ledmatrix-nascar third-party 1 0

How to re-run

# Clones the monorepo and each third-party plugin (depth 1) into a temp cache:
python3 scripts/plugin_api_usage.py --output docs/DEPRECATIONS_3.8.md
# Or scan a local monorepo checkout (read only) instead of cloning it:
python3 scripts/plugin_api_usage.py --monorepo ../ledmatrix-plugins

Before removing a method in its release, re-run the scan against the current monorepo and registry: a plugin added since this file was generated may have started calling it. Remove only methods the fresh scan reports unused; move the rest to a later release (the test in test/test_deprecation.py fails while a marker names a release at or below src.__version__).