1import logging
2
3from waitress.server import create_server
4
5
6def serve(app, **kw):
7    _server = kw.pop("_server", create_server)  # test shim
8    _quiet = kw.pop("_quiet", False)  # test shim
9    _profile = kw.pop("_profile", False)  # test shim
10    if not _quiet:  # pragma: no cover
11        # idempotent if logging has already been set up
12        logging.basicConfig()
13    server = _server(app, **kw)
14    if not _quiet:  # pragma: no cover
15        server.print_listen("Serving on http://{}:{}")
16    if _profile:  # pragma: no cover
17        profile("server.run()", globals(), locals(), (), False)
18    else:
19        server.run()
20
21
22def serve_paste(app, global_conf, **kw):
23    serve(app, **kw)
24    return 0
25
26
27def profile(cmd, globals, locals, sort_order, callers):  # pragma: no cover
28    # runs a command under the profiler and print profiling output at shutdown
29    import os
30    import profile
31    import pstats
32    import tempfile
33
34    fd, fn = tempfile.mkstemp()
35    try:
36        profile.runctx(cmd, globals, locals, fn)
37        stats = pstats.Stats(fn)
38        stats.strip_dirs()
39        # calls,time,cumulative and cumulative,calls,time are useful
40        stats.sort_stats(*(sort_order or ("cumulative", "calls", "time")))
41        if callers:
42            stats.print_callers(0.3)
43        else:
44            stats.print_stats(0.3)
45    finally:
46        os.remove(fn)
47