Example #1
0
    def core_post(users_file, node_uid):
        '''
        creat or update users
        '''
        cli = CLI()

        reader = csv.DictReader(io.StringIO(users_file.read().decode('utf-8')))
        res = []
        users = []
        for index, row in enumerate(reader):
            username = row.get('username')
            user = User.valid_objects.filter(username=username).first()

            try:
                if user:
                    cli.update_user(user, row)
                else:
                    user = cli.create_user(row)
            except ValidationError as exc:
                raise ValidationError({index + 1: exc.detail})

            users.append(user)    # 重复导入的后果可以接受,故不处理
            res.append(UserCSVSerializer(user).data)

        if node_uid:
            node, node_subject = TreeNode.retrieve_node(node_uid)
            if node_subject == 'dept':
                cli.add_users_to_dept(users, node)
            elif node_subject == 'group':
                cli.add_users_to_group(users, node)
            else:
                raise ValueError

        return res
Example #2
0
    def test_get_node_detail_with_scope(self):
        node, _ = Node.retrieve_node('d_level_1')
        node.user_scope = ['not_existed']
        node.save()

        res = self.client.get(reverse('siteapi:node_detail', args=('d_level_1', )))
        self.assertEqual([], res.json()['user_scope'])
Example #3
0
 def retrieve_nodes(request, uids):
     '''
     获取节点
     '''
     res = []
     for uid in uids:
         node, _ = Node.retrieve_node(uid)
         if not node or not node.is_visible_to_manager(request.user):
             raise ValidationError({'node_uids': [f'{uid} not found']})
         res.append(node.detail_serializer.data)
     return res
Example #4
0
    def get_object(self):
        '''
        find node
        '''
        node, _ = Node.retrieve_node(self.kwargs['uid'])
        if node is None:
            raise NotFound

        if node.__class__ == Dept:
            self.serializer_class = DeptTreeSerializer
        else:
            self.serializer_class = GroupTreeSerializer
        return node
Example #5
0
    def post(self, request, *args, **kwargs):    # pylint: disable=unused-argument
        '''
        导入
        '''
        users_file = request.FILES.get('users', None)
        if not users_file:
            raise ValidationError({'users': ["this field is required"]})

        node_uid = request.data.get('node_uid', '')

        if node_uid:
            node, _ = TreeNode.retrieve_node(node_uid)
            if not node:
                raise NotFound

        res = self.core_post(users_file, node_uid='')

        return Response(res)
Example #6
0
    def get_object(self):
        '''
        find node
        '''
        node, node_subject = Node.retrieve_node(self.kwargs['uid'])
        if node is None:
            raise NotFound

        try:
            self.check_object_permissions(self.request, node)
        except PermissionDenied:
            raise NotFound

        if node_subject == 'dept':
            self.serializer_class = DeptSerializer
        else:
            self.serializer_class = GroupSerializer
        return node