Przeglądaj źródła

Added proper error messages in cases where app cannot be loaded.

Previously we'd simply crash with an exception. Now a proper error message is displayed.
Omer Katz 6 lat temu
rodzic
commit
20edd819c6
1 zmienionych plików z 20 dodań i 1 usunięć
  1. 20 1
      celery/bin/base.py

+ 20 - 1
celery/bin/base.py

@@ -50,6 +50,16 @@ Unrecognized command-line arguments: {0}
 Try --help?
 """
 
+UNABLE_TO_LOAD_APP_MODULE_NOT_FOUND = """
+Unable to load celery application.
+The module {0} was not found.
+"""
+
+UNABLE_TO_LOAD_APP_APP_MISSING = """
+Unable to load celery application.
+{0}
+"""
+
 find_long_opt = re.compile(r'.+?(--.+?)(?:\s|,|$)')
 find_rst_ref = re.compile(r':\w+:`(.+?)`')
 find_rst_decl = re.compile(r'^\s*\.\. .+?::.+$')
@@ -270,7 +280,16 @@ class Command(object):
 
         # Dump version and exit if '--version' arg set.
         self.early_version(argv)
-        argv = self.setup_app_from_commandline(argv)
+        try:
+            argv = self.setup_app_from_commandline(argv)
+        except ModuleNotFoundError as e:
+            self.on_error(UNABLE_TO_LOAD_APP_MODULE_NOT_FOUND.format(e.name))
+            return EX_FAILURE
+        except AttributeError as e:
+            msg = e.args[0].capitalize()
+            self.on_error(UNABLE_TO_LOAD_APP_APP_MISSING.format(msg))
+            return EX_FAILURE
+
         self.prog_name = os.path.basename(argv[0])
         return self.handle_argv(self.prog_name, argv[1:])