def test_when_delta(): # Test that the event length is calculated correctly ev = Event(namespace_id=0) # Time: minutes is 0 if start/end at same time ev.start = arrow.get(2015, 01, 01, 10, 00, 00) ev.end = arrow.get(2015, 01, 01, 10, 00, 00) when = ev.when assert isinstance(when, Time) assert ev.length == timedelta(minutes=0) # TimeSpan ev.start = arrow.get(2015, 01, 01, 10, 00, 00) ev.end = arrow.get(2015, 01, 01, 10, 30, 00) when = ev.when assert isinstance(when, TimeSpan) assert ev.length == timedelta(minutes=30) # Date: notice days is 0 if starts/ends on same day ev.all_day = True ev.start = arrow.get(2015, 01, 01, 00, 00, 00) ev.end = arrow.get(2015, 01, 01, 00, 00, 00) when = ev.when assert isinstance(when, Date) assert ev.length == timedelta(days=0) # DateSpan ev.all_day = True ev.start = arrow.get(2015, 01, 01, 10, 00, 00) ev.end = arrow.get(2015, 01, 02, 10, 00, 00) when = ev.when assert isinstance(when, DateSpan) assert ev.length == timedelta(days=1)
def recurring_override_instance(db, master, original_start, start, end): # Returns an Override that has the master's UID, but is not linked yet override_uid = '{}_{}'.format(master.uid, original_start.strftime("%Y%m%dT%H%M%SZ")) ev = db.session.query(Event).filter_by(uid=override_uid).first() if ev: db.session.delete(ev) db.session.commit() ev = Event(original_start_time=original_start, master_event_uid=master.uid, namespace_id=master.namespace_id, calendar_id=master.calendar_id) ev.update(master) ev.uid = override_uid ev.start = start ev.end = end ev.master_event_uid = master.uid db.session.add(ev) return ev