+ def filterout(r):
+ if not filterq:
+ return False
+ path, serial = r
+ included, excluded, opers = parse_filters(filterq)
+
+ #retrieve metadata
+ s = select([a.c.key, a.c.value])
+ s = s.where(a.c.domain == domain)
+ s = s.where(a.c.serial == serial)
+ rp = self.conn.execute(s)
+ meta = dict(rp.fetchall())
+ keyset= set([k.encode('utf8') for k in meta.keys()])
+
+ if included:
+ if not set(included) & keyset:
+ return True
+ if excluded:
+ if set(excluded) & keyset:
+ return True
+ for k, op, v in opers:
+ k = k.decode('utf8')
+ v = v.decode('utf8')
+ if k not in meta:
+ return True
+ operation = OPERATORS[op]
+ if not operation(meta[k], v):
+ return True
+ return False
+