Skip to content

Commit 438fd02

Browse files
committed
Add in migrations, 'created' DB field, and instructions for moving django_ztask to South
1 parent 502d948 commit 438fd02

File tree

7 files changed

+107
-7
lines changed

7 files changed

+107
-7
lines changed

README.markdown

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,19 @@
1+
IMPORTANT: READ ME
2+
==================
3+
4+
In version 0.1.4, we are introducing two major changes:
5+
6+
1. Tasks now have a "created" datetime field. This was added to make sure `--replayfailed` replayed tasks in the appropriate order
7+
2. Introduced [South](http://south.aeracode.org/) migrations.
8+
9+
IF YOU HAVE ALREADY INSTALLED django-ztask - you can "fake" the first migration, and then run the second migration:
10+
11+
./manage.py migrate django_ztask --fake 0001
12+
./manage.py migrate django_ztask
13+
14+
If you are not using [South](http://south.aeracode.org/) in your Django project, it is strongly recommended you do. If you
15+
are not, you will have to add the "created" field to your database manually.
16+
117
Installing
218
==========
319

@@ -34,25 +50,25 @@ Command-line arguments
3450
The `ztaskd` command takes a series of command-line arguments:
3551

3652
- `--noreload`
37-
53+
3854
By default, `ztaskd` will use the built-in Django reloader
3955
to reload the server whenever a change is made to a python file. Passing
4056
in `--noreload` will prevent it from listening for changed files.
4157
(Good to use in production.)
4258

4359
- `-l` or `--loglevel`
44-
60+
4561
Choose from the standard `CRITICAL`, `ERROR`, `WARNING`,
4662
`INFO`, `DEBUG`, or `NOTSET`. If this argument isn't passed
4763
in, `INFO` is used by default.
4864

4965
- `-f` or `--logfile`
50-
66+
5167
The file to log messages to. By default, all messages are logged
5268
to `stdout`
5369

5470
- `--replayfailed`
55-
71+
5672
If a command has failed more times than allowed in the
5773
`ZTASKD_RETRY_COUNT` (see below for more), the task is
5874
logged as failed. Passing in `--replayfailed` will cause all

django_ztask/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
"""Django ZTask."""
22
import os
33

4-
VERSION = (0, 1, 3)
4+
VERSION = (0, 1, 4)
55

66
__version__ = ".".join(map(str, VERSION[0:3])) + "".join(VERSION[3:])
77
__author__ = "Jason Allum and Dave Martorana"

django_ztask/management/commands/ztaskd.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,9 +73,9 @@ def _queue_handler(socket, *args, **kwargs):
7373

7474
# Reload tasks if necessary
7575
if replay_failed:
76-
replay_tasks = Task.objects.all()
76+
replay_tasks = Task.objects.all().order_by('created')
7777
else:
78-
replay_tasks = Task.objects.filter(retry_count__gt=0)
78+
replay_tasks = Task.objects.filter(retry_count__gt=0).order_by('created')
7979
for task in replay_tasks:
8080
if task.next_attempt < time.time():
8181
ioloop.DelayedCallback(lambda: self._call_function(task.pk), 5000, io_loop=self.io_loop).start()
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
# encoding: utf-8
2+
import datetime
3+
from south.db import db
4+
from south.v2 import SchemaMigration
5+
from django.db import models
6+
7+
class Migration(SchemaMigration):
8+
9+
def forwards(self, orm):
10+
11+
# Adding model 'Task'
12+
db.create_table('django_ztask_task', (
13+
('uuid', self.gf('django.db.models.fields.CharField')(max_length=36, primary_key=True)),
14+
('function_name', self.gf('django.db.models.fields.CharField')(max_length=255)),
15+
('args', self.gf('django.db.models.fields.TextField')()),
16+
('kwargs', self.gf('django.db.models.fields.TextField')()),
17+
('retry_count', self.gf('django.db.models.fields.IntegerField')(default=0)),
18+
('last_exception', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
19+
('next_attempt', self.gf('django.db.models.fields.FloatField')(null=True, blank=True)),
20+
('failed', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True)),
21+
))
22+
db.send_create_signal('django_ztask', ['Task'])
23+
24+
25+
def backwards(self, orm):
26+
27+
# Deleting model 'Task'
28+
db.delete_table('django_ztask_task')
29+
30+
31+
models = {
32+
'django_ztask.task': {
33+
'Meta': {'object_name': 'Task'},
34+
'args': ('django.db.models.fields.TextField', [], {}),
35+
'failed': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
36+
'function_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
37+
'kwargs': ('django.db.models.fields.TextField', [], {}),
38+
'last_exception': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
39+
'next_attempt': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
40+
'retry_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
41+
'uuid': ('django.db.models.fields.CharField', [], {'max_length': '36', 'primary_key': 'True'})
42+
}
43+
}
44+
45+
complete_apps = ['django_ztask']
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# encoding: utf-8
2+
import datetime
3+
from south.db import db
4+
from south.v2 import SchemaMigration
5+
from django.db import models
6+
7+
class Migration(SchemaMigration):
8+
9+
def forwards(self, orm):
10+
11+
# Adding field 'Task.created'
12+
db.add_column('django_ztask_task', 'created', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True), keep_default=False)
13+
14+
15+
def backwards(self, orm):
16+
17+
# Deleting field 'Task.created'
18+
db.delete_column('django_ztask_task', 'created')
19+
20+
21+
models = {
22+
'django_ztask.task': {
23+
'Meta': {'object_name': 'Task'},
24+
'args': ('django.db.models.fields.TextField', [], {}),
25+
'created': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
26+
'failed': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
27+
'function_name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
28+
'kwargs': ('django.db.models.fields.TextField', [], {}),
29+
'last_exception': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
30+
'next_attempt': ('django.db.models.fields.FloatField', [], {'null': 'True', 'blank': 'True'}),
31+
'retry_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
32+
'uuid': ('django.db.models.fields.CharField', [], {'max_length': '36', 'primary_key': 'True'})
33+
}
34+
}
35+
36+
complete_apps = ['django_ztask']

django_ztask/migrations/__init__.py

Whitespace-only changes.

django_ztask/models.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from django.db.models import *
22

33
import uuid
4+
import datetime
45

56
class QuerySetManager(Manager):
67
def __getattr__(self, attr, *args):
@@ -23,10 +24,12 @@ class Task(Model):
2324
retry_count = IntegerField(default=0)
2425
last_exception = TextField(blank=True, null=True)
2526
next_attempt = FloatField(blank=True, null=True)
27+
created = DateTimeField(blank=True, null=True)
2628
failed = DateTimeField(blank=True, null=True)
2729

2830
def save(self, *args, **kwargs):
2931
if not self.uuid:
32+
self.created = datetime.datetime.now()
3033
self.uuid = uuid.uuid4()
3134
super(Task, self).save(*args, **kwargs)
3235

0 commit comments

Comments
 (0)