def test_find_with_filters(create_room, create_blocking): rooms = [create_room(), create_room()] blockings = [ create_blocking(start_date=date.today(), end_date=date.today(), room=rooms[0], state=BlockedRoom.State.accepted), create_blocking(start_date=date.today() + timedelta(days=1), end_date=date.today() + timedelta(days=1), room=rooms[1]), create_blocking(start_date=date.today() + timedelta(days=1), end_date=date.today() + timedelta(days=1), room=rooms[1]), ] assert set(BlockedRoom.find_with_filters({})) == set(b.blocked_rooms[0] for b in blockings) filters = { 'start_date': date.today(), 'end_date': date.today(), 'room_ids': {rooms[0].id}, 'state': BlockedRoom.State.accepted } assert set(BlockedRoom.find_with_filters(filters)) == { blockings[0].blocked_rooms[0] }
def __init__(self, occurrences, start_dt, end_dt, candidates=None, rooms=None, specific_room=None, repeat_frequency=None, repeat_interval=None, flexible_days=0, show_blockings=True): self.occurrences = occurrences self.start_dt = start_dt self.end_dt = end_dt self.candidates = candidates self.rooms = rooms self.specific_room = specific_room self.repeat_frequency = repeat_frequency self.repeat_interval = repeat_interval self.flexible_days = flexible_days self.show_blockings = show_blockings self.conflicts = 0 self.bars = [] if self.specific_room and self.rooms: raise ValueError('specific_room and rooms are mutually exclusive') if self.specific_room: self.rooms = [self.specific_room] elif self.rooms is None: self.rooms = Room.find_all(is_active=True) self.rooms = sorted(self.rooms, key=lambda x: natural_sort_key(x.full_name)) if self.show_blockings: self.blocked_rooms = BlockedRoom.find_with_filters({'room_ids': [r.id for r in self.rooms], 'state': BlockedRoom.State.accepted, 'start_date': self.start_dt.date(), 'end_date': self.end_dt.date()}) else: self.blocked_rooms = [] self._produce_bars()
def test_find_with_filters_dates(create_blocking, start_date, end_date, matches): start_date = datetime.strptime(start_date, "%Y-%m-%d").date() end_date = datetime.strptime(end_date, "%Y-%m-%d").date() blockings = [ create_blocking(start_date=date(2014, 12, 5), end_date=date(2014, 12, 7)), create_blocking(start_date=date(2014, 12, 6), end_date=date(2014, 12, 8)), ] filters = {"start_date": start_date, "end_date": end_date} assert set(BlockedRoom.find_with_filters(filters)) == set(blockings[i].blocked_rooms[0] for i in matches)
def __init__(self, occurrences, start_dt, end_dt, candidates=None, rooms=None, specific_room=None, repeat_frequency=None, repeat_interval=None, flexible_days=0, show_blockings=True): self.occurrences = occurrences self.start_dt = start_dt self.end_dt = end_dt self.candidates = candidates self.rooms = rooms self.specific_room = specific_room self.repeat_frequency = repeat_frequency self.repeat_interval = repeat_interval self.flexible_days = flexible_days self.show_blockings = show_blockings self.conflicts = 0 self.bars = [] if self.specific_room and self.rooms: raise ValueError('specific_room and rooms are mutually exclusive') if self.specific_room: self.rooms = [self.specific_room] elif self.rooms is None: self.rooms = Room.find_all(is_active=True) self.rooms = sorted(self.rooms, key=lambda x: natural_sort_key(x.full_name)) if self.show_blockings: # avoid loading user data we don't care about user_strategy = defaultload('blocking').defaultload( 'created_by_user') user_strategy.noload('*') user_strategy.load_only('first_name', 'last_name') room_ids = [r.id for r in self.rooms] filters = { 'room_ids': room_ids, 'state': BlockedRoom.State.accepted, 'start_date': self.start_dt.date(), 'end_date': self.end_dt.date() } self.blocked_rooms = BlockedRoom.find_with_filters( filters).options(user_strategy) self.nonbookable_periods = NonBookablePeriod.find( NonBookablePeriod.room_id.in_(room_ids), NonBookablePeriod.overlaps(self.start_dt, self.end_dt)).all() else: self.blocked_rooms = [] self._produce_bars()
def test_find_with_filters_dates(create_blocking, start_date, end_date, matches): start_date = datetime.strptime(start_date, '%Y-%m-%d').date() end_date = datetime.strptime(end_date, '%Y-%m-%d').date() blockings = [ create_blocking(start_date=date(2014, 12, 5), end_date=date(2014, 12, 7)), create_blocking(start_date=date(2014, 12, 6), end_date=date(2014, 12, 8)) ] filters = {'start_date': start_date, 'end_date': end_date} assert set(BlockedRoom.find_with_filters(filters)) == set(blockings[i].blocked_rooms[0] for i in matches)
def test_find_with_filters(create_room, create_blocking): rooms = [create_room(), create_room()] blockings = [ create_blocking(start_date=date.today(), end_date=date.today(), room=rooms[0], state=BlockedRoom.State.accepted), create_blocking(start_date=date.today() + timedelta(days=1), end_date=date.today() + timedelta(days=1), room=rooms[1]), create_blocking(start_date=date.today() + timedelta(days=1), end_date=date.today() + timedelta(days=1), room=rooms[1]), ] assert set(BlockedRoom.find_with_filters({})) == set(b.blocked_rooms[0] for b in blockings) filters = {'start_date': date.today(), 'end_date': date.today(), 'room_ids': {rooms[0].id}, 'state': BlockedRoom.State.accepted} assert set(BlockedRoom.find_with_filters(filters)) == {blockings[0].blocked_rooms[0]}
def __init__(self, occurrences, start_dt, end_dt, candidates=None, rooms=None, specific_room=None, repeat_frequency=None, repeat_interval=None, flexible_days=0, show_blockings=True): self.occurrences = occurrences self.start_dt = start_dt self.end_dt = end_dt self.candidates = candidates self.rooms = rooms self.specific_room = specific_room self.repeat_frequency = repeat_frequency self.repeat_interval = repeat_interval self.flexible_days = flexible_days self.show_blockings = show_blockings self.conflicts = 0 self.bars = [] if self.specific_room and self.rooms: raise ValueError('specific_room and rooms are mutually exclusive') if self.specific_room: self.rooms = [self.specific_room] elif self.rooms is None: self.rooms = Room.find_all(is_active=True) self.rooms = sorted(self.rooms, key=lambda x: natural_sort_key(x.full_name)) if self.show_blockings: self.blocked_rooms = BlockedRoom.find_with_filters({ 'room_ids': [r.id for r in self.rooms], 'state': BlockedRoom.State.accepted, 'start_date': self.start_dt.date(), 'end_date': self.end_dt.date() }) else: self.blocked_rooms = [] self._produce_bars()
def __init__(self, occurrences, start_dt, end_dt, candidates=None, rooms=None, specific_room=None, repeat_frequency=None, repeat_interval=None, flexible_days=0, show_blockings=True): self.occurrences = occurrences self.start_dt = start_dt self.end_dt = end_dt self.candidates = candidates self.rooms = rooms self.specific_room = specific_room self.repeat_frequency = repeat_frequency self.repeat_interval = repeat_interval self.flexible_days = flexible_days self.show_blockings = show_blockings self.conflicts = 0 self.bars = [] if self.specific_room and self.rooms: raise ValueError('specific_room and rooms are mutually exclusive') if self.specific_room: self.rooms = [self.specific_room] elif self.rooms is None: self.rooms = Room.find_all(is_active=True) self.rooms = sorted(self.rooms, key=lambda x: natural_sort_key(x.full_name)) if self.show_blockings: # avoid loading user data we don't care about user_strategy = defaultload('blocking').defaultload('created_by_user') user_strategy.noload('*') user_strategy.load_only('first_name', 'last_name') room_ids = [r.id for r in self.rooms] filters = { 'room_ids': room_ids, 'state': BlockedRoom.State.accepted, 'start_date': self.start_dt.date(), 'end_date': self.end_dt.date() } self.blocked_rooms = BlockedRoom.find_with_filters(filters).options(user_strategy) self.nonbookable_periods = NonBookablePeriod.find( NonBookablePeriod.room_id.in_(room_ids), NonBookablePeriod.overlaps(self.start_dt, self.end_dt) ).all() else: self.blocked_rooms = [] self._produce_bars()
def test_find_with_filters_state(create_blocking, state): other_state = next(s for s in BlockedRoom.State if s != state) create_blocking(state=other_state) blocking = create_blocking(state=state) assert set(BlockedRoom.find_with_filters({"state": state})) == {blocking.blocked_rooms[0]}
def test_find_with_filters_state(create_blocking, state): other_state = next(s for s in BlockedRoom.State if s != state) create_blocking(state=other_state) blocking = create_blocking(state=state) assert set(BlockedRoom.find_with_filters( {'state': state})) == {blocking.blocked_rooms[0]}