Alternative implementation of `plucks` that accepts more complex
    selectors. It's a wrapper around `pluckable`, so a `selector` can be any
    valid Python expression comprising attribute getters (``.attr``) and item
    getters (``[1, 4:8, "key"]``).

    Example:

        pluck(obj, "users[2:5, 10:15].name.first")

    equal to:

        pluckable(obj).users[2:5, 10:15].name.first.value

def pluck(obj, selector, default=None, skipmissing=True):
    """Alternative implementation of `plucks` that accepts more complex
    selectors. It's a wrapper around `pluckable`, so a `selector` can be any
    valid Python expression comprising attribute getters (``.attr``) and item
    getters (``[1, 4:8, "key"]``).

    Example:

        pluck(obj, "users[2:5, 10:15].name.first")

    equal to:

        pluckable(obj).users[2:5, 10:15].name.first.value

    """
    if not selector:
        return obj
    if selector[0] != '[':
        selector = '.%s' % selector
    wrapped_obj = pluckable(obj, default=default, skipmissing=skipmissing, inplace=True)
    return eval("wrapped_obj%s.value" % selector)