From 57e7497947db76755885f746d38f5abbe67b1dc0 Mon Sep 17 00:00:00 2001
From: Bert Palm <bert.palm@ufz.de>
Date: Wed, 24 Apr 2019 17:01:18 +0200
Subject: [PATCH] simplified evaluator

---
 dsl/evaluator.py | 39 +++++++++++++--------------------------
 1 file changed, 13 insertions(+), 26 deletions(-)

diff --git a/dsl/evaluator.py b/dsl/evaluator.py
index f91586190..88bfc0116 100644
--- a/dsl/evaluator.py
+++ b/dsl/evaluator.py
@@ -110,34 +110,21 @@ def evalExpression(expr: str, flagger: BaseFlagger,
                 fcols = fidx.values
             dcols = namespace["data"].columns.values
 
-            if namespace.get("target") == "flags":
-                # We are forced to work on flags
+            try:
                 if field in fcols:
-                    out = namespace["flags"][field]
-                elif field in dcols:
-                    # Up to now there are no flagging information on the requested
-                    # field, so return a fresh new unflagged vector
-                    datacol = namespace["data"][field]
-                    dummy = pd.DataFrame(index=datacol.index, columns=[field])
-                    out = flagger.initFlags(dummy)
-                else:
-                    _raiseNameError(field, expr)
-
-            elif field in dcols and field in fcols:
-                # Return all unflagged (original) data
-                datacol = namespace["data"][field]
-                flagcol = namespace["flags"][field]
-                out = np.ma.masked_array(datacol, mask=flagger.isFlagged(flagcol))
-
-            elif field in dcols and field not in fcols:
-                # Return all data, because we have no flagging information
-                out = namespace["data"][field].values
-
-            elif field not in dcols and field in fcols:
-                # Return only flag information, because we have no data
-                out = namespace["flags"][field].values
+                    flagcol = namespace["flags"][field]
+                    out = flagcol
 
-            else:
+                if namespace.get("target") != "flags":
+
+                    if field in dcols:
+                        datacol = namespace["data"][field]
+                        out = datacol
+
+                    if field in dcols and field in fcols:
+                        out = np.ma.masked_array(datacol, mask=flagger.isFlagged(flagcol))
+
+            except KeyError:
                 _raiseNameError(field, expr)
 
             return out
-- 
GitLab