EnxDev opened a new pull request, #40450: URL: https://github.com/apache/superset/pull/40450
### SUMMARY Adds three new capabilities to the Extensions management page: 1. **Import extension** — a download icon button in the SubMenu opens a file picker restricted to `.supx` files. On selection, the file is uploaded via `POST /api/v1/extensions/` (new endpoint), validated (zip integrity + safe-zip check), and persisted to `EXTENSIONS_PATH`. The list refreshes automatically. 2. **Delete extension** — a trash icon in the Actions column (with confirmation dialog) calls `DELETE /api/v1/extensions/<publisher>/<name>` (new endpoint). Local extensions configured via `LOCAL_EXTENSIONS` are rejected with a clear error. Uploaded `.supx` files are removed from `EXTENSIONS_PATH`. 3. **Set default chatbot** — a star icon in the Actions column calls `PUT /api/v1/extensions/settings` with the selected extension's ID as `active_chatbot_id`. The filled star indicates the current active chatbot. Clicking the filled star clears the selection. The change is propagated immediately via `notifyExtensionSettingsChanged()` so `ChatbotMount` updates without a page reload. Also includes: - Settings pub/sub (`notifyExtensionSettingsChanged` / `subscribeToExtensionSettings`) in `src/core/extensions` so components can react to admin setting changes without Redux or a page reload. - Fix for `scripts/oxlint.sh`: `[ -n "$output" ] && echo "$output"` would exit 1 under `set -e` when output is empty (no lint errors found). Replaced with `if/fi`. ### BEFORE/AFTER SCREENSHOTS OR ANIMATED GIF **Before:** Extensions list shows only extension names with no actions. **After:** Extensions list has a Publisher column, an import button in the header, and per-row star (default chatbot) and trash (delete) action buttons. ### TESTING INSTRUCTIONS 1. Set `EXTENSIONS_PATH` in your `superset_config.py`. 2. Navigate to Settings → Extensions. 3. **Import**: Click the download icon → select a `.supx` file → the extension appears in the list. 4. **Delete**: Click the trash icon on an uploaded extension → confirm → extension is removed from the list. 5. **Default chatbot**: Click the star icon on an extension with a chatbot → star fills → chatbot mount updates without a page reload. Click again → star clears → chatbot is deselected. 6. Verify that clicking the star/delete on a `LOCAL_EXTENSIONS` entry returns an appropriate error for delete (local extensions cannot be deleted through the UI). ### ADDITIONAL INFORMATION - [ ] Has associated issue: - [ ] Required feature flags: - [x] Changes UI - [ ] Includes DB Migration (follow approval process in [SIP-59](https://github.com/apache/superset/issues/13351)) - [x] Introduces new feature or API - [ ] Removes existing feature or API -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected] --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
