bin/wsgi-dev.py
author Tero Marttila <terom@fixme.fi>
Thu, 20 Jan 2011 23:21:14 +0200
changeset 59 de6abcbd3c03
parent 26 04bf578d358a
permissions -rwxr-xr-x
items: add inventory-import script, and tweak listing
#!/usr/bin/env python
"""
    Simple test server/environment for WSGI development
"""

import werkzeug

# app import
import svv.wsgi
import svv.database
import svv.application

import optparse, logging


if __name__ == '__main__' :
    parser = optparse.OptionParser()
    parser.add_option('-q', '--quiet', action='store_true', help='More output')
    parser.add_option('-v', '--verbose', action='store_true', help='More output')
    parser.add_option('-D', '--debug', action='store_true', help="Even more output (SQL queries)")

    parser.add_option('-p', '--port', type='int', help='Local port to run on', default=8080, metavar='PORT')
    parser.add_option('-B', '--bind', help="Local address to listen on", default='localhost', metavar='HOST')

    parser.add_option('-d', '--database', help="Database connection URI", metavar='URL')
    parser.add_option(      '--init-database', action='store_true', help="Initialize database (CREATE)")

    (options, args) = parser.parse_args()
    
    # defaults
    level = logging.INFO
    sql_echo = False

    if options.quiet :
        level = logging.WARN

    if options.verbose :
        level = logging.DEBUG
    
    if options.debug :
        level = logging.DEBUG
        sql_echo = True

    bind = options.bind
    port = options.port

    assert not args

    logging.basicConfig(format="[%(levelname)5s] %(funcName)25s : %(message)s", level=level)

    if sql_echo :
        # echo SQL queries
        logging.getLogger('sqlalchemy.engine').setLevel(logging.INFO)

    # app state
    application = svv.application.Application(
            options.database,
    )

    # init?
    if options.init_database :
        application.create_tables()

    # frontend
    wsgiapp = svv.wsgi.WSGIApp(
            application
    )

    # run
    werkzeug.run_simple(bind, port, wsgiapp, use_reloader=True, use_debugger=True, 
            static_files    = {
                # static resources mounted off app /static
                '/static':  'static/',
            },
    )