def remove_allocation(self, id=None, group=None): if id: master = self.allocation_by_id(id) allocations = [master] allocations.extend(self.allocation_mirrors_by_master(master)) elif group: allocations = self.allocations_by_group(group, masters_only=False) else: raise NotImplementedError for allocation in allocations: assert allocation.mirror_of == self.uuid, """ Trying to delete an allocation from a different resource than the scheduler and context. This is a serious error or someone trying to something funny with the POST parameters. """ if len(allocation.reserved_slots) > 0: raise AffectedReservationError(allocation.reserved_slots[0]) if allocation.pending_reservations.count(): raise AffectedPendingReservationError( allocation.pending_reservations[0] ) for allocation in allocations: if not allocation.is_transient: Session.delete(allocation)
def remove_reservation_from_session(session_id, token): """ Removes the reservation with the given session_id and token. """ assert token and session_id query = reservations_by_session(session_id) query = query.filter(Reservation.token == token) reservation = query.one() Session.delete(reservation) # if we get here the token must be valid, we should then check if the # token is used in the reserved slots, because with autoapproval these # slots may be created straight away. slots = Session.query(ReservedSlot).filter( ReservedSlot.reservation_token == token ) slots.delete('fetch') # we also update the timestamp of existing reservations within # the same session to ensure that we account for the user's activity # properly during the session expiration cronjob. Otherwise it is # possible that a user removes the latest reservations only to see # the rest of them vanish because his older reservations were # already old enough to be counted as expired. query = Session.query(Reservation) query = query.filter(Reservation.session_id == session_id) query.update({"modified": utils.utcnow()})
def deny_reservation(self, token): """ Denies a pending reservation, removing it from the records and sending an email to the reservee. """ query = self.reservation_by_token(token) query.filter(Reservation.status == u'pending') reservation = query.one() Session.delete(reservation) notify(ReservationDeniedEvent(reservation, self.language))
def remove_reservation(self, token): """ Removes all reserved slots of the given reservation token. Note that removing a reservation does not let the reservee know that his reservation has been removed. If you want to let the reservee know what happened, use revoke_reservation. """ slots = self.reserved_slots_by_reservation(token) for slot in slots: Session.delete(slot) self.reservation_by_token(token).delete()