From 60745ed9ee1e503df25e885a4eb9645cb87064ac Mon Sep 17 00:00:00 2001 From: Alice Bevan-McGregor Date: Sun, 20 Nov 2016 01:07:08 -0500 Subject: [PATCH] Add back evaluation experiment. --- marrow/mongo/evaluate.py | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 marrow/mongo/evaluate.py diff --git a/marrow/mongo/evaluate.py b/marrow/mongo/evaluate.py new file mode 100644 index 00000000..08fb7e6e --- /dev/null +++ b/marrow/mongo/evaluate.py @@ -0,0 +1,39 @@ +# encoding: utf-8 + + + + + + +def matches(data, query): + pass + + +def filter(records, query): + for record in records: + if matches(record, query): + yield record + + +def project(data, query): + """MongoDB-style record projection.""" + include = {'_id'} if '_id' in data else set() + exclude = set() + + for field in query: + if field not in data: + continue + + if query[field]: + include.add(field) + continue + + exclude.add(field) + + if field in include: + include.remove(field) + + if exclude and exclude != {'_id'}: + return data.__class__({i: data[i] for i in data if i not in exclude}) + + return data.__class__({i: data[i] for i in include})