Ejemplo n.º 1
0
def flattened_queryset_timeblocks(queryset, start_key, end_key):
    from limbo.timeblock.logic import TimeBlock
    queryset = queryset.order_by(start_key)
    timeblocks = []
    current_tb = None
    for obj in queryset:
        start = model_attribute(obj, start_key)
        end = model_attribute(obj, end_key)
        if not end:
            end = datetime.datetime.now()
        timeblock = TimeBlock(start, end)

        if current_tb:
            if timeblock.overlaps(current_tb):
                current_tb += timeblock
            else:
                timeblocks.append(current_tb)
                current_tb = timeblock
        else:
            current_tb = timeblock
    if current_tb:
        timeblocks.append(current_tb)
    return timeblocks
Ejemplo n.º 2
0
    def test_timeblock(self):
        today = datetime.datetime.now().date()

        seven = datetime.datetime.combine(today, datetime.time(7,00))
        eight = datetime.datetime.combine(today, datetime.time(8,00))
        nine = datetime.datetime.combine(today, datetime.time(9,00))
        ten = datetime.datetime.combine(today, datetime.time(10,00))
        eleven = datetime.datetime.combine(today, datetime.time(11,00))
        nine_fifty = datetime.datetime.combine(today, datetime.time(9,50))
        ten_o_five = datetime.datetime.combine(today, datetime.time(10,05))

        seven_to_eight = TimeBlock(seven, eight)
        seven_to_ten = TimeBlock(seven, ten)
        seven_to_eleven = TimeBlock(seven, eleven)
        nine_to_ten = TimeBlock(nine, ten)
        ten_to_eleven = TimeBlock(ten, eleven)

        # Test overlaps
        self.assertTrue(seven_to_ten.overlaps(nine_to_ten))
        self.assertTrue(nine_to_ten.overlaps(seven_to_ten))
        self.assertTrue(seven_to_ten.overlaps(ten_to_eleven))

        # Test before
        self.assertTrue(seven_to_eight.before(ten_to_eleven))
        self.assertFalse(ten_to_eleven.before(seven_to_eight))
        self.assertTrue(seven_to_eight.before(nine_to_ten))

        # Test After
        self.assertTrue(ten_to_eleven.after(seven_to_eight))
        self.assertFalse(seven_to_eight.after(ten_to_eleven))

        # Test fully_overlaps
        self.assertTrue(seven_to_ten.fully_overlaps(nine_to_ten))
        self.assertTrue(seven_to_ten.overlaps(nine_to_ten))
        self.assertFalse(seven_to_ten.fully_overlaps(seven_to_eleven))
        self.assertTrue(seven_to_eleven.fully_overlaps(seven_to_eight))

        # Test Less Than
        self.assertFalse(seven_to_eight <= seven_to_eleven)
        self.assertTrue(seven_to_ten <= ten_to_eleven)
        self.assertFalse(seven_to_ten < ten_to_eleven)
        self.assertTrue(seven_to_eight < ten_to_eleven)

        # Test Greater Than
        self.assertTrue(ten_to_eleven >= seven_to_ten)
        self.assertFalse(seven_to_ten >= ten_to_eleven)
        self.assertTrue(ten_to_eleven > seven_to_eight)
        self.assertFalse(ten_to_eleven > seven_to_ten)

        # Test Add
        self.assertTrue(seven_to_ten + nine_to_ten == seven_to_ten)
        self.assertTrue(seven_to_ten + ten_to_eleven == seven_to_eleven)
        self.assertTrue(nine_to_ten + ten_to_eleven == TimeBlock(nine, eleven))
        self.assertRaises(ValueError, seven_to_eight.__add__, ten_to_eleven)

        # Test Subtract
        try:
            ten_to_eleven - seven_to_ten
            self.fail("You shouldn't be able to subtract values before the given time")
        except ValueError:
            pass
        self.assertRaises(ValueError, ten_to_eleven.__sub__, seven_to_eight)
        self.assertEqual(seven_to_ten - ten_to_eleven, seven_to_ten)
        self.assertEqual(nine_to_ten - seven_to_ten, None)
        self.assertEqual(seven_to_eight - seven_to_ten, None)
        self.assertEqual(seven_to_eight, seven_to_ten - TimeBlock(eight, ten))
        self.assertEqual(nine_to_ten, TimeBlock(nine, eleven) - ten_to_eleven)
        self.assertEqual(ten_to_eleven, TimeBlock(nine, eleven) - seven_to_ten)
        # Partial overlaps
        self.assertEqual(TimeBlock(ten_o_five, eleven), ten_to_eleven - TimeBlock(nine_fifty, ten_o_five))
        self.assertEqual(TimeBlock(nine, nine_fifty), nine_to_ten - TimeBlock(nine_fifty, ten_o_five))

        # Test Split
        self.assertEqual(seven_to_ten.split(TimeBlock(eight, nine)), (seven_to_eight, nine_to_ten))
        self.assertEqual(len(seven_to_ten.split(nine_to_ten)), 1)
        self.assertEqual(len(seven_to_ten.split(seven_to_eight)), 1)
        self.assertEqual(len(seven_to_ten.split(TimeBlock(seven, ten))), 0)