jedcunningham commented on code in PR #38166:
URL: https://github.com/apache/airflow/pull/38166#discussion_r1529105471


##########
airflow/www/decorators.py:
##########
@@ -44,36 +44,36 @@ def _mask_variable_fields(extra_fields):
     Mask the 'val_content' field if 'key_content' is in the mask list.
 
     The variable requests values and args comes in this form:
-    [('key', 'key_content'),('val', 'val_content'), ('description', 
'description_content')]
+    [{'key': 'key_content'},{'val': 'val_content'}, {'description': 
'description_content'}]
     """
-    result = []
+    result = {}
     keyname = None
-    for k, v in extra_fields:
+    for k, v in extra_fields.items():
         if k == "key":
             keyname = v
-            result.append((k, v))
-        elif keyname and k == "val":
+            result.update({k: v})
+        elif keyname and (k == "val" or k == "value"):
             x = secrets_masker.redact(v, keyname)
-            result.append((k, x))
+            result.update({k: x})

Review Comment:
   ```suggestion
               result[k] = x
   ```



##########
airflow/www/decorators.py:
##########
@@ -44,36 +44,36 @@ def _mask_variable_fields(extra_fields):
     Mask the 'val_content' field if 'key_content' is in the mask list.
 
     The variable requests values and args comes in this form:
-    [('key', 'key_content'),('val', 'val_content'), ('description', 
'description_content')]
+    [{'key': 'key_content'},{'val': 'val_content'}, {'description': 
'description_content'}]
     """
-    result = []
+    result = {}
     keyname = None
-    for k, v in extra_fields:
+    for k, v in extra_fields.items():
         if k == "key":
             keyname = v
-            result.append((k, v))
-        elif keyname and k == "val":
+            result.update({k: v})

Review Comment:
   ```suggestion
               result[k] = v
   ```



##########
airflow/www/decorators.py:
##########
@@ -44,36 +44,36 @@ def _mask_variable_fields(extra_fields):
     Mask the 'val_content' field if 'key_content' is in the mask list.
 
     The variable requests values and args comes in this form:
-    [('key', 'key_content'),('val', 'val_content'), ('description', 
'description_content')]
+    [{'key': 'key_content'},{'val': 'val_content'}, {'description': 
'description_content'}]
     """
-    result = []
+    result = {}
     keyname = None
-    for k, v in extra_fields:
+    for k, v in extra_fields.items():
         if k == "key":
             keyname = v
-            result.append((k, v))
-        elif keyname and k == "val":
+            result.update({k: v})
+        elif keyname and (k == "val" or k == "value"):
             x = secrets_masker.redact(v, keyname)
-            result.append((k, x))
+            result.update({k: x})
             keyname = None
         else:
-            result.append((k, v))
+            result.update({k: v})
     return result
 
 
 def _mask_connection_fields(extra_fields):
     """Mask connection fields."""
-    result = []
-    for k, v in extra_fields:
-        if k == "extra":
+    result = {}
+    for k, v in extra_fields.items():
+        if k == "extra" and v:
             try:
                 extra = json.loads(v)
-                extra = [(k, secrets_masker.redact(v, k)) for k, v in 
extra.items()]
-                result.append((k, json.dumps(dict(extra))))
+                extra = {k: secrets_masker.redact(v, k) for k, v in 
extra.items()}
+                result.update({k: dict(extra)})
             except json.JSONDecodeError:
-                result.append((k, "Encountered non-JSON in `extra` field"))
+                result.update({k: "Encountered non-JSON in `extra` field"})

Review Comment:
   ```suggestion
                   result[k] = "Encountered non-JSON in `extra` field"
   ```



##########
airflow/www/decorators.py:
##########
@@ -44,36 +44,36 @@ def _mask_variable_fields(extra_fields):
     Mask the 'val_content' field if 'key_content' is in the mask list.
 
     The variable requests values and args comes in this form:
-    [('key', 'key_content'),('val', 'val_content'), ('description', 
'description_content')]
+    [{'key': 'key_content'},{'val': 'val_content'}, {'description': 
'description_content'}]
     """
