superset-toolkit


Namesuperset-toolkit JSON
Version 0.2.2 PyPI version JSON
download
home_pageNone
SummaryProfessional toolkit for Superset API automation - datasets, charts, and dashboards
upload_time2025-10-21 14:54:26
maintainerNone
docs_urlNone
authorOpen Source Contributors
requires_python>=3.10
licenseNone
keywords superset dashboard automation api charts datasets
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # ๐Ÿš€ Superset Toolkit

**Production-grade SDK for Apache Superset API automation with professional patterns.**

## โœจ Key Features

- ๐ŸŽฏ **Client-Centric Design**: No more repetitive `(session, base_url)` parameters
- ๐Ÿ‘ค **Username-Aware Operations**: Work with usernames directly, no manual ID resolution
- ๐Ÿ”ง **JWT-Based Authentication**: Robust user ID extraction from tokens (works for any user)
- ๐Ÿš€ **Composite Workflows**: Complete operations in single function calls  
- ๐Ÿ“ฆ **Batch Operations**: Efficient bulk chart/dashboard management
- ๐Ÿงน **Resource Lifecycle**: Context managers with automatic cleanup
- ๐Ÿ›ก๏ธ **Professional Error Handling**: Graceful fallbacks and detailed logging
- ๐Ÿ“Š **Full Chart Support**: Table, pie, histogram, area charts with username support

## Installation

### Basic Installation

```bash
pip install -e .
```

### With CLI Support

```bash
pip install -e ".[cli]"
```

### Development Installation

```bash
pip install -e ".[dev]"
```

## ๐Ÿš€ Quick Start

### Professional Client-Centric Usage (Recommended)

```python
from superset_toolkit import SupersetClient
from superset_toolkit.config import Config

# Configure connection
config = Config(
    superset_url="https://your-superset-instance.com",
    username="your-username",
    password="your-secure-password",
    schema="your-schema",
    database_name="your-database"
)

# Context manager with automatic cleanup
with SupersetClient(config=config) as client:
    
    # Create chart (all complexity hidden)
    chart_id = client.create_table_chart(
        name="Sales Report",
        table="sales_data",
        owner="analyst"  # Just username - no ID resolution needed!
    )
    
    # Create dashboard with automatic chart linking
    dashboard_id = client.create_dashboard(
        title="Sales Dashboard", 
        slug="sales-dashboard",
        owner="analyst",
        charts=["Sales Report"]  # Auto-links existing charts
    )
    
    # Query resources by owner
    user_charts = client.get_charts(owner="analyst")
    user_dashboards = client.get_dashboards(owner="analyst")
    
    # Get comprehensive user summary
    summary = client.get_user_summary("analyst")
    print(f"User has: {summary['summary']}")
    
    # Clean up everything for a user
    client.cleanup_user("temp_user", dry_run=False)
```

### Batch & Composite Operations

```python
# Create dashboard with multiple charts in one operation
result = client.create_dashboard_with_charts(
    dashboard_title="Analytics Dashboard",
    slug="analytics-dash",
    chart_configs=[
        {"name": "Sales Chart", "table": "sales", "columns": ["region", "amount"]},
        {"name": "Revenue Chart", "table": "revenue", "columns": ["month", "total"]}
    ],
    owner="analytics_team"
)

# Create multiple charts efficiently  
chart_ids = client.create_charts_batch([
    {"name": "Chart 1", "table": "data1"},
    {"name": "Chart 2", "table": "data2"},
    {"name": "Chart 3", "table": "data3"}
], owner="data_team")
```

### Enhanced Standalone Functions (For Advanced Use Cases)

```python
from superset_toolkit.charts import create_table_chart
from superset_toolkit.queries import get_charts_by_username

client = SupersetClient()

# Enhanced standalone functions now support username parameter
chart_id = create_table_chart(
    client.session, client.base_url, 
    "Advanced Chart", dataset_id,
    username="data_analyst"  # No manual user ID resolution!
)

# Direct function calls for specific operations
charts = get_charts_by_username(client.session, client.base_url, "data_analyst")
```

