소스 검색

Multi should support both -f and --logfile. Closes #1541

Ask Solem 11 년 전
부모
커밋
52e8c75330
1개의 변경된 파일26개의 추가작업 그리고 5개의 파일을 삭제
  1. 26 5
      celery/bin/multi.py

+ 26 - 5
celery/bin/multi.py

@@ -247,8 +247,8 @@ class MultiTool(object):
         self.retcode = int(any(retcodes))
 
     def with_detacher_default_options(self, p):
-        p.options.setdefault('--pidfile', '%N.pid')
-        p.options.setdefault('--logfile', '%N.log')
+        _setdefaultopt(p.options, ['--pidfile', '-p'], '%N.pid')
+        _setdefaultopt(p.options, ['--logfile', '-f'], '%N.log')
         p.options.setdefault(
             '--cmd',
             '-m {0}'.format(celery_exe('worker', '--detach')),
@@ -320,14 +320,16 @@ class MultiTool(object):
             self.note('')
 
     def getpids(self, p, cmd, callback=None):
-        p.options.setdefault('--pidfile', '%N.pid')
+        _setdefaultopt(p.options, ['--pidfile', '-p'], '%N.pid')
 
         nodes = []
         for node in multi_args(p, cmd):
             try:
-                pidfile_template = p.namespaces[node.namespace]['--pidfile']
+                pidfile_template = _getopt(
+                    p.namespaces[node.namespace], ['--pidfile', '-p'],
+                )
             except KeyError:
-                pidfile_template = p.options['--pidfile']
+                pidfile_template = _getopt(p.options, ['--pidfile', '-p'])
             pid = None
             pidfile = node.expander(pidfile_template)
             try:
@@ -602,5 +604,24 @@ def findsig(args, default=signal.SIGTERM):
                 return getattr(signal, maybe_sig)
     return default
 
+
+def _getopt(d, alt):
+    for opt in alt:
+        try:
+            return d[opt]
+        except KeyError:
+            pass
+    raise KeyError(alt[0])
+
+
+def _setdefaultopt(d, alt, value):
+    for opt in alt[1:]:
+        try:
+            return d[opt]
+        except KeyError:
+            pass
+    return d.setdefault(alt[0], value)
+
+
 if __name__ == '__main__':              # pragma: no cover
     main()