[Python-modules-commits] [django-celery] 01/10: Import django-celery_3.1.17.orig.tar.gz

Michael Fladischer fladi at moszumanska.debian.org
Mon Oct 19 07:17:46 UTC 2015


This is an automated email from the git hooks/post-receive script.

fladi pushed a commit to annotated tag debian/3.1.17-1
in repository django-celery.

commit 58751dd4216a267ccad1f8b5932487c51af036e4
Author: Michael Fladischer <FladischerMichael at fladi.at>
Date:   Mon Oct 19 08:53:14 2015 +0200

    Import django-celery_3.1.17.orig.tar.gz
---
 AUTHORS                                            |   1 +
 Changelog                                          |  31 ++
 LICENSE                                            |   4 +-
 PKG-INFO                                           |   4 +-
 README                                             |   2 +-
 README.rst                                         |   2 +-
 django_celery.egg-info/PKG-INFO                    |   4 +-
 django_celery.egg-info/SOURCES.txt                 |   8 +-
 djcelery/__init__.py                               |  20 +-
 djcelery/backends/cache.py                         |   2 +-
 djcelery/compat.py                                 |  17 +-
 djcelery/management/base.py                        |  14 +-
 djcelery/management/commands/celery.py             |   6 +-
 djcelery/management/commands/celerybeat.py         |   6 +-
 djcelery/management/commands/celerycam.py          |   6 +-
 djcelery/management/commands/celeryd.py            |   6 +-
 djcelery/management/commands/celerymon.py          |   4 +-
 djcelery/management/commands/djcelerymon.py        |   6 +-
 djcelery/migrations/0001_initial.py                | 459 ++++++++++++---------
 djcelery/migrations/__init__.py                    |  16 +
 djcelery/models.py                                 |  22 +-
 djcelery/mon.py                                    |   4 +-
 djcelery/picklefield.py                            |  20 +-
 djcelery/snapshot.py                               |   4 +-
 .../0001_initial.py                                |   2 +-
 .../0002_v25_changes.py                            |   0
 .../0003_v26_changes.py                            |   0
 .../0004_v30_changes.py                            |   0
 .../{migrations => south_migrations}/__init__.py   |   0
 djcelery/tests/test_schedulers.py                  |  21 +-
 djcelery/tests/test_snapshot.py                    |  11 +-
 djcelery/utils.py                                  |  16 +-
 docs/_ext/applyxrefs.py                            |   2 -
 docs/changelog.rst                                 |  31 ++
 docs/conf.py                                       |   6 +-
 docs/settings.py                                   |   2 +-
 extra/release/doc4allmods                          |   8 +-
 setup.py                                           |  11 +-
 tests/settings.py                                  |   6 +-
 39 files changed, 488 insertions(+), 296 deletions(-)

diff --git a/AUTHORS b/AUTHORS
index 73c2bda..e8a5c4d 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -24,6 +24,7 @@ Darjus Loktevic <darjus at amazon.com>
 David Fischer <david.fischer.ch at gmail.com>
 David Ziegler <david.ziegler at gmail.com>
 Diego Andres Sanabria Martin <diegueus9 at gmail.com>
+Dmitriy Krasilnikov <krasilnikov.d.o at gmail.com>
 Donald Stufft <donald.stufft at gmail.com>
 Eldon Stegall
 Eugene Nagornyi <ideviantik at gmail.com>
diff --git a/Changelog b/Changelog
index 950faa5..dc06c45 100644
--- a/Changelog
+++ b/Changelog
@@ -5,6 +5,37 @@
 .. contents::
     :local:
 
