# ๐ 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"
}