No project description provided
Project description
django-commands
Table of Contents
Installation
- pip install
pip install django-commands2
- add django_commands to INSTALLED_APPS, and logging
INSTALLED_APPS = [
...
'django_commands',
]
LOGGING = {
"loggers": {
"django_commands": {
...your custom level, handles config...
}
}
}
DJANGO_COMMANDS_ALLOW_REMOTE_CALL = [
"slow_command", # add slow_command if you want to run unittest
<your command>
]
- add url config like if you want to enable call command by request:
path('api/django-commands/', include("django_commands.urls")),
Call Command from url
import requests
requests.post("/api/django-commands/call-command", {"command": "slow_command"})
Usage
AutoLogCommands
any exception will be logged in the autologcommand
<yourapp/management/commands/command_name.py>
from django_commands import AutoLogCommand
class Command(AutoLogCommand):
def handle(self):
<write your code, any exception will be logged>
MultiTimesCommand
MultiTimesCommand will run multi times according to INTERVAL
and MAX_TIMES
. You can easily use this command to realize a crontab job every 1 second.
class Command(MultiTimesCommand):
INTERVAL = 1 # default 1
MAX_TIMES = 60 # default 60
def handle(self):
<this handle function will run 60 times>
This command does not consider the running time of your code. It will just run 60 times, and during each execute, wait 1 second
DurationCommand(AutoLogCommand):
DurationCommand will run your commands over and over again until the running time exceed the configuration
import datetime
class Commmand(DurationCommand):
INTERVAL = 1
DURATION = datetime.timedelta(minutes=1)
def handle(self, *args, **kwargs):
<your code>
UniqueCommand
UniqueCommand can assert that only one command instance is running
How it works? Every time the command executes:
- it will create a django_commands.models.CommandLog instance
- it will check if there is another Command Instance pending with the same UNIQUE_NAME
import time
from django_commands.commands import UniqueCommand
class Command(UniqueCommand):
def handle(self):
print("I'm running. In the next 5 seconds, you cannot execute this command. It will exist directly")
time.sleep(5)
print("I'm running")
raise Exception("even error occurs, this task will be set finished")
License
django-commands
is distributed under the terms of the ONLY USE NO PRIVATE CHANGE LICENSE license.
Anyone can use pip install django-commands
to use this project by any meaning as long as you keep the source code unchanged.
You are not allowed to change the source code without publishing your change.
Here publishing means you:
fork this project from github and keep your change available to public on the github
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for django_commands2-0.16.3-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7f107ff156bb2ae2466609c5f4432435540fa7a25cfb260bb8512cb7d868201b |
|
MD5 | d7501912a654757381e7f3f4e1870857 |
|
BLAKE2b-256 | 6edd7a66a8dbb81b8f52830f2953bf2e5f4be844e6f8ba7ff045f435ec6c2bb2 |