Skip to content

Commit a681b2e

Browse files
committed
Now depends on Python 2.6
1 parent cca315f commit a681b2e

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+783
-776
lines changed

bin/djcelerymon

Lines changed: 0 additions & 8 deletions
This file was deleted.

djcelery/__init__.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,23 @@
11
"""Django Celery Integration."""
22
# :copyright: (c) 2009 - 2012 by Ask Solem.
33
# :license: BSD, see LICENSE for more details.
4-
from __future__ import absolute_import
4+
from __future__ import absolute_import, unicode_literals
55

66
import os
77

88
VERSION = (3, 0, 11)
9-
__version__ = ".".join(map(str, VERSION[0:3])) + "".join(VERSION[3:])
10-
__author__ = "Ask Solem"
11-
__contact__ = "ask@celeryproject.org"
12-
__homepage__ = "http://celeryproject.org"
13-
__docformat__ = "restructuredtext"
14-
__license__ = "BSD (3 clause)"
9+
__version__ = '.'.join(map(str, VERSION[0:3])) + ''.join(VERSION[3:])
10+
__author__ = 'Ask Solem'
11+
__contact__ = 'ask@celeryproject.org'
12+
__homepage__ = 'http://celeryproject.org'
13+
__docformat__ = 'restructuredtext'
14+
__license__ = 'BSD (3 clause)'
1515

1616
# -eof meta-
1717

1818

1919
def setup_loader():
20-
os.environ.setdefault("CELERY_LOADER", "djcelery.loaders.DjangoLoader")
20+
os.environ.setdefault('CELERY_LOADER', 'djcelery.loaders.DjangoLoader')
2121

2222
# Importing this module enables the Celery Django loader.
2323
setup_loader()

djcelery/admin.py

Lines changed: 103 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
from __future__ import absolute_import
2-
from __future__ import with_statement
1+
from __future__ import absolute_import, unicode_literals
32

43
from django import forms
54
from django.conf import settings
@@ -18,19 +17,21 @@
1817
from celery.utils.text import abbrtask
1918

2019
from .admin_utils import action, display_field, fixedwidth
21-
from .models import (TaskState, WorkerState,
22-
PeriodicTask, IntervalSchedule, CrontabSchedule)
20+
from .models import (
21+
TaskState, WorkerState,
22+
PeriodicTask, IntervalSchedule, CrontabSchedule,
23+
)
2324
from .humanize import naturaldate
2425

2526

26-
TASK_STATE_COLORS = {states.SUCCESS: "green",
27-
states.FAILURE: "red",
28-
states.REVOKED: "magenta",
29-
states.STARTED: "yellow",
30-
states.RETRY: "orange",
31-
"RECEIVED": "blue"}
32-
NODE_STATE_COLORS = {"ONLINE": "green",
33-
"OFFLINE": "gray"}
27+
TASK_STATE_COLORS = {states.SUCCESS: 'green',
28+
states.FAILURE: 'red',
29+
states.REVOKED: 'magenta',
30+
states.STARTED: 'yellow',
31+
states.RETRY: 'orange',
32+
'RECEIVED': 'blue'}
33+
NODE_STATE_COLORS = {'ONLINE': 'green',
34+
'OFFLINE': 'gray'}
3435

3536

3637
class MonitorList(main_views.ChangeList):
@@ -40,38 +41,40 @@ def __init__(self, *args, **kwargs):
4041
self.title = self.model_admin.list_page_title
4142

4243

43-
@display_field(_("state"), "state")
44+
@display_field(_('state'), 'state')
4445
def colored_state(task):
4546
state = escape(task.state)
46-
color = TASK_STATE_COLORS.get(task.state, "black")
47-
return """<b><span style="color: %s;">%s</span></b>""" % (color, state)
47+
color = TASK_STATE_COLORS.get(task.state, 'black')
48+
return '<b><span style="color: {0};">{1}</span></b>'.format(color, state)
4849

4950

50-
@display_field(_("state"), "last_heartbeat")
51+
@display_field(_('state'), 'last_heartbeat')
5152
def node_state(node):
52-
state = node.is_alive() and "ONLINE" or "OFFLINE"
53+
state = node.is_alive() and 'ONLINE' or 'OFFLINE'
5354
color = NODE_STATE_COLORS[state]
54-
return """<b><span style="color: %s;">%s</span></b>""" % (color, state)
55+
return '<b><span style="color: {0};">{1}</span></b>'.format(color, state)
5556

