django-simpletask5 0.1.0__tar.gz → 0.1.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/PKG-INFO +9 -1
  2. {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/README.md +8 -0
  3. {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/apps.py +3 -0
  4. {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/core/publisher.py +2 -1
  5. {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/executors/retry_timeout.py +2 -2
  6. {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/management/commands/django_simpletask_crontab.py +19 -16
  7. {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5.egg-info/PKG-INFO +9 -1
  8. {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/pyproject.toml +1 -1
  9. {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/LICENSE +0 -0
  10. {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/__init__.py +0 -0
  11. {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/admin.py +0 -0
  12. {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/core/__init__.py +0 -0
  13. {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/core/cronjob_registry.py +0 -0
  14. {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/core/defaults.py +0 -0
  15. {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/core/executor_scanner.py +0 -0
  16. {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/core/lock.py +0 -0
  17. {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/core/message_queue.py +0 -0
  18. {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/core/signals.py +0 -0
  19. {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/core/worker_registry.py +0 -0
  20. {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/dashboards.py +0 -0
  21. {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/executors/__init__.py +0 -0
  22. {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/executors/archive.py +0 -0
  23. {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/executors/base.py +0 -0
  24. {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/executors/bash_script.py +0 -0
  25. {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/executors/loader.py +0 -0
  26. {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/executors/ping_pong.py +0 -0
  27. {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/executors/python_script.py +0 -0
  28. {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/executors/simple_request.py +0 -0
  29. {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/executors/status_check.py +0 -0
  30. {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/management/__init__.py +0 -0
  31. {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/management/commands/__init__.py +0 -0
  32. {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/management/commands/django_simpletask_executor.py +0 -0
  33. {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/management/commands/django_simpletask_sync_cronjobs.py +0 -0
  34. {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/migrations/0001_initial.py +0 -0
  35. {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/migrations/__init__.py +0 -0
  36. {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/models.py +0 -0
  37. {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/services/__init__.py +0 -0
  38. {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5/services/archive.py +0 -0
  39. {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5.egg-info/SOURCES.txt +0 -0
  40. {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5.egg-info/dependency_links.txt +0 -0
  41. {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5.egg-info/requires.txt +0 -0
  42. {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/django_simpletask5.egg-info/top_level.txt +0 -0
  43. {django_simpletask5-0.1.0 → django_simpletask5-0.1.2}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: django-simpletask5
3
- Version: 0.1.0
3
+ Version: 0.1.2
4
4
  Summary: Lightweight async task execution framework for Django
5
5
  Author-email: rRR0VrFP <rrr0vrfp@qq.com>
6
6
  Maintainer-email: rRR0VrFP <rrr0vrfp@qq.com>
@@ -246,6 +246,14 @@ Worker 消费消息 → 获取分布式锁 → 加载执行器 → 执行并保
246
246
  - **Worker 注册中心** — 基于 Redis 的 Worker 心跳与状态追踪
247
247
  - **Django Admin 集成** — 完整的后台管理界面与仪表盘
248
248
 
249
+ ### 0.1.2
250
+
251
+ - **修复**: 修复 Transaction-Message 排序竞态条件,使用 `transaction.on_commit` 确保消息在事务提交后才发送到队列
252
+
253
+ ### 0.1.1
254
+
255
+ - **修复**: 修复 `DjangoSimpletask5Config` 缺少 `ready()` 方法导致信号监听未注册的问题
256
+
249
257
  ## 许可证
250
258
 
251
259
  MIT
@@ -209,6 +209,14 @@ Worker 消费消息 → 获取分布式锁 → 加载执行器 → 执行并保
209
209
  - **Worker 注册中心** — 基于 Redis 的 Worker 心跳与状态追踪
210
210
  - **Django Admin 集成** — 完整的后台管理界面与仪表盘
211
211
 
212
+ ### 0.1.2
213
+
214
+ - **修复**: 修复 Transaction-Message 排序竞态条件,使用 `transaction.on_commit` 确保消息在事务提交后才发送到队列
215
+
216
+ ### 0.1.1
217
+
218
+ - **修复**: 修复 `DjangoSimpletask5Config` 缺少 `ready()` 方法导致信号监听未注册的问题
219
+
212
220
  ## 许可证
213
221
 
214
222
  MIT
@@ -6,3 +6,6 @@ class DjangoSimpletask5Config(AppConfig):
6
6
  default_auto_field = 'django.db.models.BigAutoField'
7
7
  name = 'django_simpletask5'
8
8
  verbose_name = _('Simple Task Manager')
9
+
10
+ def ready(self):
11
+ import django_simpletask5.core.signals # noqa
@@ -1,6 +1,7 @@
1
1
  import json
2
2
  import logging
3
3
 
4
+ from django.db import transaction
4
5
 
5
6
  from django_simpletask5.models import TaskExecution
6
7
  from django_simpletask5.core.defaults import DJANGO_SIMPLETASK_DEFAULT_QUEUE
@@ -31,7 +32,7 @@ def create_and_publish(task, trigger_event, extra_context=None):
31
32
  )
32
33
  execution.save()
33
34
 
34
- _publish_message(execution, routing_key=queue_name)
35
+ transaction.on_commit(lambda: _publish_message(execution, routing_key=queue_name))
35
36
 
36
37
  return execution
37
38
 
@@ -1,7 +1,7 @@
1
1
  import json
2
2
  import logging
3
3
 
4
- from django.db import models
4
+ from django.db import models, transaction
5
5
 
6
6
  from django_simpletask5.models import TaskExecution
7
7
  from django_simpletask5.executors.base import BaseExecutor
@@ -23,7 +23,7 @@ class RetryTimeoutExecutor(BaseExecutor):
23
23
  exec_record.save(update_fields=['status', 'retry_count', 'updated_at'])
24
24
 
25
25
  from django_simpletask5.core.publisher import _publish_message
26
- _publish_message(exec_record)
26
+ transaction.on_commit(lambda: _publish_message(exec_record))
27
27
  count += 1
28
28
 
29
29
  return json.dumps({
@@ -5,7 +5,7 @@ import time
5
5
  from datetime import timedelta
6
6
 
7
7
  from django.core.management.base import BaseCommand
8
- from django.db import close_old_connections
8
+ from django.db import close_old_connections, transaction
9
9
  from django.utils import timezone
10
10
 
11
11
  from django_simpletask5.models import CronJob, TaskExecution
@@ -148,21 +148,24 @@ class Command(BaseCommand):
148
148
  )
149
149
  execution.save()
150
150
 
151
- from django_simpletask5.core.message_queue import get_message_queue
152
- mq = get_message_queue()
153
- try:
154
- mq.publish(
155
- routing_key=DJANGO_SIMPLETASK_DEFAULT_QUEUE,
156
- message={
157
- 'execution_id': str(execution.execution_id),
158
- 'task_id': None,
159
- 'trigger_event': 'cron',
160
- 'executor_class': cronjob.executor_class,
161
- },
162
- )
163
- logger.info('Triggered cronjob %s -> execution %s', cronjob.name, execution.execution_id)
164
- except Exception:
165
- logger.exception('Failed to publish cronjob message for %s', cronjob.name)
151
+ def _publish_cronjob():
152
+ from django_simpletask5.core.message_queue import get_message_queue
153
+ mq = get_message_queue()
154
+ try:
155
+ mq.publish(
156
+ routing_key=DJANGO_SIMPLETASK_DEFAULT_QUEUE,
157
+ message={
158
+ 'execution_id': str(execution.execution_id),
159
+ 'task_id': None,
160
+ 'trigger_event': 'cron',
161
+ 'executor_class': cronjob.executor_class,
162
+ },
163
+ )
164
+ logger.info('Triggered cronjob %s -> execution %s', cronjob.name, execution.execution_id)
165
+ except Exception:
166
+ logger.exception('Failed to publish cronjob message for %s', cronjob.name)
167
+
168
+ transaction.on_commit(_publish_cronjob)
166
169
 
167
170
  from django_simpletask5.core.cronjob_registry import _compute_next_run_time
168
171
  cronjob.next_run_time = _compute_next_run_time(cronjob.cron_expression, base=timezone.now())
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: django-simpletask5
3
- Version: 0.1.0
3
+ Version: 0.1.2
4
4
  Summary: Lightweight async task execution framework for Django
5
5
  Author-email: rRR0VrFP <rrr0vrfp@qq.com>
6
6
  Maintainer-email: rRR0VrFP <rrr0vrfp@qq.com>
@@ -246,6 +246,14 @@ Worker 消费消息 → 获取分布式锁 → 加载执行器 → 执行并保
246
246
  - **Worker 注册中心** — 基于 Redis 的 Worker 心跳与状态追踪
247
247
  - **Django Admin 集成** — 完整的后台管理界面与仪表盘
248
248
 
249
+ ### 0.1.2
250
+
251
+ - **修复**: 修复 Transaction-Message 排序竞态条件,使用 `transaction.on_commit` 确保消息在事务提交后才发送到队列
252
+
253
+ ### 0.1.1
254
+
255
+ - **修复**: 修复 `DjangoSimpletask5Config` 缺少 `ready()` 方法导致信号监听未注册的问题
256
+
249
257
  ## 许可证
250
258
 
251
259
  MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "django-simpletask5"
7
- version = "0.1.0"
7
+ version = "0.1.2"
8
8
  description = "Lightweight async task execution framework for Django"
9
9
  readme = "README.md"
10
10
  license = {text = "MIT"}