implement pvl.web.args for pvl.verkko-rrd/dhcp
authorTero Marttila <terom@paivola.fi>
Mon, 21 Jan 2013 21:29:52 +0200
changeset 165 60fc0594a201
parent 164 2c66ab45d91e
child 166 d9304aca296d
implement pvl.web.args for pvl.verkko-rrd/dhcp
bin/pvl.verkko-dhcp
bin/pvl.verkko-rrd
pvl/verkko/wsgi.py
pvl/web/args.py
--- a/bin/pvl.verkko-dhcp	Mon Jan 21 18:40:09 2013 +0200
+++ b/bin/pvl.verkko-dhcp	Mon Jan 21 21:29:52 2013 +0200
@@ -4,6 +4,7 @@
 
 from pvl import __version__
 import pvl.args
+import pvl.web.args
 import pvl.verkko.wsgi
 
 import optparse
@@ -27,6 +28,7 @@
 
     # common
     parser.add_option_group(pvl.args.parser(parser))
+    parser.add_option_group(pvl.web.args.parser(parser))
 
     parser.add_option('-d', '--database-read', metavar='URI', default='sqlite:///var/verkko.db',
         help="Database to use (readonly)")
@@ -48,7 +50,7 @@
     options, args = parse_argv(argv, doc=__doc__)
 
     # app
-    application = pvl.verkko.wsgi.Application(options.database_read)
+    application = pvl.web.args.apply(options, pvl.verkko.wsgi.Application, options.database_read)
 
     # wsgi wrapper
     run_simple('0.0.0.0', 8080, application,
--- a/bin/pvl.verkko-rrd	Mon Jan 21 18:40:09 2013 +0200
+++ b/bin/pvl.verkko-rrd	Mon Jan 21 21:29:52 2013 +0200
@@ -9,13 +9,12 @@
 from pvl import __version__
 import pvl.args
 import pvl.rrd.args
+import pvl.web.args
 import pvl.verkko.rrd
 
 import optparse
 import logging; log = logging.getLogger('main')
 
-import codecs # --web-layout
-
 def parse_argv (argv, doc = __doc__) :
     """
         Parse command-line argv, returning (options, args).
@@ -35,9 +34,7 @@
     # common
     parser.add_option_group(pvl.args.parser(parser))
     parser.add_option_group(pvl.rrd.args.parser(parser))
-
-    parser.add_option('--web-layout', metavar='TEMPLATE',
-            help="Use template from given file for layout")
+    parser.add_option_group(pvl.web.args.parser(parser))
 
     # parse
     options, args = parser.parse_args(args)
@@ -58,17 +55,11 @@
     # rrd
     rrd = pvl.rrd.args.apply(options)
 
-    if options.web_layout :
-        layout = codecs.open(options.web_layout, 'r', 'utf-8').read()
-    else :
-        layout = None
- 
     # app
-    application = pvl.verkko.rrd.Application(rrd,
-            layout  = layout
-    )
+    application = pvl.web.args.apply(options, pvl.verkko.rrd.Application, rrd)
 
     # wsgi wrapper
+    # XXX: into pvl.web.args.apply
     werkzeug.serving.run_simple('0.0.0.0', 8080, application,
             #use_reloader    = True, 
             use_debugger    = (options.loglevel == logging.DEBUG),
--- a/pvl/verkko/wsgi.py	Mon Jan 21 18:40:09 2013 +0200
+++ b/pvl/verkko/wsgi.py	Mon Jan 21 21:29:52 2013 +0200
@@ -7,12 +7,12 @@
 class Application (pvl.web.Application) :
     URLS  = urls.urls
 
-    def __init__ (self, db) :
+    def __init__ (self, db, **opts) :
         """
             Initialize app with db.
         """
 
-        super(Application, self).__init__()
+        super(Application, self).__init__(**opts)
 
         self.db = database.Database(db)
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pvl/web/args.py	Mon Jan 21 21:29:52 2013 +0200
@@ -0,0 +1,31 @@
+import optparse
+
+import codecs
+
+def parser (parser) :
+    """
+        Command-line args for pvl.web
+    """
+
+    parser = optparse.OptionGroup(parser, 'pvl.web')
+
+    parser.add_option('--web-layout', metavar='TEMPLATE',
+            help="Use template from given file for layout")
+
+    return parser
+
+def apply (options, application, *args, **opts) :
+    """
+        Build given pvl.web.Application subclass from options.
+    """
+
+    if options.web_layout :
+        layout = codecs.open(options.web_layout, 'r', 'utf-8').read()
+    else :
+        layout = None
+    
+    
+    return application(*args,
+        layout      = layout,
+        **opts
+    )