+.. _version-3.1.17:
+
+3.1.17
+======
+:release-date: 2015-10-09 04:02 P.M PDT
+
+- Adds Django migrations
+
+    ... warning::
+
+        Old South migrations have been moved to ``djcelery.south_migrations``,
+        so if you still use South you need to configure the new location
+        in ``settings.py``:
+
+        .. code-block:: python
+
+            SOUTH_MIGRATION_MODULES = {
+                'djcelery': 'djcelery.south_migrations',
+            }
+
+- ``djcelery.picklefield`` now compatible with Django 1.8
+
+    Fix taken upstream from ``django-picklefield``.
+
+- Fixed timezone issues when CELERY_ENABLE_UTC not set.
+
+    Fix contributed by Dmitriy Krasilnikov.
+
+- Fixed Python 3 compatibility issue in ``setup_loader``
+  (Issue #344, Issue #346).
+
 .. _version-3.1.16:
 
 3.1.16
diff --git a/LICENSE b/LICENSE
index 80813f2..96f7f04 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,6 @@
-Copyright (c) 2012-2013 GoPivotal, Inc.  All Rights Reserved.
+Copyright (c) 2015 Ask Solem.  All Rights Reserved.
+Copyright (c) 2012-2014 GoPivotal, Inc.  All Rights Reserved.
 Copyright (c) 2009-2012 Ask Solem.  All Rights Reserved.
-All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
 modification, are permitted provided that the following conditions are met:
diff --git a/PKG-INFO b/PKG-INFO
index 61b7427..ab4dc20 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: django-celery
-Version: 3.1.16
+Version: 3.1.17
 Summary: Old django celery integration project.
 Home-page: http://celeryproject.org
 Author: Ask Solem
@@ -12,7 +12,7 @@ Description: ===============================================
         
         .. image:: http://cloud.github.com/downloads/celery/celery/celery_128.png
         
-        :Version: 3.1.16
+        :Version: 3.1.17
         :Web: http://celeryproject.org/
         :Download: http://pypi.python.org/pypi/django-celery/
         :Source: http://github.com/celery/django-celery/
diff --git a/README b/README
index 8ee489c..d98f5d4 100644
--- a/README
+++ b/README
@@ -4,7 +4,7 @@
 
 .. image:: http://cloud.github.com/downloads/celery/celery/celery_128.png
 
-:Version: 3.1.16
+:Version: 3.1.17
 :Web: http://celeryproject.org/
 :Download: http://pypi.python.org/pypi/django-celery/
 :Source: http://github.com/celery/django-celery/
diff --git a/README.rst b/README.rst
index 8ee489c..d98f5d4 100644
--- a/README.rst
+++ b/README.rst
@@ -4,7 +4,7 @@
 
 .. image:: http://cloud.github.com/downloads/celery/celery/celery_128.png
 
-:Version: 3.1.16
+:Version: 3.1.17
 :Web: http://celeryproject.org/
 :Download: http://pypi.python.org/pypi/django-celery/
 :Source: http://github.com/celery/django-celery/
diff --git a/django_celery.egg-info/PKG-INFO b/django_celery.egg-info/PKG-INFO
index 61b7427..ab4dc20 100644
--- a/django_celery.egg-info/PKG-INFO
+++ b/django_celery.egg-info/PKG-INFO
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: django-celery
-Version: 3.1.16
+Version: 3.1.17
 Summary: Old django celery integration project.
 Home-page: http://celeryproject.org
 Author: Ask Solem
@@ -12,7 +12,7 @@ Description: ===============================================
         
         .. image:: http://cloud.github.com/downloads/celery/celery/celery_128.png
         
-        :Version: 3.1.16
+        :Version: 3.1.17
         :Web: http://celeryproject.org/
         :Download: http://pypi.python.org/pypi/django-celery/
         :Source: http://github.com/celery/django-celery/
diff --git a/django_celery.egg-info/SOURCES.txt b/django_celery.egg-info/SOURCES.txt
index b47266d..7f0d416 100644
--- a/django_celery.egg-info/SOURCES.txt
+++ b/django_celery.egg-info/SOURCES.txt
@@ -51,12 +51,14 @@ djcelery/management/commands/celeryd_multi.py
 djcelery/management/commands/celerymon.py
 djcelery/management/commands/djcelerymon.py
 djcelery/migrations/0001_initial.py
-djcelery/migrations/0002_v25_changes.py
-djcelery/migrations/0003_v26_changes.py
-djcelery/migrations/0004_v30_changes.py
 djcelery/migrations/__init__.py
 djcelery/monproj/__init__.py
 djcelery/monproj/urls.py
+djcelery/south_migrations/0001_initial.py
+djcelery/south_migrations/0002_v25_changes.py
+djcelery/south_migrations/0003_v26_changes.py
+djcelery/south_migrations/0004_v30_changes.py
+djcelery/south_migrations/__init__.py
 djcelery/static/djcelery/style.css
 djcelery/templates/admin/djcelery/change_list.html
 djcelery/templates/djcelery/confirm_rate_limit.html
diff --git a/djcelery/__init__.py b/djcelery/__init__.py
index 0821b09..d429084 100644
--- a/djcelery/__init__.py
+++ b/djcelery/__init__.py
@@ -1,11 +1,12 @@
 """Old django celery integration project."""
-# :copyright: (c) 2009 - 2012 by Ask Solem.
+# :copyright: (c) 2009 - 2015 by Ask Solem.
 # :license:   BSD, see LICENSE for more details.
 from __future__ import absolute_import, unicode_literals
 
 import os
+import sys
 
-VERSION = (3, 1, 16)
+VERSION = (3, 1, 17)
 __version__ = '.'.join(map(str, VERSION[0:3])) + ''.join(VERSION[3:])
 __author__ = 'Ask Solem'
 __contact__ = 'ask at celeryproject.org'
@@ -16,7 +17,18 @@ __license__ = 'BSD (3 clause)'
 # -eof meta-
 
 
-def setup_loader():
-    os.environ.setdefault('CELERY_LOADER', 'djcelery.loaders.DjangoLoader')
+if sys.version_info[0] == 3:
+
+    def setup_loader():
+        os.environ.setdefault(
+            'CELERY_LOADER', 'djcelery.loaders.DjangoLoader',
+        )
+
+else:
+
+    def setup_loader():  # noqa
+        os.environ.setdefault(
+            b'CELERY_LOADER', b'djcelery.loaders.DjangoLoader',
+        )
 
 from celery import current_app as celery  # noqa
diff --git a/djcelery/backends/cache.py b/djcelery/backends/cache.py
index 7006bf0..40588bb 100644
--- a/djcelery/backends/cache.py
+++ b/djcelery/backends/cache.py
@@ -37,7 +37,7 @@ class DjangoMemcacheWrapper(object):
 # Check if django is using memcache as the cache backend. If so, wrap the
 # cache object in a DjangoMemcacheWrapper for Django < 1.2 that fixes a bug
 # with retrieving pickled data.
-from django.core.cache.backends.base import InvalidCacheBackendError
+from django.core.cache.backends.base import InvalidCacheBackendError  # noqa
 try:
     from django.core.cache.backends.memcached import CacheClass
 except (ImportError, AttributeError, InvalidCacheBackendError):
diff --git a/djcelery/compat.py b/djcelery/compat.py
index 053f0ca..fc797a3 100644
--- a/djcelery/compat.py
+++ b/djcelery/compat.py
@@ -1,7 +1,10 @@
 from __future__ import absolute_import
 
+import os
 import sys
 
+from kombu.utils.encoding import bytes_to_str, str_to_bytes
+
 PY2 = sys.version_info[0] == 2
 PY3 = sys.version_info[0] == 3
 
@@ -25,7 +28,17 @@ def python_2_unicode_compatible(cls):
 
 if PY3:
     unicode = str
-    itervalues = lambda x: x.values()
+
+    def itervalues(x):
+        return x.values()
+
+    def setenv(k, v):
+        os.environ[bytes_to_str(k)] = bytes_to_str(v)
 else:
     unicode = unicode
-    itervalues = lambda x: x.itervalues()
+
+    def itervalues(x):  # noqa
+        return x.itervalues()
+
+    def setenv(k, v):  # noqa
+        os.environ[str_to_bytes(k)] = str_to_bytes(v)
diff --git a/djcelery/management/base.py b/djcelery/management/base.py
index 2949acc..11520f1 100644
--- a/djcelery/management/base.py
+++ b/djcelery/management/base.py
@@ -1,13 +1,13 @@
 from __future__ import absolute_import, unicode_literals
 
+import celery
+import djcelery
 import django
-import os
 import sys
 
 from django.core.management.base import BaseCommand
 
-import celery
-import djcelery
+from djcelery.compat import setenv
 
 DB_SHARED_THREAD = """\
 DatabaseWrapper objects created in a thread can only \
@@ -39,8 +39,8 @@ def patch_thread_ident():
                 self._thread_ident = _get_ident()
 
             def _validate_thread_sharing(self):
-                if (not self.allow_thread_sharing
-                        and self._thread_ident != _get_ident()):
+                if (not self.allow_thread_sharing and
+                        self._thread_ident != _get_ident()):
                     raise DatabaseError(
                         DB_SHARED_THREAD % (
                             self.alias, self._thread_ident, _get_ident()),
@@ -75,7 +75,7 @@ class CeleryCommand(BaseCommand):
         super(CeleryCommand, self).execute(*args, **options)
 
     def set_broker(self, broker):
-        os.environ['CELERY_BROKER_URL'] = broker
+        setenv('CELERY_BROKER_URL', broker)
 
     def run_from_argv(self, argv):
         self.handle_default_options(argv[2:])
@@ -90,7 +90,7 @@ class CeleryCommand(BaseCommand):
             # called with the resulting options parsed by optparse.
             if '--settings=' in arg:
                 _, settings_module = arg.split('=')
-                os.environ['DJANGO_SETTINGS_MODULE'] = settings_module
+                setenv('DJANGO_SETTINGS_MODULE', settings_module)
             elif '--pythonpath=' in arg:
                 _, pythonpath = arg.split('=')
                 sys.path.insert(0, pythonpath)
diff --git a/djcelery/management/commands/celery.py b/djcelery/management/commands/celery.py
index f0c8b29..4839e0b 100644
--- a/djcelery/management/commands/celery.py
+++ b/djcelery/management/commands/celery.py
@@ -11,9 +11,9 @@ base = celery.CeleryCommand(app=app)
 class Command(CeleryCommand):
     """The celery command."""
     help = 'celery commands, see celery help'
-    options = (CeleryCommand.options
-               + base.get_options()
-               + base.preload_options)
+    options = (CeleryCommand.options +
+               base.get_options() +
+               base.preload_options)
 
     def run_from_argv(self, argv):
         argv = self.handle_default_options(argv)
diff --git a/djcelery/management/commands/celerybeat.py b/djcelery/management/commands/celerybeat.py
index c91a134..e4573dc 100644
--- a/djcelery/management/commands/celerybeat.py
+++ b/djcelery/management/commands/celerybeat.py
@@ -15,9 +15,9 @@ beat = beat.beat(app=app)
 
 class Command(CeleryCommand):
     """Run the celery periodic task scheduler."""
-    options = (CeleryCommand.options
-               + beat.get_options()
-               + beat.preload_options)
+    options = (CeleryCommand.options +
+               beat.get_options() +
+               beat.preload_options)
     help = 'Old alias to the "celery beat" command.'
 
     def handle(self, *args, **options):
diff --git a/djcelery/management/commands/celerycam.py b/djcelery/management/commands/celerycam.py
index 8686a5a..2849b44 100644
--- a/djcelery/management/commands/celerycam.py
+++ b/djcelery/management/commands/celerycam.py
@@ -15,9 +15,9 @@ ev = events.events(app=app)
 
 class Command(CeleryCommand):
     """Run the celery curses event viewer."""
-    options = (CeleryCommand.options
-               + ev.get_options()
-               + ev.preload_options)
+    options = (CeleryCommand.options +
+               ev.get_options() +
+               ev.preload_options)
     help = 'Takes snapshots of the clusters state to the database.'
 
     def handle(self, *args, **options):
diff --git a/djcelery/management/commands/celeryd.py b/djcelery/management/commands/celeryd.py
index 586fa74..0ed4c40 100644
--- a/djcelery/management/commands/celeryd.py
+++ b/djcelery/management/commands/celeryd.py
@@ -16,9 +16,9 @@ worker = worker.worker(app=app)
 class Command(CeleryCommand):
     """Run the celery daemon."""
     help = 'Old alias to the "celery worker" command.'
-    options = (CeleryCommand.options
-               + worker.get_options()
-               + worker.preload_options)
+    options = (CeleryCommand.options +
+               worker.get_options() +
+               worker.preload_options)
 
     def handle(self, *args, **options):
         worker.check_args(args)
diff --git a/djcelery/management/commands/celerymon.py b/djcelery/management/commands/celerymon.py
index 7c42484..91317a4 100644
--- a/djcelery/management/commands/celerymon.py
+++ b/djcelery/management/commands/celerymon.py
@@ -30,8 +30,8 @@ or if you're still using easy_install (shame on you!)
 
 class Command(CeleryCommand):
     """Run the celery monitor."""
-    options = (CeleryCommand.options
-               + (mon and mon.get_options() + mon.preload_options or ()))
+    options = (CeleryCommand.options +
+               (mon and mon.get_options() + mon.preload_options or ()))
     help = 'Run the celery monitor'
 
     def handle(self, *args, **options):
diff --git a/djcelery/management/commands/djcelerymon.py b/djcelery/management/commands/djcelerymon.py
index 9310155..29a09fc 100644
--- a/djcelery/management/commands/djcelerymon.py
+++ b/djcelery/management/commands/djcelerymon.py
@@ -32,9 +32,9 @@ class WebserverThread(threading.Thread):
 class Command(CeleryCommand):
     """Run the celery curses event viewer."""
     args = '[optional port number, or ipaddr:port]'
-    options = (runserver.Command.option_list
-               + ev.get_options()
-               + ev.preload_options)
+    options = (runserver.Command.option_list +
+               ev.get_options() +
+               ev.preload_options)
     help = 'Starts Django Admin instance and celerycam in the same process.'
     # see http://code.djangoproject.com/changeset/13319.
     stdout, stderr = sys.stdout, sys.stderr
diff --git a/djcelery/migrations/0001_initial.py b/djcelery/migrations/0001_initial.py
index ffe6049..6b8e292 100644
--- a/djcelery/migrations/0001_initial.py
+++ b/djcelery/migrations/0001_initial.py
@@ -1,206 +1,265 @@
-# encoding: utf-8
-from __future__ import absolute_import
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.dev20151005181923 on 2015-10-09 22:39
+from __future__ import absolute_import, unicode_literals
 
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-from django.db import DatabaseError
+from django.db import migrations, models
+import django.db.models.deletion
+import djcelery.picklefield
 
 
-class Migration(SchemaMigration):
+class Migration(migrations.Migration):
 
-    def forwards(self, orm):
+    initial = True
 
-        # Adding model 'TaskMeta'
-        db.create_table('celery_taskmeta', (
-                ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-                ('task_id', self.gf('django.db.models.fields.CharField')(unique=True, max_length=255)),
-                ('status', self.gf('django.db.models.fields.CharField')(default='PENDING', max_length=50)),
-                ('result', self.gf('djcelery.picklefield.PickledObjectField')(default=None, null=True)),
-                ('date_done', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)),
-                ('traceback', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),))
-        db.send_create_signal('djcelery', ['TaskMeta'])
+    dependencies = [
+    ]
 
-        # Adding model 'TaskSetMeta'
-        db.create_table('celery_tasksetmeta', (
-                ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-                ('taskset_id', self.gf('django.db.models.fields.CharField')(unique=True, max_length=255)),
-                ('result', self.gf('djcelery.picklefield.PickledObjectField')()),
-                ('date_done', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)),))
-        db.send_create_signal('djcelery', ['TaskSetMeta'])
-
-        # Adding model 'IntervalSchedule'
-        db.create_table('djcelery_intervalschedule', (
-                ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-                ('every', self.gf('django.db.models.fields.IntegerField')()),
-                ('period', self.gf('django.db.models.fields.CharField')(max_length=24)),))
-        db.send_create_signal('djcelery', ['IntervalSchedule'])
-
-        # Adding model 'CrontabSchedule'
-        db.create_table('djcelery_crontabschedule', (
-                ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-                ('minute', self.gf('django.db.models.fields.CharField')(default='*', max_length=64)),
-                ('hour', self.gf('django.db.models.fields.CharField')(default='*', max_length=64)),
-                ('day_of_week', self.gf('django.db.models.fields.CharField')(default='*', max_length=64)),))
-        db.send_create_signal('djcelery', ['CrontabSchedule'])
-
-        # Adding model 'PeriodicTasks'
-        db.create_table('djcelery_periodictasks', (
-                ('ident', self.gf('django.db.models.fields.SmallIntegerField')(default=1, unique=True, primary_key=True)),
-                ('last_update', self.gf('django.db.models.fields.DateTimeField')()),))
-        db.send_create_signal('djcelery', ['PeriodicTasks'])
-
-        # Adding model 'PeriodicTask'
-        db.create_table('djcelery_periodictask', (
-                ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-                ('name', self.gf('django.db.models.fields.CharField')(unique=True, max_length=200)),
-                ('task', self.gf('django.db.models.fields.CharField')(max_length=200)),
-                ('interval', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['djcelery.IntervalSchedule'], null=True, blank=True)),
-                ('crontab', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['djcelery.CrontabSchedule'], null=True, blank=True)),
-                ('args', self.gf('django.db.models.fields.TextField')(default='[]', blank=True)),
-                ('kwargs', self.gf('django.db.models.fields.TextField')(default='{}', blank=True)),
-                ('queue', self.gf('django.db.models.fields.CharField')(default=None, max_length=200, null=True, blank=True)),
-                ('exchange', self.gf('django.db.models.fields.CharField')(default=None, max_length=200, null=True, blank=True)),
-                ('routing_key', self.gf('django.db.models.fields.CharField')(default=None, max_length=200, null=True, blank=True)),
-                ('expires', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True)),
-                ('enabled', self.gf('django.db.models.fields.BooleanField')(default=True)),
-                ('last_run_at', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True)),
-                ('total_run_count', self.gf('django.db.models.fields.PositiveIntegerField')(default=0)),
-                ('date_changed', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)),))
-        db.send_create_signal('djcelery', ['PeriodicTask'])
-
-        # Adding model 'WorkerState'
-        db.create_table('djcelery_workerstate', (
-                ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-                ('hostname', self.gf('django.db.models.fields.CharField')(unique=True, max_length=255)),
-                ('last_heartbeat', self.gf('django.db.models.fields.DateTimeField')(null=True, db_index=True)),))
-        db.send_create_signal('djcelery', ['WorkerState'])
-
-        # Adding model 'TaskState'
-        db.create_table('djcelery_taskstate', (
-                ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-                ('state', self.gf('django.db.models.fields.CharField')(max_length=64, db_index=True)),
-                ('task_id', self.gf('django.db.models.fields.CharField')(unique=True, max_length=36)),
-                ('name', self.gf('django.db.models.fields.CharField')(max_length=200, null=True, db_index=True)),
-                ('tstamp', self.gf('django.db.models.fields.DateTimeField')(db_index=True)),
-                ('args', self.gf('django.db.models.fields.TextField')(null=True)),
-                ('kwargs', self.gf('django.db.models.fields.TextField')(null=True)),
-                ('eta', self.gf('django.db.models.fields.DateTimeField')(null=True)),
-                ('expires', self.gf('django.db.models.fields.DateTimeField')(null=True)),
-                ('result', self.gf('django.db.models.fields.TextField')(null=True)),
-                ('traceback', self.gf('django.db.models.fields.TextField')(null=True)),
-                ('runtime', self.gf('django.db.models.fields.FloatField')(null=True)),
-                ('retries', self.gf('django.db.models.fields.IntegerField')(default=0)),
-                ('worker', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['djcelery.WorkerState'], null=True)),
-                ('hidden', self.gf('django.db.models.fields.BooleanField')(default=False, db_index=True)),))
-        db.send_create_signal('djcelery', ['TaskState'])
-
-
-    def backwards(self, orm):
-
-        # Deleting model 'TaskMeta'
-        db.delete_table('celery_taskmeta')
-
-        # Deleting model 'TaskSetMeta'
-        db.delete_table('celery_tasksetmeta')
-
-        # Deleting model 'IntervalSchedule'
-        db.delete_table('djcelery_intervalschedule')
-
-        # Deleting model 'CrontabSchedule'
-        db.delete_table('djcelery_crontabschedule')
-
-        # Deleting model 'PeriodicTasks'
-        db.delete_table('djcelery_periodictasks')
-
-        # Deleting model 'PeriodicTask'
-        db.delete_table('djcelery_periodictask')
-
-        # Deleting model 'WorkerState'
-        db.delete_table('djcelery_workerstate')
-
-        # Deleting model 'TaskState'
-        db.delete_table('djcelery_taskstate')
-
-
-    models = {
-        'djcelery.crontabschedule': {
-            'Meta': {'object_name': 'CrontabSchedule'},
-            'day_of_week': ('django.db.models.fields.CharField', [], {'default': "'*'", 'max_length': '64'}),
-            'hour': ('django.db.models.fields.CharField', [], {'default': "'*'", 'max_length': '64'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'minute': ('django.db.models.fields.CharField', [], {'default': "'*'", 'max_length': '64'})
-        },
-        'djcelery.intervalschedule': {
-            'Meta': {'object_name': 'IntervalSchedule'},
-            'every': ('django.db.models.fields.IntegerField', [], {}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'period': ('django.db.models.fields.CharField', [], {'max_length': '24'})
-        },
-        'djcelery.periodictask': {
-            'Meta': {'object_name': 'PeriodicTask'},
-            'args': ('django.db.models.fields.TextField', [], {'default': "'[]'", 'blank': 'True'}),
-            'crontab': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['djcelery.CrontabSchedule']", 'null': 'True', 'blank': 'True'}),
-            'date_changed': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
-            'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
-            'exchange': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '200', 'null': 'True', 'blank': 'True'}),
-            'expires': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'interval': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['djcelery.IntervalSchedule']", 'null': 'True', 'blank': 'True'}),
-            'kwargs': ('django.db.models.fields.TextField', [], {'default': "'{}'", 'blank': 'True'}),
-            'last_run_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '200'}),
-            'queue': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '200', 'null': 'True', 'blank': 'True'}),
-            'routing_key': ('django.db.models.fields.CharField', [], {'default': 'None', 'max_length': '200', 'null': 'True', 'blank': 'True'}),
-            'task': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
-            'total_run_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'})
-        },
-        'djcelery.periodictasks': {
-            'Meta': {'object_name': 'PeriodicTasks'},
-            'ident': ('django.db.models.fields.SmallIntegerField', [], {'default': '1', 'unique': 'True', 'primary_key': 'True'}),
-            'last_update': ('django.db.models.fields.DateTimeField', [], {})
-        },
-        'djcelery.taskmeta': {
-            'Meta': {'object_name': 'TaskMeta', 'db_table': "'celery_taskmeta'"},
-            'date_done': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'result': ('djcelery.picklefield.PickledObjectField', [], {'default': 'None', 'null': 'True'}),
-            'status': ('django.db.models.fields.CharField', [], {'default': "'PENDING'", 'max_length': '50'}),
-            'task_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
-            'traceback': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
-        },
-        'djcelery.tasksetmeta': {
-            'Meta': {'object_name': 'TaskSetMeta', 'db_table': "'celery_tasksetmeta'"},
-            'date_done': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'result': ('djcelery.picklefield.PickledObjectField', [], {}),
-            'taskset_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'})
-        },
-        'djcelery.taskstate': {
-            'Meta': {'ordering': "['-tstamp']", 'object_name': 'TaskState'},
-            'args': ('django.db.models.fields.TextField', [], {'null': 'True'}),
-            'eta': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'expires': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
-            'hidden': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'kwargs': ('django.db.models.fields.TextField', [], {'null': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'db_index': 'True'}),
-            'result': ('django.db.models.fields.TextField', [], {'null': 'True'}),
-            'retries': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
-            'runtime': ('django.db.models.fields.FloatField', [], {'null': 'True'}),
-            'state': ('django.db.models.fields.CharField', [], {'max_length': '64', 'db_index': 'True'}),
-            'task_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36'}),
-            'traceback': ('django.db.models.fields.TextField', [], {'null': 'True'}),
-            'tstamp': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),
-            'worker': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['djcelery.WorkerState']", 'null': 'True'})
-        },
-        'djcelery.workerstate': {
-            'Meta': {'ordering': "['-last_heartbeat']", 'object_name': 'WorkerState'},
-            'hostname': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'last_heartbeat': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'db_index': 'True'})
-        }
-    }
-
-    complete_apps = ['djcelery']
+    operations = [
+        migrations.CreateModel(
+            name='CrontabSchedule',
+            fields=[
+                ('id', models.AutoField(
+                    auto_created=True, primary_key=True,
+                    serialize=False, verbose_name='ID')),
+                ('minute', models.CharField(
+                    default='*', max_length=64, verbose_name='minute')),
+                ('hour', models.CharField(
+                    default='*', max_length=64, verbose_name='hour')),
+                ('day_of_week', models.CharField(
+                    default='*', max_length=64, verbose_name='day of week')),
+                ('day_of_month', models.CharField(
+                    default='*', max_length=64, verbose_name='day of month')),
+                ('month_of_year', models.CharField(
+                    default='*', max_length=64, verbose_name='month of year')),
+            ],
+            options={
+                'ordering': [
+                    'month_of_year', 'day_of_month',
+                    'day_of_week', 'hour', 'minute'],
+                'verbose_name': 'crontab',
+                'verbose_name_plural': 'crontabs',
+            },
+        ),
+        migrations.CreateModel(
+            name='IntervalSchedule',
+            fields=[
+                ('id', models.AutoField(
+                    auto_created=True, primary_key=True,
+                    serialize=False, verbose_name='ID')),
+                ('every', models.IntegerField(verbose_name='every')),
+                ('period', models.CharField(
+                    choices=[
+                        ('days', 'Days'),
+                        ('hours', 'Hours'),
+                        ('minutes', 'Minutes'),
+                        ('seconds', 'Seconds'),
+                        ('microseconds', 'Microseconds')],
+                    max_length=24, verbose_name='period')),
+            ],
+            options={
+                'ordering': ['period', 'every'],
+                'verbose_name': 'interval',
+                'verbose_name_plural': 'intervals',
+            },
+        ),
+        migrations.CreateModel(
+            name='PeriodicTask',
+            fields=[
+                ('id', models.AutoField(
+                    auto_created=True, primary_key=True,
+                    serialize=False, verbose_name='ID')),
+                ('name', models.CharField(
+                    help_text='Useful description', max_length=200,
+                    unique=True, verbose_name='name')),
+                ('task', models.CharField(
+                    max_length=200, verbose_name='task name')),
+                ('args', models.TextField(
+                    blank=True, default='[]',
+                    help_text='JSON encoded positional arguments',
+                    verbose_name='Arguments')),
+                ('kwargs', models.TextField(
+                    blank=True, default='{}',
+                    help_text='JSON encoded keyword arguments',
+                    verbose_name='Keyword arguments')),
+                ('queue', models.CharField(
+                    blank=True, default=None,
+                    help_text='Queue defined in CELERY_QUEUES',
+                    max_length=200, null=True, verbose_name='queue')),
+                ('exchange', models.CharField(
+                    blank=True, default=None, max_length=200,
+                    null=True, verbose_name='exchange')),
+                ('routing_key', models.CharField(
+                    blank=True, default=None, max_length=200,
+                    null=True, verbose_name='routing key')),
+                ('expires', models.DateTimeField(
+                    blank=True, null=True, verbose_name='expires')),
+                ('enabled', models.BooleanField(
+                    default=True, verbose_name='enabled')),
+                ('last_run_at', models.DateTimeField(
+                    blank=True, editable=False, null=True)),
+                ('total_run_count', models.PositiveIntegerField(
+                    default=0, editable=False)),
+                ('date_changed', models.DateTimeField(
+                    auto_now=True)),
+                ('description', models.TextField(
+                    blank=True, verbose_name='description')),
+                ('crontab', models.ForeignKey(
+                    blank=True,
+                    help_text='Use one of interval/crontab', null=True,
+                    on_delete=django.db.models.deletion.CASCADE,
+                    to='djcelery.CrontabSchedule', verbose_name='crontab')),
+                ('interval', models.ForeignKey(
+                    blank=True, null=True,
+                    on_delete=django.db.models.deletion.CASCADE,
+                    to='djcelery.IntervalSchedule', verbose_name='interval')),
+            ],
+            options={
+                'verbose_name': 'periodic task',
+                'verbose_name_plural': 'periodic tasks',
+            },
+        ),
+        migrations.CreateModel(
+            name='PeriodicTasks',
+            fields=[
+                ('ident', models.SmallIntegerField(
+                    default=1, primary_key=True,
+                    serialize=False, unique=True)),
+                ('last_update', models.DateTimeField()),
+            ],
+        ),
+        migrations.CreateModel(
+            name='TaskMeta',
+            fields=[
+                ('id', models.AutoField(
+                    auto_created=True, primary_key=True,
+                    serialize=False, verbose_name='ID')),
+                ('task_id', models.CharField(
+                    max_length=255, unique=True,
+                    verbose_name='task id')),
+                ('status', models.CharField(
+                    choices=[
+                        (b'RECEIVED', b'RECEIVED'),
+                        (b'RETRY', b'RETRY'),
+                        (b'REVOKED', b'REVOKED'),
+                        (b'SUCCESS', b'SUCCESS'),
+                        (b'STARTED', b'STARTED'),
+                        (b'FAILURE', b'FAILURE'),
+                        (b'PENDING', b'PENDING')],
+                    default=b'PENDING', max_length=50,
+                    verbose_name='state')),
+                ('result', djcelery.picklefield.PickledObjectField(
+                    default=None, editable=False, null=True)),
+                ('date_done', models.DateTimeField(
+                    auto_now=True, verbose_name='done at')),
+                ('traceback', models.TextField(
+                    blank=True, null=True, verbose_name='traceback')),
+                ('hidden', models.BooleanField(
+                    db_index=True, default=False, editable=False)),
+                ('meta', djcelery.picklefield.PickledObjectField(
+                    default=None, editable=False, null=True)),
+            ],
+            options={
+                'db_table': 'celery_taskmeta',
+                'verbose_name': 'task state',
+                'verbose_name_plural': 'task states',
+            },
+        ),
+        migrations.CreateModel(
+            name='TaskSetMeta',
+            fields=[
+                ('id', models.AutoField(
+                    auto_created=True, primary_key=True,
+                    serialize=False, verbose_name='ID')),
+                ('taskset_id', models.CharField(
+                    max_length=255, unique=True,
+                    verbose_name='group id')),
+                ('result', djcelery.picklefield.PickledObjectField(
+                    editable=False)),
+                ('date_done', models.DateTimeField(
+                    auto_now=True, verbose_name='created at')),
+                ('hidden', models.BooleanField(
+                    db_index=True, default=False, editable=False)),
+            ],
+            options={
+                'db_table': 'celery_tasksetmeta',
+                'verbose_name': 'saved group result',
+                'verbose_name_plural': 'saved group results',
+            },
+        ),
+        migrations.CreateModel(
+            name='TaskState',
+            fields=[
+                ('id', models.AutoField(
+                    auto_created=True, primary_key=True,
+                    serialize=False, verbose_name='ID')),
+                ('state', models.CharField(
+                    choices=[
+                        (b'RECEIVED', b'RECEIVED'),
+                        (b'RETRY', b'RETRY'),
+                        (b'REVOKED', b'REVOKED'),
+                        (b'SUCCESS', b'SUCCESS'),
+                        (b'STARTED', b'STARTED'),
+                        (b'FAILURE', b'FAILURE'),
+                        (b'PENDING', b'PENDING')],
+                    db_index=True, max_length=64, verbose_name='state')),
+                ('task_id', models.CharField(
+                    max_length=36, unique=True, verbose_name='UUID')),
+                ('name', models.CharField(
+                    db_index=True, max_length=200,
+                    null=True, verbose_name='name')),
+                ('tstamp', models.DateTimeField(
+                    db_index=True, verbose_name='event received at')),
+                ('args', models.TextField(
+                    null=True, verbose_name='Arguments')),
+                ('kwargs', models.TextField(
+                    null=True, verbose_name='Keyword arguments')),
+                ('eta', models.DateTimeField(
+                    null=True, verbose_name='ETA')),
+                ('expires', models.DateTimeField(
+                    null=True, verbose_name='expires')),
+                ('result', models.TextField(
+                    null=True, verbose_name='result')),
+                ('traceback', models.TextField(
+                    null=True, verbose_name='traceback')),
+                ('runtime', models.FloatField(
+                    help_text='in seconds if task succeeded',
+                    null=True, verbose_name='execution time')),
+                ('retries', models.IntegerField(
+                    default=0, verbose_name='number of retries')),
+                ('hidden', models.BooleanField(
+                    db_index=True, default=False, editable=False)),
+            ],
+            options={
+                'ordering': ['-tstamp'],
+                'get_latest_by': 'tstamp',
+                'verbose_name': 'task',
+                'verbose_name_plural': 'tasks',
+            },
+        ),
+        migrations.CreateModel(
+            name='WorkerState',
+            fields=[
+                ('id', models.AutoField(
+                    auto_created=True, primary_key=True,
+                    serialize=False, verbose_name='ID')),
+                ('hostname', models.CharField(
+                    max_length=255, unique=True, verbose_name='hostname')),
+                ('last_heartbeat', models.DateTimeField(
+                    db_index=True, null=True, verbose_name='last heartbeat')),
+            ],
+            options={
+                'ordering': ['-last_heartbeat'],
+                'get_latest_by': 'last_heartbeat',
+                'verbose_name': 'worker',
+                'verbose_name_plural': 'workers',
+            },
+        ),
+        migrations.AddField(
+            model_name='taskstate',
+            name='worker',
+            field=models.ForeignKey(
+                null=True,
+                on_delete=django.db.models.deletion.CASCADE,
+                to='djcelery.WorkerState', verbose_name='worker'),
+        ),
+    ]
diff --git a/djcelery/migrations/__init__.py b/djcelery/migrations/__init__.py
index e69de29..14b82ff 100644
--- a/djcelery/migrations/__init__.py
+++ b/djcelery/migrations/__init__.py
@@ -0,0 +1,16 @@
+from __future__ import absolute_import
+
+SOUTH_ERROR_MESSAGE = """
+For South support, customize the SOUTH_MIGRATION_MODULES setting
+to point to the correct migrations module:
+
+    SOUTH_MIGRATION_MODULES = {
+        'djcelery': 'djcelery.south_migrations',
+    }
+"""
+
+try:
+    from django.db import migrations  # noqa
+except ImportError:
+    from django.core.exceptions import ImproperlyConfigured
+    raise ImproperlyConfigured(SOUTH_ERROR_MESSAGE)
diff --git a/djcelery/models.py b/djcelery/models.py
index 23e89ce..1436662 100644
--- a/djcelery/models.py
+++ b/djcelery/models.py
@@ -1,6 +1,6 @@
 from __future__ import absolute_import, unicode_literals
 
-from datetime import timedelta, datetime
+from datetime import timedelta
 from time import time, mktime, gmtime
 
 from django.core.exceptions import MultipleObjectsReturned, ValidationError
@@ -16,12 +16,16 @@ from celery.utils.timeutils import timedelta_seconds
 
 from . import managers
 from .picklefield import PickledObjectField
-from .utils import now
+from .utils import fromtimestamp, now
 from .compat import python_2_unicode_compatible
 
 TASK_STATE_CHOICES = zip(states.ALL_STATES, states.ALL_STATES)
 
 
+def cronexp(field):
+    return field and str(field).replace(' ', '') or '*'
+
+
 @python_2_unicode_compatible
 class TaskMeta(models.Model):
     """Task result/status."""
@@ -121,7 +125,7 @@ class IntervalSchedule(models.Model):
     def __str__(self):
         if self.every == 1:
             return _('every {0.period_singular}').format(self)
-        return _('every {0.every} {0.period}').format(self)
+        return _('every {0.every:d} {0.period}').format(self)
 
     @property
     def period_singular(self):
@@ -149,10 +153,12 @@ class CrontabSchedule(models.Model):
                     'day_of_week', 'hour', 'minute']
 
     def __str__(self):
-        rfield = lambda f: f and str(f).replace(' ', '') or '*'
         return '{0} {1} {2} {3} {4} (m/h/d/dM/MY)'.format(
-            rfield(self.minute), rfield(self.hour), rfield(self.day_of_week),
-            rfield(self.day_of_month), rfield(self.month_of_year),
+            cronexp(self.minute),
+            cronexp(self.hour),
+            cronexp(self.day_of_week),
+            cronexp(self.day_of_month),
+            cronexp(self.month_of_year),
         )
 
     @property
@@ -360,11 +366,11 @@ class TaskState(models.Model):
 
     def save(self, *args, **kwargs):
         if self.eta is not None:
-            self.eta = datetime.utcfromtimestamp(float('%d.%s' % (
+            self.eta = fromtimestamp(float('%d.%s' % (
                 mktime(self.eta.timetuple()), self.eta.microsecond,
             )))
         if self.expires is not None:
-            self.expires = datetime.utcfromtimestamp(float('%d.%s' % (
+            self.expires = fromtimestamp(float('%d.%s' % (
                 mktime(self.expires.timetuple()), self.expires.microsecond,
... 419 lines suppressed ...

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/python-modules/packages/django-celery.git



More information about the Python-modules-commits mailing list