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