Coverage for analyze/views.py: 38%
32 statements
« prev ^ index » next coverage.py v7.6.0, created at 2024-07-27 11:19 +0000
« prev ^ index » next coverage.py v7.6.0, created at 2024-07-27 11:19 +0000
1from django.http import JsonResponse
2import pandas as pd
3from datetime import timedelta
5from django.urls import reverse
6from django.db.models.functions import TruncYear
7from django.views.generic import TemplateView
9from shps.models import TempSpatial
12def make_href(row, entity="work", id="id", label=None):
13 url = reverse("shapes:shape_detail", kwargs={"pk": row[id]})
14 if label:
15 element = """<a href="{}" target='_blank'>{}</a>""".format(url, row[label])
16 else:
17 element = """<a href="{}" target='_blank'>{}</a>""".format(url, "link2object")
18 return element
21def calculate_duration(row):
22 if row["end_date"] and row["start_date"]:
23 time = pd.to_timedelta(
24 (row["end_date"] - row["start_date"]) + timedelta(days=1)
25 ).__str__()
26 else:
27 time = pd.to_timedelta("0 days").__str__()
28 return time
31def get_datatables_data(request):
32 pd.set_option("display.max_colwidth", -1)
34 # PersonWorkRelation
35 queryset = list(
36 TempSpatial.objects.values(
37 "id",
38 "name",
39 "start_date",
40 "end_date",
41 ).annotate(year=TruncYear("start_date"))
42 )
43 df = pd.DataFrame(queryset)
44 df["name"] = df.apply(
45 lambda row: make_href(row, entity="tempspatial", id="id", label="name"), axis=1
46 )
47 df["items_by_year"] = df.groupby("year")["year"].transform("count")
48 df["duration"] = df.apply(lambda row: calculate_duration(row), axis=1)
49 df["duration"] = df.apply(lambda row: calculate_duration(row), axis=1)
50 payload = {}
51 payload["data"] = df.values.tolist()
52 payload["columns"] = list(df)
53 return JsonResponse(payload)
56class AnalyzeView(TemplateView):
57 template_name = "analyze/basic.html"