Browse Source

Don't import any relative names.

Get rid of unused imports.

Fix minor bugs caught by 'pyflakes' (missing names).
Chris McDonough 18 năm trước cách đây
mục cha
commit
5e86fe8fd1

+ 5 - 4
src/supervisor/http.py

@@ -1,7 +1,3 @@
-from medusa import http_date
-from medusa import http_server
-from medusa import producers
-from medusa import filesys
 import asyncore
 import os
 import stat
@@ -13,6 +9,11 @@ import errno
 import pwd
 import urllib
 
+from medusa import http_date
+from medusa import http_server
+from medusa import producers
+from medusa import filesys
+
 NOT_DONE_YET = []
 
 class deferring_chunked_producer:

+ 3 - 3
src/supervisor/options.py

@@ -4,7 +4,6 @@ import socket
 import getopt
 import os
 import sys
-import datatypes
 import logging
 import tempfile
 import errno
@@ -22,6 +21,8 @@ import pkg_resources
 from fcntl import fcntl
 from fcntl import F_SETFL, F_GETFL
 
+from supervisor import datatypes
+
 VERSION = '2.3b1'
 
 class FileHandler(logging.StreamHandler):
@@ -1107,7 +1108,7 @@ class ServerOptions(Options):
             self.logger.info(msg)
 
     def make_process(self, config):
-        from supervisord import Subprocess
+        from supervisor.supervisord import Subprocess
         return Subprocess(self, config)
 
     def make_pipes(self):
@@ -1125,7 +1126,6 @@ class ServerOptions(Options):
         except OSError:
             for fd in pipes.values():
                 self.close_fd(fd)
-            subprocess.pipes = {}
 
     def close_parent_pipes(self, pipes):
         for fdname in ('stdin', 'stdout', 'stderr'):

+ 4 - 12
src/supervisor/supervisorctl.py

@@ -33,25 +33,17 @@ interactively is started.  Use the action "help" to find out about available
 actions.
 """
 
-import os
 import cmd
 import sys
-import time
 import getpass
 import xmlrpclib
-import urllib2
-import fcntl
 import socket
 import asyncore
 import errno
-import time
-import datetime
 import urlparse
 
-from options import ClientOptions
-from supervisord import ProcessStates
-from supervisord import getProcessStateDescription
-import xmlrpc
+from supervisor.options import ClientOptions
+from supervisor import xmlrpc
 
 class Controller(cmd.Cmd):
 
@@ -263,9 +255,9 @@ class Controller(cmd.Cmd):
         except xmlrpclib.Fault, e:
             template = '%s: ERROR (%s)'
             if e.faultCode == xmlrpc.Faults.NO_FILE:
-                self._output(template % (processname, 'no log file'))
+                self._output(template % ('supervisord', 'no log file'))
             elif e.faultCode == xmlrpc.Faults.FAILED:
-                self._output(template % (processname,
+                self._output(template % ('supervisord',
                                          'unknown error reading log'))
         else:
             self._output(output)

+ 3 - 4
src/supervisor/supervisord.py

@@ -44,7 +44,6 @@ import os
 import sys
 import time
 import errno
-import socket
 import select
 import signal
 import asyncore
@@ -53,9 +52,9 @@ import StringIO
 import shlex
 import logging
 
-from options import ServerOptions
-from options import decode_wait_status
-from options import signame
+from supervisor.options import ServerOptions
+from supervisor.options import decode_wait_status
+from supervisor.options import signame
 
 class ProcessStates:
     STOPPED = 0

+ 34 - 57
src/supervisor/tests.py

@@ -1,4 +1,3 @@
-#!/usr/bin/env python
 """Test suite for supervisord.py."""
 
 import os
@@ -9,32 +8,19 @@ import signal
 import tempfile
 import unittest
 import socket
-import pickle
-import pwd
 import errno
 from StringIO import StringIO
 from datetime import datetime
 
-import supervisord
-import datatypes
-import xmlrpc
-import http
-from supervisord import ProcessStates
-from supervisord import SupervisorStates
-try:
-    __file__
-except:
-    __file__ = sys.argv[0]
-
-
-DEBUG = 0
-
-
-import unittest
+from supervisor import datatypes
+from supervisor import xmlrpc
+from supervisor import http
+from supervisor.supervisord import ProcessStates
+from supervisor.supervisord import SupervisorStates
 
 class ServerOptionsTests(unittest.TestCase):
     def _getTargetClass(self):
-        from options import ServerOptions
+        from supervisor.options import ServerOptions
         return ServerOptions
 
     def _makeOne(self):
@@ -86,13 +72,11 @@ command=/bin/cat
 exitcodes=0,1,127
 """ % {'tempdir':tempfile.gettempdir()}
 
-        from StringIO import StringIO
         fp = StringIO(s)
         instance = self._makeOne()
         instance.configfile = fp
         instance.realize()
         options = instance.configroot.supervisord
-        import socket
         self.assertEqual(options.directory, tempfile.gettempdir())
         self.assertEqual(options.umask, 022)
         self.assertEqual(options.logfile, 'supervisord.log')
@@ -179,7 +163,7 @@ exitcodes=0,1,127
         self.assertEqual(instance.minprocs, 300)
 
     def test_readFile_failed(self):
-        from options import readFile
+        from supervisor.options import readFile
         try:
             readFile('/notthere', 0, 10)
         except ValueError, inst:
@@ -204,13 +188,11 @@ exitcodes=0,1,127
         self.assertEqual(result, "command at '/' is a directory")
 
     def test_cleanup_afunix_unlink(self):
-        import tempfile
         fn = tempfile.mktemp()
         f = open(fn, 'w')
         f.write('foo')
         f.close()
         instance = self._makeOne()
-        import socket
         class Port:
             family = socket.AF_UNIX
             address = fn
@@ -223,14 +205,12 @@ exitcodes=0,1,127
         self.failIf(os.path.exists(fn))
 
     def test_cleanup_afunix_nounlink(self):
-        import tempfile
         fn = tempfile.mktemp()
         try:
             f = open(fn, 'w')
             f.write('foo')
             f.close()
             instance = self._makeOne()
-            import socket
             class Port:
                 family = socket.AF_UNIX
                 address = fn
@@ -249,7 +229,6 @@ exitcodes=0,1,127
                 pass
 
     def test_write_pidfile_ok(self):
-        import tempfile
         fn = tempfile.mktemp()
         try:
             instance = self._makeOne()
@@ -268,7 +247,6 @@ exitcodes=0,1,127
                 pass
 
     def test_write_pidfile_fail(self):
-        import tempfile
         fn = '/cannot/possibly/exist'
         instance = self._makeOne()
         instance.logger = DummyLogger()
@@ -359,7 +337,7 @@ class MainXMLRPCInterfaceTests(TestBase):
     def test_traverse(self):
         dummy = DummyRPCInterface()
         interface = self._makeOne([('dummy', dummy)])
-        from xmlrpc import traverse
+        from supervisor.xmlrpc import traverse
         self._assertRPCError(xmlrpc.Faults.UNKNOWN_METHOD,
                              traverse, interface, 'notthere.hello', [])
         self._assertRPCError(xmlrpc.Faults.UNKNOWN_METHOD,
@@ -379,7 +357,6 @@ def makeExecutable(file, substitutions=None):
     for key in substitutions.keys():
         data = data.replace('<<%s>>' % key.upper(), substitutions[key])
     
-    import tempfile
     tmpnam = tempfile.mktemp(prefix=last)
     f = open(tmpnam, 'w')
     f.write(data)
@@ -425,7 +402,7 @@ class SupervisorNamespaceXMLRPCInterfaceTests(TestBase):
         supervisord = DummySupervisor()
         interface = self._makeOne(supervisord)
         version = interface.getSupervisorVersion()
-        import options
+        from supervisor import options
         self.assertEqual(version, options.VERSION)
         self.assertEqual(interface.update_text, 'getSupervisorVersion')
         
@@ -438,7 +415,7 @@ class SupervisorNamespaceXMLRPCInterfaceTests(TestBase):
         self.assertEqual(interface.update_text, 'getIdentification')
 
     def test_getState(self):
-        from supervisord import getSupervisorStateDescription
+        from supervisor.supervisord import getSupervisorStateDescription
         supervisord = DummySupervisor()
         interface = self._makeOne(supervisord)
         stateinfo = interface.getState()
@@ -626,8 +603,8 @@ class SupervisorNamespaceXMLRPCInterfaceTests(TestBase):
         supervisord = DummySupervisor({'foo':process, 'foo2':process2})
         interface = self._makeOne(supervisord)
         callback = interface.startAllProcesses()
-        from http import NOT_DONE_YET
-        from xmlrpc import Faults
+        from supervisor.http import NOT_DONE_YET
+        from supervisor.xmlrpc import Faults
 
         # create callbacks in startall()
         self.assertEqual(callback(), NOT_DONE_YET)
@@ -669,8 +646,8 @@ class SupervisorNamespaceXMLRPCInterfaceTests(TestBase):
         supervisord = DummySupervisor({'foo':process, 'foo2':process2})
         interface = self._makeOne(supervisord)
         callback = interface.startAllProcesses(wait=False)
-        from http import NOT_DONE_YET
-        from xmlrpc import Faults
+        from supervisor.http import NOT_DONE_YET
+        from supervisor.xmlrpc import Faults
 
         # create callbacks in startall()
         self.assertEqual(callback(), NOT_DONE_YET)
@@ -741,7 +718,7 @@ class SupervisorNamespaceXMLRPCInterfaceTests(TestBase):
         interface = self._makeOne(supervisord)
         start = _NOW -100
         stop  = _NOW -1
-        from supervisord import ProcessStates
+        from supervisor.supervisord import ProcessStates
         running = {'name':'running',
                    'pid':1,
                    'state':ProcessStates.RUNNING,
@@ -799,7 +776,7 @@ class SupervisorNamespaceXMLRPCInterfaceTests(TestBase):
                    
 
     def test_getProcessInfo(self):
-        from supervisord import ProcessStates
+        from supervisor.supervisord import ProcessStates
 
         options = DummyOptions()
         config = DummyPConfig('foo', '/bin/foo', logfile='/tmp/fleeb.bar')
@@ -824,7 +801,7 @@ class SupervisorNamespaceXMLRPCInterfaceTests(TestBase):
         self.failUnless(data['description'].startswith('pid 111'))
 
     def test_getAllProcessInfo(self):
-        from supervisord import ProcessStates
+        from supervisor.supervisord import ProcessStates
         options = DummyOptions()
 
         p1config = DummyPConfig('process1', '/bin/process1', priority=1,
@@ -1025,7 +1002,6 @@ class SupervisorNamespaceXMLRPCInterfaceTests(TestBase):
     
     def test_tailProcessLog_unreadable(self):
         """nothing is returned if the log doesn't exist yet"""
-        from string import letters
         options = DummyOptions()
         config = DummyPConfig('foo', '/bin/foo', logfile='/tmp/fooooooo')
         process = DummyProcess(options, config)
@@ -1143,7 +1119,7 @@ class SystemNamespaceXMLRPCInterfaceTests(TestBase):
     def test_allMethodDocs(self):
         # belt-and-suspenders test for docstring-as-typing parsing correctness
         # and documentation validity vs. implementation
-        import options
+        from supervisor import options
         _RPCTYPES = ['int', 'double', 'string', 'boolean', 'dateTime.iso8601',
                      'base64', 'binary', 'array', 'struct']
         interface = self._makeOne()
@@ -1281,10 +1257,11 @@ class SystemNamespaceXMLRPCInterfaceTests(TestBase):
 
 class SubprocessTests(unittest.TestCase):
     def _getTargetClass(self):
-        return supervisord.Subprocess
+        from supervisor.supervisord import Subprocess
+        return Subprocess
 
     def _makeOne(self, *arg, **kw):
-        return supervisord.Subprocess(*arg, **kw)
+        return self._getTargetClass()(*arg, **kw)
 
     def test_ctor(self):
         options = DummyOptions()
@@ -1765,7 +1742,7 @@ class SubprocessTests(unittest.TestCase):
     def test_get_state(self):
         options = DummyOptions()
         config = DummyPConfig('notthere', '/notthere', logfile='/tmp/foo')
-        from supervisord import ProcessStates
+        from supervisor.supervisord import ProcessStates
 
         instance = self._makeOne(options, config)
         instance.killing = True
@@ -1809,7 +1786,7 @@ class SubprocessTests(unittest.TestCase):
     def test_strip_ansi(self):
         executable = '/bin/cat'
         options = DummyOptions()
-        from options import getLogger
+        from supervisor.options import getLogger
         options.getLogger = getLogger
         options.strip_ansi = True
         config = DummyPConfig('output', executable, logfile='/tmp/foo')
@@ -1853,7 +1830,7 @@ class XMLRPCMarshallingTests(unittest.TestCase):
 
 class XMLRPCHandlerTests(unittest.TestCase):
     def _getTargetClass(self):
-        from xmlrpc import supervisor_xmlrpc_handler
+        from supervisor.xmlrpc import supervisor_xmlrpc_handler
         return supervisor_xmlrpc_handler
     
     def _makeOne(self, supervisord, subinterfaces):
@@ -1864,7 +1841,7 @@ class XMLRPCHandlerTests(unittest.TestCase):
         subinterfaces = [('supervisor', DummySupervisorRPCNamespace())]
         handler = self._makeOne(supervisor, subinterfaces)
         self.assertEqual(handler.supervisord, supervisor)
-        from xmlrpc import RootRPCInterface
+        from supervisor.xmlrpc import RootRPCInterface
         self.assertEqual(handler.rpcinterface.__class__, RootRPCInterface)
 
     def test_continue_request_nosuchmethod(self):
@@ -1927,7 +1904,7 @@ class XMLRPCHandlerTests(unittest.TestCase):
 
 class LogtailHandlerTests(unittest.TestCase):
     def _getTargetClass(self):
-        from http import logtail_handler
+        from supervisor.http import logtail_handler
         return logtail_handler
 
     def _makeOne(self, supervisord):
@@ -1973,7 +1950,7 @@ class LogtailHandlerTests(unittest.TestCase):
 
 class SupervisordTests(unittest.TestCase):
     def _getTargetClass(self):
-        from supervisord import Supervisor
+        from supervisor.supervisord import Supervisor
         return Supervisor
 
     def _makeOne(self, options):
@@ -2002,7 +1979,7 @@ class SupervisordTests(unittest.TestCase):
         self.assertEqual(options.cleaned_up, True)
 
     def test_get_state(self):
-        from supervisord import SupervisorStates
+        from supervisor.supervisord import SupervisorStates
         options = DummyOptions()
         supervisord = self._makeOne(options)
         self.assertEqual(supervisord.get_state(), SupervisorStates.ACTIVE)
@@ -2010,7 +1987,7 @@ class SupervisordTests(unittest.TestCase):
         self.assertEqual(supervisord.get_state(), SupervisorStates.SHUTDOWN)
 
     def test_start_necessary(self):
-        from supervisord import ProcessStates
+        from supervisor.supervisord import ProcessStates
         options = DummyOptions()
         pconfig1 = DummyPConfig('killed', 'killed', '/bin/killed')
         process1 = DummyProcess(options, pconfig1, ProcessStates.EXITED)
@@ -2215,7 +2192,7 @@ class SupervisordTests(unittest.TestCase):
 
 class ControllerTests(unittest.TestCase):
     def _getTargetClass(self):
-        from supervisorctl import Controller
+        from supervisor.supervisorctl import Controller
         return Controller
 
     def _makeOne(self, options):
@@ -2605,7 +2582,7 @@ baz            STOPPED    baz description
         
 class TailFProducerTests(unittest.TestCase):
     def _getTargetClass(self):
-        from http import tail_f_producer
+        from supervisor.http import tail_f_producer
         return tail_f_producer
 
     def _makeOne(self, request, filename, head):
@@ -2633,7 +2610,7 @@ class TailFProducerTests(unittest.TestCase):
 
 class BasicAuthTransportTests(unittest.TestCase):
     def _getTargetClass(self):
-        from options import BasicAuthTransport
+        from supervisor.options import BasicAuthTransport
         return BasicAuthTransport
 
     def _makeOne(self, username=None, password=None, serverurl=None):
@@ -2655,7 +2632,7 @@ class BasicAuthTransportTests(unittest.TestCase):
 
 class StatusViewTests(unittest.TestCase):
     def _getTargetClass(self):
-        from web import StatusView
+        from supervisor.web import StatusView
         return StatusView
 
     def _makeOne(self, context):
@@ -2973,7 +2950,7 @@ class DummyOptions:
         self.environment_processed = True
 
     def stripEscapes(self, data):
-        from options import ServerOptions
+        from supervisor.options import ServerOptions
         o = ServerOptions()
         return o.stripEscapes(data)
 

+ 8 - 7
src/supervisor/web.py

@@ -1,20 +1,21 @@
 import os
 import re
 import cgi
-import meld3
 import time
 import traceback
 import urllib
-from options import readFile
+import datetime
+
 from medusa import default_handler
 from medusa import producers
 from medusa.http_server import http_date
 from medusa.http_server import get_header
-from medusa import producers
-from supervisord import ProcessStates
-from http import NOT_DONE_YET
-import xmlrpc
-import datetime
+
+import meld3
+
+from supervisor import xmlrpc
+from supervisor.supervisord import ProcessStates
+from supervisor.http import NOT_DONE_YET
 
 class DeferredWebProducer:
     """ A medusa producer that implements a deferred callback; requires

+ 1 - 3
src/supervisor/xmlrpc.py

@@ -6,9 +6,6 @@ import types
 import re
 import traceback
 import StringIO
-import tempfile
-import errno
-import signal
 import time
 
 from supervisord import ProcessStates
@@ -492,6 +489,7 @@ class SupervisorNamespaceRPCInterface:
                                 (process.config.name,
                                  self.stopProcess(process.config.name)))
                         except RPCError, e:
+                            name = process.config.name
                             results.append({'name':name, 'status':e.code,
                                             'description':e.text})
                             continue