mirror of
https://github.com/ChuckBuilds/LEDMatrix.git
synced 2026-04-10 21:03:01 +00:00
docs: fix README_NBA_LOGOS and PLUGIN_CONFIGURATION_GUIDE
scripts/README_NBA_LOGOS.md
- "python download_nba_logos.py" — wrong on two counts. The script
is at scripts/download_nba_logos.py (not the project root), and
"python" is Python 2 on most systems. Replaced all 4 occurrences
with "python3 scripts/download_nba_logos.py".
- The doc framed itself as the way to set up "the NBA leaderboard".
The basketball/leaderboard functionality is now in the
basketball-scoreboard and ledmatrix-leaderboard plugins (in the
ledmatrix-plugins repo), which auto-download logos on first run.
Reframed the script as a pre-population utility for offline / dev
use cases.
- Bumped the documented Python minimum from 3.7 to 3.9 to match
the rest of the project.
docs/PLUGIN_CONFIGURATION_GUIDE.md
- The "Plugin Manifest" example was missing 3 fields the plugin
loader actually requires: id, entry_point, and class_name. A
contributor copying this manifest verbatim would get
PluginError("No class_name in manifest") at load time — the same
loader bug already found in stock-news. Added all three.
- The same example showed config_schema as an inline object. The
loader expects config_schema to be a file path string (e.g.
"config_schema.json") with the actual schema in a separate JSON
file — verified earlier in this audit. Fixed.
- Added a paragraph explaining the loader's required fields and
the case-sensitivity rule on class_name (the bug that broke
hello-world's manifest before this PR fixed it).
- "Plugin Manager Class" example had the wrong constructor
signature: (config, display_manager, cache_manager, font_manager).
The real BasePlugin.__init__ at base_plugin.py:53-60 takes
(plugin_id, config, display_manager, cache_manager, plugin_manager).
A copy-pasted example would TypeError on instantiation. Fixed,
including a comment noting which attributes BasePlugin sets up.
- Renamed the example class from MyPluginManager to MyPlugin to
match the project convention (XxxPlugin / XxxScoreboardPlugin
in actual plugins).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -184,37 +184,45 @@ plugin-repos/
|
|||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
|
"id": "my-plugin",
|
||||||
"name": "My Plugin",
|
"name": "My Plugin",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"description": "Plugin description",
|
"description": "Plugin description",
|
||||||
"author": "Your Name",
|
"author": "Your Name",
|
||||||
|
"entry_point": "manager.py",
|
||||||
|
"class_name": "MyPlugin",
|
||||||
"display_modes": ["my_plugin"],
|
"display_modes": ["my_plugin"],
|
||||||
"config_schema": {
|
"config_schema": "config_schema.json"
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"enabled": {"type": "boolean", "default": false},
|
|
||||||
"update_interval": {"type": "integer", "default": 3600}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
The required fields the plugin loader will check for are `id`,
|
||||||
|
`name`, `version`, `class_name`, and `display_modes`. `entry_point`
|
||||||
|
defaults to `manager.py` if omitted. `config_schema` must be a
|
||||||
|
**file path** (relative to the plugin directory) — the schema itself
|
||||||
|
lives in a separate JSON file, not inline in the manifest. The
|
||||||
|
`class_name` value must match the actual class defined in the entry
|
||||||
|
point file **exactly** (case-sensitive, no spaces); otherwise the
|
||||||
|
loader fails with `AttributeError` at load time.
|
||||||
|
|
||||||
### Plugin Manager Class
|
### Plugin Manager Class
|
||||||
|
|
||||||
```python
|
```python
|
||||||
from src.plugin_system.base_plugin import BasePlugin
|
from src.plugin_system.base_plugin import BasePlugin
|
||||||
|
|
||||||
class MyPluginManager(BasePlugin):
|
class MyPlugin(BasePlugin):
|
||||||
def __init__(self, config, display_manager, cache_manager, font_manager):
|
def __init__(self, plugin_id, config, display_manager, cache_manager, plugin_manager):
|
||||||
super().__init__(config, display_manager, cache_manager, font_manager)
|
super().__init__(plugin_id, config, display_manager, cache_manager, plugin_manager)
|
||||||
self.enabled = config.get('enabled', False)
|
# self.config, self.display_manager, self.cache_manager,
|
||||||
|
# self.plugin_manager, self.logger, and self.enabled are
|
||||||
|
# all set up by BasePlugin.__init__.
|
||||||
|
|
||||||
def update(self):
|
def update(self):
|
||||||
"""Update plugin data"""
|
"""Fetch/update data. Called based on update_interval."""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def display(self, force_clear=False):
|
def display(self, force_clear=False):
|
||||||
"""Display plugin content"""
|
"""Render plugin content to the LED matrix."""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def get_duration(self):
|
def get_duration(self):
|
||||||
|
|||||||
@@ -1,29 +1,40 @@
|
|||||||
# NBA Logo Downloader
|
# NBA Logo Downloader
|
||||||
|
|
||||||
This script downloads all NBA team logos from the ESPN API and saves them in the `assets/sports/nba_logos/` directory for use with the NBA leaderboard.
|
This script downloads all NBA team logos from the ESPN API and saves
|
||||||
|
them in the `assets/sports/nba_logos/` directory.
|
||||||
|
|
||||||
|
> **Heads up:** the NBA leaderboard and basketball scoreboards now
|
||||||
|
> live as plugins in the
|
||||||
|
> [`ledmatrix-plugins`](https://github.com/ChuckBuilds/ledmatrix-plugins)
|
||||||
|
> repo (`basketball-scoreboard`, `ledmatrix-leaderboard`). Those
|
||||||
|
> plugins download the logos they need automatically on first display.
|
||||||
|
> This standalone script is mainly useful when you want to pre-populate
|
||||||
|
> the assets directory ahead of time, or for development/debugging.
|
||||||
|
|
||||||
|
All commands below should be run from the LEDMatrix project root.
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
### Basic Usage
|
### Basic Usage
|
||||||
```bash
|
```bash
|
||||||
python download_nba_logos.py
|
python3 scripts/download_nba_logos.py
|
||||||
```
|
```
|
||||||
|
|
||||||
### Force Re-download
|
### Force Re-download
|
||||||
If you want to re-download all logos (even if they already exist):
|
If you want to re-download all logos (even if they already exist):
|
||||||
```bash
|
```bash
|
||||||
python download_nba_logos.py --force
|
python3 scripts/download_nba_logos.py --force
|
||||||
```
|
```
|
||||||
|
|
||||||
### Quiet Mode
|
### Quiet Mode
|
||||||
Reduce logging output:
|
Reduce logging output:
|
||||||
```bash
|
```bash
|
||||||
python download_nba_logos.py --quiet
|
python3 scripts/download_nba_logos.py --quiet
|
||||||
```
|
```
|
||||||
|
|
||||||
### Combined Options
|
### Combined Options
|
||||||
```bash
|
```bash
|
||||||
python download_nba_logos.py --force --quiet
|
python3 scripts/download_nba_logos.py --force --quiet
|
||||||
```
|
```
|
||||||
|
|
||||||
## What It Does
|
## What It Does
|
||||||
@@ -82,12 +93,14 @@ assets/sports/nba_logos/
|
|||||||
└── WAS.png # Washington Wizards
|
└── WAS.png # Washington Wizards
|
||||||
```
|
```
|
||||||
|
|
||||||
## Integration with NBA Leaderboard
|
## Integration with NBA plugins
|
||||||
|
|
||||||
Once the logos are downloaded, the NBA leaderboard will:
|
Once the logos are in `assets/sports/nba_logos/`, both the
|
||||||
- ✅ Use local logos instantly (no download delays)
|
`basketball-scoreboard` and `ledmatrix-leaderboard` plugins will pick
|
||||||
- ✅ Display team logos in the scrolling leaderboard
|
them up automatically and skip their own first-run download. This is
|
||||||
- ✅ Show proper team branding for all 30 NBA teams
|
useful if you want to deploy a Pi without internet access to ESPN, or
|
||||||
|
if you want to preview the display on your dev machine without
|
||||||
|
waiting for downloads.
|
||||||
|
|
||||||
## Troubleshooting
|
## Troubleshooting
|
||||||
|
|
||||||
@@ -102,6 +115,6 @@ This is normal - some teams might have temporary API issues or the ESPN API migh
|
|||||||
|
|
||||||
## Requirements
|
## Requirements
|
||||||
|
|
||||||
- Python 3.7+
|
- Python 3.9+ (matches the project's overall minimum)
|
||||||
- `requests` library (should be installed with the project)
|
- `requests` library (already in `requirements.txt`)
|
||||||
- Write access to `assets/sports/nba_logos/` directory
|
- Write access to `assets/sports/nba_logos/` directory
|
||||||
|
|||||||
Reference in New Issue
Block a user