def get_info(brain_or_object, endpoint=None, complete=False):
<EOL>if not is_brain(brain_or_object):<EOL><INDENT>brain_or_object = get_brain(brain_or_object)<EOL>if brain_or_object is None:<EOL><INDENT>logger.warn("<STR_LIT>".format(brain_or_object))<EOL>return {}<EOL><DEDENT>complete = True<EOL><DEDENT>if is_relationship_object(brain_or_object):<EOL><INDENT>logger.warn("<STR_LIT>".format(repr(brain_or_object)))<EOL>return {}<EOL><DEDENT>info = IInfo(brain_or_object).to_dict()<EOL>url_info = get_url_info(brain_or_object, endpoint)<EOL>info.update(url_info)<EOL>parent = get_parent_info(brain_or_object)<EOL>info.update(parent)<EOL>if complete:<EOL><INDENT>obj = api.get_object(brain_or_object)<EOL>adapter = IInfo(obj)<EOL>info.update(adapter.to_dict())<EOL>if req.get_workflow(False):<EOL><INDENT>info.update(get_workflow_info(obj))<EOL><DEDENT><DEDENT>return info<EOL>
Extract the data from the catalog brain or object

    :param brain_or_object: A single catalog brain or content object
    :type brain_or_object: ATContentType/DexterityContentType/CatalogBrain
    :param endpoint: The named URL endpoint for the root of the items
    :type endpoint: str/unicode
    :param complete: Flag to wake up the object and fetch all data
    :type complete: bool
    :returns: Data mapping for the object/catalog brain
    :rtype: dict