From f4f8af1382f1d972e979464ddfb4abd6af532558 Mon Sep 17 00:00:00 2001 From: Ilan Steemers Date: Mon, 7 Sep 2015 20:24:21 +0200 Subject: [PATCH 1/3] Fixes backward compatibility problems with django-picklefield --- django_q/__init__.py | 2 +- django_q/models.py | 11 ++++++++++- django_q/tests/test_cluster.py | 4 ++-- docs/conf.py | 2 +- requirements.txt | 2 +- setup.py | 4 ++-- 6 files changed, 17 insertions(+), 8 deletions(-) diff --git a/django_q/__init__.py b/django_q/__init__.py index 5e04c6e5..4a9d8ad2 100644 --- a/django_q/__init__.py +++ b/django_q/__init__.py @@ -9,6 +9,6 @@ from .cluster import Cluster from .status import Stat -VERSION = (0, 6, 1) +VERSION = (0, 6, 2) default_app_config = 'django_q.apps.DjangoQConfig' diff --git a/django_q/models.py b/django_q/models.py index 96453137..8ec74b71 100644 --- a/django_q/models.py +++ b/django_q/models.py @@ -38,7 +38,7 @@ def get_result_group(group_id, failures=False): values = Task.objects.filter(group=group_id).values_list('result', flat=True) else: values = Task.objects.filter(group=group_id).exclude(success=False).values_list('result', flat=True) - return [dbsafe_decode(t) for t in values] + return decode_results(values) @staticmethod def get_group_count(group_id, failures=False): @@ -186,3 +186,12 @@ class Meta: verbose_name = _('Scheduled task') verbose_name_plural = _('Scheduled tasks') ordering = ['next_run'] + + +# Backwards compatibility for Django 1.7 +if hasattr(PickledObjectField, 'from_db_value'): + def decode_results(values): + return values +else: + def decode_results(values): + return [dbsafe_decode(v) for v in values] diff --git a/django_q/tests/test_cluster.py b/django_q/tests/test_cluster.py index 16d131e0..5df7bcbe 100644 --- a/django_q/tests/test_cluster.py +++ b/django_q/tests/test_cluster.py @@ -209,8 +209,8 @@ def test_async(broker, admin_user): assert fetch(result_j.name) == result_j assert result(result_j.name) == result_j.result # groups - assert result_group('test_j') == [result_j.result] - assert result_group('test_j', failures=True) == [result_j.result] + assert result_group('test_j')[0] == result_j.result + assert result_group('test_j', failures=True)[0] == result_j.result assert fetch_group('test_j')[0].id == [result_j][0].id assert fetch_group('test_j', failures=False)[0].id == [result_j][0].id assert count_group('test_j') == 1 diff --git a/docs/conf.py b/docs/conf.py index 7188024d..bc9e9b65 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -72,7 +72,7 @@ # The short X.Y version. version = '0.6' # The full version, including alpha/beta/rc tags. -release = '0.6.1' +release = '0.6.2' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/requirements.txt b/requirements.txt index 66f973d8..9fce9599 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,7 +6,7 @@ # arrow==0.6.0 blessed==1.9.5 -django-picklefield==0.3.1 +django-picklefield==0.3.2 django-redis==4.2.0 future==0.15.0 hiredis==0.2.0 diff --git a/setup.py b/setup.py index 833492aa..d9ab8b07 100644 --- a/setup.py +++ b/setup.py @@ -26,7 +26,7 @@ def run(self): setup( name='django-q', - version='0.6.1', + version='0.6.2', author='Ilan Steemers', author_email='koed00@gmail.com', keywords='django task queue worker redis disque multiprocessing', @@ -36,7 +36,7 @@ def run(self): license='MIT', description='A multiprocessing task queue for Django', long_description=README, - install_requires=['django>=1.7', 'django-picklefield===0.3.1', 'blessed', 'arrow', 'future'], + install_requires=['django>=1.7', 'django-picklefield', 'blessed', 'arrow', 'future'], test_requires=['pytest', 'pytest-django', ], cmdclass={'test': PyTest}, classifiers=[ From e899b93c3f98f11bd60459d4f585f5a4a83e58d8 Mon Sep 17 00:00:00 2001 From: Ilan Steemers Date: Mon, 7 Sep 2015 20:35:51 +0200 Subject: [PATCH 2/3] determines decode with django version --- django_q/models.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/django_q/models.py b/django_q/models.py index 8ec74b71..87711c93 100644 --- a/django_q/models.py +++ b/django_q/models.py @@ -1,4 +1,5 @@ import logging +from django import get_version import importlib from django.core.urlresolvers import reverse @@ -33,7 +34,6 @@ def get_result(task_id): @staticmethod def get_result_group(group_id, failures=False): - # values + decode is 10 times faster than just list comprehension if failures: values = Task.objects.filter(group=group_id).values_list('result', flat=True) else: @@ -189,9 +189,10 @@ class Meta: # Backwards compatibility for Django 1.7 -if hasattr(PickledObjectField, 'from_db_value'): +if get_version().split('.')[1] == '8': def decode_results(values): return values else: + # decode values in 1.7 def decode_results(values): return [dbsafe_decode(v) for v in values] From 20780809452e8c0350a1ce80c3bd441e321aa3eb Mon Sep 17 00:00:00 2001 From: Ilan Steemers Date: Mon, 7 Sep 2015 20:38:13 +0200 Subject: [PATCH 3/3] determines decode with django version --- django_q/models.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/django_q/models.py b/django_q/models.py index 87711c93..d42d4aff 100644 --- a/django_q/models.py +++ b/django_q/models.py @@ -189,10 +189,10 @@ class Meta: # Backwards compatibility for Django 1.7 -if get_version().split('.')[1] == '8': - def decode_results(values): - return values -else: - # decode values in 1.7 - def decode_results(values): +def decode_results(values): + if get_version().split('.')[1] == '7': + # decode values in 1.7 return [dbsafe_decode(v) for v in values] + return values + +