Skip to main content

Easily run Django management commands from admin

Project description

Travis Coveralls Requires License Version Supported Python version Supported Django version Package format Python wheel support Package status

django-mcadmin is a Django reusable app that provides simple run management commands from admin

Installation

  • Obtain your copy of source code from the git repository: $ git clone https://github.com/vint21h/django-mcadmin.git. Or download the latest release from https://github.com/vint21h/django-mcadmin/tags/.

  • Run $ python ./setup.py install from the repository source tree or unpacked archive. Or use pip: $ pip install django-mcadmin.

Configuration

  • Add "mcadmin" to settings.INSTALLED_APPS:

# settings.py

INSTALLED_APPS += [
    "mcadmin",
]
  • Add "mcadmin" to your URLs definitions:

# urls.py

from django.conf.urls import url


urlpatterns += [
    url(r"^admin/mcadmin/", include("mcadmin.urls")),
]
  • Run $ python ./manage.py migrate in your project folder to apply app migrations.

Settings

MCADMIN_EXAMPLES_PATH

Management commands files templates path. Defaults to: settings.STATIC_ROOT.

MCADMIN_UPLOADS_PATH

Management commands forms with files upload path. Defaults to: settings.MEDIA_ROOT.

MCADMIN_MODULE_NAME

Management commands admin classes search module name. Defaults to: "mcommands".

MCADMIN_USE_PERMISSIONS

Management commands admin classes search module name. Defaults to: False.

Usage

For example, exists management command like this:

# management/commands/something-useless.py

from django.core.management.base import BaseCommand


class Command(BaseCommand):

    help = "Useless management command"

    def add_arguments(self, parser):

        parser.add_argument(
            "--object-id",
            "-o",
            dest="object_id",
            help="Object ID",
            action="store",
            required=True,
            metavar="OBJECT_ID",
            type=int,
        )

    def handle(self, *args, **kwargs):

        self.stdout.write(kwargs.get("object_id"))

Next, you need to create a form for this management command admin which we use in the next piece of code:

# forms.py

from django import forms


class SomethingUselessManagementCommandAdminForm(forms.Form):

    object_id = forms.IntegerField(label="Object ID", required=True)

And finally, write management command admin class and register it:

# mcommands/something-useless.py

from mcadmin.command import ManagementCommandAdmin
from mcadmin.registry import registry

from forms import SomethingUselessManagementCommandAdminForm


class SomethingUselessManagementCommandAdmin(ManagementCommandAdmin):

    command = "something-useless"
    name = "Useless management command"
    form = SomethingUselessManagementCommandAdminForm


# registering management command admin custom classes
registry.register(command=SomethingUselessManagementCommandAdmin)

Also, there are some helpers for building more complex flows, like management commands that can be executed directly or as a background task or management commands that handle uploaded files. For example:

Management command:

# management/commands/distributed-something-useless-with-file.py

from mcadmin.management.commands import TaskCommand


class Command(TaskCommand):

    help = "Useless management command which process file uploaded from a command from and can be executed directly or as background task"

    def add_arguments(self, parser):

        parser.add_argument(
            "--task",
            "-T",
            dest="as_task",
            help="Run command as background task",
            default=False,
            action="store",
            metavar="TASK",
            type=bool,
        )
        parser.add_argument(
            "--object-id",
            "-o",
            dest="object_id",
            help="Object ID",
            action="store",
            required=True,
            metavar="OBJECT_ID",
            type=int,
        )
        parser.add_argument(
            "--data",
            "-D",
            dest="data",
            help="Path to file with data",
            action="store",
            metavar="DATA",
            type=str,
        )

    def _local(self, *args, **kwargs):

        self.stdout.write(kwargs.get("object_id"))
        self.stdout.write(kwargs.get("data"))

    def _as_task(self, *args, **kwargs):

        # There must be code which executed in threads or call celery task or something else asynchronous.
        self.stdout.write(kwargs.get("object_id"))
        self.stdout.write(kwargs.get("data"))

Management command admin form:

# forms.py

from django import forms

from mcadmin.forms.helpers import (
    ManagementCommandAdminTaskForm,
    ManagementCommandAdminFilesForm
)


class DistributedSomethingUselessWithFileManagementCommandAdminForm(
    ManagementCommandAdminTaskForm,
    ManagementCommandAdminFilesForm
):

    data = forms.FileField(label="data, required=True)
    object_id = forms.IntegerField(label="Object ID", required=True)

Management command admin example file:

# mcommands/examples.py

from mcadmin.example import ManagementCommandAdminExampleFile


class DistributedSomethingUselessWithFileManagementCommandAdminExampleFile(
    ManagementCommandAdminExampleFile
):

    description = "Management command with files example file"
    path = "distributed-something-useless-with-file-example.csv"

Or for the file which not served using Django but directly available for download via HTTP:

# mcommands/examples.py

from mcadmin.example import ManagementCommandAdminExampleFile


class DistributedSomethingUselessWithFileManagementCommandAdminExampleFile(
    ManagementCommandAdminExampleFile
):

    description = "Management command with files example file"
    path = "https://www.example.com/distributed-something-useless-with-file-example.csv"
    raw = True

Management command admin:

# mcommands/something-useless.py

from mcadmin.command import ManagementCommandAdmin
from mcadmin.registry import registry

from forms import DistributedSomethingUselessWithFileManagementCommandAdminForm


class DistributedSomethingUselessWithFileManagementCommandAdmin(ManagementCommandAdmin):

    command = "distributed-something-useless-with-file"
    name = "Distributed useless management command with file"
    form = DistributedSomethingUselessWithFileManagementCommandAdminForm
    examples = [DistributedSomethingUselessWithFileManagementCommandAdminExampleFile]


# registering management command admin custom classes
registry.register(command=DistributedSomethingUselessWithFileManagementCommandAdmin)

Licensing

django-mcadmin is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. For complete license text see COPYING file.

Contacts

Project Website: https://github.com/vint21h/django-mcadmin/

Author: Alexei Andrushievich <vint21h@vint21h.pp.ua>

For other authors list see AUTHORS file.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-mcadmin-0.8.3.zip (57.1 kB view details)

Uploaded Source

Built Distribution

django_mcadmin-0.8.3-py3-none-any.whl (45.6 kB view details)

Uploaded Python 3

File details

Details for the file django-mcadmin-0.8.3.zip.

File metadata

  • Download URL: django-mcadmin-0.8.3.zip
  • Upload date:
  • Size: 57.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.8.2

File hashes

Hashes for django-mcadmin-0.8.3.zip
Algorithm Hash digest
SHA256 5e875a3570359740749e881a31525ca3d9566a5beb0c009c53dfb31bc6286e89
MD5 91f22d48f50ec46d13fa6d56182c6f70
BLAKE2b-256 388228dc5a463d5e34a9e6039c72b5d66f57aa21c321c9c25ccd345a41995bc8

See more details on using hashes here.

File details

Details for the file django_mcadmin-0.8.3-py3-none-any.whl.

File metadata

  • Download URL: django_mcadmin-0.8.3-py3-none-any.whl
  • Upload date:
  • Size: 45.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.8.2

File hashes

Hashes for django_mcadmin-0.8.3-py3-none-any.whl
Algorithm Hash digest
SHA256 1e8a8cc2d01c263b0aa4bffd0987c4001919762d75aba5c2b5b3cffc4140c9cd
MD5 a4147d9fad532ac94f70c42b3d45e348
BLAKE2b-256 5385a131f4a453f1c8da179970c0173aed6bd2dbfd9d47f357b690783c6993e0

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page