A simple asynchronous task manager based on the Django framework. All business logic written in a custom task data model. Tasks are triggered by a Redis queue.
Project description
django-simpletask2
A simple asynchronous task manager based on the Django framework. All business logic written in a custom task data model. Tasks are triggered by a Redis queue.
Install
pip install django-simpletask2
Usage
pro/settings.py
INSTALLED_APPS = [
...
'django_simpletask2',
...
]
# requires redis cache backend, see django-redis for detail
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://:xxx@xxx:6379/0?decode_responses=True",
}
}
DJANGO_SIMPLETASK2_TASK_PULL_TIMEOUT = 5 # optional, default to 5
DJANGO_SIMPLETASK2_REDIS_NAME = "default" # optional, default to "default"
DJANGO_SIMPLETASK2_ACLKEY = "Bqud27SzhUymXDuBfvYNHJWQm0i4FdUB" # optional, default to settings.SECRET_KEY
pro/urls.py
from django.urls import path
from django.urls import include
urlpatterns = [
...
path('django-simpletask2/', include("django_simpletask2.urls")),
....
]
app/models.py
import base64
from django.db import models
from django_simpletask2.models import SimpleTask
class HelloTask(SimpleTask):
name = models.CharField(max_length=64)
def do_task_main(self, payload):
return "Hello, {}. Nice to meet you!".format(self.name)
class WorldTask(SimpleTask):
url = models.CharField(max_length=128)
content = models.TextField(null=True, blank=True)
is_multi_steps = True
final_step = 2
def do_task_main_step1(self, payload=None):
return {
"proxy": {
"method": "GET",
"url": self.url,
}
}
def do_task_main_step2(self, payload=None):
payload = payload or {}
base64content = payload.get("proxied_content", None)
if base64content:
try:
content = base64.decodebytes(base64content.encode()).decode("utf-8")
success = True
except UnicodeDecodeError:
try:
content = base64.decodebytes(base64content.encode()).decode("gb18030")
success = True
except UnicodeDecodeError:
content = "failed to decode proxied_content: {0}".format(base64content)
success = False
else:
content = payload.get("proxied_error", None)
success = False
self.content = content
self.save()
if success:
return True
else:
raise RuntimeError("WorldTask.do_task_main_step2 failed....")
etc/django-simpletask2-server-config.yml
redis: "redis://:xxx@xxx:6379/0?decode_responses=True"
channels: default
server: https://localhost:80000/django-simpletask2/
aclkey: xxxx
task-pull-engine: redis
threads: 1
idle-sleep: 5
error-sleep: 5
auto-reset-task-interval: 60
do-auto-reset-task: true
Start django-simpletask2-server to trigger tasks
django-simpletask2-server --config etc/django-simpletask2-server-config.yml start
Error Codes
Code | Message |
---|---|
2910000 | system error. |
2910001 | please send request parameters in PAYLOAD format. |
2910002 | aclkey field is required. |
2910003 | aclkey is wrong and access denied. |
2910004 | got an already deleted task {task_info}, you may ignore this and continue. |
2910005 | bad formatted task_info: {task_info}. |
2910006 | Simple task model {task_class_name} not exists. |
2910007 | task handler is not implemented, task={app_label}.{model_name}, handler={}. |
2910008 | task status is not READY but {status}, you can not start it. |
2910009 | calling {handler_name} failed with error message: {error}. |
2910010 | save task done status failed with error message: {error}. |
2910011 | task_info field is required for a multi-steps task. payload={payload}. |
2910012 | got NO task in channels: {channels}. |
2910013 | task {task_info} locked by another worker. |
2910014 | task {app_label}.{model_name}:{task_id} failed to save status with error message: {error}. |
2910015 | task_info field is required. |
2910016 | get task instance {task_info} failed with error: {error}. |
Releases
v0.0.1
- First release.
v0.0.4
- Fixed the problem that the task duplicately executed for the task queue is too long.
v0.0.5
- Fix do_task problem in actions.
- Fix ugettext_lazy problem.
- Fix problems in django 4.x.
v0.0.6
- Doc update.
v0.0.7
- Fix error message formatting problem.
v0.0.8
- Push to mq after instance-create-transaction committed.
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-simpletask2-0.0.8.tar.gz
(13.8 kB
view details)
Built Distribution
File details
Details for the file django-simpletask2-0.0.8.tar.gz
.
File metadata
- Download URL: django-simpletask2-0.0.8.tar.gz
- Upload date:
- Size: 13.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.12.0rc1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 71d77e094b7aa09e88bd1fe44affda4fc1cc89622c4cb43e58e49bd88b9789d2 |
|
MD5 | 009c69655fc2b562289265cf9b04f554 |
|
BLAKE2b-256 | 7cf6176be047ad696c7ce7f1b4fc356757b435e2e176af42ee7d99a733be5aec |
File details
Details for the file django_simpletask2-0.0.8-py3-none-any.whl
.
File metadata
- Download URL: django_simpletask2-0.0.8-py3-none-any.whl
- Upload date:
- Size: 15.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.12.0rc1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6fa943f5dc1d313164dc46dd2b14000f9f7184defe4b2d821bad17bcedece022 |
|
MD5 | a564ced6126b2ecbca161853dd99dd91 |
|
BLAKE2b-256 | 4eb6421bf1464106f715b8216413b8ba84cbfa979633ab52afa1d5f37f6d68fa |