### Environment Variables (Optional)

```bash
export SUPERSET_URL="https://your-superset-instance.com"
export SUPERSET_USERNAME="your-username" 
export SUPERSET_PASSWORD="your-password"
export SUPERSET_SCHEMA="your_schema"  # Optional, defaults to 'reports'
export SUPERSET_DATABASE_NAME="YourDatabase"  # Optional, defaults to 'Trino'
```


**Module Organization:**
- **`client.py`**: Enhanced SupersetClient with professional methods
- **`auth.py`**: JWT-based authentication with permission-aware fallbacks
- **`charts.py`**: Username-aware chart creation (table, pie, histogram, area)
- **`dashboard.py`**: Dashboard creation with automatic chart linking
- **`queries.py`**: Resource filtering and querying by owner/dataset
- **`datasets.py`**: Dataset management with permission handling

## ๐Ÿ“Š Advanced Usage Examples

### Multiple Chart Types with Username Support

```python
with SupersetClient() as client:
    # Table chart
    table_chart = client.create_chart_from_table(
        chart_name="Sales Data",
        table="sales",
        owner="analyst",
        chart_type="table",
        columns=["region", "amount", "date"]
    )
    
    # Pie chart  
    pie_chart = client.create_chart_from_table(
        chart_name="Sales by Region", 
        table="sales",
        owner="analyst",
        chart_type="pie",
        metric={"aggregate": "SUM", "column": {"column_name": "amount"}},
        groupby=["region"]
    )
    
    # Histogram
    hist_chart = client.create_chart_from_table(
        chart_name="Amount Distribution",
        table="sales", 
        owner="analyst",
        chart_type="histogram",
        all_columns_x=["amount"],
        bins=10
    )
```

### Resource Management & Migration

```python
with SupersetClient() as client:
    # Get comprehensive user summary
    summary = client.get_user_summary("data_analyst")
    print(f"User has: {summary['summary']}")
    
    # Migrate resources between users
    result = client.migrate_user_resources(
        from_user="old_analyst", 
        to_user="new_analyst",
        dry_run=False
    )
    
    # Clean up user resources
    cleanup = client.cleanup_user("temp_user", dry_run=False)
    print(f"Deleted: {len(cleanup['chart_ids'])} charts, {len(cleanup['dashboard_ids'])} dashboards")
```

### Dataset Ownership Management

```python
from superset_toolkit import SupersetClient
from superset_toolkit.datasets import add_dataset_owner, refresh_dataset_metadata
from superset_toolkit.ensure import get_dataset_id

# Login as admin (with privileges to modify ownership)
client = SupersetClient()

# Get dataset ID
dataset_id = get_dataset_id(client.session, client.base_url, "sales_data", "public")

# Refresh dataset metadata (update columns from database)
refresh_dataset_metadata(client.session, client.base_url, dataset_id)

# Add an owner to the dataset without removing existing owners
# Admin logs in, but adds other users as owners for collaboration
add_dataset_owner(
    client.session, 
    client.base_url, 
    dataset_id, 
    username="data_analyst"  # Add this user as owner
)

# Add multiple owners
for username in ["analyst1", "analyst2", "analyst3"]:
    add_dataset_owner(client.session, client.base_url, dataset_id, username)
```

**Key Features:**
- โœ… **Preserves existing owners** - doesn't remove anyone
- โœ… **Admin authentication** - login as admin, add others as owners
- โœ… **Idempotent** - won't duplicate if user is already an owner
- โœ… **Collaboration-friendly** - enable team access to datasets

## ๐Ÿ”ง Installation & Setup

```bash
# Install the toolkit
pip install -e .

# Optional: Install with CLI support  
pip install -e ".[cli]"
```

## ๐ŸŽฏ Why Choose This SDK?

