ソースを参照

pwd and grp not available on Windows. Closes #210. Thanks to klibertb

Ask Solem 14 年 前
コミット
864402dd05
1 ファイル変更19 行追加5 行削除
  1. 19 5
      celery/platforms.py

+ 19 - 5
celery/platforms.py

@@ -1,7 +1,5 @@
 import os
 import sys
-import pwd
-import grp
 import errno
 import signal
 try:
@@ -15,6 +13,16 @@ try:
 except ImportError:
     CAN_DETACH = False
 
+try:
+    import pwd
+except ImportError:
+    pwd = None
+
+try:
+    import grp
+except ImportError:
+    grp = None
+
 DAEMON_UMASK = 0
 DAEMON_WORKDIR = "/"
 DAEMON_REDIRECT_TO = getattr(os, "devnull", "/dev/nulll")
@@ -208,7 +216,9 @@ def parse_uid(uid):
     try:
         return int(uid)
     except ValueError:
-        return pwd.getpwnam(uid).pw_uid
+        if pwd:
+            return pwd.getpwnam(uid).pw_uid
+        raise
 
 
 def parse_gid(gid):
@@ -221,7 +231,9 @@ def parse_gid(gid):
     try:
         return int(gid)
     except ValueError:
-        return grp.getgrnam(gid).gr_gid
+        if grp:
+            return grp.getgrnam(gid).gr_gid
+        raise
 
 
 def setegid(gid):
@@ -254,7 +266,9 @@ def set_effective_user(uid=None, gid=None):
 
     if uid:
         # If gid isn't defined, get the primary gid of the uer.
-        setegid(gid or pwd.getpwuid(uid).pw_gid)
+        if not gid and pwd:
+            gid = pwd.getpwuid(uid).pw_gid
+        setegid(gid)
         seteuid(uid)
     else:
         gid and setegid(gid)