~loggerhead-team/loggerhead/trunk-rich

« back to all changes in this revision

Viewing changes to serve-branches

  • Committer: Matt Nordhoff
  • Date: 2009-04-30 10:27:53 UTC
  • mto: (389.2.2 pep8-2009-10)
  • mto: This revision was merged to the branch mainline in revision 392.
  • Revision ID: mnordhoff@mattnordhoff.com-20090430102753-k0fe9v60gw0at3py
Whitespace tweak to profile.py

Show diffs side-by-side

added added

removed removed

Lines of Context:
19
19
import os
20
20
import sys
21
21
 
22
 
from optparse import OptionParser
 
22
from bzrlib.plugin import load_plugins
23
23
 
24
24
from paste import httpserver
25
 
from paste.httpexceptions import HTTPExceptionHandler
 
25
from paste.httpexceptions import HTTPExceptionHandler, HTTPInternalServerError
26
26
from paste.translogger import TransLogger
27
27
 
28
28
from loggerhead import __version__
29
29
from loggerhead.apps.filesystem import (
30
30
    BranchesFromFileSystemRoot, UserBranchesFromFileSystemRoot)
31
 
 
32
 
 
33
 
def command_line_parser():
34
 
    parser = OptionParser("%prog [options] <path>")
35
 
    parser.set_defaults(
36
 
        user_dirs=False,
37
 
        show_version=False,
38
 
        )
39
 
    parser.add_option("--user-dirs", action="store_true", dest="user_dirs",
40
 
                      help="Serve user directories as ~user.")
41
 
    parser.add_option("--trunk-dir", metavar="DIR",
42
 
                      help="The directory that contains the trunk branches.")
43
 
    parser.add_option("--version", action="store_true", dest="show_version",
44
 
                      help="Print the software version and exit")
45
 
    return parser
 
31
from loggerhead.config import LoggerheadConfig
 
32
from loggerhead.util import Reloader
 
33
from loggerhead.apps.error import ErrorHandlerApp
46
34
 
47
35
 
48
36
def main(args):
49
 
    logging.basicConfig()
50
 
    logging.getLogger().setLevel(logging.DEBUG)
51
 
 
52
 
    parser = command_line_parser()
53
 
    (options, args) = parser.parse_args(sys.argv[1:])
54
 
 
55
 
    if options.show_version:
 
37
    config = LoggerheadConfig()
 
38
 
 
39
    if config.get_option('show_version'):
56
40
        print "loggerhead %s" % __version__
57
41
        sys.exit(0)
58
42
 
59
 
    if len(args) > 1:
60
 
        parser.print_help()
 
43
    if config.arg_count > 1:
 
44
        config.print_help()
61
45
        sys.exit(1)
62
 
    elif len(args) == 1:
63
 
        [path] = args
 
46
    elif config.arg_count == 1:
 
47
        path = config.get_arg(0)
64
48
    else:
65
49
        path = '.'
66
50
 
68
52
        print "%s is not a directory" % path
69
53
        sys.exit(1)
70
54
 
71
 
    if options.trunk_dir and not options.user_dirs:
 
55
    if config.get_option('trunk_dir') and not config.get_option('user_dirs'):
72
56
        print "--trunk-dir is only valid with --user-dirs"
73
57
        sys.exit(1)
74
58
 
75
 
    if options.user_dirs:
76
 
        if not options.trunk_dir:
 
59
    if config.get_option('reload'):
 
60
        if Reloader.is_installed():
 
61
            Reloader.install()
 
62
        else:
 
63
            return Reloader.restart_with_reloader()
 
64
 
 
65
    if config.get_option('user_dirs'):
 
66
        if not config.get_option('trunk_dir'):
77
67
            print "You didn't specify a directory for the trunk directories."
78
68
            sys.exit(1)
79
 
        app = UserBranchesFromFileSystemRoot(path, options.trunk_dir)
80
 
    else:
81
 
        app = BranchesFromFileSystemRoot(path)
82
 
    app = HTTPExceptionHandler(app)
83
 
    app = TransLogger(app)
 
69
        app = UserBranchesFromFileSystemRoot(path, config)
 
70
    else:
 
71
        app = BranchesFromFileSystemRoot(path, config)
 
72
 
 
73
    # setup_logging()
 
74
    logging.basicConfig()
 
75
    logging.getLogger('').setLevel(logging.DEBUG)
 
76
    logger = getattr(app, 'log', logging.getLogger('loggerhead'))
 
77
    if config.get_option('log_folder'):
 
78
        logfile_path = os.path.join(
 
79
            config.get_option('log_folder'), 'serve-branches.log')
 
80
    else:
 
81
        logfile_path = 'serve-branches.log'
 
82
    logfile = logging.FileHandler(logfile_path, 'a')
 
83
    formatter = logging.Formatter('%(asctime)s %(levelname)-8s %(name)s:'
 
84
                                  ' %(message)s')
 
85
    logfile.setFormatter(formatter)
 
86
    logfile.setLevel(logging.DEBUG)
 
87
    logger.addHandler(logfile)
 
88
 
 
89
    # setup_logging() #end
 
90
 
 
91
    app = TransLogger(app, logger=logger)
 
92
    if config.get_option('profile'):
 
93
        from loggerhead.middleware.profile import LSProfMiddleware
 
94
        app = LSProfMiddleware(app)
 
95
    if config.get_option('memory_profile'):
 
96
        from dozer import Dozer
 
97
        app = Dozer(app)
 
98
 
 
99
    if not config.get_option('user_prefix'):
 
100
        prefix = '/'
 
101
    else:
 
102
        prefix = config.get_option('user_prefix')
 
103
        if not prefix.startswith('/'):
 
104
            prefix = '/' + prefix
84
105
 
85
106
    try:
86
107
        from paste.deploy.config import PrefixMiddleware
87
108
    except ImportError:
88
 
        pass
89
 
    else:
90
 
        app = PrefixMiddleware(app)
91
 
 
92
 
    httpserver.serve(app, host='0.0.0.0', port='8080')
 
109
        cant_proxy_correctly_message = (
 
110
            'Unsupported configuration: PasteDeploy not available, but '
 
111
            'loggerhead appears to be behind a proxy.')
 
112
        def check_not_proxied(app):
 
113
            def wrapped(environ, start_response):
 
114
                if 'HTTP_X_FORWARDED_SERVER' in environ:
 
115
                    exc = HTTPInternalServerError()
 
116
                    exc.explanation = cant_proxy_correctly_message
 
117
                    raise exc
 
118
                return app(environ, start_response)
 
119
            return wrapped
 
120
        app = check_not_proxied(app)
 
121
    else:
 
122
        app = PrefixMiddleware(app, prefix=prefix)
 
123
 
 
124
    app = HTTPExceptionHandler(app)
 
125
    app = ErrorHandlerApp(app)
 
126
 
 
127
    if not config.get_option('user_port'):
 
128
        port = '8080'
 
129
    else:
 
130
        port = config.get_option('user_port')
 
131
 
 
132
    if not config.get_option('user_host'):
 
133
        host = '0.0.0.0'
 
134
    else:
 
135
        host = config.get_option('user_host')
 
136
 
 
137
    load_plugins()
 
138
 
 
139
    httpserver.serve(app, host=host, port=port)
93
140
 
94
141
 
95
142
if __name__ == "__main__":