**Before (Traditional Approach):**
```python
# Manual user ID resolution, parameter repetition, fragmented operations
user_id = get_user_id_by_username(session, base_url, "john")
dataset_id = ensure_dataset(session, base_url, db_id, schema, table)  
chart_id = create_table_chart(session, base_url, name, dataset_id, user_id)
dashboard_id = ensure_dashboard(session, base_url, title, slug)
link_chart_to_dashboard(session, base_url, chart_id, dashboard_id)
```

**After (Professional SDK):**
```python
# Clean, username-first, composite operations
with SupersetClient() as client:
    chart_id = client.create_table_chart("Report", table="sales", owner="analyst")
    dashboard_id = client.create_dashboard("Dashboard", "dashboard", charts=["Report"])
```

## ๐Ÿ“š Documentation

- ๐Ÿ“– **[Full Documentation](docs/)** - Comprehensive guides and API reference
- ๐ŸŽฏ **[Examples](examples/)** - Ready-to-run examples for common patterns
- ๐Ÿ”ง **[Configuration Guide](docs/CONFIGURATION.md)** - Setup and customization
- ๐Ÿ‘ค **[User Management](docs/USER_MANAGEMENT.md)** - Username-aware operations

## ๐ŸŽฏ Supported Chart Types

| Chart Type | Client Method | Standalone Function | Username Support |
|------------|---------------|--------------------|-----------------| 
| **Table** | `client.create_table_chart()` | `create_table_chart()` | โœ… |
| **Pie** | `client.create_chart_from_table(type="pie")` | `create_pie_chart()` | โœ… |
| **Histogram** | `client.create_chart_from_table(type="histogram")` | `create_histogram_chart()` | โœ… |
| **Area** | `client.create_chart_from_table(type="area")` | `create_area_chart()` | โœ… |
| **Pivot** | Available via standalone function | `create_pivot_table_chart()` | โœ… |

## ๐Ÿ›ก๏ธ Error Handling & Permissions

The SDK gracefully handles permission restrictions:
- **JWT Token Extraction**: Gets user ID without requiring admin permissions
- **403 Fallback Logic**: Smart fallbacks for non-admin users
- **Professional Exceptions**: Clear error messages with context

```python
# Robust error handling
try:
    chart_id = client.create_table_chart("Report", table="sales", owner="user") 
except AuthenticationError as e:
    print(f"Auth issue: {e}")
except SupersetToolkitError as e:
    print(f"Operation failed: {e}")
```

## ๐Ÿ“ Project Structure

```
superset_toolkit/
โ”œโ”€โ”€ ๐Ÿ“– docs/              # Comprehensive documentation
โ”œโ”€โ”€ ๐ŸŽฏ examples/          # Ready-to-run examples  
โ”œโ”€โ”€ ๐Ÿ”ง src/superset_toolkit/
โ”‚   โ”œโ”€โ”€ client.py         # Professional SupersetClient class
โ”‚   โ”œโ”€โ”€ auth.py          # JWT + permission-aware authentication
โ”‚   โ”œโ”€โ”€ charts.py        # Username-aware chart creation
โ”‚   โ”œโ”€โ”€ dashboard.py     # Dashboard management 
โ”‚   โ”œโ”€โ”€ queries.py       # Resource filtering and queries
โ”‚   โ””โ”€โ”€ utils/           # Utilities (metrics, etc.)
โ””โ”€โ”€ ๐Ÿงช src/superset-api-test/  # Test scripts
```

## ๐Ÿš€ Getting Started

1. **Install**: `pip install -e .`
2. **Configure**: Set up credentials (Config class or env vars)  
3. **Explore**: Check `examples/` for common patterns
4. **Read Docs**: Review `docs/` for comprehensive guides

## ๐Ÿ“ License & Contributing

