django-simpletask5 0.1.3__tar.gz → 0.1.4__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 (50) hide show
  1. {django_simpletask5-0.1.3 → django_simpletask5-0.1.4}/PKG-INFO +90 -1
  2. {django_simpletask5-0.1.3 → django_simpletask5-0.1.4}/README.md +87 -0
  3. {django_simpletask5-0.1.3 → django_simpletask5-0.1.4}/django_simpletask5/core/defaults.py +0 -2
  4. django_simpletask5-0.1.4/django_simpletask5/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
  5. django_simpletask5-0.1.4/django_simpletask5/locale/zh_Hans/LC_MESSAGES/django.po +418 -0
  6. {django_simpletask5-0.1.3 → django_simpletask5-0.1.4}/django_simpletask5.egg-info/PKG-INFO +90 -1
  7. {django_simpletask5-0.1.3 → django_simpletask5-0.1.4}/django_simpletask5.egg-info/SOURCES.txt +2 -0
  8. {django_simpletask5-0.1.3 → django_simpletask5-0.1.4}/django_simpletask5.egg-info/requires.txt +2 -0
  9. {django_simpletask5-0.1.3 → django_simpletask5-0.1.4}/pyproject.toml +6 -1
  10. {django_simpletask5-0.1.3 → django_simpletask5-0.1.4}/LICENSE +0 -0
  11. {django_simpletask5-0.1.3 → django_simpletask5-0.1.4}/django_simpletask5/__init__.py +0 -0
  12. {django_simpletask5-0.1.3 → django_simpletask5-0.1.4}/django_simpletask5/admin.py +0 -0
  13. {django_simpletask5-0.1.3 → django_simpletask5-0.1.4}/django_simpletask5/apps.py +0 -0
  14. {django_simpletask5-0.1.3 → django_simpletask5-0.1.4}/django_simpletask5/core/__init__.py +0 -0
  15. {django_simpletask5-0.1.3 → django_simpletask5-0.1.4}/django_simpletask5/core/cronjob_registry.py +0 -0
  16. {django_simpletask5-0.1.3 → django_simpletask5-0.1.4}/django_simpletask5/core/executor_scanner.py +0 -0
  17. {django_simpletask5-0.1.3 → django_simpletask5-0.1.4}/django_simpletask5/core/lock.py +0 -0
  18. {django_simpletask5-0.1.3 → django_simpletask5-0.1.4}/django_simpletask5/core/message_queue.py +0 -0
  19. {django_simpletask5-0.1.3 → django_simpletask5-0.1.4}/django_simpletask5/core/publisher.py +0 -0
  20. {django_simpletask5-0.1.3 → django_simpletask5-0.1.4}/django_simpletask5/core/signals.py +0 -0
  21. {django_simpletask5-0.1.3 → django_simpletask5-0.1.4}/django_simpletask5/core/worker_registry.py +0 -0
  22. {django_simpletask5-0.1.3 → django_simpletask5-0.1.4}/django_simpletask5/dashboards.py +0 -0
  23. {django_simpletask5-0.1.3 → django_simpletask5-0.1.4}/django_simpletask5/executors/__init__.py +0 -0
  24. {django_simpletask5-0.1.3 → django_simpletask5-0.1.4}/django_simpletask5/executors/archive.py +0 -0
  25. {django_simpletask5-0.1.3 → django_simpletask5-0.1.4}/django_simpletask5/executors/base.py +0 -0
  26. {django_simpletask5-0.1.3 → django_simpletask5-0.1.4}/django_simpletask5/executors/bash_script.py +0 -0
  27. {django_simpletask5-0.1.3 → django_simpletask5-0.1.4}/django_simpletask5/executors/loader.py +0 -0
  28. {django_simpletask5-0.1.3 → django_simpletask5-0.1.4}/django_simpletask5/executors/ping_pong.py +0 -0
  29. {django_simpletask5-0.1.3 → django_simpletask5-0.1.4}/django_simpletask5/executors/python_script.py +0 -0
  30. {django_simpletask5-0.1.3 → django_simpletask5-0.1.4}/django_simpletask5/executors/retry_timeout.py +0 -0
  31. {django_simpletask5-0.1.3 → django_simpletask5-0.1.4}/django_simpletask5/executors/simple_request.py +0 -0
  32. {django_simpletask5-0.1.3 → django_simpletask5-0.1.4}/django_simpletask5/executors/status_check.py +0 -0
  33. {django_simpletask5-0.1.3 → django_simpletask5-0.1.4}/django_simpletask5/management/__init__.py +0 -0
  34. {django_simpletask5-0.1.3 → django_simpletask5-0.1.4}/django_simpletask5/management/commands/__init__.py +0 -0
  35. {django_simpletask5-0.1.3 → django_simpletask5-0.1.4}/django_simpletask5/management/commands/django_simpletask_archive.py +0 -0
  36. {django_simpletask5-0.1.3 → django_simpletask5-0.1.4}/django_simpletask5/management/commands/django_simpletask_crontab.py +0 -0
  37. {django_simpletask5-0.1.3 → django_simpletask5-0.1.4}/django_simpletask5/management/commands/django_simpletask_executor.py +0 -0
  38. {django_simpletask5-0.1.3 → django_simpletask5-0.1.4}/django_simpletask5/management/commands/django_simpletask_sync_cronjobs.py +0 -0
  39. {django_simpletask5-0.1.3 → django_simpletask5-0.1.4}/django_simpletask5/migrations/0001_initial.py +0 -0
  40. {django_simpletask5-0.1.3 → django_simpletask5-0.1.4}/django_simpletask5/migrations/0002_taskexecution_done_tasks_count_and_more.py +0 -0
  41. {django_simpletask5-0.1.3 → django_simpletask5-0.1.4}/django_simpletask5/migrations/0003_alter_cronjob_options_remove_cronjob_name_and_more.py +0 -0
  42. {django_simpletask5-0.1.3 → django_simpletask5-0.1.4}/django_simpletask5/migrations/0004_alter_cronjob_is_modified_by_user.py +0 -0
  43. {django_simpletask5-0.1.3 → django_simpletask5-0.1.4}/django_simpletask5/migrations/0005_alter_cronjob_is_modified_by_user_help.py +0 -0
  44. {django_simpletask5-0.1.3 → django_simpletask5-0.1.4}/django_simpletask5/migrations/__init__.py +0 -0
  45. {django_simpletask5-0.1.3 → django_simpletask5-0.1.4}/django_simpletask5/models.py +0 -0
  46. {django_simpletask5-0.1.3 → django_simpletask5-0.1.4}/django_simpletask5/services/__init__.py +0 -0
  47. {django_simpletask5-0.1.3 → django_simpletask5-0.1.4}/django_simpletask5/services/archive.py +0 -0
  48. {django_simpletask5-0.1.3 → django_simpletask5-0.1.4}/django_simpletask5.egg-info/dependency_links.txt +0 -0
  49. {django_simpletask5-0.1.3 → django_simpletask5-0.1.4}/django_simpletask5.egg-info/top_level.txt +0 -0
  50. {django_simpletask5-0.1.3 → django_simpletask5-0.1.4}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: django-simpletask5