5657

57-
@display_field(_("ETA"), "eta")
58+
@display_field(_('ETA'), 'eta')
5859
def eta(task):
5960
if not task.eta:
60-
return """<span style="color: gray;">none</span>"""
61+
return '<span style="color: gray;">none</span>'
6162
return escape(task.eta)
6263

6364

64-
@display_field(_("when"), "tstamp")
65+
@display_field(_('when'), 'tstamp')
6566
def tstamp(task):
66-
return """<div title="%s">%s</div>""" % (escape(str(task.tstamp)),
67-
escape(naturaldate(task.tstamp)))
67+
return '<div title="{0}">{1}</div>'.format(
68+
escape(str(task.tstamp)), escape(naturaldate(task.tstamp)),
69+
)
6870

6971

70-
@display_field(_("name"), "name")
72+
@display_field(_('name'), 'name')
7173
def name(task):
7274
short_name = abbrtask(task.name, 16)
73-
return """<div title="%s"><b>%s</b></div>""" % (escape(task.name),
74-
escape(short_name))
75+
return '<div title="{0}"><b>{1}</b></div>'.format(
76+
escape(task.name), escape(short_name),
77+
)
7578

7679

7780
class ModelMonitor(admin.ModelAdmin):
@@ -83,7 +86,7 @@ def get_changelist(self, request, **kwargs):
8386

8487
def change_view(self, request, object_id, extra_context=None):
8588
extra_context = extra_context or {}
86-
extra_context.setdefault("title", self.detail_title)
89+
extra_context.setdefault('title', self.detail_title)
8790
return super(ModelMonitor, self).change_view(request, object_id,
8891
extra_context)
8992

@@ -99,85 +102,85 @@ def has_add_permission(self, request):
99102

100103

