urllib3 CVEs (10 Trivy findings):
plugin-repos/march-madness/requirements.txt: bump urllib3>=1.26.0 to
>=2.2.2 to address CVE-2021-33503, CVE-2023-43804, CVE-2023-45803,
CVE-2024-37891, and 2025-2026 decompression/redirect CVEs.
Missed code fixes from round-1:
display_helper.py: remove unused draw=ImageDraw.Draw(img) — the method
delegates to _draw_centered_text which creates its own draw context.
custom-feeds.js:334: one bare removeCustomFeedRow(this) was missed by
the earlier replace_all; changed to window.removeCustomFeedRow(this).
app.js: add htmx to /* global */ declaration — htmx.ajax() is called
at lines 146 and 172 but htmx was only declared in the extension files.
timezone-selector.js:215: second unused catch (e) → catch {} missed
when we fixed line 361 in round-1.
Bandit B110 annotations (3 new except/pass blocks from newer PRs):
start.py: hostname -I IP parsing — non-critical startup info.
display_controller.py: scroll_helper.get_portion_at — optional method.
display_manager.py: canvas reset during cleanup — best-effort.
41 confirmed false positives suppressed via Codacy API:
35x pyflakes in test/, plugin-repos/, scripts/ — not production code
Flask 0.0.0.0, os.execvp, Bandit B603, vendor ESLint, already-fixed
Biome noPrototypeBuiltins.
Co-authored-by: Chuck <chuck@example.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Common Utilities
This directory contains reusable utilities and helpers for LEDMatrix plugins and core modules.
Error Handling (error_handler.py)
Common error handling patterns and utilities:
handle_file_operation()- Handle file I/O with consistent error handlinghandle_json_operation()- Handle JSON operations with error handlingsafe_execute()- Safely execute operations with error handlingretry_on_failure()- Decorator for retrying failed operationslog_and_continue()- Log non-critical errors and continuelog_and_raise()- Log errors and raise exceptions
Example Usage
from src.common.error_handler import handle_json_operation, safe_execute
# Handle JSON loading
config = handle_json_operation(
lambda: json.load(open('config.json')),
"Failed to load config",
logger,
default={}
)
# Safe execution with error handling
result = safe_execute(
lambda: risky_operation(),
"Operation failed",
logger,
default=None
)
API Helpers (api_helper.py)
Utilities for making HTTP requests and handling API responses.
Configuration Helpers (config_helper.py)
Utilities for loading, saving, and validating configuration files.
Display Helpers (display_helper.py)
Utilities for rendering content to the LED matrix display.
Game Helpers (game_helper.py)
Utilities for processing game data and team information.
Logo Helpers (logo_helper.py)
Utilities for loading and managing team logos.
Text Helpers (text_helper.py)
Utilities for text processing and formatting.
Scroll Helpers (scroll_helper.py)
Utilities for scrolling text on the display.
General Utilities (utils.py)
General-purpose utility functions:
- Team abbreviation normalization
- Time formatting
- Boolean parsing
- Logger creation (deprecated - use
src.logging_config.get_logger())
Permission Utilities (permission_utils.py)
Helpers for ensuring directory permissions and ownership are correct
when running as a service (used by CacheManager to set up its
persistent cache directory).
CLI Helpers (cli.py)
Shared CLI argument parsing helpers used by scripts/dev/* and other
command-line entry points.
Best Practices
- Use centralized logging: Import from
src.logging_configinstead of creating loggers directly - Use error handlers: Use
error_handlerutilities for consistent error handling - Reuse utilities: Check existing utilities before creating new ones
- Document additions: Add documentation when adding new utilities