def get_search_results(portal_type=None, uid=None, **kw): """Search the catalog and return the results :returns: Catalog search results :rtype: iterable """ # If we have an UID, return the object immediately if uid is not None: logger.info("UID '%s' found, returning the object immediately" % uid) return u.to_list(get_object_by_uid(uid)) # allow to search search for the Plone Site with portal_type include_portal = False if u.to_string(portal_type) == "Plone Site": include_portal = True # The request may contain a list of portal_types, e.g. # `?portal_type=Document&portal_type=Plone Site` if "Plone Site" in u.to_list(req.get("portal_type")): include_portal = True # Build and execute a catalog query results = search(portal_type=portal_type, uid=uid, **kw) if include_portal: results = list(results) + u.to_list(get_portal()) return results
def get_request_query(self): """Checks the request for known catalog indexes and converts the values to fit the type of the catalog index. :param catalog: The catalog to build the query for :type catalog: ZCatalog :returns: Catalog query :rtype: dict """ query = {} # only known indexes get observed indexes = self.catalog.get_indexes() for index in indexes: # Check if the request contains a parameter named like the index value = req.get(index) # No value found, continue if value is None: continue # Convert the found value to format understandable by the index index_value = self.catalog.to_index_value(value, index) # Conversion returned None, continue if index_value is None: continue # Append the found value to the query query[index] = index_value return query
def search(self, query): """search the catalog """ logger.info("Catalog query={}".format(query)) # Support to set the catalog as a request parameter catalogs = _.to_list(req.get("catalog", None)) if catalogs: return bikaapi.search(query, catalog=catalogs) # Delegate to the search API of Bika LIMS return bikaapi.search(query)