Coverage for analyze/views.py: 38%

32 statements  

« 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 

4 

5from django.urls import reverse 

6from django.db.models.functions import TruncYear 

7from django.views.generic import TemplateView 

8 

9from shps.models import TempSpatial 

10 

11 

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 

19 

20 

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 

29 

30 

31def get_datatables_data(request): 

32 pd.set_option("display.max_colwidth", -1) 

33 

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) 

54 

55 

56class AnalyzeView(TemplateView): 

57 template_name = "analyze/basic.html"