101104
class TaskMonitor(ModelMonitor):
102-
detail_title = _("Task detail")
103-
list_page_title = _("Tasks")
104-
rate_limit_confirmation_template = "djcelery/confirm_rate_limit.html"
105-
date_hierarchy = "tstamp"
105+
detail_title = _('Task detail')
106+
list_page_title = _('Tasks')
107+
rate_limit_confirmation_template = 'djcelery/confirm_rate_limit.html'
108+
date_hierarchy = 'tstamp'
106109
fieldsets = (
107110
(None, {
108-
"fields": ("state", "task_id", "name", "args", "kwargs",
109-
"eta", "runtime", "worker", "tstamp"),
110-
"classes": ("extrapretty", ),
111+
'fields': ('state', 'task_id', 'name', 'args', 'kwargs',
112+
'eta', 'runtime', 'worker', 'tstamp'),
113+
'classes': ('extrapretty', ),
111114
}),
112-
("Details", {
113-
"classes": ("collapse", "extrapretty"),
114-
"fields": ("result", "traceback", "expires"),
115+
('Details', {
116+
'classes': ('collapse', 'extrapretty'),
117+
'fields': ('result', 'traceback', 'expires'),
115118
}),
116119
)
117-
list_display = (fixedwidth("task_id", name=_("UUID"), pt=8),
120+
list_display = (fixedwidth('task_id', name=_('UUID'), pt=8),
118121
colored_state,
119122
name,
120-
fixedwidth("args", pretty=True),
121-
fixedwidth("kwargs", pretty=True),
123+
fixedwidth('args', pretty=True),
124+
fixedwidth('kwargs', pretty=True),
122125
eta,
123126
tstamp,
124-
"worker")
125-
readonly_fields = ("state", "task_id", "name", "args", "kwargs",
126-
"eta", "runtime", "worker", "result", "traceback",
127-
"expires", "tstamp")
128-
list_filter = ("state", "name", "tstamp", "eta", "worker")
129-
search_fields = ("name", "task_id", "args", "kwargs", "worker__hostname")
130-
actions = ["revoke_tasks",
131-
"terminate_tasks",
132-
"kill_tasks",
133-
"rate_limit_tasks"]
134-
135-
@action(_("Revoke selected tasks"))
127+
'worker')
128+
readonly_fields = ('state', 'task_id', 'name', 'args', 'kwargs',
129+
'eta', 'runtime', 'worker', 'result', 'traceback',
130+
'expires', 'tstamp')
131+
list_filter = ('state', 'name', 'tstamp', 'eta', 'worker')
132+
search_fields = ('name', 'task_id', 'args', 'kwargs', 'worker__hostname')
133+
actions = ['revoke_tasks',
134+
'terminate_tasks',
135+
'kill_tasks',
136+
'rate_limit_tasks']
137+
138+
@action(_('Revoke selected tasks'))
136139
def revoke_tasks(self, request, queryset):
137140
with current_app.default_connection() as connection:
138141
for state in queryset:
139142
revoke(state.task_id, connection=connection)
140143

141-
@action(_("Terminate selected tasks"))
144+
@action(_('Terminate selected tasks'))
142145
def terminate_tasks(self, request, queryset):
143146
with current_app.default_connection() as connection:
144147
for state in queryset:
145148
revoke(state.task_id, connection=connection, terminate=True)
146149

147-
@action(_("Kill selected tasks"))
150+
@action(_('Kill selected tasks'))
148151
def kill_tasks(self, request, queryset):
149152
with current_app.default_connection() as connection:
150153
for state in queryset:
151154
revoke(state.task_id, connection=connection,
152-
terminate=True, signal="KILL")
155+
terminate=True, signal='KILL')
153156

154-
@action(_("Rate limit selected tasks"))
157+
@action(_('Rate limit selected tasks'))
155158
def rate_limit_tasks(self, request, queryset):
156159
tasks = set([task.name for task in queryset])
157160
opts = self.model._meta
158161
app_label = opts.app_label
159-
if request.POST.get("post"):
160-
rate = request.POST["rate_limit"]
162+
if request.POST.get('post'):
163+
rate = request.POST['rate_limit']
161164
with current_app.default_connection() as connection:
162165
for task_name in tasks:
163166
rate_limit(task_name, rate, connection=connection)
164167
return None
165168

166169
context = {
167-
"title": _("Rate limit selection"),
168-
"queryset": queryset,
169-
"object_name": force_unicode(opts.verbose_name),
170-
"action_checkbox_name": helpers.ACTION_CHECKBOX_NAME,
171-
"opts": opts,
172-
"app_label": app_label,
170+
'title': _('Rate limit selection'),
171+
'queryset': queryset,
172+
'object_name': force_unicode(opts.verbose_name),
173+
'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME,
174+
'opts': opts,
175+
'app_label': app_label,
173176
}
174177

175178
return render_to_response(self.rate_limit_confirmation_template,
176179
context, context_instance=RequestContext(request))
177180

178181
def get_actions(self, request):
179182
actions = super(TaskMonitor, self).get_actions(request)
180-
actions.pop("delete_selected", None)
183+
actions.pop('delete_selected', None)
181184
return actions
182185

183186
def queryset(self, request):
@@ -187,31 +190,31 @@ def queryset(self, request):
187190

188191
class WorkerMonitor(ModelMonitor):
189192
can_add = True
190-
detail_title = _("Node detail")
191-
list_page_title = _("Worker Nodes")
192-
list_display = ("hostname", node_state)
193-
readonly_fields = ("last_heartbeat", )
194-
actions = ["shutdown_nodes",
195-
"enable_events",
196-
"disable_events"]
197-
198-
@action(_("Shutdown selected worker nodes"))
193+
detail_title = _('Node detail')
194+
list_page_title = _('Worker Nodes')
195+
list_display = ('hostname', node_state)
196+
readonly_fields = ('last_heartbeat', )
197+
actions = ['shutdown_nodes',
198+
'enable_events',
199+
'disable_events']
200+
201+
@action(_('Shutdown selected worker nodes'))
199202
def shutdown_nodes(self, request, queryset):
200-
broadcast("shutdown", destination=[n.hostname for n in queryset])
203+
broadcast('shutdown', destination=[n.hostname for n in queryset])
201204

202-
@action(_("Enable event mode for selected nodes."))
205+
@action(_('Enable event mode for selected nodes.'))
203206
def enable_events(self, request, queryset):
204-
broadcast("enable_events",
207+
broadcast('enable_events',
205208
destination=[n.hostname for n in queryset])
206209

207-
@action(_("Disable event mode for selected nodes."))
210+
@action(_('Disable event mode for selected nodes.'))
208211
def disable_events(self, request, queryset):
209-
broadcast("disable_events",
212+
broadcast('disable_events',
210213
destination=[n.hostname for n in queryset])
211214

212215
def get_actions(self, request):
213216
actions = super(WorkerMonitor, self).get_actions(request)
214-
actions.pop("delete_selected", None)
217+
actions.pop('delete_selected', None)
215218
return actions
216219

217220
admin.site.register(TaskState, TaskMonitor)
@@ -231,25 +234,25 @@ def periodic_task_form():
231234
current_app.loader.import_default_modules()
232235
tasks = list(sorted(name for name in current_app.tasks
233236
if not name.startswith('celery.')))
234-
choices = (("", ""), ) + tuple(zip(tasks, tasks))
237+
choices = (('', ''), ) + tuple(zip(tasks, tasks))
235238

236239
class PeriodicTaskForm(forms.ModelForm):
237-
regtask = LaxChoiceField(label=_(u"Task (registered)"),
240+
regtask = LaxChoiceField(label=_('Task (registered)'),
238241
choices=choices, required=False)
239-
task = forms.CharField(label=_("Task (custom)"), required=False,
242+
task = forms.CharField(label=_('Task (custom)'), required=False,
240243
max_length=200)
241244

242245
class Meta:
243246
model = PeriodicTask
244247

245248
def clean(self):
246249
data = super(PeriodicTaskForm, self).clean()
247-
regtask = data.get("regtask")
250+
regtask = data.get('regtask')
248251
if regtask:
249-
data["task"] = regtask
250-
if not data["task"]:
251-
exc = forms.ValidationError(_(u"Need name of task"))
252-
self._errors["task"] = self.error_class(exc.messages)
252+
data['task'] = regtask
253+
if not data['task']:
254+
exc = forms.ValidationError(_('Need name of task'))
255+
self._errors['task'] = self.error_class(exc.messages)
253256
raise exc
254257
return data
255258

@@ -262,20 +265,20 @@ class PeriodicTaskAdmin(admin.ModelAdmin):
262265
list_display = ('__unicode__', 'enabled')
263266
fieldsets = (
264267
(None, {
265-
"fields": ("name", "regtask", "task", "enabled"),
266-
"classes": ("extrapretty", "wide"),
268+
'fields': ('name', 'regtask', 'task', 'enabled'),
269+
'classes': ('extrapretty', 'wide'),
267270
}),
268-
("Schedule", {
269-
"fields": ("interval", "crontab"),
270-
"classes": ("extrapretty", "wide", ),
271+
('Schedule', {
272+
'fields': ('interval', 'crontab'),
273+
'classes': ('extrapretty', 'wide', ),
271274
}),
272-
("Arguments", {
273-
"fields": ("args", "kwargs"),
274-
"classes": ("extrapretty", "wide", "collapse"),
275+
('Arguments', {
276+
'fields': ('args', 'kwargs'),
277+
'classes': ('extrapretty', 'wide', 'collapse'),
275278
}),
276-
("Execution Options", {
277-
"fields": ("expires", "queue", "exchange", "routing_key"),
278-
"classes": ("extrapretty", "wide", "collapse"),
279+
('Execution Options', {
280+
'fields': ('expires', 'queue', 'exchange', 'routing_key'),
281+
'classes': ('extrapretty', 'wide', 'collapse'),
279282
}),
280283
)
281284

@@ -285,7 +288,7 @@ def __init__(self, *args, **kwargs):
285288

286289
def changelist_view(self, request, extra_context=None):
287290
extra_context = extra_context or {}
288-
scheduler = getattr(settings, "CELERYBEAT_SCHEDULER", None)
291+
scheduler = getattr(settings, 'CELERYBEAT_SCHEDULER', None)
289292
if scheduler != 'djcelery.schedulers.DatabaseScheduler':
290293
extra_context['wrong_scheduler'] = True
291294
return super(PeriodicTaskAdmin, self).changelist_view(request,

0 commit comments

Comments
 (0)