|
@@ -124,21 +124,31 @@ def get_option_groups(data, filter_data, k, g, _type):
|
|
unselected = []
|
|
unselected = []
|
|
if group is None:
|
|
if group is None:
|
|
if _type == "include":
|
|
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:
|
|
else:
|
|
selected.extend(filter_data[k][1])
|
|
selected.extend(filter_data[k][1])
|
|
unselected.extend((
|
|
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:
|
|
else:
|
|
if _type == "include":
|
|
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:
|
|
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)}"
|
|
assert set(selected) - set(unselected) == set(selected), f"{set(selected)} {set(unselected)}"
|
|
|
|
|
|
yield {
|
|
yield {
|
|
@@ -175,24 +185,11 @@ def get_form(action, method, filter_data, data):
|
|
tags={
|
|
tags={
|
|
"name": "tag",
|
|
"name": "tag",
|
|
"_include": {
|
|
"_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": {
|
|
"_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={
|
|
units={
|
|
"name": "unit",
|
|
"name": "unit",
|