ソースを参照

use common method for tags too handling array of tags

Daniel Sheffield 1 年間 前
コミット
836790675b
1 ファイル変更20 行追加23 行削除
  1. 20 23
      app/rest/pyapi.py

+ 20 - 23
app/rest/pyapi.py

@@ -124,21 +124,31 @@ def get_option_groups(data, filter_data, k, g, _type):
         unselected = []
         if group is None:
             if _type == "include":
-                selected.extend(filter_data[k][0] - (set(data[in_chart][k] if g is not None else set())))
-                unselected.extend(((set(data[in_chart][k]) if g is None else set()) | filter_data[k][1]) - filter_data[k][0])
+                selected.extend(filter_data[k][0] - (
+                    set((chain(*data[in_chart]["tags"]) if k == "tag" else data[in_chart][k]) if g is not None else set())
+                ))
+                unselected.extend(((
+                    set((chain(*data[in_chart]["tags"]) if k == "tag" else data[in_chart][k]) if g is None else set())
+                ) | filter_data[k][1]) - filter_data[k][0])
             else:
                 selected.extend(filter_data[k][1])
                 unselected.extend((
-                    set(data[in_chart][k]) if g is None else set()
+                    set((chain(*data[in_chart]["tags"]) if k == "tag" else data[in_chart][k]) if g is None else set())
                 ) | (
-                    filter_data[k][0] - set(data[in_chart][k]) - filter_data[k][1]
+                    filter_data[k][0] - set(chain(*data[in_chart]["tags"]) if k == "tag" else data[in_chart][k]) - filter_data[k][1]
                 ))
         else:
             if _type == "include":
-                selected.extend(filter_data[k][0] & set(data[in_chart & (data[g].apply(lambda x,axis=None: x == group))][k]))
-                unselected.extend(set(data[in_chart & (data[g].apply(lambda x,axis=None: x == group))][k]) - filter_data[k][0])
+                selected.extend(filter_data[k][0] & set(
+                    data[in_chart & (data[g].apply(lambda x,axis=None: x == group))][k]
+                ))
+                unselected.extend(set(
+                    data[in_chart & (data[g].apply(lambda x,axis=None: x == group))][k]
+                ) - filter_data[k][0])
             else:
-                unselected.extend(set(data[in_chart & (data[g].apply(lambda x,axis=None: x == group))][k]))
+                unselected.extend(set(
+                    data[in_chart & (data[g].apply(lambda x,axis=None: x == group))][k]
+                ))
         assert set(selected) - set(unselected) == set(selected), f"{set(selected)} {set(unselected)}"
         
         yield {
@@ -175,24 +185,11 @@ def get_form(action, method, filter_data, data):
         tags={
             "name": "tag",
             "_include": {
-                "options": sorted(map(lambda x: {
-                    "selected": x[0],
-                    "value": x[1],
-                },chain(
-                    map(lambda x: (True, x), filter_data['tag'][0]),
-                    map(lambda x: (False, x), (set(chain(*data[in_chart]['tags'])) | filter_data['tag'][1]) - filter_data['tag'][0])
-                )), key=lambda x: x["display"] if "display" in x else x["value"])
+                "option_groups": get_option_groups(data, filter_data, "tag", None, "include")
             },
             "_exclude": {
-                "options": sorted(map(lambda x: {
-                    "selected": x[0],
-                    "value": f"!{x[1]}",
-                    "display": x[1]
-                },chain(
-                    map(lambda x: (True, x), filter_data['tag'][0]),
-                    map(lambda x: (False, x), (set(chain(*data[in_chart]['tags'])) | filter_data['tag'][0]) - filter_data['tag'][1])
-                )), key=lambda x: x["display"] if "display" in x else x["value"])
-            }
+                "option_groups": get_option_groups(data, filter_data, "tag", None, "exclude")
+            },
         },
         units={
             "name": "unit",