Apache Superset is a data visualization platform with Flask/Python backend and React/TypeScript frontend.
These migrations are actively happening - avoid deprecated patterns:
any
types - Use proper TypeScript typestest()
instead of describe()
- Follow avoid nesting when testing principlespre-commit run mypy
to validatesuperset/ ├── superset/ # Python backend (Flask, SQLAlchemy) │ ├── views/api/ # REST API endpoints │ ├── models/ # Database models │ └── connectors/ # Database connections ├── superset-frontend/src/ # React TypeScript frontend │ ├── components/ # Reusable components │ ├── explore/ # Chart builder │ ├── dashboard/ # Dashboard interface │ └── SqlLab/ # SQL editor ├── superset-frontend/packages/ │ └── superset-ui-core/ # UI component library (USE THIS) ├── tests/ # Python/integration tests ├── docs/ # Documentation (UPDATE FOR CHANGES) └── UPDATING.md # Breaking changes log
any
types - Use proper TypeScript, reuse existing typespre-commit run mypy
.rat-excludes
to avoid header token overheadSupersetTestCase
- Base class in tests/integration_tests/base_tests.py
@with_config
- Config mocking decorator@with_feature_flags
- Feature flag testinglogin_as()
, login_as_admin()
- Authentication helperscreate_dashboard()
, create_slice()
- Data setup utilitiessuperset-frontend/spec/helpers/testing-library.tsx
- Custom render() with providerscreateWrapper()
- Redux/Router/Theme wrapperselectOption()
- Select component helperMagicMock()
for config objects, avoid AsyncMock
for synchronous code# Frontend npm run test # All tests npm run test -- filename.test.tsx # Single file # E2E Tests (Playwright - NEW) npm run playwright:test # All Playwright tests npm run playwright:ui # Interactive UI mode npm run playwright:headed # See browser during tests npx playwright test tests/auth/login.spec.ts # Single file npm run playwright:debug tests/auth/login.spec.ts # Debug specific file # E2E Tests (Cypress - DEPRECATED) cd superset-frontend/cypress-base npm run cypress-run-chrome # All Cypress tests (headless) npm run cypress-debug # Interactive Cypress UI # Backend pytest # All tests pytest tests/unit_tests/specific_test.py # Single file pytest tests/unit_tests/ # Directory # If pytest fails with database/setup issues, ask the user to run test environment setup
Quick Setup Check (run this first):
# Verify Superset is running curl -f http://localhost:8088/health || echo "❌ Setup required - see https://superset.apache.org/docs/contributing/development#working-with-llms"
If health checks fail: “It appears you aren't set up properly. Please refer to the Working with LLMs section in the development docs for setup instructions.”
Key Project Files:
superset-frontend/package.json
- Frontend build scripts (npm run dev
on port 9000, npm run test
, npm run lint
)pyproject.toml
- Python tooling (ruff, mypy configs)requirements/
folder - Python dependencies (base.txt, development.txt)~Model.field
instead of == False
to avoid ruff E712 errors~Model.is_active
instead of Model.is_active == False
When creating pull requests:
.github/PULL_REQUEST_TEMPLATE.md
for the latest formattype(scope): description
fix(dashboard): load charts correctly
fix
, feat
, docs
, style
, refactor
, perf
, test
, chore
Important: Always reference the actual template file at .github/PULL_REQUEST_TEMPLATE.md
instead of using cached content, as the template may be updated over time.
Use pre-commit hooks for quality validation:
# Install hooks pre-commit install # IMPORTANT: Stage your changes first! git add . # Pre-commit only checks staged files # Quick validation (faster than --all-files) pre-commit run # Staged files only pre-commit run mypy # Python type checking pre-commit run prettier # Code formatting pre-commit run eslint # Frontend linting
Important pre-commit usage notes:
git add .
before pre-commit run
to check only changed files (much faster)# Common virtual environment locations (yours may differ): source .venv/bin/activate # if using .venv source venv/bin/activate # if using venv source ~/venvs/superset/bin/activate # if using a central locationIf you get a “command not found” error, ask the user which virtual environment to activate
/api.py
- REST endpoints with decorators and OpenAPI docstrings/schemas.py
- Marshmallow validation schemas for OpenAPI spec/commands/
- Business logic classes with @transaction() decorators/models/
- SQLAlchemy database models/swagger/v1
from docstrings and schemassuperset/migrations/versions/
YYYY-MM-DD_HH-MM_hash_description.py
superset.migrations.shared.utils
for database compatibilityLLM Note: This codebase is actively modernizing toward full TypeScript and type safety. Always run pre-commit run
to validate changes. Follow the ongoing refactors section to avoid deprecated patterns.