https://github.com/rclement/django-dagster
https://github.com/rclement/django-dagster
Last synced: 2 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/rclement/django-dagster
- Owner: rclement
- License: apache-2.0
- Created: 2026-02-15T11:10:28.000Z (4 months ago)
- Default Branch: main
- Last Pushed: 2026-04-03T09:59:37.000Z (2 months ago)
- Last Synced: 2026-04-03T14:07:19.784Z (2 months ago)
- Language: Python
- Homepage:
- Size: 1.7 MB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Agents: AGENTS.md
Awesome Lists containing this project
README
# django-dagster
[](https://pypi.org/project/django-dagster/)
[](https://pypi.org/project/django-dagster/)
[](https://github.com/rclement/django-dagster/actions/workflows/ci-cd.yml)
[](https://github.com/rclement/django-dagster/blob/main/LICENSE)
A Django plugin for interacting with a [Dagster](https://dagster.io/) server through the Django admin interface.
## Features
- Native Django Admin integration — shows up as a **Dagster** section
- List all jobs from connected Dagster instance
- View runs with status and job filtering
- Trigger new job executions with optional JSON run config
- Cancel running jobs
- Re-execute failed/canceled jobs
- View detailed run metadata (config, tags, event logs)
- Granular permission system using Django's built-in permissions
## Screenshots
| Jobs list | Job detail |
|---|---|
|  |  |
| Trigger job | Trigger success |
|---|---|
|  |  |
| Runs list | Run detail |
|---|---|
|  |  |
## Requirements
- Python 3.10+
- Django 4.2+
## Installation
```bash
pip install django-dagster
```
## Configuration
Add `django_dagster` to `INSTALLED_APPS` and set `DAGSTER_URL` in your Django settings:
```python
INSTALLED_APPS = [
...
"django_dagster",
]
DAGSTER_URL = "http://localhost:3000"
```
Then run migrations to create the permission models:
```bash
python manage.py migrate django_dagster
```
No URL configuration or manual admin registration is needed. Navigate to `/admin/` and look for the **Dagster** section.
## Permissions
Access is governed by standard Django permissions that you can assign to users or groups via the Django admin. Superusers always have full access.
| Permission | Codename | Grants access to |
|---|---|---|
| Can view Job | `view_dagsterjob` | View job list and job detail pages |
| Can view Run | `view_dagsterrun` | View run list and run detail pages |
| Can trigger Dagster jobs | `trigger_dagsterjob` | Trigger/submit a new job run |
| Can cancel Dagster runs | `cancel_dagsterrun` | Cancel a running job |
| Can re-execute Dagster runs | `reexecute_dagsterrun` | Re-execute a completed/failed run |
| Can access the Dagster UI | `access_dagster_ui` | Show direct links to the Dagster UI |
To customise behaviour — for example, granting all staff users full access by default — unregister the defaults and register your own subclass in your project's `admin.py`:
```python
from django.contrib import admin
from django_dagster.admin import DagsterJobAdmin, DagsterRunAdmin
from django_dagster.models import DagsterJob, DagsterRun
def _is_active_staff(request):
return request.user.is_active and request.user.is_staff
class MyDagsterJobAdmin(DagsterJobAdmin):
def has_module_permission(self, request):
return _is_active_staff(request)
def has_view_permission(self, request, obj=None):
return _is_active_staff(request)
def has_trigger_dagsterjob_permission(self, request):
return _is_active_staff(request)
def has_access_dagster_ui_permission(self, request):
return _is_active_staff(request)
class MyDagsterRunAdmin(DagsterRunAdmin):
def has_module_permission(self, request):
return _is_active_staff(request)
def has_view_permission(self, request, obj=None):
return _is_active_staff(request)
def has_cancel_dagsterrun_permission(self, request):
return _is_active_staff(request)
def has_reexecute_dagsterrun_permission(self, request):
return _is_active_staff(request)
def has_access_dagster_ui_permission(self, request):
return _is_active_staff(request)
admin.site.unregister(DagsterJob)
admin.site.unregister(DagsterRun)
admin.site.register(DagsterJob, MyDagsterJobAdmin)
admin.site.register(DagsterRun, MyDagsterRunAdmin)
```
## Programmatic API
The package exposes Django model-like objects for use outside the admin:
```python
from django_dagster import DagsterJob, DagsterRun
# List all jobs
jobs = DagsterJob.objects.all()
# Get a specific job (requires the repository and location names)
job = DagsterJob.objects.get(
name="etl_pipeline",
repository="__repository__",
location="my_location",
)
# Trigger a job
run_id = job.submit(run_config={"ops": {"my_op": {"config": {"x": 1}}}})
# Get default run config
config = job.get_default_run_config()
# List runs (with optional filtering)
runs = DagsterRun.objects.all()
runs = DagsterRun.objects.filter(job_name="etl_pipeline", statuses=["SUCCESS"])
# Get a specific run
run = DagsterRun.objects.get(run_id="abc123")
# Cancel / re-execute a run
run.cancel()
new_run_id = run.reexecute()
# Get event logs
events = run.get_events()
```
## Demo
A self-contained demo project is available in the [`demo/`](demo/) directory with sample Dagster jobs and pre-configured users. See [`demo/README.md`](demo/README.md) for instructions.
## License
This project is licensed under the Apache License 2.0. See the [LICENSE](LICENSE) file for details.