from parse import Parser


class ExtendedParser(Parser):
    def _handle_field(self, field):
        # handle as path parameter field
        field = field[1:-1]
        path_parameter_field = "{%s:PathParameter}" % field
        return super(ExtendedParser, self)._handle_field(
            path_parameter_field)


def parse_path_parameter(text):
    return text


parse_path_parameter.pattern = r"[^\/]+"
parse_path_parameter.name = "PathParameter"


def search(path_pattern, full_url_pattern):
    extra_types = {parse_path_parameter.name: parse_path_parameter}
    p = ExtendedParser(path_pattern, extra_types)
    p._expression = p._expression + '$'
    return p.search(full_url_pattern)


def parse(server_url, server_url_pattern):
    extra_types = {parse_path_parameter.name: parse_path_parameter}
    p = ExtendedParser(server_url, extra_types)
    p._expression = '^' + p._expression
    return p.parse(server_url_pattern)