FIXME: DOCS...

def extract(repo_url=None, target=None, user=None, password=None, token=None,
            user_attrs=None):
    '''
    FIXME: DOCS...
    '''
    if not repo_url:
        raise RuntimeError("URI must be specified")

    if target not in TARGETS.keys():
        raise RuntimeError("Unknown members target [{}]".format(target))

    # eg, login, email; user.ATTR to return as ['member', 'member', ... ']
    user_attrs = user_attrs or []
    # user_attrs can be a list (of strings) or a string
    assert isinstance(user_attrs, (unicode, str, list))
    # if we get a string, put convert it to a single item list
    if isinstance(user_attrs, (unicode, str)):
        user_attrs = [user_attrs]
    # Should only have a list at this point... empty or with strings
    assert isinstance(user_attrs, list)
    logr.debug("user_attrs: {}".format(user_attrs))

    # use token if available, otherwise, password
    if token:
        logr.debug(" ... USING AUTH TOKEN")
        password = token
    else:
        assert password != ''  # is not null

    if user and password:
        logr.debug("AUTHENTICATING USER (WITH PASSOWRD): {}".format(user))
        g = Github(user, password)
    else:
        if user:
            logr.debug("NOT AUTHENTICATING USER: {}".format(user))
        else:
            logr.debug("NO USER / PASSWORD set")
        g = Github()

    repo = g.get_repo(repo_url)

    # run the github api call for members depending on requested target
    users = TARGETS[target](repo)

    members = _logins(users=users, user_attrs=user_attrs)

    return members