0001import sys
0002import os
0003from paste.util import import_string, findpackage
0004from paste import urlparser
0005from paste.deploy.converters import asbool
0006from paste.deploy.config import ConfigMiddleware
0007
0008def sys_path_install():
0009    webware_dir = os.path.join(os.path.dirname(__file__),
0010                               'FakeWebware')
0011    if webware_dir not in sys.path:
0012        sys.path.append(webware_dir)
0013
0014def make_webkit_app(
0015    global_conf,
0016    servlet_directory=None,
0017    package_name=None,
0018    complete_stack=True,
0019    debug=None,
0020    # session middleware:
0021    cookie_name='_SID_',
0022    session_file_path='/tmp',
0023    session_chmod=None,
0024    # error middleware:
0025    error_email=None,
0026    error_log=None,
0027    show_exceptions_in_wsgi_errors=False,
0028    from_address=None,
0029    smtp_server=None,
0030    error_subject_prefix=None,
0031    error_message=None,
0032    # enabling:
0033    profile=False,
0034    profile_limit=40,
0035    **app_conf):
0036    sys_path_install()
0037    if package_name:
0038        package = package_name
0039        if isinstance(package, (str, unicode)):
0040            package = import_string.simple_import(package)
0041        package_dir = os.path.dirname(package.__file__)
0042    else:
0043        package = None
0044        package_dir = '' # @@: ?
0045        sys.stderr.write(
0046            'You did not give a package or package name argument '
0047            'to paste.webkit.wsgiapp:make_webkit_app\n')
0048    if servlet_directory:
0049        if package_dir:
0050            servlet_directory = os.path.join(package_dir, servlet_directory)
0051    else:
0052        servlet_directory = os.path.join(package_dir, 'web')
0053
0054    url_package_name = findpackage.find_package(servlet_directory)
0055    app = urlparser.URLParser(
0056        global_conf, servlet_directory, url_package_name)
0057
0058    combined_conf = global_conf.copy()
0059    combined_conf.update(app_conf)
0060    app = ConfigMiddleware(app, combined_conf)
0061
0062    if debug is None:
0063        debug = global_conf.get('debug')
0064    debug = asbool(debug)
0065
0066    if show_exceptions_in_wsgi_errors is None:
0067        show_exceptions_in_wsgi_errors = not debug
0068
0069    if error_subject_prefix is None:
0070        app_name = combined_conf.get('app_name')
0071        if app_name:
0072            error_subject_prefix = '[%s] ' % app_name
0073
0074    if error_email is None:
0075        error_email = (global_conf.get('error_email')
0076                       or global_conf.get('sysadmin_email'))
0077
0078    if session_chmod is None:
0079        session_chmod = global_conf.get('session_chmod')
0080
0081    if asbool(complete_stack):
0082        from paste import session, recursive, httpexceptions
0083        from paste.exceptions import errormiddleware
0084        app = httpexceptions.make_middleware(
0085            app, global_conf)
0086        app = recursive.RecursiveMiddleware(
0087            app, global_conf)
0088        app = session.SessionMiddleware(
0089            app, global_conf, cookie_name=cookie_name,
0090            session_file_path=session_file_path,
0091            chmod=session_chmod)
0092        app = errormiddleware.ErrorMiddleware(
0093            app, global_conf,
0094            debug=debug,
0095            error_email=error_email,
0096            show_exceptions_in_wsgi_errors=show_exceptions_in_wsgi_errors,
0097            from_address=from_address,
0098            smtp_server=smtp_server,
0099            error_subject_prefix=error_subject_prefix,
0100            error_message=error_message,
0101            )
0102
0103        if debug:
0104            from paste.debug import prints
0105            app = prints.PrintDebugMiddleware(
0106                app, global_conf)
0107
0108    if asbool(profile):
0109        from paste import profilemiddleware
0110        app = profilemiddleware.ProfileMiddleware(
0111            app, global_conf, limit=int(profile_limit))
0112
0113    return app