def test_is_active_at(create_blocking, check_date, expected): start_date = date(2014, 12, 5) end_date = date(2014, 12, 7) check_date = datetime.strptime(check_date, '%Y-%m-%d').date() blocking = create_blocking(start_date=start_date, end_date=end_date) assert blocking.is_active_at(check_date) == expected assert Blocking.find_first(Blocking.is_active_at(check_date)) == (blocking if expected else None)
def get_blocked_rooms(self, *dates, **kwargs): states = kwargs.get('states', (BlockedRoom.State.accepted,)) return (self.blocked_rooms .join(BlockedRoom.blocking) .options(contains_eager(BlockedRoom.blocking)) .filter(or_(Blocking.is_active_at(d) for d in dates), BlockedRoom.state.in_(states)) .all())
def get_room_blockings(start_dt=None, end_dt=None, created_by=None, in_rooms_owned_by=None): query = Blocking.query if start_dt and not end_dt: query = query.filter(Blocking.is_active_at(start_dt)) elif start_dt and end_dt: query = query.filter( db_dates_overlap(Blocking, 'start_date', start_dt, 'end_date', end_dt)) criteria = [] if created_by: criteria.append(Blocking.created_by_user == created_by) if in_rooms_owned_by: criteria.append(Room.owner == in_rooms_owned_by) query = (query.join(Blocking.blocked_rooms).join(BlockedRoom.room)) query = query.filter(db.or_(*criteria)) return query.all()