def add_route(self, uri_template, method_map, resource):
        # Can't start with a number, since these eventually get passed as
        # args to on_* responders
        if re.search('{\d', uri_template):
            raise ValueError('Field names may not start with a digit.')

        if re.search('\s', uri_template):
            raise ValueError('URI templates may not include whitespace.')

        path = uri_template.strip('/').split('/')

        def insert(nodes, path_index=0):
            for node in nodes:
                segment = path[path_index]
                if node.matches(segment):
                    path_index += 1
                    if path_index == len(path):
                        # NOTE(kgriffs): Override previous node
                        node.method_map = method_map
                        node.resource = resource
                    else:
                        insert(node.children, path_index)

                    return

                if node.conflicts_with(segment):
                    raise ValueError('The URI template for this route '
                                     "conflicts with another route's "
                                     'template.')

            # NOTE(richardolsson): If we got this far, the node doesn't already
            # exist and needs to be created. This builds a new branch of the
            # routing tree recursively until it reaches the new node leaf.
            new_node = CompiledRouterNode(path[path_index])
            nodes.append(new_node)
            if path_index == len(path) - 1:
                new_node.method_map = method_map
                new_node.resource = resource
            else:
                insert(new_node.children, path_index + 1)

        insert(self._roots)
        self._find = self._compile()
Call `command` in a new shell. `command` should be a string with
dataset/ETHPy150Open falconry/falcon/falcon/routing/compiled.py/CompiledRouter.add_route--crossover with--dataset/ETHPy150Open olt/scriptine/scriptine/shell.py/sh