예제 #1
0
def _merge_users(target, source, **kwargs):
    BlockingPrincipal.merge_users(target, source, 'blocking')
    Blocking.find(created_by_id=source.id).update({Blocking.created_by_id: target.id})
    Reservation.find(created_by_id=source.id).update({Reservation.created_by_id: target.id})
    Reservation.find(booked_for_id=source.id).update({Reservation.booked_for_id: target.id})
    Room.find(owner_id=source.id).update({Room.owner_id: target.id})
    rb_settings.acls.merge_users(target, source)
예제 #2
0
파일: utils.py 프로젝트: marcosmolla/indico
def rb_merge_users(new_id, old_id):
    """Updates RB data after an Avatar merge

    :param new_id: Target user
    :param old_id: Source user (being deleted in the merge)
    """
    from indico.modules.rb import settings as rb_settings
    from indico.modules.rb.models.blocking_principals import BlockingPrincipal
    from indico.modules.rb.models.blockings import Blocking
    from indico.modules.rb.models.reservations import Reservation
    from indico.modules.rb.models.rooms import Room

    old_user = User.get(int(old_id))
    new_user = User.get(int(new_id))
    for bp in BlockingPrincipal.find():
        if bp.principal == old_user:
            bp.principal = new_user
    Blocking.find(created_by_id=old_id).update({'created_by_id': new_id})
    Reservation.find(created_by_id=old_id).update({'created_by_id': new_id})
    Reservation.find(booked_for_id=old_id).update({'booked_for_id': new_id})
    Room.find(owner_id=old_id).update({'owner_id': new_id})
    for key in ('authorized_principals', 'admin_principals'):
        principals = rb_settings.get(key)
        principals = principals_merge_users(principals, new_id, old_id)
        rb_settings.set(key, principals)
예제 #3
0
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)
예제 #4
0
파일: utils.py 프로젝트: marcosmolla/indico
def rb_merge_users(new_id, old_id):
    """Updates RB data after an Avatar merge

    :param new_id: Target user
    :param old_id: Source user (being deleted in the merge)
    """
    from indico.modules.rb import settings as rb_settings
    from indico.modules.rb.models.blocking_principals import BlockingPrincipal
    from indico.modules.rb.models.blockings import Blocking
    from indico.modules.rb.models.reservations import Reservation
    from indico.modules.rb.models.rooms import Room

    old_user = User.get(int(old_id))
    new_user = User.get(int(new_id))
    for bp in BlockingPrincipal.find():
        if bp.principal == old_user:
            bp.principal = new_user
    Blocking.find(created_by_id=old_id).update({'created_by_id': new_id})
    Reservation.find(created_by_id=old_id).update({'created_by_id': new_id})
    Reservation.find(booked_for_id=old_id).update({'booked_for_id': new_id})
    Room.find(owner_id=old_id).update({'owner_id': new_id})
    for key in ('authorized_principals', 'admin_principals'):
        principals = rb_settings.get(key)
        principals = principals_merge_users(principals, new_id, old_id)
        rb_settings.set(key, principals)
예제 #5
0
파일: __init__.py 프로젝트: mic4ael/indico
def _merge_users(target, source, **kwargs):
    BlockingPrincipal.merge_users(target, source, 'blocking')
    Blocking.find(created_by_id=source.id).update({Blocking.created_by_id: target.id})
    Reservation.find(created_by_id=source.id).update({Reservation.created_by_id: target.id})
    Reservation.find(booked_for_id=source.id).update({Reservation.booked_for_id: target.id})
    Room.find(owner_id=source.id).update({Room.owner_id: target.id})
    rb_settings.acls.merge_users(target, source)
def create_blocking(room_ids, allowed, start_date, end_date, reason, created_by):
    blocking = Blocking()
    blocking.start_date = start_date
    blocking.end_date = end_date
    blocking.created_by_user = created_by
    _populate_blocking(blocking, room_ids, allowed, reason)
    db.session.add(blocking)
    db.session.flush()
    return blocking
예제 #7
0
파일: blockings.py 프로젝트: indico/indico
def create_blocking(room_ids, allowed, start_date, end_date, reason, created_by):
    blocking = Blocking()
    blocking.start_date = start_date
    blocking.end_date = end_date
    blocking.created_by_user = created_by
    _populate_blocking(blocking, room_ids, allowed, reason)
    db.session.add(blocking)
    db.session.flush()
    return blocking
