Browse Source

Autoreloader must reload from cwd

Ask Solem 13 years ago
parent
commit
0c75d4b01b
2 changed files with 10 additions and 5 deletions
  1. 8 1
      celery/utils/__init__.py
  2. 2 4
      celery/worker/__init__.py

+ 8 - 1
celery/utils/__init__.py

@@ -34,7 +34,7 @@ from kombu.utils.functional import promise, maybe_promise       # noqa
 uuid = gen_unique_id
 
 from ..exceptions import CPendingDeprecationWarning, CDeprecationWarning
-from .compat import StringIO
+from .compat import StringIO, reload
 
 LOG_LEVELS = dict(logging._levelNames)
 LOG_LEVELS["FATAL"] = logging.FATAL
@@ -392,6 +392,13 @@ def import_from_cwd(module, imp=None, package=None):
         return imp(module, package=package)
 
 
+def reload_from_cwd(module, reloader=None):
+    if reloader is None:
+        reloader = reload
+    with cwd_in_path():
+        return reloader(module)
+
+
 def cry():  # pragma: no cover
     """Return stacktrace of all active threads.
 

+ 2 - 4
celery/worker/__init__.py

@@ -30,8 +30,7 @@ from ..app import app_or_default
 from ..app.abstract import configurated, from_config
 from ..exceptions import SystemTerminate
 from ..log import SilenceRepeated
-from ..utils import noop, qualname
-from ..utils.compat import reload as _reload
+from ..utils import noop, qualname, reload_from_cwd
 
 from . import state
 from .buckets import TaskBucket, FastQueue
@@ -297,7 +296,6 @@ class WorkController(configurated):
         self._shutdown_complete.set()
 
     def reload(self, modules=None, reload=False, reloader=None):
-        reloader = _reload if reloader is None else reloader
         modules = self.app.loader.task_modules if modules is None else modules
         imp = self.app.loader.import_from_cwd
 
@@ -307,7 +305,7 @@ class WorkController(configurated):
                 imp(module)
             elif reload:
                 self.logger.debug("reloading module %s" % (module, ))
-                reloader(sys.modules[module])
+                reload_from_cwd(sys.modules[module], reloader)
         self.pool.restart()
 
     def on_timer_error(self, einfo):