def get_suggestions(filters, limit=None): blocked_rooms = get_blocked_rooms(filters['start_dt'], filters['end_dt'], [BlockedRoomState.accepted]) rooms = [room for room in search_for_rooms(filters, availability=False) if room not in blocked_rooms] if filters['repeat_frequency'] == RepeatFrequency.NEVER: suggestions = sort_suggestions(get_single_booking_suggestions(rooms, filters['start_dt'], filters['end_dt'], limit=limit)) else: suggestions = sort_suggestions(get_recurring_booking_suggestions(rooms, filters['start_dt'], filters['end_dt'], filters['repeat_frequency'], filters['repeat_interval'], limit=limit)) for entry in suggestions: entry['room_id'] = entry.pop('room').id return suggestions
def _process(self, args): filter_availability = all(x in args for x in ('start_dt', 'end_dt', 'repeat_frequency', 'repeat_interval')) only_unavailable = args.pop('unavailable') admin_override_enabled = args.pop('admin_override_enabled') if not filter_availability: availability = None if only_unavailable: raise UnprocessableEntity('Required data to filter by availability is not present') else: availability = not only_unavailable search_query = search_for_rooms(args, allow_admin=admin_override_enabled, availability=availability) rooms = [(id_, room_name) for id_, room_name, in search_query.with_entities(Room.id, Room.full_name)] # We can't filter by blocking's acl in the search_query, so we need to adjust the results rooms = self._adjust_blockings(rooms, args, availability) room_ids = [room[0] for room in rooms] if filter_availability: room_ids_without_availability_filter = [ id_ for id_, in search_for_rooms(args, allow_admin=admin_override_enabled).with_entities(Room.id) ] else: room_ids_without_availability_filter = room_ids return jsonify(rooms=room_ids, rooms_without_availability_filter=room_ids_without_availability_filter, total=len(room_ids_without_availability_filter), availability_days=self._get_date_range(args))
def test_search_for_rooms_with_entities(dummy_room, dummy_user): session.set_session_user(dummy_user) assert search_for_rooms({}).with_entities( Room.id, Room.full_name).one() == (dummy_room.id, '1/2-3')
def test_search_for_rooms(dummy_room, dummy_user): session.set_session_user(dummy_user) assert search_for_rooms({}).one() == dummy_room