예제 #8
0
def _merge_users(target, source, **kwargs):
    source_principals = set(source.in_blocking_acls.options(joinedload(BlockingPrincipal.blocking)))
    target_blockings = {x.blocking for x in target.in_blocking_acls.options(joinedload(BlockingPrincipal.blocking))}
    for principal in source_principals:
        if principal.blocking not in target_blockings:
            principal.user_id = target.id
        else:
            db.session.delete(principal)
    Blocking.find(created_by_id=source.id).update({Blocking.created_by_id: target.id})
    Reservation.find(created_by_id=source.id).update({Reservation.created_by_id: target.id})
    Reservation.find(booked_for_id=source.id).update({Reservation.booked_for_id: target.id})
    Room.find(owner_id=source.id).update({Room.owner_id: target.id})
    settings.acls.merge_users(target, source)
예제 #9
0
 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())
예제 #10
0
 def _checkParams(self):
     self._blocking = Blocking.get(request.view_args['blocking_id'])
     if self._blocking is None:
         raise IndicoError('A blocking with this ID does not exist.')
     defaults = FormDefaults(self._blocking, attrs={'reason'},
                             principals=self._blocking.allowed,
                             blocked_rooms=[br.room_id for br in self._blocking.blocked_rooms])
     self._form = BlockingForm(obj=defaults)
     self._form._blocking = self._blocking
예제 #11
0
 def _process_args(self):
     self._blocking = Blocking.get(request.view_args['blocking_id'])
     if self._blocking is None:
         raise IndicoError('A blocking with this ID does not exist.')
     defaults = FormDefaults(self._blocking, attrs={'reason'},
                             principals=self._blocking.allowed,
                             blocked_rooms=[br.room_id for br in self._blocking.blocked_rooms])
     self._form = BlockingForm(obj=defaults)
     self._form._blocking = self._blocking
예제 #12
0
def create_blocking(rooms, start_date, end_date, reason, allowed_principals):
    blocking = Blocking()
    blocking.start_date = start_date
    blocking.end_date = end_date
    blocking.reason = reason
    blocking.created_by_user = session.user
    blocking.allowed = allowed_principals
    blocking.blocked_rooms = [BlockedRoom(room_id=room.id) for room in rooms]
    db.session.add(blocking)
    db.session.flush()
    return blocking
예제 #13
0
파일: rooms.py 프로젝트: bkolobara/indico
 def _process_args(self):
     blocking_id = self._params.get('blocking_id')
     self._room = Room.get(self._params['room_id'])
     self._blocking = Blocking.get(blocking_id) if blocking_id else None
     if 'start_dt' in self._params and 'end_dt' in self._params:
         start_dt = datetime.strptime(self._params['start_dt'], '%H:%M %Y-%m-%d')
         end_dt = datetime.strptime(self._params['end_dt'], '%H:%M %Y-%m-%d')
         self._nonbookable = bool(NonBookablePeriod.find_first(NonBookablePeriod.room_id == self._room.id,
                                                               NonBookablePeriod.overlaps(start_dt, end_dt)))
     else:
         self._nonbookable = False
예제 #14
0
 def _save(self):
     self._blocking = blocking = Blocking()
     blocking.start_date = self._form.start_date.data
     blocking.end_date = self._form.end_date.data
     blocking.created_by_user = session.user
     blocking.reason = self._form.reason.data
     blocking.allowed = self._form.principals.data
     blocking.blocked_rooms = [BlockedRoom(room_id=room_id) for room_id in self._form.blocked_rooms.data]
     db.session.add(blocking)
     db.session.flush()  # synchronizes relationships (e.g. BlockedRoom.room)
     flash(_(u'Blocking created'), 'success')
     self._process_blocked_rooms(blocking.blocked_rooms)
예제 #15
0
def rb_merge_users(new_id, old_id):
    """Updates RB data after an Avatar merge

    :param new_id: Target user
    :param old_id: Source user (being deleted in the merge)
    """
    from indico.modules.rb import settings
    from indico.modules.rb.models.blocking_principals import BlockingPrincipal
    from indico.modules.rb.models.blockings import Blocking
    from indico.modules.rb.models.reservations import Reservation
    from indico.modules.rb.models.rooms import Room

    BlockingPrincipal.find(entity_type='Avatar', entity_id=old_id).update({'entity_id': new_id})
    Blocking.find(created_by_id=old_id).update({'created_by_id': new_id})
    Reservation.find(created_by_id=old_id).update({'created_by_id': new_id})
    Reservation.find(booked_for_id=old_id).update({'booked_for_id': new_id})
    Room.find(owner_id=old_id).update({'owner_id': new_id})
    for key in ('authorized_principals', 'admin_principals'):
        principals = settings.get(key, [])
        principals = principals_merge_users(principals, new_id, old_id)
        settings.set(key, principals)
