コード例 #1
0
    def post(self, request, project_id, template_id, resource_name):
        validate_resource_name(resource_name)

        if is_create_template(template_id):
            # template dict like {'desc': '', 'name': ''}
            tpl_args = request.data.get('template', {})
            template = create_template_with_perm_check(request, project_id,
                                                       tpl_args)
        else:
            template = get_template_by_project_and_id(project_id, template_id)

        self.can_edit_template(request, template)

        data = request.data or {}
        data.update({
            'version_id': 0,
            'resource_id': 0,
            'project_id': project_id
        })
        serializer_class = serializers_new.get_slz_class_by_resource_name(
            resource_name)
        serializer = serializer_class(data=data)
        serializer.is_valid(raise_exception=True)
        validated_data = serializer.validated_data
        create_data = self._compose_create_data(validated_data)
        ret_data = self._create_resource_entity(resource_name, template.id,
                                                create_data)
        return Response(ret_data)
コード例 #2
0
    def put(self, request, project_id, version_id, resource_name, resource_id):
        """模板集中有 version 信息时,从 version 版本创建新的版本信息
        """
        validate_resource_name(resource_name)

        serializer = serializers_new.VentityWithTemplateSLZ(data=self.kwargs)
        serializer.is_valid(raise_exception=True)
        validated_data = serializer.validated_data

        ventity = validated_data['ventity']
        template = validated_data['template']
        self.can_edit_template(request, template)

        data = request.data or {}
        data.update({
            'version_id': version_id,
            'resource_id': resource_id,
            'project_id': project_id
        })

        serializer_class = serializers_new.get_slz_class_by_resource_name(
            resource_name)
        serializer = serializer_class(data=data)
        serializer.is_valid(raise_exception=True)

        update_data = self._compose_update_data(serializer.validated_data)
        resource_class = get_model_class_by_resource_name(resource_name)
        if int(resource_id):
            robj = resource_class.perform_update(resource_id, **update_data)
        else:
            robj = resource_class.perform_create(**update_data)

        new_ventity = VersionedEntity.update_for_new_ventity(
            ventity.id, resource_name, resource_id, str(robj.id),
            **{'creator': self.request.user.username})

        # model Template updated field need change when update resource
        template.save(update_fields=['updated'])

        return Response({
            'id': robj.id,
            'version': new_ventity.id,
            'resource_data': robj.get_res_config(is_simple=True)
        })