You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@superset.apache.org by "villebro (via GitHub)" <gi...@apache.org> on 2026/02/22 17:53:31 UTC
[PR] fix(extensions): enforce correct naming conventions [superset]
villebro opened a new pull request, #38167:
URL: https://github.com/apache/superset/pull/38167
# SUMMARY
Fixes critical extension loading failures when extension IDs contain hyphens by refactoring the CLI to use extension ID as the primary source for all technical identifiers. This change anchors all extension naming on kebab-case IDs (required for REST API compatibility) and converts to platform-specific formats. Extensions with hyphenated names (e.g., "chart-builder") were generating invalid Python package names, causing backend imports to fail completely.
## Problem & Root Cause
**Critical Bug:**
- Extension ID: `chart-builder` (valid kebab-case)
- Backend package: `chart-builder` (INVALID - Python syntax error)
- Module Federation: `chart-builder` (INVALID - JavaScript identifier error)
- Result: Extension fails to load, backend crashes on import
## Solution: ID-Based Name Conversion
The extensive refactor was necessary because we needed to:
1. **Fix the immediate bug**: Convert hyphenated IDs to valid platform identifiers
2. **Ensure consistency**: All technical names derive from the same source (extension ID)
3. **Maintain idioms**: Each platform gets its preferred naming convention
### Why Kebab-Case as Base?
Extension IDs must be URL-compatible for REST API endpoints (`/api/v1/extensions/chart-builder/`). We use kebab-case as the source for all technical names (rather than snake_case throughout) because:
- **REST API requirement**: Extension IDs appear directly in URL paths and must be URL-safe without encoding
- **Web standards alignment**: kebab-case is the web standard for URLs, npm packages, and CSS selectors
- **Platform idioms**: Each platform gets its preferred format (camelCase for JS, snake_case for Python) converted from the URL-safe base
- **Future-proof**: Avoids conflicts with web tooling and maintains consistency with web ecosystem conventions
## Key Changes
### CLI (`superset-extensions-cli/`)
- **utils.py**: Added `kebab_to_camel_case()` and `kebab_to_snake_case()` functions to convert hyphenated IDs
- **cli.py**: Updated manual `ExtensionNames` construction to use ID-based generation
- **generate_extension_names()**: Now derives technical names from generated ID instead of display name
- **Removed**: `name_to_snake_case()` and `name_to_camel_case()` (replaced by kebab converters)
### Superset Core (`superset/`)
- **extensions/utils.py**: Introduced `superset_extensions` namespace packages with automatic creation via enhanced `InMemoryFinder`
- **Unrelated but critical fix**: Prevents namespace conflicts when extension names collide with Python dependencies (e.g., an extension named "pandas" would conflict with the pandas library)
- New namespaced import system: `superset_extensions.extension_name` instead of direct imports
- Provides clear extension isolation and eliminates import shadowing issues
### Documentation (`docs/`)
- **quick-start.md**: Updated examples to show ID-based naming flow
- **development.md**: Updated project structure and extension.json examples
## Flow Example
```bash
# CLI prompts
Extension name: "Hello World"
Extension ID [hello-world]: chart-tool
# Generated names (all from ID, platform-safe)
Frontend package: "chart-tool" (valid npm name)
Module Federation: "chartTool" (valid JS identifier)
Backend package: "chart_tool" (valid Python identifier)
Python namespace: "superset_extensions.chart_tool" (importable)
```
## Testing
- All existing tests pass with updated expectations
- Tested locally with a test extension without issues
- Added comprehensive tests for new kebab conversion functions
- Updated template tests to use ID-based approach
- Fixed namespace package loading for backend extensions
- Verified extensions with hyphens now load correctly
**Type**: Bug Fix + Refactor
**Scope**: Extensions CLI + Core Loading
**Breaking**: None (backward compatible)
**Fixes**: Extension loading failures with hyphenated names
### ADDITIONAL INFORMATION
<!--- Check any relevant boxes with "x" -->
<!--- HINT: Include "Fixes #nnn" if you are fixing an existing issue -->
- [ ] Has associated issue:
- [ ] Required feature flags:
- [ ] Changes UI
- [ ] Includes DB Migration (follow approval process in [SIP-59](https://github.com/apache/superset/issues/13351))
- [ ] Migration is atomic, supports rollback & is backwards-compatible
- [ ] Confirm DB migration upgrade and downgrade tested
- [ ] Runtime estimates and downtime expectations provided
- [ ] 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: notifications-unsubscribe@superset.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org
Re: [PR] fix(extensions): enforce correct naming conventions [superset]
Posted by "villebro (via GitHub)" <gi...@apache.org>.
villebro merged PR #38167:
URL: https://github.com/apache/superset/pull/38167
--
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: notifications-unsubscribe@superset.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org
Re: [PR] fix(extensions): enforce correct naming conventions [superset]
Posted by "dosubot[bot] (via GitHub)" <gi...@apache.org>.
dosubot[bot] commented on PR #38167:
URL: https://github.com/apache/superset/pull/38167#issuecomment-3941442335
<!-- Answer -->
**Related Documentation**
Checked 0 published document(s) in 2 knowledge base(s). No updates required.
<!-- Dosu Comment Footer -->
<sup>How did I do? Any feedback?</sup> [](https://go.dosu.dev/discord-bot)
--
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: notifications-unsubscribe@superset.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org
Re: [PR] fix(extensions): enforce correct naming conventions [superset]
Posted by "netlify[bot] (via GitHub)" <gi...@apache.org>.
netlify[bot] commented on PR #38167:
URL: https://github.com/apache/superset/pull/38167#issuecomment-3941450062
### <span aria-hidden="true">β
</span> Deploy Preview for *superset-docs-preview* ready!
| Name | Link |
|:-:|------------------------|
|<span aria-hidden="true">π¨</span> Latest commit | 7a4461d0593c484808fdf577007649ed704f6f00 |
|<span aria-hidden="true">π</span> Latest deploy log | https://app.netlify.com/projects/superset-docs-preview/deploys/699b429c4f423800089bbd40 |
|<span aria-hidden="true">π</span> Deploy Preview | [https://deploy-preview-38167--superset-docs-preview.netlify.app](https://deploy-preview-38167--superset-docs-preview.netlify.app) |
|<span aria-hidden="true">π±</span> Preview on mobile | <details><summary> Toggle QR Code... </summary><br /><br /><br /><br />_Use your smartphone camera to open QR code link._</details> |
---
<!-- [superset-docs-preview Preview](https://deploy-preview-38167--superset-docs-preview.netlify.app) -->
_To edit notification comments on pull requests, go to your [Netlify project configuration](https://app.netlify.com/projects/superset-docs-preview/configuration/notifications#deploy-notifications)._
--
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: notifications-unsubscribe@superset.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org
Re: [PR] fix(extensions): enforce correct naming conventions [superset]
Posted by "michael-s-molina (via GitHub)" <gi...@apache.org>.
michael-s-molina commented on code in PR #38167:
URL: https://github.com/apache/superset/pull/38167#discussion_r2840467931
##########
docs/developer_portal/extensions/quick-start.md:
##########
@@ -54,24 +54,33 @@ superset-extensions init
The CLI will prompt you for information:
```
-Extension ID (unique identifier, alphanumeric only): hello_world
-Extension name (human-readable display name): Hello World
+Extension name (e.g. Hello World): Hello World
+Extension ID [hello-world]: hello-world
Initial version [0.1.0]: 0.1.0
License [Apache-2.0]: Apache-2.0
Include frontend? [Y/n]: Y
Include backend? [Y/n]: Y
```
+**Important**: The extension ID must be **globally unique** across all Superset extensions and serves as the basis for all technical identifiers:
Review Comment:
@villebro Unique identifiers in VSCode extensions or OSGi plugins are URI based like `com.airbnb.extensions.sql.visualizer` or `com.airbnb.extensions.sql-visualizer`. Are these types of identifiers supported with the new structure?
--
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: notifications-unsubscribe@superset.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org
Re: [PR] fix(extensions): enforce correct naming conventions [superset]
Posted by "michael-s-molina (via GitHub)" <gi...@apache.org>.
michael-s-molina commented on code in PR #38167:
URL: https://github.com/apache/superset/pull/38167#discussion_r2840655549
##########
docs/developer_portal/extensions/quick-start.md:
##########
@@ -54,24 +54,33 @@ superset-extensions init
The CLI will prompt you for information:
```
-Extension ID (unique identifier, alphanumeric only): hello_world
-Extension name (human-readable display name): Hello World
+Extension name (e.g. Hello World): Hello World
+Extension ID [hello-world]: hello-world
Initial version [0.1.0]: 0.1.0
License [Apache-2.0]: Apache-2.0
Include frontend? [Y/n]: Y
Include backend? [Y/n]: Y
```
+**Important**: The extension ID must be **globally unique** across all Superset extensions and serves as the basis for all technical identifiers:
Review Comment:
@villebro I had a discussion with AI and here's the summary:
## Naming Convention: Flat IDs May Not Scale for a Multi-Org Marketplace
This PR makes a solid improvement by enforcing consistent kebab-case IDs and deriving all technical names from a single source of truth. The validation logic and `ExtensionNames` structure are well-designed.
One concern worth raising before this convention is locked in: **flat kebab-case IDs do not provide collision-safe namespacing for an open marketplace where multiple organizations publish extensions independently.**
---
### The Problem
The current model places the entire collision-avoidance burden on the author: pick a unique name like `sql-visualizer` and hope no other organization has the same idea. This works for a small, centrally curated registry but breaks at marketplace scale:
- Two organizations independently building a `data-quality` or `sql-visualizer` extension will collide
- There is no way to attribute or verify authorship from the ID alone
- Name squatting becomes possible once the marketplace is open
---
### How Other Extension Ecosystems Handle This
Every major extension ecosystem solves this with namespaced IDs:
| Ecosystem | Format | Example |
|---|---|---|
| VSCode | `publisher.extension` | `airbnb.sql-visualizer` |
| npm | `@scope/package` | `@airbnb/sql-visualizer` |
| IntelliJ / OSGi | `com.org.extension` | `com.airbnb.sql-visualizer` |
| Maven / Gradle | `group:artifact` | `com.airbnb:sql-visualizer` |
---
### Recommendation: VSCode-style `publisher.extension-name`
The two-part dot-separated model (`airbnb.sql-visualizer`) is the best fit here:
- **One org segment is enough.** Full reverse-domain (`com.airbnb.extensions.sql.visualizer`) is Java-era verbosity. Modern ecosystems use one org identifier plus one extension name.
- **Maps cleanly to Python namespaces.** `airbnb.sql-visualizer` β `superset_extensions.airbnb.sql_visualizer`, which is a valid two-level namespace package supported natively by Python.
- **Simpler than npm scopes.** `@airbnb/sql-visualizer` is semantically equivalent but `@` and `/` require escaping in file paths, CLI args, and URLs.
- **Globally unique by construction.** Owning `airbnb.*` means no other org can collide with your extensions without going through a registry-level conflict.
#### Generated name variants for `airbnb.sql-visualizer`
| Variant | Value |
|---|---|
| Display name | `SQL Visualizer` |
| ID | `airbnb.sql-visualizer` |
| Directory | `airbnb.sql-visualizer/` |
| Python package | `superset_extensions.airbnb.sql_visualizer` |
| npm name | `@airbnb/sql-visualizer` |
| Module Federation | `airbnbSqlVisualizer` |
---
### What Would Need to Change
The architecture introduced in this PR is well-positioned to support this β the main changes would be:
1. **`EXTENSION_NAME_PATTERN`** β allow one dot separating org and name segments
2. **`generate_extension_names()`** β split on the dot to derive `org` and `name` components separately
3. **`validate_extension_id()`** β enforce `<org>.<name>` format, validate each segment independently
4. **Backend scaffold** β create a two-level namespace: `superset_extensions/<org>/<name>/`
5. **`extension.json` template** β update `files` glob and `entryPoints` to reflect the deeper path
6. **CLI prompts** β add an `--org` option or prompt, or accept the full dot-separated ID directly
The `ExtensionNames` TypedDict would grow an `org` field, but all downstream consumers already read from it by key, so the blast radius is contained.
---
If the plan is to keep extensions internal or fully curated for now, the flat model is fine as a starting point. But if there is any intention to open a marketplace, it is worth establishing the two-part convention now before extension IDs appear in published `.supx` files, `extension.json` configs, and Python package names that become hard to migrate.
--
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: notifications-unsubscribe@superset.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org
Re: [PR] fix(extensions): enforce correct naming conventions [superset]
Posted by "codeant-ai-for-open-source[bot] (via GitHub)" <gi...@apache.org>.
codeant-ai-for-open-source[bot] commented on code in PR #38167:
URL: https://github.com/apache/superset/pull/38167#discussion_r2838319639
##########
superset-extensions-cli/src/superset_extensions_cli/cli.py:
##########
@@ -403,14 +416,123 @@ def backend_watcher() -> None:
click.secho("β No directories to watch. Exiting.", fg="red")
+def prompt_for_extension_name(
+ display_name_opt: str | None, id_opt: str | None
+) -> ExtensionNames:
+ """
+ Prompt for extension name with graceful validation and re-prompting.
+
+ Args:
+ display_name_opt: Display name provided via CLI option (if any)
+ id_opt: Extension ID provided via CLI option (if any)
+
+ Returns:
+ ExtensionNames: Validated extension name variants
+ """
+
+ # Case 1: Both provided via CLI - validate they work together
+ if display_name_opt and id_opt:
+ try:
+ # Generate all names from display name for consistency
+ temp_names = generate_extension_names(display_name_opt)
+ # Check if the provided ID matches what we'd generate
+ if temp_names["id"] == id_opt:
+ return temp_names
+ else:
+ # If IDs don't match, use the provided ID but validate it
+ validate_extension_id(id_opt)
+ validate_python_package_name(to_snake_case(id_opt))
+ validate_npm_package_name(id_opt)
+ # Create names with the provided ID (derive technical names from ID)
+ return ExtensionNames(
+ name=display_name_opt,
+ id=id_opt,
+ mf_name=kebab_to_camel_case(id_opt),
+ backend_name=kebab_to_snake_case(id_opt),
+ backend_package=f"superset_extensions.{kebab_to_snake_case(id_opt)}",
+ backend_entry=f"superset_extensions.{kebab_to_snake_case(id_opt)}.entrypoint",
+ )
+ except ExtensionNameError as e:
+ click.secho(f"β {e}", fg="red")
+ sys.exit(1)
+
+ # Case 2: Only display name provided - suggest ID
+ if display_name_opt and not id_opt:
+ display_name = display_name_opt
+ try:
+ suggested_names = generate_extension_names(display_name)
+ suggested_id = suggested_names["id"]
+ except ExtensionNameError:
+ suggested_id = to_kebab_case(display_name)
+
+ extension_id = click.prompt("Extension ID", default=suggested_id, type=str)
+
+ # Case 3: Only ID provided - ask for display name
+ elif id_opt and not display_name_opt:
+ extension_id = id_opt
+ # Validate the provided ID first
+ try:
+ validate_extension_id(id_opt)
+ except ExtensionNameError as e:
+ click.secho(f"β {e}", fg="red")
+ sys.exit(1)
+
+ # Suggest display name from kebab ID
+ suggested_display = " ".join(word.capitalize() for word in id_opt.split("-"))
+ display_name = click.prompt(
+ "Extension name", default=suggested_display, type=str
+ )
+
+ # Case 4: Neither provided - ask for both
+ else:
+ display_name = click.prompt("Extension name (e.g. Hello World)", type=str)
+ try:
+ suggested_names = generate_extension_names(display_name)
+ suggested_id = suggested_names["id"]
+ except ExtensionNameError:
+ suggested_id = to_kebab_case(display_name)
+
+ extension_id = click.prompt("Extension ID", default=suggested_id, type=str)
+
+ # Final validation loop - try to use generate_extension_names for consistent results
+ while True:
+ try:
+ # First try to generate from display name if possible
+ if display_name:
+ temp_names = generate_extension_names(display_name)
+ if temp_names["id"] == extension_id:
+ # Perfect match - use generated names
+ return temp_names
+
+ # If no match, validate manually and construct
+ validate_extension_id(extension_id)
+ validate_python_package_name(to_snake_case(extension_id))
+ validate_npm_package_name(extension_id)
+
+ return ExtensionNames(
+ name=display_name,
+ id=extension_id,
+ mf_name=kebab_to_camel_case(extension_id),
+ backend_name=kebab_to_snake_case(extension_id),
+ backend_package=f"superset_extensions.{kebab_to_snake_case(extension_id)}",
+ backend_entry=f"superset_extensions.{kebab_to_snake_case(extension_id)}.entrypoint",
+ )
+
+ except ExtensionNameError as e:
+ click.secho(f"β {e}", fg="red")
+ extension_id = click.prompt("Extension ID", type=str)
Review Comment:
**Suggestion:** In the final validation loop of the prompt function, if the display name is invalid and causes `generate_extension_names` to raise `ExtensionNameError`, the code keeps retrying with the same invalid display name while only re-prompting the extension ID, leading to an unfixable loop where the user can never progress without restarting the command. Adding a guard so that once an error occurs, the code stops re-calling `generate_extension_names` and falls back to validating only the extension ID fixes this logic and avoids an effective infinite loop. [logic error]
<details>
<summary><b>Severity Level:</b> Major β οΈ</summary>
```mdx
- β `superset-extensions init` can hang on invalid names.
- β οΈ User cannot recover without restarting CLI command.
```
</details>
```suggestion
can_generate_from_display = True
while True:
try:
# First try to generate from display name if possible
if display_name and can_generate_from_display:
temp_names = generate_extension_names(display_name)
if temp_names["id"] == extension_id:
# Perfect match - use generated names
return temp_names
# If no match, validate manually and construct
validate_extension_id(extension_id)
validate_python_package_name(to_snake_case(extension_id))
validate_npm_package_name(extension_id)
return ExtensionNames(
name=display_name,
id=extension_id,
mf_name=kebab_to_camel_case(extension_id),
backend_name=kebab_to_snake_case(extension_id),
backend_package=f"superset_extensions.{kebab_to_snake_case(extension_id)}",
backend_entry=f"superset_extensions.{kebab_to_snake_case(extension_id)}.entrypoint",
)
except ExtensionNameError as e:
click.secho(f"β {e}", fg="red")
extension_id = click.prompt("Extension ID", type=str)
can_generate_from_display = False
```
<details>
<summary><b>Steps of Reproduction β
</b></summary>
```mdx
1. Run the CLI command `superset-extensions init --name "<invalid name>"` which invokes
the `init` command in
`superset-extensions-cli/src/superset_extensions_cli/cli.py:init(...)` (around lines
214β250) with `name_opt` set and `id_opt` as `None`.
2. Inside `init`, `prompt_for_extension_name(name_opt, id_opt)` is called (same file,
around line 200). Because only `name_opt` is provided, execution follows "Case 2: Only
display name provided", setting `display_name = display_name_opt` and computing/suggesting
an ID, then eventually reaching the final validation loop shown at lines 498β523.
3. In the final validation loop, `generate_extension_names(display_name)` is called on
each iteration when `display_name` is truthy (`cli.py` lines 502β505). For any display
name that causes `generate_extension_names()` (from `superset_extensions_cli/utils.py`) to
raise `ExtensionNameError`βa scenario explicitly anticipated by earlier `try/except
ExtensionNameError` blocks in this same functionβthe exception is caught by the `except
ExtensionNameError` block at lines 518β523.
4. The `except` block only prompts the user for a new `extension_id` (`extension_id =
click.prompt("Extension ID", type=str)`) and never updates `display_name`. Control then
returns to the start of the `while True` loop where
`generate_extension_names(display_name)` is called again with the same invalid
`display_name`, raising `ExtensionNameError` again. This creates an effective infinite
loop where the user can change the ID indefinitely but has no way to correct the invalid
`display_name` without aborting the command.
```
</details>
<details>
<summary><b>Prompt for AI Agent π€ </b></summary>
```mdx
This is a comment left during a code review.
**Path:** superset-extensions-cli/src/superset_extensions_cli/cli.py
**Line:** 499:523
**Comment:**
*Logic Error: In the final validation loop of the prompt function, if the display name is invalid and causes `generate_extension_names` to raise `ExtensionNameError`, the code keeps retrying with the same invalid display name while only re-prompting the extension ID, leading to an unfixable loop where the user can never progress without restarting the command. Adding a guard so that once an error occurs, the code stops re-calling `generate_extension_names` and falls back to validating only the extension ID fixes this logic and avoids an effective infinite loop.
Validate the correctness of the flagged issue. If correct, How can I resolve this? If you propose a fix, implement it and please make it concise.
```
</details>
<a href='https://app.codeant.ai/feedback?pr_url=https%3A%2F%2Fgithub.com%2Fapache%2Fsuperset%2Fpull%2F38167&comment_hash=0cf893f2909f08f33b4ea4133d8bc53e1827dced4093f686a875b0bfd22e29e5&reaction=like'>π</a> | <a href='https://app.codeant.ai/feedback?pr_url=https%3A%2F%2Fgithub.com%2Fapache%2Fsuperset%2Fpull%2F38167&comment_hash=0cf893f2909f08f33b4ea4133d8bc53e1827dced4093f686a875b0bfd22e29e5&reaction=dislike'>π</a>
--
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: notifications-unsubscribe@superset.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org
Re: [PR] fix(extensions): enforce correct naming conventions [superset]
Posted by "codecov[bot] (via GitHub)" <gi...@apache.org>.
codecov[bot] commented on PR #38167:
URL: https://github.com/apache/superset/pull/38167#issuecomment-3941446284
## [Codecov](https://app.codecov.io/gh/apache/superset/pull/38167?dropdown=coverage&src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) Report
:x: Patch coverage is `71.51899%` with `45 lines` in your changes missing coverage. Please review.
:white_check_mark: Project coverage is 41.93%. Comparing base ([`11a36ff`](https://app.codecov.io/gh/apache/superset/commit/11a36ff488783b7adfbc01acbfefaceae9924a5d?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)) to head ([`7a4461d`](https://app.codecov.io/gh/apache/superset/commit/7a4461d0593c484808fdf577007649ed704f6f00?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)).
:warning: Report is 42 commits behind head on master.
| [Files with missing lines](https://app.codecov.io/gh/apache/superset/pull/38167?dropdown=coverage&src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | Patch % | Lines |
|---|---|---|
| [...-extensions-cli/src/superset\_extensions\_cli/cli.py](https://app.codecov.io/gh/apache/superset/pull/38167?src=pr&el=tree&filepath=superset-extensions-cli%2Fsrc%2Fsuperset_extensions_cli%2Fcli.py&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-c3VwZXJzZXQtZXh0ZW5zaW9ucy1jbGkvc3JjL3N1cGVyc2V0X2V4dGVuc2lvbnNfY2xpL2NsaS5weQ==) | 60.31% | [25 Missing :warning: ](https://app.codecov.io/gh/apache/superset/pull/38167?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) |
| [superset/extensions/utils.py](https://app.codecov.io/gh/apache/superset/pull/38167?src=pr&el=tree&filepath=superset%2Fextensions%2Futils.py&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-c3VwZXJzZXQvZXh0ZW5zaW9ucy91dGlscy5weQ==) | 0.00% | [13 Missing :warning: ](https://app.codecov.io/gh/apache/superset/pull/38167?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) |
| [...xtensions-cli/src/superset\_extensions\_cli/utils.py](https://app.codecov.io/gh/apache/superset/pull/38167?src=pr&el=tree&filepath=superset-extensions-cli%2Fsrc%2Fsuperset_extensions_cli%2Futils.py&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-c3VwZXJzZXQtZXh0ZW5zaW9ucy1jbGkvc3JjL3N1cGVyc2V0X2V4dGVuc2lvbnNfY2xpL3V0aWxzLnB5) | 90.27% | [7 Missing :warning: ](https://app.codecov.io/gh/apache/superset/pull/38167?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) |
<details><summary>Additional details and impacted files</summary>
```diff
@@ Coverage Diff @@
## master #38167 +/- ##
===========================================
+ Coverage 0 41.93% +41.93%
===========================================
Files 0 675 +675
Lines 0 51906 +51906
Branches 0 5810 +5810
===========================================
+ Hits 0 21769 +21769
- Misses 0 29823 +29823
- Partials 0 314 +314
```
| [Flag](https://app.codecov.io/gh/apache/superset/pull/38167/flags?src=pr&el=flags&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | Coverage Ξ | |
|---|---|---|
| [hive](https://app.codecov.io/gh/apache/superset/pull/38167/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `41.41% <0.00%> (?)` | |
| [presto](https://app.codecov.io/gh/apache/superset/pull/38167/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `41.43% <0.00%> (?)` | |
| [python](https://app.codecov.io/gh/apache/superset/pull/38167/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `41.51% <0.00%> (?)` | |
| [superset-extensions-cli](https://app.codecov.io/gh/apache/superset/pull/38167/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `90.38% <77.93%> (?)` | |
Flags with carried forward coverage won't be shown. [Click here](https://docs.codecov.io/docs/carryforward-flags?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#carryforward-flags-in-the-pull-request-comment) to find out more.
</details>
[:umbrella: View full report in Codecov by Sentry](https://app.codecov.io/gh/apache/superset/pull/38167?dropdown=coverage&src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache).
:loudspeaker: Have feedback on the report? [Share it here](https://about.codecov.io/codecov-pr-comment-feedback/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache).
<details><summary> :rocket: New features to boost your workflow: </summary>
- :snowflake: [Test Analytics](https://docs.codecov.com/docs/test-analytics): Detect flaky tests, report on failures, and find test suite problems.
- :package: [JS Bundle Analysis](https://docs.codecov.com/docs/javascript-bundle-analysis): Save yourself from yourself by tracking and limiting bundle sizes in JS merges.
</details>
--
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: notifications-unsubscribe@superset.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org
Re: [PR] fix(extensions): enforce correct naming conventions [superset]
Posted by "villebro (via GitHub)" <gi...@apache.org>.
villebro commented on code in PR #38167:
URL: https://github.com/apache/superset/pull/38167#discussion_r2841350729
##########
docs/developer_portal/extensions/quick-start.md:
##########
@@ -54,24 +54,33 @@ superset-extensions init
The CLI will prompt you for information:
```
-Extension ID (unique identifier, alphanumeric only): hello_world
-Extension name (human-readable display name): Hello World
+Extension name (e.g. Hello World): Hello World
+Extension ID [hello-world]: hello-world
Initial version [0.1.0]: 0.1.0
License [Apache-2.0]: Apache-2.0
Include frontend? [Y/n]: Y
Include backend? [Y/n]: Y
```
+**Important**: The extension ID must be **globally unique** across all Superset extensions and serves as the basis for all technical identifiers:
Review Comment:
@michael-s-molina I think the org expansion is fine, but it's an additional feature that's not directly realted to this fix. I suggest merging this as-is, and adding support for `--org` in a follow up that adds the optional extra prefix to all identifiers/paths.
--
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: notifications-unsubscribe@superset.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org
Re: [PR] fix(extensions): enforce correct naming conventions [superset]
Posted by "bito-code-review[bot] (via GitHub)" <gi...@apache.org>.
bito-code-review[bot] commented on PR #38167:
URL: https://github.com/apache/superset/pull/38167#issuecomment-3941536784
AI Code Review is in progress (usually takes 3 to 15 minutes unless it's a very large PR).
<details>
<summary>
Bito Usage Guide
</summary>
**Commands**
Type the following command in the pull request comment and save the comment.
- `/review` - Manually triggers a full AI review.
- `/pause` - Pauses automatic reviews on this pull request.
- `/resume` - Resumes automatic reviews.
- `/resolve` - Marks all Bito-posted review comments as resolved.
- `/abort` - Cancels all in-progress reviews.
Refer to the <a href="https://docs.bito.ai/bito-dev-agents/ai-code-review-agent/available-commands" target="_blank" rel="noopener noreferrer">documentation</a> for additional commands.
**Configuration**
This repository uses `Superset` You can customize the agent settings <a href="https://alpha.bito.ai/home/ai-agents/code-review-agent" target="_blank" rel="noopener noreferrer">here</a> or contact your Bito workspace admin at evan@preset.io.
**Documentation & Help**
- <a href="https://docs.bito.ai/bito-dev-agents/ai-code-review-agent/getting-started/install-run-using-bito-cloud/create-or-customize-an-agent-instance" target="_blank" rel="noopener noreferrer">Customize agent settings</a>
- <a href="https://docs.bito.ai/bito-dev-agents/ai-code-review-agent/implementing-custom-code-review-rules" target="_blank" rel="noopener noreferrer">Review rules</a>
- <a href="https://docs.bito.ai/bito-dev-agents/ai-code-review-agent" target="_blank" rel="noopener noreferrer">General documentation</a>
- <a href="https://docs.bito.ai/bito-dev-agents/ai-code-review-agent/faqs" target="_blank" rel="noopener noreferrer">FAQ</a>
</details>
--
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: notifications-unsubscribe@superset.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org
Re: [PR] fix(extensions): enforce correct naming conventions [superset]
Posted by "michael-s-molina (via GitHub)" <gi...@apache.org>.
michael-s-molina commented on code in PR #38167:
URL: https://github.com/apache/superset/pull/38167#discussion_r2841757610
##########
docs/developer_portal/extensions/quick-start.md:
##########
@@ -54,24 +54,33 @@ superset-extensions init
The CLI will prompt you for information:
```
-Extension ID (unique identifier, alphanumeric only): hello_world
-Extension name (human-readable display name): Hello World
+Extension name (e.g. Hello World): Hello World
+Extension ID [hello-world]: hello-world
Initial version [0.1.0]: 0.1.0
License [Apache-2.0]: Apache-2.0
Include frontend? [Y/n]: Y
Include backend? [Y/n]: Y
```
+**Important**: The extension ID must be **globally unique** across all Superset extensions and serves as the basis for all technical identifiers:
Review Comment:
Sounds good ππΌ
--
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: notifications-unsubscribe@superset.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org
Re: [PR] fix(extensions): enforce correct naming conventions [superset]
Posted by "bito-code-review[bot] (via GitHub)" <gi...@apache.org>.
bito-code-review[bot] commented on PR #38167:
URL: https://github.com/apache/superset/pull/38167#issuecomment-3941442359
AI Code Review is in progress (usually takes 3 to 15 minutes unless it's a very large PR).
--
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: notifications-unsubscribe@superset.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org