-    result = []
+    result = {}
     keyname = None
-    for k, v in extra_fields:
+    for k, v in extra_fields.items():
         if k == "key":
             keyname = v
-            result.append((k, v))
-        elif keyname and k == "val":
+            result.update({k: v})
+        elif keyname and (k == "val" or k == "value"):
             x = secrets_masker.redact(v, keyname)
-            result.append((k, x))
+            result.update({k: x})
             keyname = None
         else:
-            result.append((k, v))
+            result.update({k: v})
     return result
 
 
 def _mask_connection_fields(extra_fields):
     """Mask connection fields."""
-    result = []
-    for k, v in extra_fields:
-        if k == "extra":
+    result = {}
+    for k, v in extra_fields.items():
+        if k == "extra" and v:
             try:
                 extra = json.loads(v)
-                extra = [(k, secrets_masker.redact(v, k)) for k, v in 
extra.items()]
-                result.append((k, json.dumps(dict(extra))))
+                extra = {k: secrets_masker.redact(v, k) for k, v in 
extra.items()}
+                result.update({k: dict(extra)})

Review Comment:
   ```suggestion
                   result[k] = dict(extra)
   ```



##########
airflow/www/decorators.py:
##########
@@ -94,35 +94,54 @@ def wrapper(*args, **kwargs):
                     user = get_auth_manager().get_user_name()
                     user_display = get_auth_manager().get_user_display_name()
 
-                fields_skip_logging = {"csrf_token", "_csrf_token", 
"is_paused"}
-                extra_fields = [
-                    (k, secrets_masker.redact(v, k))
+                isAPIRequest = request.blueprint == "/api/v1"
+                hasJsonBody = request.headers.get("content-type") == 
"application/json" and request.json
+
+                fields_skip_logging = {
+                    "csrf_token",
+                    "_csrf_token",
+                    "is_paused",
+                    "dag_id",
+                    "task_id",
+                    "dag_run_id",
+                    "run_id",
+                    "execution_date",
+                }
+                extra_fields = {
+                    k: secrets_masker.redact(v, k)
                     for k, v in 
itertools.chain(request.values.items(multi=True), request.view_args.items())
                     if k not in fields_skip_logging
-                ]
+                }
                 if event and event.startswith("variable."):
-                    extra_fields = _mask_variable_fields(extra_fields)
-                if event and event.startswith("connection."):
-                    extra_fields = _mask_connection_fields(extra_fields)
+                    extra_fields = _mask_variable_fields(
+                        request.json if isAPIRequest and hasJsonBody else 
extra_fields
+                    )
+                elif event and event.startswith("connection."):
+                    extra_fields = _mask_connection_fields(
+                        request.json if isAPIRequest and hasJsonBody else 
extra_fields
+                    )
+                elif hasJsonBody:
+                    extra_fields.update({"body": request.json})

Review Comment:
   ```suggestion
                       extra_fields["body"] = request.json
   ```



##########
airflow/www/decorators.py:
##########
@@ -44,36 +44,36 @@ def _mask_variable_fields(extra_fields):
     Mask the 'val_content' field if 'key_content' is in the mask list.
 
     The variable requests values and args comes in this form:
