Bläddra i källkod

Merge branch '2.3' of github.com:ask/celery into 2.3

Mher Movsisyan 14 år sedan
förälder
incheckning
38a225b86d

+ 68 - 58
celery/tests/test_task/test_task.py

@@ -575,38 +575,38 @@ def patch_crontab_nowfun(cls, retval):
 class test_crontab_parser(unittest.TestCase):
 
     def test_parse_star(self):
-        self.assertEquals(crontab_parser(24).parse('*'), set(range(24)))
-        self.assertEquals(crontab_parser(60).parse('*'), set(range(60)))
-        self.assertEquals(crontab_parser(7).parse('*'), set(range(7)))
+        self.assertEqual(crontab_parser(24).parse('*'), set(range(24)))
+        self.assertEqual(crontab_parser(60).parse('*'), set(range(60)))
+        self.assertEqual(crontab_parser(7).parse('*'), set(range(7)))
 
     def test_parse_range(self):
-        self.assertEquals(crontab_parser(60).parse('1-10'),
+        self.assertEqual(crontab_parser(60).parse('1-10'),
                           set(range(1, 10 + 1)))
-        self.assertEquals(crontab_parser(24).parse('0-20'),
+        self.assertEqual(crontab_parser(24).parse('0-20'),
                           set(range(0, 20 + 1)))
-        self.assertEquals(crontab_parser().parse('2-10'),
+        self.assertEqual(crontab_parser().parse('2-10'),
                           set(range(2, 10 + 1)))
 
     def test_parse_groups(self):
-        self.assertEquals(crontab_parser().parse('1,2,3,4'),
+        self.assertEqual(crontab_parser().parse('1,2,3,4'),
                           set([1, 2, 3, 4]))
-        self.assertEquals(crontab_parser().parse('0,15,30,45'),
+        self.assertEqual(crontab_parser().parse('0,15,30,45'),
                           set([0, 15, 30, 45]))
 
     def test_parse_steps(self):
-        self.assertEquals(crontab_parser(8).parse('*/2'),
+        self.assertEqual(crontab_parser(8).parse('*/2'),
                           set([0, 2, 4, 6]))
-        self.assertEquals(crontab_parser().parse('*/2'),
+        self.assertEqual(crontab_parser().parse('*/2'),
                           set(i * 2 for i in xrange(30)))
-        self.assertEquals(crontab_parser().parse('*/3'),
+        self.assertEqual(crontab_parser().parse('*/3'),
                           set(i * 3 for i in xrange(20)))
 
     def test_parse_composite(self):
-        self.assertEquals(crontab_parser(8).parse('*/2'), set([0, 2, 4, 6]))
-        self.assertEquals(crontab_parser().parse('2-9/5'), set([5]))
-        self.assertEquals(crontab_parser().parse('2-10/5'), set([5, 10]))
-        self.assertEquals(crontab_parser().parse('2-11/5,3'), set([3, 5, 10]))
-        self.assertEquals(crontab_parser().parse('2-4/3,*/5,0-21/4'),
+        self.assertEqual(crontab_parser(8).parse('*/2'), set([0, 2, 4, 6]))
+        self.assertEqual(crontab_parser().parse('2-9/5'), set([5]))
+        self.assertEqual(crontab_parser().parse('2-10/5'), set([5, 10]))
+        self.assertEqual(crontab_parser().parse('2-11/5,3'), set([3, 5, 10]))
+        self.assertEqual(crontab_parser().parse('2-4/3,*/5,0-21/4'),
                 set([0, 3, 4, 5, 8, 10, 12, 15, 16,
                     20, 25, 30, 35, 40, 45, 50, 55]))
 
@@ -651,45 +651,45 @@ class test_crontab_remaining_estimate(unittest.TestCase):
     def test_next_minute(self):
         next = self.next_ocurrance(crontab(),
                                    datetime(2010, 9, 11, 14, 30, 15))
-        self.assertEquals(next, datetime(2010, 9, 11, 14, 31))
+        self.assertEqual(next, datetime(2010, 9, 11, 14, 31))
 
     def test_not_next_minute(self):
         next = self.next_ocurrance(crontab(),
                                    datetime(2010, 9, 11, 14, 59, 15))
-        self.assertEquals(next, datetime(2010, 9, 11, 15, 0))
+        self.assertEqual(next, datetime(2010, 9, 11, 15, 0))
 
     def test_this_hour(self):
         next = self.next_ocurrance(crontab(minute=[5, 42]),
                                    datetime(2010, 9, 11, 14, 30, 15))
-        self.assertEquals(next, datetime(2010, 9, 11, 14, 42))
+        self.assertEqual(next, datetime(2010, 9, 11, 14, 42))
 
     def test_not_this_hour(self):
         next = self.next_ocurrance(crontab(minute=[5, 10, 15]),
                                    datetime(2010, 9, 11, 14, 30, 15))
-        self.assertEquals(next, datetime(2010, 9, 11, 15, 5))
+        self.assertEqual(next, datetime(2010, 9, 11, 15, 5))
 
     def test_today(self):
         next = self.next_ocurrance(crontab(minute=[5, 42], hour=[12, 17]),
                                    datetime(2010, 9, 11, 14, 30, 15))
-        self.assertEquals(next, datetime(2010, 9, 11, 17, 5))
+        self.assertEqual(next, datetime(2010, 9, 11, 17, 5))
 
     def test_not_today(self):
         next = self.next_ocurrance(crontab(minute=[5, 42], hour=[12]),
                                    datetime(2010, 9, 11, 14, 30, 15))
-        self.assertEquals(next, datetime(2010, 9, 12, 12, 5))
+        self.assertEqual(next, datetime(2010, 9, 12, 12, 5))
 
     def test_weekday(self):
         next = self.next_ocurrance(crontab(minute=30,
                                            hour=14,
                                            day_of_week="sat"),
                                    datetime(2010, 9, 11, 14, 30, 15))
-        self.assertEquals(next, datetime(2010, 9, 18, 14, 30))
+        self.assertEqual(next, datetime(2010, 9, 18, 14, 30))
 
     def test_not_weekday(self):
         next = self.next_ocurrance(crontab(minute=[5, 42],
                                            day_of_week="mon-fri"),
                                    datetime(2010, 9, 11, 14, 30, 15))
-        self.assertEquals(next, datetime(2010, 9, 13, 0, 5))
+        self.assertEqual(next, datetime(2010, 9, 13, 0, 5))
 
 
 class test_crontab_is_due(unittest.TestCase):
@@ -700,25 +700,25 @@ class test_crontab_is_due(unittest.TestCase):
 
     def test_default_crontab_spec(self):
         c = crontab()
-        self.assertEquals(c.minute, set(range(60)))
-        self.assertEquals(c.hour, set(range(24)))
-        self.assertEquals(c.day_of_week, set(range(7)))
+        self.assertEqual(c.minute, set(range(60)))
+        self.assertEqual(c.hour, set(range(24)))
+        self.assertEqual(c.day_of_week, set(range(7)))
 
     def test_simple_crontab_spec(self):
         c = crontab(minute=30)
-        self.assertEquals(c.minute, set([30]))
-        self.assertEquals(c.hour, set(range(24)))
-        self.assertEquals(c.day_of_week, set(range(7)))
+        self.assertEqual(c.minute, set([30]))
+        self.assertEqual(c.hour, set(range(24)))
+        self.assertEqual(c.day_of_week, set(range(7)))
 
     def test_crontab_spec_minute_formats(self):
         c = crontab(minute=30)
-        self.assertEquals(c.minute, set([30]))
+        self.assertEqual(c.minute, set([30]))
         c = crontab(minute='30')
-        self.assertEquals(c.minute, set([30]))
+        self.assertEqual(c.minute, set([30]))
         c = crontab(minute=(30, 40, 50))
-        self.assertEquals(c.minute, set([30, 40, 50]))
+        self.assertEqual(c.minute, set([30, 40, 50]))
         c = crontab(minute=set([30, 40, 50]))
-        self.assertEquals(c.minute, set([30, 40, 50]))
+        self.assertEqual(c.minute, set([30, 40, 50]))
 
     def test_crontab_spec_invalid_minute(self):
         self.assertRaises(ValueError, crontab, minute=60)
@@ -726,11 +726,11 @@ class test_crontab_is_due(unittest.TestCase):
 
     def test_crontab_spec_hour_formats(self):
         c = crontab(hour=6)
-        self.assertEquals(c.hour, set([6]))
+        self.assertEqual(c.hour, set([6]))
         c = crontab(hour='5')
-        self.assertEquals(c.hour, set([5]))
+        self.assertEqual(c.hour, set([5]))
         c = crontab(hour=(4, 8, 12))
-        self.assertEquals(c.hour, set([4, 8, 12]))
+        self.assertEqual(c.hour, set([4, 8, 12]))
 
     def test_crontab_spec_invalid_hour(self):
         self.assertRaises(ValueError, crontab, hour=24)
@@ -738,17 +738,27 @@ class test_crontab_is_due(unittest.TestCase):
 
     def test_crontab_spec_dow_formats(self):
         c = crontab(day_of_week=5)
-        self.assertEquals(c.day_of_week, set([5]))
+        self.assertEqual(c.day_of_week, set([5]))
         c = crontab(day_of_week='5')
-        self.assertEquals(c.day_of_week, set([5]))
+        self.assertEqual(c.day_of_week, set([5]))
         c = crontab(day_of_week='fri')
-        self.assertEquals(c.day_of_week, set([5]))
+        self.assertEqual(c.day_of_week, set([5]))
         c = crontab(day_of_week='tuesday,sunday,fri')
-        self.assertEquals(c.day_of_week, set([0, 2, 5]))
+        self.assertEqual(c.day_of_week, set([0, 2, 5]))
         c = crontab(day_of_week='mon-fri')
-        self.assertEquals(c.day_of_week, set([1, 2, 3, 4, 5]))
+        self.assertEqual(c.day_of_week, set([1, 2, 3, 4, 5]))
         c = crontab(day_of_week='*/2')
-        self.assertEquals(c.day_of_week, set([0, 2, 4, 6]))
+        self.assertEqual(c.day_of_week, set([0, 2, 4, 6]))
+
+    def seconds_almost_equal(self, a, b, precision):
+        for index, skew in enumerate((+0.1, 0, -0.1)):
+            try:
+                self.assertAlmostEqual(a, b + skew, precision)
+            except AssertionError:
+                if index + 1 >= 3:
+                    raise
+            else:
+                break
 
     def test_crontab_spec_invalid_dow(self):
         self.assertRaises(ValueError, crontab, day_of_week='fooday-barday')
@@ -760,13 +770,13 @@ class test_crontab_is_due(unittest.TestCase):
         last_ran = self.now - timedelta(seconds=61)
         due, remaining = EveryMinutePeriodic().is_due(last_ran)
         self.assertTrue(due)
-        self.assertAlmostEquals(remaining, self.next_minute, 1)
+        self.seconds_almost_equal(remaining, self.next_minute, 1)
 
     def test_every_minute_execution_is_not_due(self):
         last_ran = self.now - timedelta(seconds=self.now.second)
         due, remaining = EveryMinutePeriodic().is_due(last_ran)
         self.assertFalse(due)
-        self.assertAlmostEquals(remaining, self.next_minute, 1)
+        self.seconds_almost_equal(remaining, self.next_minute, 1)
 
     # 29th of May 2010 is a saturday
     @patch_crontab_nowfun(HourlyPeriodic, datetime(2010, 5, 29, 10, 30))
@@ -774,7 +784,7 @@ class test_crontab_is_due(unittest.TestCase):
         last_ran = self.now - timedelta(seconds=61)
         due, remaining = EveryMinutePeriodic().is_due(last_ran)
         self.assertTrue(due)
-        self.assertAlmostEquals(remaining, self.next_minute, 1)
+        self.seconds_almost_equal(remaining, self.next_minute, 1)
 
     # 30th of May 2010 is a sunday
     @patch_crontab_nowfun(HourlyPeriodic, datetime(2010, 5, 30, 10, 30))
@@ -782,7 +792,7 @@ class test_crontab_is_due(unittest.TestCase):
         last_ran = self.now - timedelta(seconds=61)
         due, remaining = EveryMinutePeriodic().is_due(last_ran)
         self.assertTrue(due)
-        self.assertAlmostEquals(remaining, self.next_minute, 1)
+        self.seconds_almost_equal(remaining, self.next_minute, 1)
 
     # 31st of May 2010 is a monday
     @patch_crontab_nowfun(HourlyPeriodic, datetime(2010, 5, 31, 10, 30))
@@ -790,68 +800,68 @@ class test_crontab_is_due(unittest.TestCase):
         last_ran = self.now - timedelta(seconds=61)
         due, remaining = EveryMinutePeriodic().is_due(last_ran)
         self.assertTrue(due)
-        self.assertAlmostEquals(remaining, self.next_minute, 1)
+        self.seconds_almost_equal(remaining, self.next_minute, 1)
 
     @patch_crontab_nowfun(HourlyPeriodic, datetime(2010, 5, 10, 10, 30))
     def test_every_hour_execution_is_due(self):
         due, remaining = HourlyPeriodic().is_due(datetime(2010, 5, 10, 6, 30))
         self.assertTrue(due)
-        self.assertEquals(remaining, 60 * 60)
+        self.assertEqual(remaining, 60 * 60)
 
     @patch_crontab_nowfun(HourlyPeriodic, datetime(2010, 5, 10, 10, 29))
     def test_every_hour_execution_is_not_due(self):
         due, remaining = HourlyPeriodic().is_due(datetime(2010, 5, 10, 9, 30))
         self.assertFalse(due)
-        self.assertEquals(remaining, 60)
+        self.assertEqual(remaining, 60)
 
     @patch_crontab_nowfun(QuarterlyPeriodic, datetime(2010, 5, 10, 10, 15))
     def test_first_quarter_execution_is_due(self):
         due, remaining = QuarterlyPeriodic().is_due(
                             datetime(2010, 5, 10, 6, 30))
         self.assertTrue(due)
-        self.assertEquals(remaining, 15 * 60)
+        self.assertEqual(remaining, 15 * 60)
 
     @patch_crontab_nowfun(QuarterlyPeriodic, datetime(2010, 5, 10, 10, 30))
     def test_second_quarter_execution_is_due(self):
         due, remaining = QuarterlyPeriodic().is_due(
                             datetime(2010, 5, 10, 6, 30))
         self.assertTrue(due)
-        self.assertEquals(remaining, 15 * 60)
+        self.assertEqual(remaining, 15 * 60)
 
     @patch_crontab_nowfun(QuarterlyPeriodic, datetime(2010, 5, 10, 10, 14))
     def test_first_quarter_execution_is_not_due(self):
         due, remaining = QuarterlyPeriodic().is_due(
                             datetime(2010, 5, 10, 10, 0))
         self.assertFalse(due)
-        self.assertEquals(remaining, 60)
+        self.assertEqual(remaining, 60)
 
     @patch_crontab_nowfun(QuarterlyPeriodic, datetime(2010, 5, 10, 10, 29))
     def test_second_quarter_execution_is_not_due(self):
         due, remaining = QuarterlyPeriodic().is_due(
                             datetime(2010, 5, 10, 10, 15))
         self.assertFalse(due)
-        self.assertEquals(remaining, 60)
+        self.assertEqual(remaining, 60)
 
     @patch_crontab_nowfun(DailyPeriodic, datetime(2010, 5, 10, 7, 30))
     def test_daily_execution_is_due(self):
         due, remaining = DailyPeriodic().is_due(datetime(2010, 5, 9, 7, 30))
         self.assertTrue(due)
-        self.assertEquals(remaining, 24 * 60 * 60)
+        self.assertEqual(remaining, 24 * 60 * 60)
 
     @patch_crontab_nowfun(DailyPeriodic, datetime(2010, 5, 10, 10, 30))
     def test_daily_execution_is_not_due(self):
         due, remaining = DailyPeriodic().is_due(datetime(2010, 5, 10, 7, 30))
         self.assertFalse(due)
-        self.assertEquals(remaining, 21 * 60 * 60)
+        self.assertEqual(remaining, 21 * 60 * 60)
 
     @patch_crontab_nowfun(WeeklyPeriodic, datetime(2010, 5, 6, 7, 30))
     def test_weekly_execution_is_due(self):
         due, remaining = WeeklyPeriodic().is_due(datetime(2010, 4, 30, 7, 30))
         self.assertTrue(due)
-        self.assertEquals(remaining, 7 * 24 * 60 * 60)
+        self.assertEqual(remaining, 7 * 24 * 60 * 60)
 
     @patch_crontab_nowfun(WeeklyPeriodic, datetime(2010, 5, 7, 10, 30))
     def test_weekly_execution_is_not_due(self):
         due, remaining = WeeklyPeriodic().is_due(datetime(2010, 5, 6, 7, 30))
         self.assertFalse(due)
-        self.assertEquals(remaining, 6 * 24 * 60 * 60 - 3 * 60 * 60)
+        self.assertEqual(remaining, 6 * 24 * 60 * 60 - 3 * 60 * 60)

+ 1 - 1
celery/tests/test_utils/test_utils_timeutils.py

@@ -57,6 +57,6 @@ class test_timeutils(unittest.TestCase):
         D = timeutils.maybe_timedelta
 
         for i in (30, 30.6):
-            self.assertEquals(D(i), timedelta(seconds=i))
+            self.assertEqual(D(i), timedelta(seconds=i))
 
         self.assertEqual(D(timedelta(days=2)), timedelta(days=2))

+ 3 - 0
contrib/release/removepyc.sh

@@ -0,0 +1,3 @@
+#!/bin/bash
+(cd "${1:-.}";
+        find . -name "*.pyc" | xargs rm -- 2>/dev/null) || echo "ok"

+ 4 - 0
requirements/test-pypy.txt

@@ -0,0 +1,4 @@
+nose
+nose-cover3
+coverage>=3.0
+mock>=0.7.0

+ 85 - 20
tox.ini

@@ -1,33 +1,98 @@
 [tox]
-envlist = py25,py26,py27
+envlist = py25,py26,py27,pypy
 
 [testenv]
 distribute = True
 sitepackages = False
 commands = nosetests
 
-[testenv:py25]
-basepython = python2.5
-commands = pip -E {envdir} install -r contrib/requirements/default.txt
-           pip -E {envdir} install -r contrib/requirements/py25.txt
-           pip -E {envdir} install -r contrib/requirements/test.txt
-           nosetests --with-xunit --xunit-file=nosetests.xml \
-                     --with-coverage3  --cover3-xml          \
-                     --cover3-xml-file=coverage.xml
+[testenv:py32]
+recreate = True
+basepython = python3.2
+changedir = .tox
+deps = -r{toxinidir}/requirements/default.txt
+       -r{toxinidir}/requirements/test-py3k.txt
+commands = {toxinidir}/contrib/release/removepyc.sh {toxinidir}
+           nosetests -vd celery.tests                           \
+                --with-coverage3                                \
+                --cover3-branch                                 \
+                --cover3-xml                                    \
+                --cover3-xml-file={toxinidir}/coverage.xml      \
+                --cover3-html                                   \
+                --cover3-html-dir={toxinidir}/cover             \
+                --cover3-package=celery                         \
+                --cover3-exclude="celery celery.tests.*         \
+                        celery.bin.celeryd_multi                \
+                        celery.bin.celeryd_detach               \
+                        celery.bin.celeryctl                    \
+                        celery.bin.camqadm                      \
+                        celery.execute                          \
+                        celery.local                            \
+                        celery.platforms                        \
+                        celery.utils.patch                      \
+                        celery.utils.compat                     \
+                        celery.utils.mail                       \
+                        celery.utils.functional                 \
+                        celery.utils.dispatch*                  \
+                        celery.utils.term                       \
+                        celery.db.a805d4bd                      \
+                        celery.db.dfd042c7                      \
+                        celery.contrib*                         \
+                        celery.concurrency.threads              \
+                        celery.concurrency.processes.pool       \
+                        celery.concurrency.gevent               \
+                        celery.backends.mongodb                 \
+                        celery.backends.tyrant                  \
+                        celery.backends.cassandra               \
+                        celery.events.dumper                    \
+                        celery.events.cursesmon"                \
+                --with-xunit                                    \
+                --xunit-file={toxinidir}/nosetests.xml
+
+[testenv:py27]
+basepython = python2.7
+deps = -r{toxinidir}/requirements/default.txt
+       -r{toxinidir}/requirements/test.txt
+commands = {toxinidir}/contrib/release/removepyc.sh {toxinidir}
+           nosetests --with-xunit                               \
+                     --xunit-file={toxinidir}/nosetests.xml     \
+                     --with-coverage3 --cover3-xml              \
+                     --cover3-html-dir={toxinidir}/cover        \
+                     --cover3-xml-file={toxinidir}/coverage.xml
 
 [testenv:py26]
 basepython = python2.6
-commands = pip -E {envdir} install -r contrib/requirements/default.txt
+deps = -r{toxinidir}/requirements/default.txt
+       -r{toxinidir}/requirements/py26.txt
+       -r{toxinidir}/requirements/test.txt
+commands = {toxinidir}/contrib/release/removepyc.sh {toxinidir}
            pip -E {envdir} install -r contrib/requirements/py26.txt
            pip -E {envdir} install -r contrib/requirements/test.txt
-           nosetests --with-xunit --xunit-file=nosetests.xml \
-                     --with-coverage3  --cover3-xml          \
-                     --cover3-xml-file=coverage.xml
+           nosetests --with-xunit                               \
+                     --xunit-file={toxinidir}/nosetests.xml     \
+                     --with-coverage3 --cover3-xml              \
+                     --cover3-html-dir={toxinidir}/cover        \
+                     --cover3-xml-file={toxinidir}/coverage.xml
 
-[testenv:py27]
-basepython = python2.7
-commands = pip -E {envdir} install -r contrib/requirements/default.txt
-           pip -E {envdir} install -r contrib/requirements/test.txt
-           nosetests --with-xunit --xunit-file=nosetests.xml \
-                     --with-coverage3  --cover3-xml          \
-                     --cover3-xml-file=coverage.xml
+[testenv:py25]
+basepython = python2.5
+deps = -r{toxinidir}/requirements/default.txt
+       -r{toxinidir}/requirements/py25.txt
+       -r{toxinidir}/requirements/test.txt
+commands = {toxinidir}/contrib/release/removepyc.sh {toxinidir}
+           nosetests --with-xunit                               \
+                     --xunit-file={toxinidir}/nosetests.xml     \
+                     --with-coverage3 --cover3-xml              \
+                     --cover3-html-dir={toxinidir}/cover        \
+                     --cover3-xml-file={toxinidir}/coverage.xml
+
+[testenv:pypy]
+basepython = pypy
+deps = -r{toxinidir}/requirements/default.txt
+       -r{toxinidir}/requirements/test-pypy.txt
+commands = {toxinidir}/contrib/release/removepyc.sh {toxinidir}
+           nosetests --with-xunit                               \
+                     --xunit-file={toxinidir}/nosetests.xml     \
+                     --with-coverage3 --cover3-xml              \
+                     --cover3-html-dir={toxinidir}/cover        \
+                     --cover3-xml-file={toxinidir}/coverage.xml