from benedict.core.keylists import keylists
from benedict.utils import type_util


def keypaths(d, separator=".", indexes=False):
    separator = separator or "."
    if not type_util.is_string(separator):
        raise ValueError("separator argument must be a (non-empty) string.")
    kls = keylists(d, indexes=indexes)
    kps = [separator.join([f"{key}" for key in kl]) for kl in kls]
    kps.sort()
    return kps
