def _block(brain_or_object): if req.get("only_children"): return get_children(brain_or_object) # extract the data using the default info adapter info = IInfo(brain_or_object)() # might be None for mixed type catalog results, e.g. in the search route scoped_endpoint = endpoint if scoped_endpoint is None: scoped_endpoint = get_endpoint(get_portal_type(brain_or_object)) info.update(get_url_info(brain_or_object, scoped_endpoint)) # switch to wake up the object and complete the informations with the # data of the content adapter if complete: obj = get_object(brain_or_object) info.update(IInfo(obj)()) info.update(get_parent_info(obj)) if req.get_children(): info.update(get_children(obj)) return info
def get_info(brain_or_object, endpoint=None, complete=False): """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 """ # extract the data from the initial object with the proper adapter info = IInfo(brain_or_object).to_dict() # update with url info (always included) url_info = get_url_info(brain_or_object, endpoint) info.update(url_info) # include the parent url info parent = get_parent_info(brain_or_object) info.update(parent) # add the complete data of the object if requested # -> requires to wake up the object if it is a catalog brain if complete: # ensure we have a full content object obj = get_object(brain_or_object) # get the compatible adapter adapter = IInfo(obj) # update the data set with the complete information info.update(adapter.to_dict()) # add workflow data if the user requested it # -> only possible if `?complete=yes` if req.get_workflow(False): workflow = get_workflow_info(obj) info.update({"workflow": workflow}) # add sharing data if the user requested it # -> only possible if `?complete=yes` if req.get_sharing(False): sharing = get_sharing_info(obj) info.update({"sharing": sharing}) return info