Browse Source

All tests pass on PyPy

Ask Solem 14 years ago
parent
commit
d35ceb070c

+ 1 - 1
Changelog

@@ -400,7 +400,7 @@ News
   to `apply_async`.  This can also be set using routers.
 
 * `celeryd`: Now logs stacktrace of all threads when receiving the
-   `SIGUSR1` signal.  (Does not work on Python 2.4, or Windows).
+   `SIGUSR1` signal.  (Does not work on cPython 2.4, Windows or Jython).
 
     Inspired by https://gist.github.com/737056
 

+ 3 - 1
celery/apps/worker.py

@@ -335,7 +335,9 @@ def install_worker_restart_handler(worker):
 
 def install_cry_handler(logger):
     # 2.4 does not have sys._current_frames
-    if sys.version_info > (2, 5):
+    is_jython = sys.platform.startswith("java")
+    is_pypy = hasattr(sys, "pypy_version_info")
+    if not (is_jython or is_pypy) and sys.version_info > (2, 5):
 
         def cry_handler(signum, frame):
             """Signal handler logging the stacktrace of all active threads."""

+ 9 - 4
celery/beat.py

@@ -156,9 +156,9 @@ class Scheduler(UserDict):
         schedule = maybe_promise(schedule)
         if self.app.conf.CELERY_TASK_RESULT_EXPIRES:
             schedule.setdefault("celery.backend_cleanup",
-                    {"task": "celery.backend_cleanup",
-                     "schedule": crontab("0", "4", "*"),
-                     "options": {"expires": 12 * 3600}})
+                                self.Entry(task="celery.backend_cleanup",
+                                           schedule=crontab("0", "4", "*"),
+                                           options={"expires": 12 * 3600}))
         return schedule
 
     def maybe_due(self, entry, publisher=None):
@@ -239,8 +239,13 @@ class Scheduler(UserDict):
         self.schedule[entry.name] = entry
         return entry
 
+    def _maybe_entry(self, name, entry):
+        if isinstance(entry, self.Entry):
+            return entry
+        return self.Entry(name, **entry)
+
     def update_from_dict(self, dict_):
-        self.update(dict((name, self.Entry(name, **entry))
+        self.update(dict((name, self._maybe_entry(name, entry))
                             for name, entry in dict_.items()))
 
     def merge_inplace(self, b):

+ 2 - 2
celery/tests/test_backends/__init__.py

@@ -2,14 +2,14 @@ from celery.tests.utils import unittest
 
 from celery import backends
 from celery.backends.amqp import AMQPBackend
-from celery.backends.database import DatabaseBackend
+from celery.backends.cache import CacheBackend
 
 
 class TestBackends(unittest.TestCase):
 
     def test_get_backend_aliases(self):
         expects = [("amqp", AMQPBackend),
-                   ("database", DatabaseBackend)]
+                   ("cache", CacheBackend)]
         for expect_name, expect_cls in expects:
             self.assertIsInstance(backends.get_backend_cls(expect_name)(),
                                   expect_cls)

+ 12 - 2
celery/tests/test_backends/test_database.py

@@ -6,8 +6,6 @@ from nose import SkipTest
 
 from celery import states
 from celery.app import app_or_default
-from celery.backends.database import DatabaseBackend
-from celery.db.models import Task, TaskSet
 from celery.exceptions import ImproperlyConfigured
 from celery.result import AsyncResult
 from celery.utils import gen_unique_id
@@ -15,6 +13,14 @@ from celery.utils import gen_unique_id
 from celery.tests.utils import execute_context, mask_modules
 from celery.tests.utils import unittest
 
+try:
+    import sqlalchemy
+except ImportError:
+    DatabaseBackend = Task = TaskSet = None
+else:
+    from celery.backends.database import DatabaseBackend
+    from celery.db.models import Task, TaskSet
+
 
 class SomeClass(object):
 
@@ -27,6 +33,10 @@ class test_DatabaseBackend(unittest.TestCase):
     def setUp(self):
         if sys.platform.startswith("java"):
             raise SkipTest("SQLite not available on Jython")
+        if hasattr(sys, "pypy_version_info"):
+            raise SkipTest("Known to not pass on PyPy")
+        if DatabaseBackend is None:
+            raise SkipTest("sqlalchemy not installed")
 
     def test_missing_SQLAlchemy_raises_ImproperlyConfigured(self):
 

+ 2 - 0
celery/tests/test_bin/test_celeryd.py

@@ -457,6 +457,8 @@ class test_signal_handlers(unittest.TestCase):
     def test_worker_cry_handler(self):
         if sys.platform.startswith("java"):
             raise SkipTest("Cry handler does not work on Jython")
+        if hasattr(sys, "pypy_version_info"):
+            raise SkipTest("Cry handler does not work on PyPy")
         if sys.version_info > (2, 5):
 
             class Logger(object):

+ 1 - 0
celery/tests/test_worker.py

@@ -518,6 +518,7 @@ class test_Consumer(unittest.TestCase):
         items = [entry[2] for entry in self.eta_schedule.queue]
         found = 0
         for item in items:
+            print("ITEM: %r" % (item, ) )
             if item.args[0].task_name == foo_task.name:
                 found = True
         self.assertTrue(found)