docs: def wrap_application(application, before_run, on_start, shutdown):
      """
      Wrap a tornado application in a callback-aware wrapper.
  
      :param tornado.web.Application application: application to wrap.
      :param list|NoneType before_run: optional list of callbacks
          to invoke before the IOLoop is started.
      :param list|NoneType on_start: optional list of callbacks to
          register with :meth:`~tornado.IOLoop.spawn_callback`.
      :param list|NoneType shutdown: optional list of callbacks to
          invoke before stopping the IOLoop
  
      :return: a wrapped application object
      :rtype: sprockets.http.app.Application
  
      """
  
      before_run = [] if before_run is None else before_run
      on_start = [] if on_start is None else on_start
      shutdown = [] if shutdown is None else shutdown
  
      if not isinstance(application, Application):
          application = _ApplicationAdapter(application)
  
      application.before_run_callbacks.extend(before_run)
      application.on_start_callbacks.extend(on_start)
      application.on_shutdown_callbacks.extend(shutdown)
  
      return application