from typing import List


def dsv_line_to_list(line: str, *, delimiter=',', quote='"') -> List[str]:
    """
    Splits line into fields on delimiter ignoring delimiters in fields that
    start and end with quote

    NB: Empty fields produce an empty string

    :param line: The line to be split
    :param delimiter: The delimiter to use to split the fields
    :param quote: The quote char to surround fields that contain the delimiter
    :return: a list of the fields found
    """
    result = []
    within_quoted_field = False
    at_start_of_field = True
    last_was_quote = False  # Used to see if quote is not at end of field
    field = ''

    def new_field():
        nonlocal field, within_quoted_field, at_start_of_field, last_was_quote
        result.append(field)
        within_quoted_field = False
        at_start_of_field = True
        last_was_quote = False
        field = ''

    for char in line:
        if at_start_of_field:
            at_start_of_field = False
            # Check for quote
            if char == quote:
                within_quoted_field = True
                continue  # Skip quote do not include in field

        if within_quoted_field:
            if char == quote:
                last_was_quote = True
                continue  # May not want to add this char if end of field
            if last_was_quote:
                if char == delimiter:
                    new_field()
                    continue
                else:
                    field += quote
                    last_was_quote = False
            field += char
        else:
            if char == delimiter:
                new_field()
            else:
                field += char

    # Add last field that was being filled (or empty if empty in comma)
    result.append(field)

    return result