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))
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)
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)