Skip to content
Snippets Groups Projects
Commit 444e2206 authored by Felix Blanke's avatar Felix Blanke Committed by Lorenzo Conti
Browse files

Expand block info in JSON export

parent 6ad0b9f9
Branches
No related tags found
1 merge request!15Expand block info in JSON export
...@@ -248,7 +248,7 @@ class JSONExportTest(TestCase): ...@@ -248,7 +248,7 @@ class JSONExportTest(TestCase):
) )
self.assertEqual( self.assertEqual(
self.export_dict["timeslots"]["info"].keys(), self.export_dict["timeslots"]["info"].keys(),
{"duration"}, {"duration", "blocknames"},
"timeslot info keys not as expected", "timeslot info keys not as expected",
) )
self._check_type( self._check_type(
...@@ -257,6 +257,21 @@ class JSONExportTest(TestCase): ...@@ -257,6 +257,21 @@ class JSONExportTest(TestCase):
"info/duration", "info/duration",
item=item, item=item,
) )
self._check_lst(
self.export_dict["timeslots"]["info"]["blocknames"],
"info/blocknames",
item=item,
contained_type=list,
)
for blockname in self.export_dict["timeslots"]["info"]["blocknames"]:
self.assertEqual(len(blockname), 2)
self._check_lst(
blockname,
"info/blocknames/entry",
item=item,
contained_type=str,
)
self._check_lst( self._check_lst(
self.export_dict["timeslots"]["blocks"], self.export_dict["timeslots"]["blocks"],
"blocks", "blocks",
...@@ -710,9 +725,11 @@ class JSONExportTest(TestCase): ...@@ -710,9 +725,11 @@ class JSONExportTest(TestCase):
self.set_up_event(event=event) self.set_up_event(event=event)
cat_avails = self._get_cat_availability() cat_avails = self._get_cat_availability()
for timeslot in chain.from_iterable( num_blocks = len(self.export_dict["timeslots"]["blocks"])
for block_idx, block in enumerate(
self.export_dict["timeslots"]["blocks"] self.export_dict["timeslots"]["blocks"]
): ):
for timeslot in block:
start, end = self._get_timeslot_start_end(timeslot) start, end = self._get_timeslot_start_end(timeslot)
timeslot_avail = Availability( timeslot_avail = Availability(
event=self.event, start=start, end=end event=self.event, start=start, end=end
...@@ -766,7 +783,8 @@ class JSONExportTest(TestCase): ...@@ -766,7 +783,8 @@ class JSONExportTest(TestCase):
f"availability-ak-{ak.id}" f"availability-ak-{ak.id}"
for ak in AK.objects.filter(event=event) for ak in AK.objects.filter(event=event)
if self._is_restricted_and_contained_slot( if self._is_restricted_and_contained_slot(
timeslot_avail, Availability.union(ak.availabilities.all()) timeslot_avail,
Availability.union(ak.availabilities.all()),
) )
} }
fulfilled_time_constraints |= { fulfilled_time_constraints |= {
...@@ -775,7 +793,52 @@ class JSONExportTest(TestCase): ...@@ -775,7 +793,52 @@ class JSONExportTest(TestCase):
if self._is_ak_fixed_in_slot(slot, timeslot_avail) if self._is_ak_fixed_in_slot(slot, timeslot_avail)
} }
fulfilled_time_constraints |= {
f"notblock{idx}"
for idx in range(num_blocks)
if idx != block_idx
}
self.assertEqual( self.assertEqual(
fulfilled_time_constraints, fulfilled_time_constraints,
set(timeslot["fulfilled_time_constraints"]), set(timeslot["fulfilled_time_constraints"]),
) )
def test_timeslots_info(self):
"""Test timeslots info dict"""
for event in Event.objects.all():
with self.subTest(event=event):
self.set_up_event(event=event)
self.assertAlmostEqual(
self.export_dict["timeslots"]["info"]["duration"],
float(self.event.export_slot),
)
block_names = []
for block in self.export_dict["timeslots"]["blocks"]:
if not block:
continue
block_start, _ = self._get_timeslot_start_end(block[0])
_, block_end = self._get_timeslot_start_end(block[-1])
start_day = block_start.strftime("%A, %d. %b")
if block_start.date() == block_end.date():
# same day
time_str = (
block_start.strftime("%H:%M")
+ ""
+ block_end.strftime("%H:%M")
)
else:
# different days
time_str = (
block_start.strftime("%a %H:%M")
+ ""
+ block_end.strftime("%a %H:%M")
)
block_names.append([start_day, time_str])
self.assertEqual(
block_names, self.export_dict["timeslots"]["info"]["blocknames"]
)
import json import json
from datetime import datetime
from typing import List from typing import List
from django.contrib import messages from django.contrib import messages
...@@ -109,11 +110,30 @@ class AKJSONExportView(AdminViewMixin, FilterByEventSlugMixin, ListView): ...@@ -109,11 +110,30 @@ class AKJSONExportView(AdminViewMixin, FilterByEventSlugMixin, ListView):
for person in AKOwner.objects.filter(event=self.event) for person in AKOwner.objects.filter(event=self.event)
} }
blocks = self.event.discretize_timeslots() blocks = list(self.event.discretize_timeslots())
for block in blocks: block_names = []
for block_idx, block in enumerate(blocks):
current_block = [] current_block = []
if not block:
continue
block_start = block[0].avail.start.astimezone(self.event.timezone)
block_end = block[-1].avail.end.astimezone(self.event.timezone)
start_day = block_start.strftime("%A, %d. %b")
if block_start.date() == block_end.date():
# same day
time_str = block_start.strftime("%H:%M") + "" + block_end.strftime("%H:%M")
else:
# different days
time_str = block_start.strftime("%a %H:%M") + "" + block_end.strftime("%a %H:%M")
block_names.append([start_day, time_str])
block_timeconstraints = [f"notblock{idx}" for idx in range(len(blocks)) if idx != block_idx]
for timeslot in block: for timeslot in block:
time_constraints = [] time_constraints = []
# if reso_deadline is set and timeslot ends before it, # if reso_deadline is set and timeslot ends before it,
...@@ -145,6 +165,7 @@ class AKJSONExportView(AdminViewMixin, FilterByEventSlugMixin, ListView): ...@@ -145,6 +165,7 @@ class AKJSONExportView(AdminViewMixin, FilterByEventSlugMixin, ListView):
]) ])
time_constraints.extend(timeslot.constraints) time_constraints.extend(timeslot.constraints)
time_constraints.extend(block_timeconstraints)
current_block.append({ current_block.append({
"id": str(timeslot.idx), "id": str(timeslot.idx),
...@@ -157,6 +178,8 @@ class AKJSONExportView(AdminViewMixin, FilterByEventSlugMixin, ListView): ...@@ -157,6 +178,8 @@ class AKJSONExportView(AdminViewMixin, FilterByEventSlugMixin, ListView):
timeslots["blocks"].append(current_block) timeslots["blocks"].append(current_block)
timeslots["info"]["blocknames"] = block_names
context["timeslots"] = json.dumps(timeslots) context["timeslots"] = json.dumps(timeslots)
info_dict = { info_dict = {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment