changeset 4960:2a024d3e418f

simplify wikiserver configuration by using same names as werkzeug's run_simple wikiserverconfig changes: use hostname=... now (not interface=... any more) using --interface for the moin server standalone command still works (--hostname is also supported) we can add options/arguments for werkzeug's run_simple and our own run_server now easily, just the option name needs to be listed in the kwargs processing. stuff not explicitely declared as param in run_server will get passed through to run_simple via **kw made DefaultConfig a new style class removed unsupported options (leftovers from pre-WSGI standalone server)
author Thomas Waldmann <tw AT waldmann-edv DOT de>
date Tue, 25 Aug 2009 18:46:40 +0200
parents 18474c316dd7
children 022388540d94
files MoinMoin/script/server/standalone.py MoinMoin/web/serving.py wikiserverconfig.py
diffstat 3 files changed, 72 insertions(+), 41 deletions(-) [+]
line wrap: on
line diff
--- a/MoinMoin/script/server/standalone.py	Tue Aug 25 16:39:07 2009 +0200
+++ b/MoinMoin/script/server/standalone.py	Tue Aug 25 18:46:40 2009 +0200
@@ -34,8 +34,8 @@
             help="Set the port to listen on. Default: 8080"
         )
         self.parser.add_option(
-            "--interface", dest="interface",
-            help="Set the ip to listen on. Use \"\" for all interfaces. Default: localhost"
+            "--hostname", "--interface", dest="hostname",
+            help="Set the ip/hostname to listen on. Use \"\" for all interfaces. Default: localhost"
         )
         self.parser.add_option(
             "--start", dest="start", action="store_true",
@@ -88,33 +88,43 @@
                     raise
 
             # intialize some defaults if missing
-            for option in ('docs', 'user', 'group', 'port', 'interface', 'debug'):
-                if not hasattr(Config, option):
-                    value = getattr(DefaultConfig, option)
-                    setattr(Config, option, value)
+            kwargs = {}
+            for option in ('user', 'group',
+                           'hostname', 'port',
+                           'threaded', 'processes',
+                           'debug', 'use_evalex',
+                           'use_reloader', 'extra_files', 'reloader_interval',
+                           'docs', 'static_files', ):
+                if hasattr(Config, option):
+                    kwargs[option] = getattr(Config, option)
+                else:
+                    # usually inheriting from DefaultConfig should make this superfluous,
+                    # but who knows what users write into their config...
+                    kwargs[option] = getattr(DefaultConfig, option)
 
-            # override with cmdline options
+            # override config settings with cmdline options:
             if self.options.docs:
-                Config.docs = self.options.docs
+                kwargs['docs'] = self.options.docs
             if self.options.user:
-                Config.user = self.options.user
+                kwargs['user'] = self.options.user
             if self.options.group:
-                Config.group = self.options.group
+                kwargs['group'] = self.options.group
+            if self.options.debug:
+                kwargs['debug'] = self.options.debug
+
+            if self.options.hostname is not None: # needs to work for "" value also
+                kwargs['hostname'] = self.options.hostname
             if self.options.port:
-                Config.port = self.options.port
-            if self.options.interface is not None: # needs to work for "" value also
-                Config.interface = self.options.interface
-            if self.options.debug:
-                Config.debug = self.options.debug
+                kwargs['port'] = self.options.port
 
             if self.options.start:
-                daemon = Daemon('moin', pidfile, run_server, Config)
+                daemon = Daemon('moin', pidfile, run_server, [], kwargs)
                 daemon.do_start()
             else:
-                run_server(Config.interface, Config.port, Config.docs,
-                           debug=Config.debug, user=Config.user, group=Config.group)
+                run_server(**kwargs)
 
-class DefaultConfig:
+
+class DefaultConfig(object):
     # where the static data is served from - you can either use:
     # docs = True  # serve the builtin static data from MoinMoin/web/static/htdocs/
     # docs = '/where/ever/you/like/to/keep/htdocs'  # serve it from the given path
@@ -122,9 +132,31 @@
     #               # you serve them in some other working way)
     docs = True
 
+    # user and group to run moin as:
     user = None
     group = None
-    port = 8080
-    interface = 'localhost'
+
+    # debugging options: 'off', 'web', 'external'
     debug = 'off'
 
+    # should the exception evaluation feature be enabled?
+    use_evalex = True
+
+    # Werkzeug run_simple arguments below here:
+
+    # hostname/ip and port the server listens on:
+    hostname = 'localhost'
+    port = 8080
+
+    # either multi-thread or multi-process (not both):
+    threaded = True
+    processes = 1
+
+    # automatic code reloader - needs testing!
+    use_reloader = False
+    extra_files = None
+    reloader_interval = 1
+
+    # use this later instead of our middleware-setup in MoinMoin.web.static:
+    static_files = None
+
--- a/MoinMoin/web/serving.py	Tue Aug 25 16:39:07 2009 +0200
+++ b/MoinMoin/web/serving.py	Tue Aug 25 18:46:40 2009 +0200
@@ -128,8 +128,12 @@
         raise RuntimeError("can't change uid/gid to %s/%s" % (uid, gid))
     logging.info("Running as uid/gid %d/%d" % (uid, gid))
 
-def run_server(host='localhost', port=8080, docs=True,
-               threaded=True, debug='off', user=None, group=None):
+def run_server(hostname='localhost', port=8080,
+               docs=True,
+               debug='off',
+               user=None, group=None,
+               threaded=True,
+               **kw):
     """ Run a standalone server on specified host/port. """
     application = make_application(shared=docs)
 
@@ -145,8 +149,11 @@
         # thread then will just terminate when an exception happens
         threaded = False
 
-    run_simple(host, port, application, threaded=threaded,
+    run_simple(hostname=hostname, port=port,
+               application=application,
+               threaded=threaded, 
                use_debugger=(debug == 'web'),
                passthrough_errors=(debug == 'external'),
-               request_handler=RequestHandler)
+               request_handler=RequestHandler,
+               **kw)
 
--- a/wikiserverconfig.py	Tue Aug 25 16:39:07 2009 +0200
+++ b/wikiserverconfig.py	Tue Aug 25 18:46:40 2009 +0200
@@ -7,28 +7,19 @@
 from MoinMoin.script.server.standalone import DefaultConfig
 
 class LocalConfig(DefaultConfig):
-    port = 8080 # if you use port < 1024, you need to start as root
+    # hostname or IP the server listens on
+    # use '' for all interfaces
+    # or "1.2.3.4" for some specific IP
+    #hostname = 'localhost'
+
+    # if you use port < 1024, you need to start as root
+    #port = 8080
 
     # if you start the server as root, the standalone server can change
     # to this user and group, e.g. 'www-data'
     #user = ''
     #group = ''
 
-    # use '' for all interface or "1.2.3.4" for some specific IP
-    #interface = 'localhost'
-
-    # where the static data is served from - you can either use:
-    # docs = True  # serve the builtin static data from MoinMoin/web/static/htdocs
-    # docs = '/where/ever/you/like/to/keep/htdocs'  # serve it from the given path
-    # docs = False  # do not serve static files at all (will not work except
-    #               # you serve them in some other working way)
-    docs = True
-
-    # tuning options:
-    #serverClass = 'ThreadPoolServer'
-    #threadLimit = 10
-    #requestQueueSize = 50
-
     # How to debug? Your options:
     # debug = 'off' # for production wikis, exceptions are logged
     # debug = 'web' # show traceback in the browser, offer debug console,
@@ -41,6 +32,7 @@
     # environment variable MOIN_DEBUGGER. If not set, it means the same as 'off'.
     debug = os.environ.get('MOIN_DEBUGGER', 'off')
 
+
 # DEVELOPERS! Do not add your configuration items there,
 # you could accidentally commit them! Instead, create a
 # wikiserverconfig_local.py file containing this: