def _lookup(self, key): if key == 'entities' or key is None: return self.entities.values() if '+' in key: key = key.strip('+') # log.debug("lookup intersection of '%s'" % ' and '.join(key.split('+'))) hits = None for f in key.split("+"): f = f.strip() if hits is None: hits = set(self._lookup(f)) else: other = self._lookup(f) hits.intersection_update(other) if not hits: log.debug("empty intersection") return [] if hits is not None and hits: return list(hits) else: return [] m = re.match("^(.+)=(.+)$", key) if m: return self._lookup("{%s}%s" % (m.group(1), m.group(2).rstrip("/"))) m = re.match("^{(.+)}(.+)$", key) if m: res = set() for v in m.group(2).rstrip("/").split(';'): # log.debug("... adding %s=%s" % (m.group(1),v)) res.update(self._get_index(m.group(1), v)) return list(res) # log.debug("trying null index lookup %s" % key) l = self._get_index("null", key) if l: return list(l) # log.debug("trying main index lookup %s: " % key) if key in self.md: # log.debug("entities list %s: %s" % (key, self.md[key])) return entities_list(self.md[key]) return []
def test_entities_list(self): assert len(list(entities_list(root(self.t2)))) == 1032 assert len(list(entities_list(None))) == 0