예제 #16
0
    def _process(self):
        criteria = []
        if self.only_mine:
            criteria += [Blocking.created_by_id == self._getUser().getId()]
        if self.timeframe == 'year':
            criteria += [Blocking.start_date <= date(date.today().year, 12, 31),
                         Blocking.end_date >= date(date.today().year, 1, 1)]
        elif self.timeframe == 'recent':
            criteria += [Blocking.end_date >= date.today()]

        blockings = Blocking.find(*criteria, _eager_all='blocked_rooms.room').order_by(Blocking.start_date.desc()).all()
        return WPRoomBookingBlockingList(self, blockings=blockings).display()
예제 #17
0
def rb_merge_users(new_id, old_id):
    """Updates RB data after an Avatar merge

    :param new_id: Target user
    :param old_id: Source user (being deleted in the merge)
    """
    from indico.modules.rb import settings
    from indico.modules.rb.models.blocking_principals import BlockingPrincipal
    from indico.modules.rb.models.blockings import Blocking
    from indico.modules.rb.models.reservations import Reservation
    from indico.modules.rb.models.rooms import Room

    BlockingPrincipal.find(entity_type='Avatar',
                           entity_id=old_id).update({'entity_id': new_id})
    Blocking.find(created_by_id=old_id).update({'created_by_id': new_id})
    Reservation.find(created_by_id=old_id).update({'created_by_id': new_id})
    Reservation.find(booked_for_id=old_id).update({'booked_for_id': new_id})
    Room.find(owner_id=old_id).update({'owner_id': new_id})
    for key in ('authorized_principals', 'admin_principals'):
        principals = settings.get(key, [])
        principals = principals_merge_users(principals, new_id, old_id)
        settings.set(key, principals)
예제 #18
0
    def migrate_blockings(self):
        state_map = {
            None: BlockedRoom.State.pending,
            False: BlockedRoom.State.rejected,
            True: BlockedRoom.State.accepted
        }

        print cformat('%{white!}migrating blockings')
        for old_blocking_id, old_blocking in self.rb_root['RoomBlocking'][
                'Blockings'].iteritems():
            b = Blocking(id=old_blocking.id,
                         created_by_id=self.merged_avatars.get(
                             old_blocking._createdBy, old_blocking._createdBy),
                         created_dt=as_utc(old_blocking._utcCreatedDT),
                         start_date=old_blocking.startDate,
                         end_date=old_blocking.endDate,
                         reason=convert_to_unicode(old_blocking.message))

            print cformat(u'- %{cyan}{}').format(b.reason)
            for old_blocked_room in old_blocking.blockedRooms:
                br = BlockedRoom(
                    state=state_map[old_blocked_room.active],
                    rejected_by=old_blocked_room.rejectedBy,
                    rejection_reason=convert_to_unicode(
                        old_blocked_room.rejectionReason),
                )
                room = Room.get(get_room_id(old_blocked_room.roomGUID))
                room.blocked_rooms.append(br)
                b.blocked_rooms.append(br)
                print cformat(u'  %{blue!}Room:%{reset} {} ({})').format(
                    room.full_name,
                    BlockedRoom.State(br.state).title)

            for old_principal in old_blocking.allowed:
                principal_id = old_principal._id
                if old_principal._type == 'Avatar':
                    principal_id = int(
                        self.merged_avatars.get(old_principal._id,
                                                old_principal._id))
                    principal_type = 'User'
                else:
                    principal_type = 'Group'
                bp = BlockingPrincipal(
                    _principal=[principal_type, principal_id])
                b._allowed.add(bp)
                print cformat(u'  %{blue!}Allowed:%{reset} {}({})').format(
                    bp.entity_type, bp.entity_id)
            db.session.add(b)
        db.session.commit()