3
- Version: 0.1.3
3
+ Version: 0.1.4
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>
@@ -27,6 +27,8 @@ Requires-Dist: globallock>=0.1.4
27
27
  Requires-Dist: django-safe-fields>=0.2.3
28
28
  Requires-Dist: django-app-requires>=0.3.6
29
29
  Requires-Dist: django-admin-dashboards>=0.1.1
30
+ Requires-Dist: django-checkbox-normalize>=0.2.2
31
+ Requires-Dist: django-tabbed-changeform-admin>=0.1.9
30
32
  Requires-Dist: cryptography>=48.0.0
31
33
  Requires-Dist: croniter>=6.2.2
32
34
  Requires-Dist: requests>=2.34.2
@@ -104,6 +106,87 @@ DJANGO_SIMPLETASK_LOCK_CONFIG = {
104
106
  python manage.py migrate django_simpletask5
105
107
  ```
106
108
 
109
+ ## 配置说明
110
+
111
+ 所有配置项均为可选,设有合理的默认值。以下按功能分类说明。
112
+
113
+ ### 消息队列(MQ)
114
+
115
+ 默认使用内存队列(`memory://`),适合开发调试。生产环境建议切换为 RabbitMQ 或 Redis。
116
+
117
+ ```python
118
+ # 方式一:直接指定完整 Broker URL(优先级最高)
119
+ DJANGO_SIMPLETASK_BROKER_URL = 'amqp://guest:guest@127.0.0.1:5672//'
120
+
121
+ # 方式二:分别指定类型和连接参数
122
+ DJANGO_SIMPLETASK_MESSAGE_QUEUE_TYPE = 'rabbitmq' # 'memory' | 'rabbitmq' | 'redis'
123
+ DJANGO_SIMPLETASK_RABBITMQ_HOST = '127.0.0.1'
124
+ DJANGO_SIMPLETASK_RABBITMQ_PORT = 5672
125
+ DJANGO_SIMPLETASK_RABBITMQ_USER = 'guest'
126
+ DJANGO_SIMPLETASK_RABBITMQ_PASSWORD = 'guest'
127
+
128
+ # Redis 作为 MQ 时:
129
+ # DJANGO_SIMPLETASK_MESSAGE_QUEUE_TYPE = 'redis'
130
+ # DJANGO_SIMPLETASK_REDIS_MQ_HOST = '127.0.0.1'
131
+ # DJANGO_SIMPLETASK_REDIS_MQ_PORT = 6379
132
+ # DJANGO_SIMPLETASK_REDIS_MQ_DB = 0
133
+ ```
134
+
135
+ ### 分布式锁
136
+
137
+ ```python
138
+ DJANGO_SIMPLETASK_LOCK_CONFIG = {
139
+ 'global_lock_engine_class': 'globallock.redis_global_lock.RedisGlobalLock',
140
+ 'global_lock_engine_options': {
141
+ 'host': '127.0.0.1',
142
+ 'port': 6379,
143
+ 'db': 0,
144
+ },
145
+ }
146
+ DJANGO_SIMPLETASK_LOCK_TIMEOUT = 600 # 锁超时时间(秒)
147
+ ```
148
+
149
+ ### 队列路由
150
+
151
+ ```python
152
+ DJANGO_SIMPLETASK_DEFAULT_QUEUE = 'django_simpletask5.queue.default' # 默认队列
153
+ DJANGO_SIMPLETASK_HIGH_PRIORITY_QUEUE = 'django_simpletask5.queue.high_priority' # 高优先级队列
154
+ ```
155
+
156
+ ### 执行与重试
157
+
158
+ ```python
159
+ DJANGO_SIMPLETASK_DEFAULT_MAX_RETRIES = 3 # 默认最大重试次数
160
+ DJANGO_SIMPLETASK_DEFAULT_TIMEOUT_SECONDS = 600 # 默认执行超时时间(秒)
161
+ ```
162
+
163
+ ### 归档
164
+
165
+ ```python
166
+ DJANGO_SIMPLETASK_ARCHIVE_PATH = 'django_simpletask5_archives' # 归档文件存储子目录
167
+ DJANGO_SIMPLETASK_ARCHIVE_SALT = 'django-simpletask5-archive' # 归档加密盐值(结合 SECRET_KEY 派生 AES 密钥)
168
+ DJANGO_SIMPLETASK_ARCHIVE_RETENTION_DAYS = 7 # 归档保留天数
169
+ ```
170
+
171
+ ### Cron
172
+
173
+ ```python
174
+ DJANGO_SIMPLETASK_CRONJOB_AUTO_SYNC = True # 是否自动将代码注册的 Cron 同步到数据库
175
+ ```
176
+
177
+ ### 安全
178
+
179
+ ```python
180
+ # 脚本执行白名单(空列表表示不限制)
181
+ DJANGO_SIMPLETASK_SCRIPT_WHITELIST = ['/path/to/allowed/scripts']
182
+
183
+ # 自定义字段加密(默认使用 django-safe-fields 的默认加密)
184
+ DJANGO_SIMPLETASK_FIELD_CIPHER_CLASS = None # 自定义加密器类
185
+ DJANGO_SIMPLETASK_RESULT_PASSWORD = None # 执行结果加密密码
186
+ DJANGO_SIMPLETASK_ERROR_MSG_PASSWORD = None # 错误信息加密密码
187
+ DJANGO_SIMPLETASK_CONTEXT_PASSWORD = None # 上下文数据加密密码
188
+ ```
189
+
107
190
  ## 快速开始
108
191
 
109
192
  ### 1. 定义任务模型
@@ -232,6 +315,12 @@ Worker 消费消息 → 获取分布式锁 → 加载执行器 → 执行并保
232
315
 
233
316
  ## Releases
234
317
 
318
+ ### 0.1.4
319
+
320
+ - **修复打包** — `pyproject.toml` 添加 `package-data` 配置,打包时包含 locale po/mo 文件,修复 i18n 翻译不生效的问题
321
+ - **补充依赖** — `requirements.txt` 和 `pyproject.toml` 添加缺失的 `django-checkbox-normalize`、`django-tabbed-changeform-admin` 依赖
322
+ - **完善文档** — README 新增完整配置说明章节,涵盖消息队列(MQ)、分布式锁、队列路由、归档、Cron、安全等全部配置项
323
+
235
324
  ### 0.1.3
236
325
 
237
326
  - **Admin 界面大升级** — 集成 Tabbed ChangeForm 分页签展示字段,CronJob 后台支持直接执行/启用/禁用操作;TaskExecution 列表优化,execution_id 显示前8字符并支持点击复制,重试次数合并显示,全局字段中文翻译
@@ -67,6 +67,87 @@ DJANGO_SIMPLETASK_LOCK_CONFIG = {
67
67
  python manage.py migrate django_simpletask5
68
68
  ```
69
69
 
70
+ ## 配置说明
71
+
72
+ 所有配置项均为可选,设有合理的默认值。以下按功能分类说明。
73
+
74
+ ### 消息队列(MQ)
75
+
76
+ 默认使用内存队列(`memory://`),适合开发调试。生产环境建议切换为 RabbitMQ 或 Redis。
77
+
78
+ ```python
79
+ # 方式一:直接指定完整 Broker URL(优先级最高)
80
+ DJANGO_SIMPLETASK_BROKER_URL = 'amqp://guest:guest@127.0.0.1:5672//'
81
+
82
+ # 方式二:分别指定类型和连接参数
83
+ DJANGO_SIMPLETASK_MESSAGE_QUEUE_TYPE = 'rabbitmq' # 'memory' | 'rabbitmq' | 'redis'
84
+ DJANGO_SIMPLETASK_RABBITMQ_HOST = '127.0.0.1'
85
+ DJANGO_SIMPLETASK_RABBITMQ_PORT = 5672
86
+ DJANGO_SIMPLETASK_RABBITMQ_USER = 'guest'
87
+ DJANGO_SIMPLETASK_RABBITMQ_PASSWORD = 'guest'
88
+
89
+ # Redis 作为 MQ 时:
90
+ # DJANGO_SIMPLETASK_MESSAGE_QUEUE_TYPE = 'redis'
91
+ # DJANGO_SIMPLETASK_REDIS_MQ_HOST = '127.0.0.1'
92
+ # DJANGO_SIMPLETASK_REDIS_MQ_PORT = 6379
93
+ # DJANGO_SIMPLETASK_REDIS_MQ_DB = 0
94
+ ```
95
+
96
+ ### 分布式锁
97
+
98
+ ```python
99
+ DJANGO_SIMPLETASK_LOCK_CONFIG = {
100
+ 'global_lock_engine_class': 'globallock.redis_global_lock.RedisGlobalLock',
101
+ 'global_lock_engine_options': {
102
+ 'host': '127.0.0.1',
103
+ 'port': 6379,
104
+ 'db': 0,
105
+ },
106
+ }
107
+ DJANGO_SIMPLETASK_LOCK_TIMEOUT = 600 # 锁超时时间(秒)
108
+ ```
109
+
110
+ ### 队列路由
111
+
112
+ ```python
113
+ DJANGO_SIMPLETASK_DEFAULT_QUEUE = 'django_simpletask5.queue.default' # 默认队列
114
+ DJANGO_SIMPLETASK_HIGH_PRIORITY_QUEUE = 'django_simpletask5.queue.high_priority' # 高优先级队列
115
+ ```
116
+
117
+ ### 执行与重试
118
+
119
+ ```python
120
+ DJANGO_SIMPLETASK_DEFAULT_MAX_RETRIES = 3 # 默认最大重试次数
121
+ DJANGO_SIMPLETASK_DEFAULT_TIMEOUT_SECONDS = 600 # 默认执行超时时间(秒)
122
+ ```
123
+
124
+ ### 归档
125
+
126
+ ```python
127
+ DJANGO_SIMPLETASK_ARCHIVE_PATH = 'django_simpletask5_archives' # 归档文件存储子目录
128
+ DJANGO_SIMPLETASK_ARCHIVE_SALT = 'django-simpletask5-archive' # 归档加密盐值(结合 SECRET_KEY 派生 AES 密钥)
129
+ DJANGO_SIMPLETASK_ARCHIVE_RETENTION_DAYS = 7 # 归档保留天数
130
+ ```
131
+
132
+ ### Cron
133
+
134
+ ```python
135
+ DJANGO_SIMPLETASK_CRONJOB_AUTO_SYNC = True # 是否自动将代码注册的 Cron 同步到数据库
136
+ ```
137
+
138
+ ### 安全
139
+
140
+ ```python
141
+ # 脚本执行白名单(空列表表示不限制)
142
+ DJANGO_SIMPLETASK_SCRIPT_WHITELIST = ['/path/to/allowed/scripts']
143
+
144
+ # 自定义字段加密(默认使用 django-safe-fields 的默认加密)
145
+ DJANGO_SIMPLETASK_FIELD_CIPHER_CLASS = None # 自定义加密器类
146
+ DJANGO_SIMPLETASK_RESULT_PASSWORD = None # 执行结果加密密码
147
+ DJANGO_SIMPLETASK_ERROR_MSG_PASSWORD = None # 错误信息加密密码
148
+ DJANGO_SIMPLETASK_CONTEXT_PASSWORD = None # 上下文数据加密密码
149
+ ```
150
+
70
151
  ## 快速开始
71
152
 
72
153
  ### 1. 定义任务模型
@@ -195,6 +276,12 @@ Worker 消费消息 → 获取分布式锁 → 加载执行器 → 执行并保
195
276
 
196
277
  ## Releases
197
278
 
279
+ ### 0.1.4
280
+
281
+ - **修复打包** — `pyproject.toml` 添加 `package-data` 配置,打包时包含 locale po/mo 文件,修复 i18n 翻译不生效的问题
282
+ - **补充依赖** — `requirements.txt` 和 `pyproject.toml` 添加缺失的 `django-checkbox-normalize`、`django-tabbed-changeform-admin` 依赖
283
+ - **完善文档** — README 新增完整配置说明章节,涵盖消息队列(MQ)、分布式锁、队列路由、归档、Cron、安全等全部配置项
284
+
198
285
  ### 0.1.3
199
286
 
200
287
  - **Admin 界面大升级** — 集成 Tabbed ChangeForm 分页签展示字段,CronJob 后台支持直接执行/启用/禁用操作;TaskExecution 列表优化,execution_id 显示前8字符并支持点击复制,重试次数合并显示,全局字段中文翻译
@@ -5,8 +5,6 @@ DJANGO_SIMPLETASK_LOCK_TIMEOUT = getattr(settings, 'DJANGO_SIMPLETASK_LOCK_TIMEO
5
5
  DJANGO_SIMPLETASK_DEFAULT_MAX_RETRIES = getattr(settings, 'DJANGO_SIMPLETASK_DEFAULT_MAX_RETRIES', 3)
6
6
  DJANGO_SIMPLETASK_DEFAULT_TIMEOUT_SECONDS = getattr(settings, 'DJANGO_SIMPLETASK_DEFAULT_TIMEOUT_SECONDS', 600)
7
7
 
8
- DJANGO_SIMPLETASK_UPDATE_FILTER_POLICY = getattr(settings, 'DJANGO_SIMPLETASK_UPDATE_FILTER_POLICY', 'whitelist')
9
-
10
8
  DJANGO_SIMPLETASK_ARCHIVE_PATH = getattr(settings, 'DJANGO_SIMPLETASK_ARCHIVE_PATH', 'django_simpletask5_archives')
11
9
  DJANGO_SIMPLETASK_ARCHIVE_SALT = getattr(settings, 'DJANGO_SIMPLETASK_ARCHIVE_SALT', 'django-simpletask5-archive')
12
10
  DJANGO_SIMPLETASK_ARCHIVE_RETENTION_DAYS = getattr(settings, 'DJANGO_SIMPLETASK_ARCHIVE_RETENTION_DAYS', 7)
@@ -0,0 +1,418 @@
1
+ # Django SimpleTask5 zh_Hans translation.
2
+ # Copyright (C) 2026 THE PACKAGE'S COPYRIGHT HOLDER
3
+ # This file is distributed under the same license as the PACKAGE package.
4
+ # FIRST AUTHOR <EMAIL@ADDRESS>, 2026.
5
+ #
6
+ msgid ""
7
+ msgstr ""
8
+ "Project-Id-Version: django-simpletask5\n"
9
+ "Report-Msgid-Bugs-To: \n"
10
+ "POT-Creation-Date: 2026-06-10 09:15+0800\n"
11
+ "PO-Revision-Date: 2026-05-31 00:45+0800\n"
12
+ "Last-Translator: \n"
13
+ "Language-Team: \n"
14
+ "Language: zh_Hans\n"
15
+ "MIME-Version: 1.0\n"
16
+ "Content-Type: text/plain; charset=UTF-8\n"
17
+ "Content-Transfer-Encoding: 8bit\n"
18
+ "Plural-Forms: nplurals=1; plural=0;\n"
19
+
20
+ #: django_simpletask5/admin.py:35 django_simpletask5/models.py:209
21
+ #, fuzzy
22
+ #| msgid "ID"
23
+ msgid "UID"
24
+ msgstr "唯一码"
25
+
26
+ #: django_simpletask5/admin.py:40 django_simpletask5/models.py:210
27
+ msgid "Name"
28
+ msgstr "名称"
29
+
30
+ #: django_simpletask5/admin.py:45 django_simpletask5/models.py:114
31
+ #: django_simpletask5/models.py:212
32
+ msgid "Executor class"
33
+ msgstr "执行器类"
34
+
35
+ #: django_simpletask5/admin.py:49 django_simpletask5/models.py:128
36
+ #: django_simpletask5/models.py:215
37
+ msgid "Context"
38
+ msgstr "上下文"
39
+
40
+ #: django_simpletask5/admin.py:57
41
+ msgid ""
42
+ "Supports JSON or YAML format. YAML is more concise and compatible with JSON "
43
+ "standard format."
44
+ msgstr "支持 JSON 或 YAML 格式。YAML 更简洁,且兼容 JSON 标准格式。"
45
+
46
+ #: django_simpletask5/admin.py:95
47
+ msgid "Invalid parameter format. Please use JSON or YAML format."
48
+ msgstr "参数格式无效,请使用 JSON 或 YAML 格式。"
49
+
50
+ #: django_simpletask5/admin.py:126 django_simpletask5/models.py:110
51
+ msgid "Execution ID"
52
+ msgstr "执行流水号"
53
+
54
+ #: django_simpletask5/admin.py:131
55
+ msgid "Copied!"
56
+ msgstr "已复制!"
57
+
58
+ #: django_simpletask5/admin.py:179 django_simpletask5/admin.py:370
59
+ #: django_simpletask5/admin.py:389
60
+ msgid "Basic Info"
61
+ msgstr "基本信息"
62
+
63
+ #: django_simpletask5/admin.py:180
64
+ msgid "Execution Data"
65
+ msgstr "执行数据"
66
+
67
+ #: django_simpletask5/admin.py:181
68
+ msgid "Retry & Timeout"
69
+ msgstr "重试与超时"
70
+
71
+ #: django_simpletask5/admin.py:184 django_simpletask5/dashboards.py:144
72
+ #: django_simpletask5/models.py:106
73
+ msgid "Retry"
74
+ msgstr "重试"
75
+
76
+ #: django_simpletask5/admin.py:217
77
+ msgid "Basic Config"
78
+ msgstr "基本配置"
79
+
80
+ #: django_simpletask5/admin.py:218
81
+ msgid "Advanced Settings"
82
+ msgstr "高级设置"
83
+
84
+ #: django_simpletask5/admin.py:262
85
+ msgid "操作"
86
+ msgstr ""
87
+
88
+ #: django_simpletask5/admin.py:318
89
+ msgid "Reset from code definitions"
90
+ msgstr "从代码重置规则"
91
+
92
+ #: django_simpletask5/admin.py:324
93
+ msgid "Mark as user-modified"
94
+ msgstr "标记为手动修改"
95
+
96
+ #: django_simpletask5/admin.py:330
97
+ msgid "Unmark as user-modified"
98
+ msgstr "取消手动修改标记"
99
+
100
+ #: django_simpletask5/admin.py:336
101
+ msgid "Activate selected tasks"
102
+ msgstr "启用选中任务"
103
+
104
+ #: django_simpletask5/admin.py:342
105
+ msgid "Deactivate selected tasks"
106
+ msgstr "停用选中任务"
107
+
108
+ #: django_simpletask5/admin.py:371
109
+ msgid "Statistics"
110
+ msgstr "统计数据"
111
+
112
+ #: django_simpletask5/apps.py:8
113
+ msgid "Simple Task Manager"
114
+ msgstr "简易任务管理"
115
+
116
+ #: django_simpletask5/core/cronjob_registry.py:83
117
+ #, fuzzy
118
+ #| msgid "Status"
119
+ msgid "Status Check"
120
+ msgstr "状态"
121
+
122
+ #: django_simpletask5/core/cronjob_registry.py:90
123
+ #, fuzzy
124
+ #| msgid "Retry count"
125
+ msgid "Retry Timeout"
126
+ msgstr "重试次数"
127
+
128
+ #: django_simpletask5/core/cronjob_registry.py:97
129
+ #, fuzzy
130
+ #| msgid "Archives"
131
+ msgid "Archive"
132
+ msgstr "归档"
133
+
134
+ #: django_simpletask5/core/cronjob_registry.py:104
135
+ msgid "Purge Expired"
136
+ msgstr ""
137
+
138
+ #: django_simpletask5/core/cronjob_registry.py:111
139
+ #, fuzzy
140
+ #| msgid "Pending / Running"
141
+ msgid "Ping / Pong"
142
+ msgstr "待处理 / 运行中"
143
+
144
+ #: django_simpletask5/dashboards.py:14
145
+ msgid "Task Manager Dashboard"
146
+ msgstr "任务管理仪表盘"
147
+
148
+ #: django_simpletask5/dashboards.py:65
149
+ msgid "Today Executions"
150
+ msgstr "今日执行"
151
+
152
+ #: django_simpletask5/dashboards.py:72
153
+ msgid "Success Rate"
154
+ msgstr "成功率"
155
+
156
+ #: django_simpletask5/dashboards.py:80
157
+ msgid "Workers"
158
+ msgstr "工作进程"
159
+
160
+ #: django_simpletask5/dashboards.py:86
161
+ msgid "Cronjobs"
162
+ msgstr "定时任务"
163
+
164
+ #: django_simpletask5/dashboards.py:96
165
+ msgid "Pending / Running"
166
+ msgstr "待处理 / 运行中"
167
+
168
+ #: django_simpletask5/dashboards.py:103
169
+ msgid "Failed Today"
170
+ msgstr "今日失败"
171
+
172
+ #: django_simpletask5/dashboards.py:110
173
+ msgid "Archives"
174
+ msgstr "归档"
175
+
176
+ #: django_simpletask5/dashboards.py:117
177
+ msgid "Retries"
178
+ msgstr "重试"
179
+
180
+ #: django_simpletask5/dashboards.py:140 django_simpletask5/models.py:102
181
+ msgid "Pending"
182
+ msgstr "待处理"
183
+
184
+ #: django_simpletask5/dashboards.py:141 django_simpletask5/models.py:103
185
+ msgid "Running"
186
+ msgstr "运行中"
187
+
188
+ #: django_simpletask5/dashboards.py:142 django_simpletask5/dashboards.py:256
189
+ #: django_simpletask5/models.py:104
190
+ msgid "Success"
191
+ msgstr "成功"
192
+
193
+ #: django_simpletask5/dashboards.py:143 django_simpletask5/models.py:105
194
+ msgid "Failed"
195
+ msgstr "失败"
196
+
197
+ #: django_simpletask5/dashboards.py:145 django_simpletask5/models.py:107
198
+ msgid "Timeout"
199
+ msgstr "超时"
200
+
201
+ #: django_simpletask5/dashboards.py:154
202
+ msgid "Execution Status Distribution"
203
+ msgstr "执行状态分布"
204
+
205
+ #: django_simpletask5/dashboards.py:167
206
+ msgid "Daily Executions (Last 30 Days)"
207
+ msgstr "每日执行(近30天)"
208
+
209
+ #: django_simpletask5/dashboards.py:191
210
+ msgid "Recent Failed / Timeout Executions"
211
+ msgstr "最近失败/超时执行"
212
+
213
+ #: django_simpletask5/dashboards.py:192 django_simpletask5/dashboards.py:200
214
+ msgid "ID"
215
+ msgstr "唯一码"
216
+
217
+ #: django_simpletask5/dashboards.py:192 django_simpletask5/dashboards.py:200
218
+ msgid "Executor"
219
+ msgstr "执行器"
220
+
221
+ #: django_simpletask5/dashboards.py:192 django_simpletask5/dashboards.py:200
222
+ msgid "Event"
223
+ msgstr "事件"
224
+
225
+ #: django_simpletask5/dashboards.py:192 django_simpletask5/dashboards.py:200
226
+ #: django_simpletask5/dashboards.py:227 django_simpletask5/models.py:115
227
+ msgid "Status"
228
+ msgstr "状态"
229
+
230
+ #: django_simpletask5/dashboards.py:192 django_simpletask5/dashboards.py:200
231
+ msgid "Time"
232
+ msgstr "时间"
233
+
234
+ #: django_simpletask5/dashboards.py:199
235
+ msgid "Recent Executions"
236
+ msgstr "最近执行"
237
+
238
+ #: django_simpletask5/dashboards.py:226
239
+ msgid "Active Workers"
240
+ msgstr "活跃工作进程"
241
+
242
+ #: django_simpletask5/dashboards.py:227
243
+ msgid "Hostname"
244
+ msgstr "主机名"
245
+
246
+ #: django_simpletask5/dashboards.py:227
247
+ msgid "Queue"
248
+ msgstr "队列"
249
+
250
+ #: django_simpletask5/dashboards.py:227
251
+ msgid "Current Execution"
252
+ msgstr "当前执行"
253
+
254
+ #: django_simpletask5/dashboards.py:227
255
+ msgid "Services"
256
+ msgstr "服务"
257
+
258
+ #: django_simpletask5/dashboards.py:261
259
+ msgid "Failed/Timeout"
260
+ msgstr "失败/超时"
261
+
262
+ #: django_simpletask5/models.py:111
263
+ msgid "Task ID"
264
+ msgstr "任务编号"
265
+
266
+ #: django_simpletask5/models.py:112 django_simpletask5/models.py:279
267
+ msgid "Task model"
268
+ msgstr "任务模型"
269
+
270
+ #: django_simpletask5/models.py:113 django_simpletask5/models.py:280
271
+ msgid "Trigger event"
272
+ msgstr "触发事件"
273
+
274
+ #: django_simpletask5/models.py:116
275
+ msgid "Result"
276
+ msgstr "结果"
277
+
278
+ #: django_simpletask5/models.py:117
279
+ msgid "Total tasks count"
280
+ msgstr "总任务数"
281
+
282
+ #: django_simpletask5/models.py:118
283
+ msgid "Done tasks count"
284
+ msgstr "已完成数"
285
+
286
+ #: django_simpletask5/models.py:119
287
+ msgid "Error message"
288
+ msgstr "错误信息"
289
+
290
+ #: django_simpletask5/models.py:120
291
+ msgid "Retry count"
292
+ msgstr "重试次数"
293
+
294
+ #: django_simpletask5/models.py:121
295
+ msgid "Max retries"
296
+ msgstr "最大重试次数"
297
+
298
+ #: django_simpletask5/models.py:122
299
+ msgid "Timeout seconds"
300
+ msgstr "超时秒数"
301
+
302
+ #: django_simpletask5/models.py:123
303
+ msgid "Expire time"
304
+ msgstr "过期时间"
305
+
306
+ #: django_simpletask5/models.py:124
307
+ msgid "Started at"
308
+ msgstr "开始时间"
309
+
310
+ #: django_simpletask5/models.py:125
311
+ msgid "Finished at"
312
+ msgstr "完成时间"
313
+
314
+ #: django_simpletask5/models.py:126 django_simpletask5/models.py:222
315
+ #: django_simpletask5/models.py:265 django_simpletask5/models.py:286
316
+ msgid "Created at"
317
+ msgstr "创建时间"
318
+
319
+ #: django_simpletask5/models.py:127 django_simpletask5/models.py:223
320
+ msgid "Updated at"
321
+ msgstr "更新时间"
322
+
323
+ #: django_simpletask5/models.py:132
324
+ msgid "Task execution"
325
+ msgstr "任务执行"
326
+
327
+ #: django_simpletask5/models.py:133
328
+ msgid "Task executions"
329
+ msgstr "任务执行"
330
+
331
+ #: django_simpletask5/models.py:137
332
+ msgid "TaskExecution"
333
+ msgstr "任务执行"
334
+
335
+ #: django_simpletask5/models.py:211
336
+ msgid "Cron expression"
337
+ msgstr "Cron 表达式"
338
+
339
+ #: django_simpletask5/models.py:213
340
+ msgid "Description"
341
+ msgstr "描述"
342
+
343
+ #: django_simpletask5/models.py:214
344
+ msgid "Active"
345
+ msgstr "启用"
346
+
347
+ #: django_simpletask5/models.py:217
348
+ msgid "Keep manual changes"
349
+ msgstr "保留手动修改"
350
+
351
+ #: django_simpletask5/models.py:219
352
+ msgid ""
353
+ "When checked, the cron job will not be overwritten by automatic code "
354
+ "definition sync. Uncheck to allow re-sync from code definitions. It is "
355
+ "automatically checked when substantive changes are saved via the admin."
356
+ msgstr ""
357
+ "勾选后,该定时任务不会被代码定义自动同步覆盖。当通过管理后台保存实质性变更"
358
+ "时,该选项会自动勾选。取消勾选后,可重新从代码定义同步。"
359
+
360
+ #: django_simpletask5/models.py:221
361
+ msgid "Next run time"
362
+ msgstr "下次运行时间"
363
+
364
+ #: django_simpletask5/models.py:227
365
+ msgid "Cron job"
366
+ msgstr "定时任务"
367
+
368
+ #: django_simpletask5/models.py:228
369
+ msgid "Cron jobs"
370
+ msgstr "定时任务"
371
+
372
+ #: django_simpletask5/models.py:263
373
+ msgid "Archive date"
374
+ msgstr "归档日期"
375
+
376
+ #: django_simpletask5/models.py:264
377
+ msgid "File"
378
+ msgstr "文件"
379
+
380
+ #: django_simpletask5/models.py:269
381
+ msgid "Task execution archive"
382
+ msgstr "任务执行归档"
383
+
384
+ #: django_simpletask5/models.py:270
385
+ msgid "Task execution archives"
386
+ msgstr "任务执行归档"
387
+
388
+ #: django_simpletask5/models.py:278
389
+ msgid "Date"
390
+ msgstr "日期"
391
+
392
+ #: django_simpletask5/models.py:281
393
+ msgid "Total count"
394
+ msgstr "总数"
395
+
396
+ #: django_simpletask5/models.py:282
397
+ msgid "Success count"
398
+ msgstr "成功数"
399
+
400
+ #: django_simpletask5/models.py:283
401
+ msgid "Failed count"
402
+ msgstr "失败数"
403
+
404
+ #: django_simpletask5/models.py:284
405
+ msgid "Timeout count"
406
+ msgstr "超时数"
407
+
408
+ #: django_simpletask5/models.py:285
409
+ msgid "Avg duration (s)"
410
+ msgstr "平均耗时(秒)"
411
+
412
+ #: django_simpletask5/models.py:290
413
+ msgid "Task execution stat"
414
+ msgstr "任务执行统计"
415
+
416
+ #: django_simpletask5/models.py:291
417
+ msgid "Task execution stats"
418
+ msgstr "任务执行统计"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: django-simpletask5
3
- Version: 0.1.3
3
+ Version: 0.1.4
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>
@@ -27,6 +27,8 @@ Requires-Dist: globallock>=0.1.4
27
27
  Requires-Dist: django-safe-fields>=0.2.3
28
28
  Requires-Dist: django-app-requires>=0.3.6
29
29
  Requires-Dist: django-admin-dashboards>=0.1.1
30
+ Requires-Dist: django-checkbox-normalize>=0.2.2
31
+ Requires-Dist: django-tabbed-changeform-admin>=0.1.9
30
32
  Requires-Dist: cryptography>=48.0.0
31
33
  Requires-Dist: croniter>=6.2.2
32
34
  Requires-Dist: requests>=2.34.2
@@ -104,6 +106,87 @@ DJANGO_SIMPLETASK_LOCK_CONFIG = {
104
106
  python manage.py migrate django_simpletask5
105
107
  ```
106
108
 
109
+ ## 配置说明
110
+
111
+ 所有配置项均为可选,设有合理的默认值。以下按功能分类说明。
112
+
113
+ ### 消息队列(MQ)
114
+
115
+ 默认使用内存队列(`memory://`),适合开发调试。生产环境建议切换为 RabbitMQ 或 Redis。
116
+
117
+ ```python
118
+ # 方式一:直接指定完整 Broker URL(优先级最高)
119
+ DJANGO_SIMPLETASK_BROKER_URL = 'amqp://guest:guest@127.0.0.1:5672//'
120
+
121
+ # 方式二:分别指定类型和连接参数
122
+ DJANGO_SIMPLETASK_MESSAGE_QUEUE_TYPE = 'rabbitmq' # 'memory' | 'rabbitmq' | 'redis'
123
+ DJANGO_SIMPLETASK_RABBITMQ_HOST = '127.0.0.1'
124
+ DJANGO_SIMPLETASK_RABBITMQ_PORT = 5672
125
+ DJANGO_SIMPLETASK_RABBITMQ_USER = 'guest'
126
+ DJANGO_SIMPLETASK_RABBITMQ_PASSWORD = 'guest'
127
+
128
+ # Redis 作为 MQ 时:
129
+ # DJANGO_SIMPLETASK_MESSAGE_QUEUE_TYPE = 'redis'
130
+ # DJANGO_SIMPLETASK_REDIS_MQ_HOST = '127.0.0.1'
131
+ # DJANGO_SIMPLETASK_REDIS_MQ_PORT = 6379
132
+ # DJANGO_SIMPLETASK_REDIS_MQ_DB = 0
133
+ ```
134
+
135
+ ### 分布式锁
136
+
137
+ ```python
138
+ DJANGO_SIMPLETASK_LOCK_CONFIG = {
139
+ 'global_lock_engine_class': 'globallock.redis_global_lock.RedisGlobalLock',
140
+ 'global_lock_engine_options': {
141
+ 'host': '127.0.0.1',
142
+ 'port': 6379,
143
+ 'db': 0,
144
+ },
145
+ }
146
+ DJANGO_SIMPLETASK_LOCK_TIMEOUT = 600 # 锁超时时间(秒)
147
+ ```
148
+
149
+ ### 队列路由
150
+
151
+ ```python
152
+ DJANGO_SIMPLETASK_DEFAULT_QUEUE = 'django_simpletask5.queue.default' # 默认队列
153
+ DJANGO_SIMPLETASK_HIGH_PRIORITY_QUEUE = 'django_simpletask5.queue.high_priority' # 高优先级队列
154
+ ```
155
+
156
+ ### 执行与重试
157
+
158
+ ```python
159
+ DJANGO_SIMPLETASK_DEFAULT_MAX_RETRIES = 3 # 默认最大重试次数
160
+ DJANGO_SIMPLETASK_DEFAULT_TIMEOUT_SECONDS = 600 # 默认执行超时时间(秒)
161
+ ```
162
+
163
+ ### 归档
164
+
165
+ ```python
166
+ DJANGO_SIMPLETASK_ARCHIVE_PATH = 'django_simpletask5_archives' # 归档文件存储子目录
167
+ DJANGO_SIMPLETASK_ARCHIVE_SALT = 'django-simpletask5-archive' # 归档加密盐值(结合 SECRET_KEY 派生 AES 密钥)
168
+ DJANGO_SIMPLETASK_ARCHIVE_RETENTION_DAYS = 7 # 归档保留天数
169
+ ```
170
+
171
+ ### Cron
172
+
173
+ ```python
174
+ DJANGO_SIMPLETASK_CRONJOB_AUTO_SYNC = True # 是否自动将代码注册的 Cron 同步到数据库
175
+ ```
176
+
177
+ ### 安全
178
+
179
+ ```python
180
+ # 脚本执行白名单(空列表表示不限制)
181
+ DJANGO_SIMPLETASK_SCRIPT_WHITELIST = ['/path/to/allowed/scripts']
182
+
183
+ # 自定义字段加密(默认使用 django-safe-fields 的默认加密)
184
+ DJANGO_SIMPLETASK_FIELD_CIPHER_CLASS = None # 自定义加密器类
185
+ DJANGO_SIMPLETASK_RESULT_PASSWORD = None # 执行结果加密密码
186
+ DJANGO_SIMPLETASK_ERROR_MSG_PASSWORD = None # 错误信息加密密码
187
+ DJANGO_SIMPLETASK_CONTEXT_PASSWORD = None # 上下文数据加密密码
188
+ ```
189
+
107
190
  ## 快速开始
108
191
 
109
192
  ### 1. 定义任务模型
@@ -232,6 +315,12 @@ Worker 消费消息 → 获取分布式锁 → 加载执行器 → 执行并保
232
315
 
233
316
  ## Releases
234
317
 
318
+ ### 0.1.4
319
+
320
+ - **修复打包** — `pyproject.toml` 添加 `package-data` 配置,打包时包含 locale po/mo 文件,修复 i18n 翻译不生效的问题
321
+ - **补充依赖** — `requirements.txt` 和 `pyproject.toml` 添加缺失的 `django-checkbox-normalize`、`django-tabbed-changeform-admin` 依赖
322
+ - **完善文档** — README 新增完整配置说明章节,涵盖消息队列(MQ)、分布式锁、队列路由、归档、Cron、安全等全部配置项
323
+
235
324
  ### 0.1.3
236
325
 
237
326
  - **Admin 界面大升级** — 集成 Tabbed ChangeForm 分页签展示字段,CronJob 后台支持直接执行/启用/禁用操作;TaskExecution 列表优化,execution_id 显示前8字符并支持点击复制,重试次数合并显示,全局字段中文翻译
@@ -30,6 +30,8 @@ django_simpletask5/executors/python_script.py
30
30
  django_simpletask5/executors/retry_timeout.py
31
31
  django_simpletask5/executors/simple_request.py
32
32
  django_simpletask5/executors/status_check.py
33
+ django_simpletask5/locale/zh_Hans/LC_MESSAGES/django.mo
34
+ django_simpletask5/locale/zh_Hans/LC_MESSAGES/django.po
33
35
  django_simpletask5/management/__init__.py
34
36
  django_simpletask5/management/commands/__init__.py
35
37
  django_simpletask5/management/commands/django_simpletask_archive.py
@@ -2,6 +2,8 @@ globallock>=0.1.4
2
2
  django-safe-fields>=0.2.3
3
3
  django-app-requires>=0.3.6
4
4
  django-admin-dashboards>=0.1.1
5
+ django-checkbox-normalize>=0.2.2
6
+ django-tabbed-changeform-admin>=0.1.9
5
7
  cryptography>=48.0.0
6
8
  croniter>=6.2.2
7
9
  requests>=2.34.2
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "django-simpletask5"
7
- version = "0.1.3"
7
+ version = "0.1.4"
8
8
  description = "Lightweight async task execution framework for Django"
9
9
  readme = "README.md"
10
10
  license = {text = "MIT"}
@@ -30,6 +30,8 @@ dependencies = [
30
30
  "django-safe-fields>=0.2.3",
31
31
  "django-app-requires>=0.3.6",
32
32
  "django-admin-dashboards>=0.1.1",
33
+ "django-checkbox-normalize>=0.2.2",
34
+ "django-tabbed-changeform-admin>=0.1.9",
33
35
  "cryptography>=48.0.0",
34
36
  "croniter>=6.2.2",
35
37
  "requests>=2.34.2",
@@ -53,6 +55,9 @@ email = "rrr0vrfp@qq.com"
53
55
  include = ["django_simpletask5*"]
54
56
  exclude = ["django_simpletask5_demo*", "django_simpletask5_example*"]
55
57
 
58
+ [tool.setuptools.package-data]
59
+ django_simpletask5 = ["locale/**/*.po", "locale/**/*.mo"]
60
+
56
61
  [tool.pytest.ini_options]
57
62
  DJANGO_SETTINGS_MODULE = "django_simpletask5_demo.settings"
58
63
  testpaths = ["django_simpletask5_example/tests"]