Implement query strings for shareable search links
This commit is contained in:
@@ -46,6 +46,96 @@ class DrilldownTableView(View, SingleTableMixin):
|
||||
return HttpResponse("No results")
|
||||
|
||||
|
||||
def parse_dates(dates):
|
||||
spl = dates.split(" - ")
|
||||
if all(spl):
|
||||
spl = [f"{x.replace(' ', 'T')}" for x in spl]
|
||||
if not len(spl) == 2:
|
||||
message = "Invalid dates"
|
||||
message_class = "danger"
|
||||
return {"message": message, "class": message_class}
|
||||
from_ts, to_ts = spl
|
||||
from_date, from_time = from_ts.split("T")
|
||||
to_date, to_time = to_ts.split("T")
|
||||
|
||||
return {
|
||||
"from_date": from_date,
|
||||
"to_date": to_date,
|
||||
"from_time": from_time,
|
||||
"to_time": to_time,
|
||||
}
|
||||
else:
|
||||
message = "Invalid dates"
|
||||
message_class = "danger"
|
||||
return {"message": message, "class": message_class}
|
||||
|
||||
|
||||
def create_tags(query):
|
||||
"""
|
||||
Grab the tags out of the query and make a list
|
||||
we can add to the Bulma tags element when the page loads.
|
||||
"""
|
||||
spl = query.split("AND")
|
||||
spl = [x.strip() for x in spl if ":" in x]
|
||||
spl = [x.replace('"', "") for x in spl]
|
||||
return spl
|
||||
|
||||
|
||||
def drilldown_search(request):
|
||||
template_name = "ui/drilldown/results.html"
|
||||
if request.GET:
|
||||
query_params = request.GET.dict()
|
||||
elif request.POST:
|
||||
query_params = request.POST.dict()
|
||||
|
||||
# Parse the dates
|
||||
if "dates" in query_params:
|
||||
dates = parse_dates(query_params["dates"])
|
||||
del query_params["dates"]
|
||||
if "message" in dates:
|
||||
return render(request, template_name, dates)
|
||||
query_params["from_date"] = dates["from_date"]
|
||||
query_params["to_date"] = dates["to_date"]
|
||||
query_params["from_time"] = dates["from_time"]
|
||||
query_params["to_time"] = dates["to_time"]
|
||||
|
||||
if request.GET:
|
||||
context = query_results(request, query_params)
|
||||
elif request.POST:
|
||||
context = query_results(request, query_params)
|
||||
|
||||
# Turn the query into tags for populating the taglist
|
||||
tags = create_tags(query_params["query"])
|
||||
context["tags"] = tags
|
||||
|
||||
context["params"] = query_params
|
||||
if "message" in context:
|
||||
return render(request, template_name, context)
|
||||
|
||||
context["data"] = json.dumps(
|
||||
[
|
||||
{
|
||||
"text": item.get("msg", None) or item.get("id"),
|
||||
"nick": item.get("nick", None),
|
||||
"value": item.get("sentiment", None) or None,
|
||||
"date": item.get("ts"),
|
||||
}
|
||||
for item in context["results"]
|
||||
]
|
||||
)
|
||||
if context:
|
||||
response = render(request, template_name, context)
|
||||
if request.GET:
|
||||
return context
|
||||
elif request.POST:
|
||||
del query_params["csrfmiddlewaretoken"]
|
||||
url_params = urllib.parse.urlencode(query_params)
|
||||
response["HX-Push"] = reverse("home") + "?" + url_params
|
||||
return response
|
||||
else:
|
||||
return HttpResponse("No results")
|
||||
|
||||
|
||||
class Drilldown(View):
|
||||
template_name = "ui/drilldown/drilldown.html"
|
||||
plan_name = "drilldown"
|
||||
@@ -55,41 +145,15 @@ class Drilldown(View):
|
||||
sizes = settings.OPENSEARCH_MAIN_SIZES_ANON
|
||||
else:
|
||||
sizes = settings.OPENSEARCH_MAIN_SIZES
|
||||
context = {
|
||||
"sizes": sizes,
|
||||
}
|
||||
|
||||
context = {}
|
||||
if request.GET:
|
||||
context = drilldown_search(request)
|
||||
context["sizes"] = sizes
|
||||
return render(request, self.template_name, context)
|
||||
|
||||
def post(self, request):
|
||||
template_name = "ui/drilldown/results.html"
|
||||
data_args = request.POST.dict()
|
||||
del data_args["csrfmiddlewaretoken"]
|
||||
print("rep", repr(data_args["dates"]))
|
||||
if data_args["dates"] == " - ":
|
||||
del data_args["dates"]
|
||||
url_params = urllib.parse.urlencode(data_args)
|
||||
print("url_params", url_params)
|
||||
context = query_results(request)
|
||||
if "message" in context:
|
||||
return render(request, self.template_name, context)
|
||||
|
||||
context["data"] = json.dumps(
|
||||
[
|
||||
{
|
||||
"text": item.get("msg", None) or item.get("id"),
|
||||
"nick": item.get("nick", None),
|
||||
"value": item.get("sentiment", None) or None,
|
||||
"date": item.get("ts"),
|
||||
}
|
||||
for item in context["results"]
|
||||
]
|
||||
)
|
||||
if context:
|
||||
response = render(request, template_name, context)
|
||||
response["HX-Push"] = reverse("home") + "?" + url_params
|
||||
return response
|
||||
else:
|
||||
return HttpResponse("No results")
|
||||
return drilldown_search(request)
|
||||
|
||||
|
||||
class ThresholdInfoModal(APIView):
|
||||
|
||||
Reference in New Issue
Block a user