docs: def create_routes(routes: Tuple[HTTPMethod], handle_http: Callable,
                    default_base_handler_class: Any) -> List[Tuple[str, Any]]:
      """Creates handler routes from the provided routes.
  
      :param routes: A tuple containing the route and another tuple with
          all http methods allowed for the route.
      :param handle_http: The HTTP handler function that should be
          used to wrap the logic functions.
      :param default_base_handler_class: The default base handler class that
          should be used.
      :returns: A list of tuples containing the route and generated handler.
      """
      created_routes = []
      all_handler_names = []
      for r in routes:
          handler = None
          if r.base_handler_class is not None:
              base_handler_class = r.base_handler_class
          else:
              base_handler_class = default_base_handler_class
  
          # Define the handler name.  To prevent issues where auto-generated
          # handler names conflict with existing, appending a number to the
          # end of the hanlder name if it already exists.
          handler_name = get_handler_name(r, r.methods[0].logic)
          if handler_name in all_handler_names:
              handler_name = '{}{}'.format(
                  handler_name, len(all_handler_names))
          all_handler_names.append(handler_name)
  
          for method in r.methods:
              logic = method.logic
              http_method = method.method
              http_func = create_http_method(logic, http_method, handle_http,
                                             before=r.before, after=r.after)
  
              handler_methods_and_properties = {
                  '__name__': handler_name,
                  '_doctor_heading': r.heading,
                  'methods': set([http_method.upper()]),
                  http_method: http_func,
              }
              if handler is None:
                  handler = type(
                      handler_name, (base_handler_class,),
                      handler_methods_and_properties)
              else:
                  setattr(handler, http_method, http_func)
                  # This is specific to Flask.  Its MethodView class
                  # initializes the methods attribute in __new__ so we
                  # need to add all the other http methods we are defining
                  # on the handler after it gets created by type.
                  if hasattr(handler, 'methods'):
                      handler.methods.add(http_method.upper())
          created_routes.append((r.route, handler))
      return created_routes