managecommand
Python client for ManageCommand - run, schedule, and audit Django management commands without SSH access.
Installation
pip install managecommand
Quick Start
- Add to your
INSTALLED_APPS:
INSTALLED_APPS = [
# ...
'managecommand',
]
- Add your API key to
settings.py:
MANAGECOMMAND_API_KEY = "dc_your_api_key_here"
- Start the runner:
python manage.py managecommand start
The runner will connect to ManageCommand, sync your available commands, and start polling for executions.
Configuration
API key
Your project's API key (get this from the ManageCommand dashboard)
MANAGECOMMAND_API_KEY = "dc_..."
Enabled (allowed) commands
Enable additional commands:
import managecommand
MANAGECOMMAND_ALLOWED_COMMANDS = tuple(
*managecommand.DEFAULT_ALLOWED_COMMANDS,
"my_custom_command",
"another_command",
)
Or explicitly allow only specific commands (skip the default ones):
MANAGECOMMAND_ALLOWED_COMMANDS = (
"my_custom_command",
"another_command",
)
Order does not matter.
By default, only commands in DEFAULT_ALLOWED_COMMANDS can be executed remotely:
Default value:
DEFAULT_ALLOWED_COMMANDS = (
# Database
"migrate", "showmigrations", "dbbackup", "createcachetable",
# Static files
"collectstatic", "findstatic",
# Maintenance
"clearsessions", "check", "sendtestemail", "diffsettings",
# Data
"dumpdata", "inspectdb",
# Testing
"test",
# django-extensions
"show_urls", "validate_templates", "clear_cache",
# Wagtail
"fixtree", "publish_scheduled", "update_index",
)
DISCLAIMER: This list is not fully vetted. You are encouraged to only allow commands that you trust and have vetted yourself.
Alternative - Blocklist Mode
Alternative to the "ALLOWED" list is the "DISALLOWED" list.
In this mode all commands are allowed except for the ones in the blocklist.
This mode is inherently less secure because newly added commands are automatically allowed.
CAUTION: Any new commands will by allowed by default in this mode!
MANAGECOMMAND_USE_BLOCKLIST = True
Default value:
DEFAULT_DISALLOWED_COMMANDS = (
# Database destruction
"flush", "sqlflush", "reset_db", "dbrestore", "loaddata",
# Interactive shells
"shell", "shell_plus", "dbshell",
# Development servers
"runserver", "runserver_plus", "testserver",
# Security sensitive
"createsuperuser", "changepassword",
# File modifications
"makemigrations", "squashmigrations",
)
DISCLAIMER: This list is not exhaustive. You are responsible for ensuring that only safe commands are allowed.
Optional / Advanced Settings
# Server URL (default: https://app.managecommand.com)
MANAGECOMMAND_SERVER_URL = "https://app.managecommand.com"
# Runner heartbeat interval in seconds (default: 30, minimum: 5)
MANAGECOMMAND_HEARTBEAT_INTERVAL = 30
# HTTP request timeout in seconds (default: 30)
MANAGECOMMAND_REQUEST_TIMEOUT = 30
# Max retries for failed requests (default: 3)
MANAGECOMMAND_MAX_RETRIES = 3
# Hosts allowed to use HTTP instead of HTTPS (default: localhost only)
MANAGECOMMAND_ALLOW_HTTP_HOSTS = ['localhost', '127.0.0.1', '::1']
Metadata-Only Mode
For commands that produce sensitive output (credentials, PII) or very high-volume output, you can enable metadata-only mode. In this mode, the command executes normally but stdout/stderr are not captured or stored.
# Commands that always run in metadata-only mode
MANAGECOMMAND_METADATAONLY_COMMANDS = (
"generate_api_keys",
"export_user_data",
"sync_large_dataset",
)
Additionally, the dashboard can also enable metadata-only mode on a per-command basis via the command configuration settings. Either the client setting or the dashboard setting will trigger metadata-only mode.
In metadata-only mode:
- The command executes normally
- Exit code and duration are still tracked
- Output shows: "(metadata-only mode, no output captured)"
Running the Runner
Current architecture supports only 1 runner per project.
Foreground
python manage.py managecommand start
Starts the runner in the foreground. Press Ctrl+C to stop.
This is the recommended option for Kubernetes, systemd, Docker, and similar process managers that handle lifecycle and restarts.
Background (detached)
python manage.py managecommand start -d
Starts the runner in the background.
This is recommended for development and testing only. It can be used in production where other process managers are not available. YMMV.
Managing the Runner
Use these commands to manage a runner.
Works whether the runner is running in the foreground or background.
# Check if the runner is running
python manage.py managecommand status
# Stop the background runner
python manage.py managecommand stop [--force]
# Restart the runner
python manage.py managecommand restart [-d]
License
MIT
Metadata
Release files for managecommand 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| managecommand-0.1.0.tar.gz | 27.0 kB | Without provenance | Details for managecommand-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| managecommand-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for managecommand-0.1.0-py3-none-any.whl |
Total release size: 59.1 kB
Release files / managecommand-0.1.0.tar.gz
| Download URL | managecommand-0.1.0.tar.gz |
|---|---|
| Size | 27.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ad208172231a8558d4c8a29a95a856d71c128509189860778dd4a4fb2667b84f
|
|
BLAKE2b-256 checksum How to use checksums |
a245fee8f20ab92273c5c6ad7d41a0d18ac29e2bdb27d386394b311535925c86
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.7
|
Release files / managecommand-0.1.0-py3-none-any.whl
| Download URL | managecommand-0.1.0-py3-none-any.whl |
|---|---|
| Size | 32.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3e9fb9c42a98545cf18d5828d33d4a5ccc4587652053bdff26aa29fb26092d49
|
|
BLAKE2b-256 checksum How to use checksums |
b83b720176c903d169642f8377055386c3c9e66dc1902981bf8a6dd207b303c9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.7
|
Security for managecommand 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.