bin/wsgi-dev.py
author Tero Marttila <terom@fixme.fi>
Mon, 10 Jan 2011 17:51:08 +0200
changeset 53 06dad873204d
parent 26 04bf578d358a
permissions -rwxr-xr-x
items: use DeleteItemForm for ItemView as well
0
b28a1681e79b Initial layout, with hello-world
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
#!/usr/bin/env python
b28a1681e79b Initial layout, with hello-world
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
"""
b28a1681e79b Initial layout, with hello-world
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
    Simple test server/environment for WSGI development
b28a1681e79b Initial layout, with hello-world
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     4
"""
b28a1681e79b Initial layout, with hello-world
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     5
b28a1681e79b Initial layout, with hello-world
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     6
import werkzeug
b28a1681e79b Initial layout, with hello-world
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     7
b28a1681e79b Initial layout, with hello-world
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     8
# app import
6
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
     9
import svv.wsgi
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    10
import svv.database
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    11
import svv.application
0
b28a1681e79b Initial layout, with hello-world
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    12
b28a1681e79b Initial layout, with hello-world
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    13
import optparse, logging
b28a1681e79b Initial layout, with hello-world
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    14
b28a1681e79b Initial layout, with hello-world
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    15
b28a1681e79b Initial layout, with hello-world
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    16
if __name__ == '__main__' :
b28a1681e79b Initial layout, with hello-world
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    17
    parser = optparse.OptionParser()
b28a1681e79b Initial layout, with hello-world
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    18
    parser.add_option('-q', '--quiet', action='store_true', help='More output')
b28a1681e79b Initial layout, with hello-world
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    19
    parser.add_option('-v', '--verbose', action='store_true', help='More output')
26
04bf578d358a --debug for SQL query logging
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    20
    parser.add_option('-D', '--debug', action='store_true', help="Even more output (SQL queries)")
6
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    21
0
b28a1681e79b Initial layout, with hello-world
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    22
    parser.add_option('-p', '--port', type='int', help='Local port to run on', default=8080, metavar='PORT')
b28a1681e79b Initial layout, with hello-world
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    23
    parser.add_option('-B', '--bind', help="Local address to listen on", default='localhost', metavar='HOST')
b28a1681e79b Initial layout, with hello-world
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    24
6
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    25
    parser.add_option('-d', '--database', help="Database connection URI", metavar='URL')
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    26
    parser.add_option(      '--init-database', action='store_true', help="Initialize database (CREATE)")
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    27
0
b28a1681e79b Initial layout, with hello-world
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    28
    (options, args) = parser.parse_args()
b28a1681e79b Initial layout, with hello-world
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    29
    
26
04bf578d358a --debug for SQL query logging
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    30
    # defaults
04bf578d358a --debug for SQL query logging
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    31
    level = logging.INFO
04bf578d358a --debug for SQL query logging
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    32
    sql_echo = False
04bf578d358a --debug for SQL query logging
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    33
0
b28a1681e79b Initial layout, with hello-world
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    34
    if options.quiet :
b28a1681e79b Initial layout, with hello-world
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    35
        level = logging.WARN
b28a1681e79b Initial layout, with hello-world
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    36
26
04bf578d358a --debug for SQL query logging
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    37
    if options.verbose :
0
b28a1681e79b Initial layout, with hello-world
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    38
        level = logging.DEBUG
26
04bf578d358a --debug for SQL query logging
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    39
    
04bf578d358a --debug for SQL query logging
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    40
    if options.debug :
04bf578d358a --debug for SQL query logging
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    41
        level = logging.DEBUG
04bf578d358a --debug for SQL query logging
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    42
        sql_echo = True
0
b28a1681e79b Initial layout, with hello-world
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    43
b28a1681e79b Initial layout, with hello-world
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    44
    bind = options.bind
b28a1681e79b Initial layout, with hello-world
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    45
    port = options.port
b28a1681e79b Initial layout, with hello-world
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    46
b28a1681e79b Initial layout, with hello-world
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    47
    assert not args
b28a1681e79b Initial layout, with hello-world
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    48
b28a1681e79b Initial layout, with hello-world
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    49
    logging.basicConfig(format="[%(levelname)5s] %(funcName)25s : %(message)s", level=level)
b28a1681e79b Initial layout, with hello-world
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    50
26
04bf578d358a --debug for SQL query logging
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    51
    if sql_echo :
04bf578d358a --debug for SQL query logging
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    52
        # echo SQL queries
04bf578d358a --debug for SQL query logging
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    53
        logging.getLogger('sqlalchemy.engine').setLevel(logging.INFO)
04bf578d358a --debug for SQL query logging
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    54
6
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    55
    # app state
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    56
    application = svv.application.Application(
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    57
            options.database,
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    58
    )
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    59
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    60
    # init?
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    61
    if options.init_database :
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    62
        application.create_tables()
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    63
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    64
    # frontend
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    65
    wsgiapp = svv.wsgi.WSGIApp(
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    66
            application
0
b28a1681e79b Initial layout, with hello-world
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    67
    )
b28a1681e79b Initial layout, with hello-world
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    68
b28a1681e79b Initial layout, with hello-world
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    69
    # run
6
72c73df76db2 Split wsgi.py into controllers/customers/urls for now; start orders form
Tero Marttila <terom@fixme.fi>
parents: 0
diff changeset
    70
    werkzeug.run_simple(bind, port, wsgiapp, use_reloader=True, use_debugger=True, 
0
b28a1681e79b Initial layout, with hello-world
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    71
            static_files    = {
b28a1681e79b Initial layout, with hello-world
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    72
                # static resources mounted off app /static
b28a1681e79b Initial layout, with hello-world
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    73
                '/static':  'static/',
b28a1681e79b Initial layout, with hello-world
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    74
            },
b28a1681e79b Initial layout, with hello-world
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    75
    )
b28a1681e79b Initial layout, with hello-world
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    76