docs: def add_url_rule(self, url_rule, view_func, name, options=None):
          '''This method adds a URL rule for routing purposes. The
          provided name can be different from the view function name if
          desired. The provided name is what is used in url_for to build
          a URL.
  
          The route decorator provides the same functionality.
          '''
          rule = UrlRule(url_rule, view_func, name, options)
          if name in self._view_functions.keys():
              # TODO: Raise exception for ambiguous views during registration
              log.warning('Cannot add url rule "%s" with name "%s". There is '
                          'already a view with that name', url_rule, name)
              self._view_functions[name] = None
          else:
              log.debug('Adding url rule "%s" named "%s" pointing to function '
                        '"%s"', url_rule, name, view_func.__name__)
              self._view_functions[name] = rule
          self._routes.append(rule)