docs: def dispatch_request(self, environ, start_response):
          """Dispatch an incoming request."""
          # set up all the stuff we want to have for this request.  That is
          # creating a request object, propagating the application to the
          # current context and instanciating the database session.
          self.bind_to_context()
          request = Request(environ)
          request.bind_to_context()
  
          # get the current action from the url and normalize the page name
          # which is just the request path
          action_name = request.args.get("action") or "show"
          page_name = u"_".join([x for x in request.path.strip("/").split() if x])
  
          # redirect to the Main_Page if the user requested the index
          if not page_name:
              response = redirect(href("Main_Page"))
  
          # check special pages
          elif page_name.startswith("Special:"):
              if page_name[8:] not in pages:
                  response = page_not_found(request, page_name)
              else:
                  response = pages[page_name[8:]](request)
  
          # get the callback function for the requested action from the
          # action module.  It's "on_" + the action name.  If it doesn't
          # exists call the missing_action method from the same module.
          else:
              action = getattr(actions, "on_" + action_name, None)
              if action is None:
                  response = actions.missing_action(request, action_name)
              else:
                  response = action(request, page_name)
  
          # make sure the session is removed properly
          return ClosingIterator(response(environ, start_response), session.remove)