예제 #19
0
 def _create_blocking(**params):
     room = params.pop('room', dummy_room)
     state = params.pop('state', BlockedRoom.State.pending)
     params.setdefault('start_date', date.today())
     params.setdefault('end_date', date.today())
     params.setdefault('reason', u'Blocked')
     params.setdefault('created_by_user', dummy_user)
     blocking = Blocking(**params)
     if room is not None:
         br = BlockedRoom(room=room, state=state, blocking=blocking)
         if state == BlockedRoom.State.accepted:
             br.approve(notify_blocker=False)
     db.session.add(blocking)
     db.session.flush()
     return blocking
예제 #20
0
 def _process_args(self):
     blocking_id = self._params.get('blocking_id')
     self._room = Room.get(self._params['room_id'])
     self._blocking = Blocking.get(blocking_id) if blocking_id else None
     if 'start_dt' in self._params and 'end_dt' in self._params:
         start_dt = datetime.strptime(self._params['start_dt'],
                                      '%H:%M %Y-%m-%d')
         end_dt = datetime.strptime(self._params['end_dt'],
                                    '%H:%M %Y-%m-%d')
         self._nonbookable = bool(
             NonBookablePeriod.find_first(
                 NonBookablePeriod.room_id == self._room.id,
                 NonBookablePeriod.overlaps(start_dt, end_dt)))
     else:
         self._nonbookable = False
예제 #21
0
파일: blockings.py 프로젝트: weLoser/indico
    def _process(self):
        criteria = []
        if self.only_mine:
            criteria += [Blocking.created_by_user == session.user]
        if self.timeframe == 'year':
            criteria += [
                Blocking.start_date <= date(date.today().year, 12, 31),
                Blocking.end_date >= date(date.today().year, 1, 1)
            ]
        elif self.timeframe == 'recent':
            criteria += [Blocking.end_date >= date.today()]

        blockings = (Blocking.find(*criteria).options(
            joinedload('blocked_rooms').joinedload('room')).order_by(
                Blocking.start_date.desc()).all())
        return WPRoomBookingBlockingList(self, blockings=blockings).display()
예제 #22
0
    def _process(self):
        criteria = []
        if self.only_mine:
            criteria += [Blocking.created_by_user == session.user]
        if self.timeframe == "year":
            criteria += [
                Blocking.start_date <= date(date.today().year, 12, 31),
                Blocking.end_date >= date(date.today().year, 1, 1),
            ]
        elif self.timeframe == "recent":
            criteria += [Blocking.end_date >= date.today()]

        blockings = (
            Blocking.find(*criteria)
            .options(joinedload("blocked_rooms").joinedload("room"))
            .order_by(Blocking.start_date.desc())
            .all()
        )
        return WPRoomBookingBlockingList(self, blockings=blockings).display()
예제 #23
0
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()
예제 #24
0
 def _process_args(self):
     self._blocking = Blocking.get(request.view_args['blocking_id'])
     if not self._blocking:
         raise NotFound('A blocking with this ID does not exist.')
예제 #25
0
 def _checkParams(self):
     self._blocking = Blocking.get(request.view_args["blocking_id"])
     if not self._blocking:
         raise IndicoError("A blocking with this ID does not exist.")
예제 #26
0
 def _checkParams(self):
     self._block = Blocking.get(request.view_args['blocking_id'])
     if not self._block:
         raise IndicoError('A blocking with this ID does not exist.')
예제 #27
0
파일: blockings.py 프로젝트: weLoser/indico
 def _process_args(self):
     self._block = Blocking.get(request.view_args['blocking_id'])
     if not self._block:
         raise NotFound('A blocking with this ID does not exist.')
예제 #28
0
파일: blockings.py 프로젝트: jas01/indico
 def _process_args(self):
     self.blocking = Blocking.get_one(request.view_args['blocking_id'])
예제 #29
0
 def _checkParams(self):
     blocking_id = self._params.get('blocking_id')
     self._room = Room.get(self._params['room_id'])
     self._blocking = Blocking.get(blocking_id) if blocking_id else None
예제 #30
0
 def _process_args(self):
     self._blocking = Blocking.get(request.view_args['blocking_id'])
     if not self._blocking:
         raise IndicoError('A blocking with this ID does not exist.')
예제 #31
0
 def _process_args(self):
     self.blocking = Blocking.get_or_404(request.view_args['blocking_id'])
예제 #32
0
파일: rooms.py 프로젝트: NIIF/indico
 def _checkParams(self):
     blocking_id = self._params.get('blocking_id')
     self._room = Room.get(self._params['room_id'])
     self._blocking = Blocking.get(blocking_id) if blocking_id else None