Processes an object, exporting its data as a nested dictionary.
    Individual objects are handled using handle_object.
    :param obj: The object to be processed.
    :param keep: Object attributes to be kept. Defaults to all attributes.
    :return: A dictionary of attributes.

def make_object_dict(obj, keep=[]):
    """
    Processes an object, exporting its data as a nested dictionary.
    Individual objects are handled using handle_object.
    :param obj: The object to be processed.
    :param keep: Object attributes to be kept. Defaults to all attributes.
    :return: A dictionary of attributes.
    """
    data = {}
    if keep == []:
        get_attrs = dir(obj)
    else:
        get_attrs = keep

    for attr in get_attrs:
        datum = getattr(obj,attr)
        data.update(handle_object(attr,datum))
    return data