Пример #1
0
 def guess_room(self, request, ldap_user_read=None):
     ipaddress = request.options['ipaddress']
     host_filter = self._get_host_filter(ipaddress)
     computers = ldap_user_read.searchDn(host_filter)
     if computers:
         room_filter = self._get_room_filter(computers)
         for school in School.get_all(ldap_user_read):
             school = school.name
             for room in ComputerRoom.get_all(ldap_user_read, school,
                                              room_filter):
                 self.finished(request.id, dict(school=school,
                                                room=room.dn))
                 return
     self.finished(request.id, dict(school=None, room=None))
Пример #2
0
    def query(self, request, ldap_user_read=None):
        school = request.options['school']
        pattern = LDAP_Filter.forGroups(request.options.get('pattern', ''),
                                        school)

        result = [{
            'name': x.get_relative_name(),
            'description': x.description or '',
            '$dn$': x.dn,
        } for x in ComputerRoom.get_all(ldap_user_read, school, pattern)]
        result = sorted(result,
                        cmp=lambda x, y: cmp(x.lower(), y.lower()),
                        key=lambda x: x['name'])  # TODO: still necessary?

        self.finished(request.id, result)
Пример #3
0
    def rooms(self, request, ldap_user_read=None):
        """Returns a list of all available rooms"""
        rooms = []
        try:
            all_rooms = ComputerRoom.get_all(ldap_user_read,
                                             request.options['school'])
        except udm_exceptions.noObject:
            all_rooms = []

        for room in all_rooms:
            room_info = _readRoomInfo(room.dn)
            user_dn = room_info.get('user')

            locked = user_dn and not compare_dn(user_dn, self.user_dn) and (
                'pid' in room_info or 'exam' in room_info)
            if locked:
                try:
                    # open the corresponding UDM object to get a displayable user name
                    user_dn = Display.user(
                        User.from_dn(
                            user_dn, None,
                            ldap_user_read).get_udm_object(ldap_user_read))
                except udm_exceptions.base as exc:
                    MODULE.warn(
                        'Cannot open LDAP information for user %r: %s' %
                        (user_dn, exc))

            rooms.append({
                'id': room.dn,
                'label': room.get_relative_name(),
                'user': user_dn,
                'locked': locked,
                'exam': room_info.get('exam'),
                'examDescription': room_info.get('examDescription'),
                'examEndTime': room_info.get('examEndTime'),
            })

        self.finished(request.id, rooms)