code: def add_route(self, handler, uri, methods=frozenset({'GET'}), host=None,
                    strict_slashes=False):
          
          # Handle HTTPMethodView differently
          if hasattr(handler, 'view_class'):
              http_methods = (
                  'GET', 'POST', 'PUT', 'HEAD', 'OPTIONS', 'PATCH', 'DELETE')
              methods = set()
              for method in http_methods:
                  if getattr(handler.view_class, method.lower(), None):
                      methods.add(method)
  
          # handle composition view differently
          if isinstance(handler, self._composition_view_class):
              methods = handler.handlers.keys()
  
          self.route(uri=uri, methods=methods, host=host,
                     strict_slashes=strict_slashes)(handler)
          return handler
docs: Create a blueprint route from a function.
  
          :param handler: function for handling uri requests. Accepts function,
                          or class instance with a view_class method.
          :param uri: endpoint at which the route will be accessible.
          :param methods: list of acceptable HTTP methods.
          :return: function or class instance