MIT License - Open source project for the Superset community.

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "superset-toolkit",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": null,
    "keywords": "superset, dashboard, automation, api, charts, datasets",
    "author": "Open Source Contributors",
    "author_email": null,
    "download_url": "https://files.pythonhosted.org/packages/a7/92/fe3e454dd89c6bfcb3277bad6219e6f927dce8c9a8387208619851b0c8f6/superset_toolkit-0.2.2.tar.gz",
    "platform": null,
    "description": "# \ud83d\ude80 Superset Toolkit\n\n**Production-grade SDK for Apache Superset API automation with professional patterns.**\n\n## \u2728 Key Features\n\n- \ud83c\udfaf **Client-Centric Design**: No more repetitive `(session, base_url)` parameters\n- \ud83d\udc64 **Username-Aware Operations**: Work with usernames directly, no manual ID resolution\n- \ud83d\udd27 **JWT-Based Authentication**: Robust user ID extraction from tokens (works for any user)\n- \ud83d\ude80 **Composite Workflows**: Complete operations in single function calls  \n- \ud83d\udce6 **Batch Operations**: Efficient bulk chart/dashboard management\n- \ud83e\uddf9 **Resource Lifecycle**: Context managers with automatic cleanup\n- \ud83d\udee1\ufe0f **Professional Error Handling**: Graceful fallbacks and detailed logging\n- \ud83d\udcca **Full Chart Support**: Table, pie, histogram, area charts with username support\n\n## Installation\n\n### Basic Installation\n\n```bash\npip install -e .\n```\n\n### With CLI Support\n\n```bash\npip install -e \".[cli]\"\n```\n\n### Development Installation\n\n```bash\npip install -e \".[dev]\"\n```\n\n## \ud83d\ude80 Quick Start\n\n### Professional Client-Centric Usage (Recommended)\n\n```python\nfrom superset_toolkit import SupersetClient\nfrom superset_toolkit.config import Config\n\n# Configure connection\nconfig = Config(\n    superset_url=\"https://your-superset-instance.com\",\n    username=\"your-username\",\n    password=\"your-secure-password\",\n    schema=\"your-schema\",\n    database_name=\"your-database\"\n)\n\n# Context manager with automatic cleanup\nwith SupersetClient(config=config) as client:\n    \n    # Create chart (all complexity hidden)\n    chart_id = client.create_table_chart(\n        name=\"Sales Report\",\n        table=\"sales_data\",\n        owner=\"analyst\"  # Just username - no ID resolution needed!\n    )\n    \n    # Create dashboard with automatic chart linking\n    dashboard_id = client.create_dashboard(\n        title=\"Sales Dashboard\", \n        slug=\"sales-dashboard\",\n        owner=\"analyst\",\n        charts=[\"Sales Report\"]  # Auto-links existing charts\n    )\n    \n    # Query resources by owner\n    user_charts = client.get_charts(owner=\"analyst\")\n    user_dashboards = client.get_dashboards(owner=\"analyst\")\n    \n    # Get comprehensive user summary\n    summary = client.get_user_summary(\"analyst\")\n    print(f\"User has: {summary['summary']}\")\n    \n    # Clean up everything for a user\n    client.cleanup_user(\"temp_user\", dry_run=False)\n```\n\n### Batch & Composite Operations\n\n```python\n# Create dashboard with multiple charts in one operation\nresult = client.create_dashboard_with_charts(\n    dashboard_title=\"Analytics Dashboard\",\n    slug=\"analytics-dash\",\n    chart_configs=[\n        {\"name\": \"Sales Chart\", \"table\": \"sales\", \"columns\": [\"region\", \"amount\"]},\n        {\"name\": \"Revenue Chart\", \"table\": \"revenue\", \"columns\": [\"month\", \"total\"]}\n    ],\n    owner=\"analytics_team\"\n)\n\n# Create multiple charts efficiently  \nchart_ids = client.create_charts_batch([\n    {\"name\": \"Chart 1\", \"table\": \"data1\"},\n    {\"name\": \"Chart 2\", \"table\": \"data2\"},\n    {\"name\": \"Chart 3\", \"table\": \"data3\"}\n], owner=\"data_team\")\n```\n\n### Enhanced Standalone Functions (For Advanced Use Cases)\n\n```python\nfrom superset_toolkit.charts import create_table_chart\nfrom superset_toolkit.queries import get_charts_by_username\n\nclient = SupersetClient()\n\n# Enhanced standalone functions now support username parameter\nchart_id = create_table_chart(\n    client.session, client.base_url, \n    \"Advanced Chart\", dataset_id,\n    username=\"data_analyst\"  # No manual user ID resolution!\n)\n\n# Direct function calls for specific operations\ncharts = get_charts_by_username(client.session, client.base_url, \"data_analyst\")\n```\n\n### Environment Variables (Optional)\n\n```bash\nexport SUPERSET_URL=\"https://your-superset-instance.com\"\nexport SUPERSET_USERNAME=\"your-username\" \nexport SUPERSET_PASSWORD=\"your-password\"\nexport SUPERSET_SCHEMA=\"your_schema\"  # Optional, defaults to 'reports'\nexport SUPERSET_DATABASE_NAME=\"YourDatabase\"  # Optional, defaults to 'Trino'\n```\n\n\n**Module Organization:**\n- **`client.py`**: Enhanced SupersetClient with professional methods\n- **`auth.py`**: JWT-based authentication with permission-aware fallbacks\n- **`charts.py`**: Username-aware chart creation (table, pie, histogram, area)\n- **`dashboard.py`**: Dashboard creation with automatic chart linking\n- **`queries.py`**: Resource filtering and querying by owner/dataset\n- **`datasets.py`**: Dataset management with permission handling\n\n## \ud83d\udcca Advanced Usage Examples\n\n### Multiple Chart Types with Username Support\n\n```python\nwith SupersetClient() as client:\n    # Table chart\n    table_chart = client.create_chart_from_table(\n        chart_name=\"Sales Data\",\n        table=\"sales\",\n        owner=\"analyst\",\n        chart_type=\"table\",\n        columns=[\"region\", \"amount\", \"date\"]\n    )\n    \n    # Pie chart  \n    pie_chart = client.create_chart_from_table(\n        chart_name=\"Sales by Region\", \n        table=\"sales\",\n        owner=\"analyst\",\n        chart_type=\"pie\",\n        metric={\"aggregate\": \"SUM\", \"column\": {\"column_name\": \"amount\"}},\n        groupby=[\"region\"]\n    )\n    \n    # Histogram\n    hist_chart = client.create_chart_from_table(\n        chart_name=\"Amount Distribution\",\n        table=\"sales\", \n        owner=\"analyst\",\n        chart_type=\"histogram\",\n        all_columns_x=[\"amount\"],\n        bins=10\n    )\n```\n\n### Resource Management & Migration\n\n```python\nwith SupersetClient() as client:\n    # Get comprehensive user summary\n    summary = client.get_user_summary(\"data_analyst\")\n    print(f\"User has: {summary['summary']}\")\n    \n    # Migrate resources between users\n    result = client.migrate_user_resources(\n        from_user=\"old_analyst\", \n        to_user=\"new_analyst\",\n        dry_run=False\n    )\n    \n    # Clean up user resources\n    cleanup = client.cleanup_user(\"temp_user\", dry_run=False)\n    print(f\"Deleted: {len(cleanup['chart_ids'])} charts, {len(cleanup['dashboard_ids'])} dashboards\")\n```\n\n### Dataset Ownership Management\n\n```python\nfrom superset_toolkit import SupersetClient\nfrom superset_toolkit.datasets import add_dataset_owner, refresh_dataset_metadata\nfrom superset_toolkit.ensure import get_dataset_id\n\n# Login as admin (with privileges to modify ownership)\nclient = SupersetClient()\n\n# Get dataset ID\ndataset_id = get_dataset_id(client.session, client.base_url, \"sales_data\", \"public\")\n\n# Refresh dataset metadata (update columns from database)\nrefresh_dataset_metadata(client.session, client.base_url, dataset_id)\n\n# Add an owner to the dataset without removing existing owners\n# Admin logs in, but adds other users as owners for collaboration\nadd_dataset_owner(\n    client.session, \n    client.base_url, \n    dataset_id, \n    username=\"data_analyst\"  # Add this user as owner\n)\n\n# Add multiple owners\nfor username in [\"analyst1\", \"analyst2\", \"analyst3\"]:\n    add_dataset_owner(client.session, client.base_url, dataset_id, username)\n```\n\n**Key Features:**\n- \u2705 **Preserves existing owners** - doesn't remove anyone\n- \u2705 **Admin authentication** - login as admin, add others as owners\n- \u2705 **Idempotent** - won't duplicate if user is already an owner\n- \u2705 **Collaboration-friendly** - enable team access to datasets\n\n## \ud83d\udd27 Installation & Setup\n\n```bash\n# Install the toolkit\npip install -e .\n\n# Optional: Install with CLI support  \npip install -e \".[cli]\"\n```\n\n## \ud83c\udfaf Why Choose This SDK?\n\n**Before (Traditional Approach):**\n```python\n# Manual user ID resolution, parameter repetition, fragmented operations\nuser_id = get_user_id_by_username(session, base_url, \"john\")\ndataset_id = ensure_dataset(session, base_url, db_id, schema, table)  \nchart_id = create_table_chart(session, base_url, name, dataset_id, user_id)\ndashboard_id = ensure_dashboard(session, base_url, title, slug)\nlink_chart_to_dashboard(session, base_url, chart_id, dashboard_id)\n```\n\n**After (Professional SDK):**\n```python\n# Clean, username-first, composite operations\nwith SupersetClient() as client:\n    chart_id = client.create_table_chart(\"Report\", table=\"sales\", owner=\"analyst\")\n    dashboard_id = client.create_dashboard(\"Dashboard\", \"dashboard\", charts=[\"Report\"])\n```\n\n## \ud83d\udcda Documentation\n\n- \ud83d\udcd6 **[Full Documentation](docs/)** - Comprehensive guides and API reference\n- \ud83c\udfaf **[Examples](examples/)** - Ready-to-run examples for common patterns\n- \ud83d\udd27 **[Configuration Guide](docs/CONFIGURATION.md)** - Setup and customization\n- \ud83d\udc64 **[User Management](docs/USER_MANAGEMENT.md)** - Username-aware operations\n\n## \ud83c\udfaf Supported Chart Types\n\n| Chart Type | Client Method | Standalone Function | Username Support |\n|------------|---------------|--------------------|-----------------| \n| **Table** | `client.create_table_chart()` | `create_table_chart()` | \u2705 |\n| **Pie** | `client.create_chart_from_table(type=\"pie\")` | `create_pie_chart()` | \u2705 |\n| **Histogram** | `client.create_chart_from_table(type=\"histogram\")` | `create_histogram_chart()` | \u2705 |\n| **Area** | `client.create_chart_from_table(type=\"area\")` | `create_area_chart()` | \u2705 |\n| **Pivot** | Available via standalone function | `create_pivot_table_chart()` | \u2705 |\n\n## \ud83d\udee1\ufe0f Error Handling & Permissions\n\nThe SDK gracefully handles permission restrictions:\n- **JWT Token Extraction**: Gets user ID without requiring admin permissions\n- **403 Fallback Logic**: Smart fallbacks for non-admin users\n- **Professional Exceptions**: Clear error messages with context\n\n```python\n# Robust error handling\ntry:\n    chart_id = client.create_table_chart(\"Report\", table=\"sales\", owner=\"user\") \nexcept AuthenticationError as e:\n    print(f\"Auth issue: {e}\")\nexcept SupersetToolkitError as e:\n    print(f\"Operation failed: {e}\")\n```\n\n## \ud83d\udcc1 Project Structure\n\n```\nsuperset_toolkit/\n\u251c\u2500\u2500 \ud83d\udcd6 docs/              # Comprehensive documentation\n\u251c\u2500\u2500 \ud83c\udfaf examples/          # Ready-to-run examples  \n\u251c\u2500\u2500 \ud83d\udd27 src/superset_toolkit/\n\u2502   \u251c\u2500\u2500 client.py         # Professional SupersetClient class\n\u2502   \u251c\u2500\u2500 auth.py          # JWT + permission-aware authentication\n\u2502   \u251c\u2500\u2500 charts.py        # Username-aware chart creation\n\u2502   \u251c\u2500\u2500 dashboard.py     # Dashboard management \n\u2502   \u251c\u2500\u2500 queries.py       # Resource filtering and queries\n\u2502   \u2514\u2500\u2500 utils/           # Utilities (metrics, etc.)\n\u2514\u2500\u2500 \ud83e\uddea src/superset-api-test/  # Test scripts\n```\n\n## \ud83d\ude80 Getting Started\n\n1. **Install**: `pip install -e .`\n2. **Configure**: Set up credentials (Config class or env vars)  \n3. **Explore**: Check `examples/` for common patterns\n4. **Read Docs**: Review `docs/` for comprehensive guides\n\n## \ud83d\udcdd License & Contributing\n\nMIT License - Open source project for the Superset community.\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "Professional toolkit for Superset API automation - datasets, charts, and dashboards",
    "version": "0.2.2",
    "project_urls": {
        "Documentation": "https://github.com/daviddallakyan2005/superset-toolkit#readme",
        "Homepage": "https://github.com/daviddallakyan2005/superset-toolkit",
        "Issues": "https://github.com/daviddallakyan2005/superset-toolkit/issues",
        "Repository": "https://github.com/daviddallakyan2005/superset-toolkit.git"
    },
    "split_keywords": [
        "superset",
        " dashboard",
        " automation",
        " api",
        " charts",
        " datasets"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "03869a0cfd88e38d670d956ce4500a2841ebe26c21bbdb3a0aba2a0f9cee04af",
                "md5": "c004e50f03a573a49ed9522cba082f39",
                "sha256": "4e91f796acc9c564d0ea9bdd06e80f7f54596251d6abf0f4ad795a1e94987e1f"
            },
            "downloads": -1,
            "filename": "superset_toolkit-0.2.2-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "c004e50f03a573a49ed9522cba082f39",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 33002,
            "upload_time": "2025-10-21T14:54:24",
            "upload_time_iso_8601": "2025-10-21T14:54:24.481814Z",
            "url": "https://files.pythonhosted.org/packages/03/86/9a0cfd88e38d670d956ce4500a2841ebe26c21bbdb3a0aba2a0f9cee04af/superset_toolkit-0.2.2-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "a792fe3e454dd89c6bfcb3277bad6219e6f927dce8c9a8387208619851b0c8f6",
                "md5": "2d7f79101b34a38e933e146772aab702",
                "sha256": "ed362c65867e90651d636913a2ea48532202d5583a4de22bccfd3aad3ff64bb1"
            },
            "downloads": -1,
            "filename": "superset_toolkit-0.2.2.tar.gz",
            "has_sig": false,
            "md5_digest": "2d7f79101b34a38e933e146772aab702",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 33090,
            "upload_time": "2025-10-21T14:54:26",
            "upload_time_iso_8601": "2025-10-21T14:54:26.441027Z",
            "url": "https://files.pythonhosted.org/packages/a7/92/fe3e454dd89c6bfcb3277bad6219e6f927dce8c9a8387208619851b0c8f6/superset_toolkit-0.2.2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-10-21 14:54:26",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "daviddallakyan2005",
    "github_project": "superset-toolkit#readme",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "superset-toolkit"
}
        
Elapsed time: 1.58113s