-    [('key', 'key_content'),('val', 'val_content'), ('description', 
'description_content')]
+    [{'key': 'key_content'},{'val': 'val_content'}, {'description': 
'description_content'}]
     """
-    result = []
+    result = {}
     keyname = None
-    for k, v in extra_fields:
+    for k, v in extra_fields.items():
         if k == "key":
             keyname = v
-            result.append((k, v))
-        elif keyname and k == "val":
+            result.update({k: v})
+        elif keyname and (k == "val" or k == "value"):
             x = secrets_masker.redact(v, keyname)
-            result.append((k, x))
+            result.update({k: x})
             keyname = None
         else:
-            result.append((k, v))
+            result.update({k: v})
     return result
 
 
 def _mask_connection_fields(extra_fields):
     """Mask connection fields."""
-    result = []
-    for k, v in extra_fields:
-        if k == "extra":
+    result = {}
+    for k, v in extra_fields.items():
+        if k == "extra" and v:
             try:
                 extra = json.loads(v)
-                extra = [(k, secrets_masker.redact(v, k)) for k, v in 
extra.items()]
-                result.append((k, json.dumps(dict(extra))))
+                extra = {k: secrets_masker.redact(v, k) for k, v in 
extra.items()}
+                result.update({k: dict(extra)})
             except json.JSONDecodeError:
-                result.append((k, "Encountered non-JSON in `extra` field"))
+                result.update({k: "Encountered non-JSON in `extra` field"})
         else:
-            result.append((k, secrets_masker.redact(v, k)))
+            result.update({k: secrets_masker.redact(v, k)})

Review Comment:
   ```suggestion
               result[k] = secrets_masker.redact(v, k)
   ```



##########
airflow/www/decorators.py:
##########
@@ -94,35 +94,54 @@ def wrapper(*args, **kwargs):
                     user = get_auth_manager().get_user_name()
                     user_display = get_auth_manager().get_user_display_name()
 
-                fields_skip_logging = {"csrf_token", "_csrf_token", 
"is_paused"}
-                extra_fields = [
-                    (k, secrets_masker.redact(v, k))
+                isAPIRequest = request.blueprint == "/api/v1"
+                hasJsonBody = request.headers.get("content-type") == 
"application/json" and request.json
+
+                fields_skip_logging = {
+                    "csrf_token",
+                    "_csrf_token",
+                    "is_paused",
+                    "dag_id",
+                    "task_id",
+                    "dag_run_id",
+                    "run_id",
+                    "execution_date",
+                }
+                extra_fields = {
+                    k: secrets_masker.redact(v, k)
                     for k, v in 
itertools.chain(request.values.items(multi=True), request.view_args.items())
                     if k not in fields_skip_logging
-                ]
+                }
                 if event and event.startswith("variable."):
-                    extra_fields = _mask_variable_fields(extra_fields)
-                if event and event.startswith("connection."):
-                    extra_fields = _mask_connection_fields(extra_fields)
+                    extra_fields = _mask_variable_fields(
+                        request.json if isAPIRequest and hasJsonBody else 
extra_fields
+                    )
+                elif event and event.startswith("connection."):
+                    extra_fields = _mask_connection_fields(
+                        request.json if isAPIRequest and hasJsonBody else 
extra_fields
+                    )
+                elif hasJsonBody:
+                    extra_fields.update({"body": request.json})
 
                 params = {**request.values, **request.view_args}
+                if params and "is_paused" in params:
+                    extra_fields.update({"is_paused": params["is_paused"] == 
"false"})

Review Comment:
   ```suggestion
                       extra_fields["is_paused"] = params["is_paused"] == 
"false"
   ```



##########
airflow/www/decorators.py:
##########
@@ -44,36 +44,36 @@ def _mask_variable_fields(extra_fields):
     Mask the 'val_content' field if 'key_content' is in the mask list.
 
     The variable requests values and args comes in this form:
-    [('key', 'key_content'),('val', 'val_content'), ('description', 
'description_content')]
+    [{'key': 'key_content'},{'val': 'val_content'}, {'description': 
'description_content'}]
     """
-    result = []
+    result = {}
     keyname = None
-    for k, v in extra_fields:
+    for k, v in extra_fields.items():
         if k == "key":
             keyname = v
-            result.append((k, v))
-        elif keyname and k == "val":
+            result.update({k: v})
+        elif keyname and (k == "val" or k == "value"):
             x = secrets_masker.redact(v, keyname)
-            result.append((k, x))
+            result.update({k: x})
             keyname = None
         else:
-            result.append((k, v))
+            result.update({k: v})

Review Comment:
   ```suggestion
               result[k] = v
   ```



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to