Beispiel #1
0
 def post(self, request, team_name, group_id, *args, **kwargs):
     """
     生成分享订单,会验证是否能够分享
     ---
     parameter:
         - name: team_name
           description: 团队名
           required: true
           type: string
           paramType: path
         - name: group_id
           description: 应用id
           required: true
           type: string
           paramType: path
     """
     scope = request.data.get("scope")
     market_name = None
     if scope == "goodrain":
         target = request.data.get("target")
         market_name = target.get("store_id")
         if market_name is None:
             result = general_message(400, "fail", "参数不全")
             return Response(result, status=result.get("code", 200))
     try:
         if group_id == "-1":
             code = 400
             result = general_message(400, "group id error", "未分组应用不可分享")
             return Response(result, status=code)
         team_id = self.team.tenant_id
         group_count = group_repo.get_group_count_by_team_id_and_group_id(team_id=team_id, group_id=group_id)
         if group_count == 0:
             code = 202
             result = general_message(code, "group is not yours!", "当前组已删除或您无权限查看!", bean={})
             return Response(result, status=200)
         # 判断是否满足分享条件
         data = share_service.check_service_source(
             team=self.team, team_name=team_name, group_id=group_id, region_name=self.response_region)
         if data and data["code"] == 400:
             return Response(data, status=data["code"])
         fields_dict = {
             "group_share_id": make_uuid(),
             "group_id": group_id,
             "team_name": team_name,
             "is_success": False,
             "step": 1,
             "share_app_market_name": market_name,
             "scope": scope,
             "create_time": datetime.datetime.now(),
             "update_time": datetime.datetime.now(),
         }
         service_share_record = share_service.create_service_share_record(**fields_dict)
         result = general_message(200, "create success", "创建成功", bean=service_share_record.to_dict())
         return Response(result, status=200)
     except ServiceHandleException as e:
         raise e
     except Exception as e:
         logger.exception(e)
         result = error_message(e.message)
         return Response(result, status=500)
Beispiel #2
0
 def post(self, request, team_name, group_id, *args, **kwargs):
     """
     生成分享订单,会验证是否能够分享
     ---
     parameter:
         - name: team_name
           description: 团队名
           required: true
           type: string
           paramType: path
         - name: group_id
           description: 应用组id
           required: true
           type: string
           paramType: path
     """
     try:
         if group_id == "-1":
             code = 400
             result = general_message(400, "group id error", "未分组应用不可分享")
             return Response(result, status=code)
         team_id = self.team.tenant_id
         group_count = group_repo.get_group_count_by_team_id_and_group_id(team_id=team_id, group_id=group_id)
         if group_count == 0:
             code = 400
             result = general_message(code, "group is not yours!", "这个应用组不是你的!")
             return Response(result, status=code)
         # 判断是否满足分享条件
         data = share_service.check_service_source(
             team=self.team,
             team_name=team_name,
             group_id=group_id,
             region_name=self.response_region)
         if data and data["code"] == 400:
             return Response(data, status=data["code"])
         # 判断是否有未完成订单
         share_record = share_service.get_service_share_record_by_group_id(group_id)
         if share_record:
             if not share_record.is_success and share_record.step < 3:
                 result = general_message(20021, "share record not complete", "之前有分享流程未完成",
                                          bean=share_record.to_dict())
                 return Response(result, status=200)
         fields_dict = {
             "group_share_id": make_uuid(),
             "group_id": group_id,
             "team_name": team_name,
             "is_success": False,
             "step": 1,
             "create_time": datetime.datetime.now(),
             "update_time": datetime.datetime.now()
         }
         service_share_record = share_service.create_service_share_record(**fields_dict)
         result = general_message(200, "create success", "创建成功", bean=service_share_record.to_dict())
         return Response(result, status=200)
     except Exception as e:
         logger.exception(e)
         result = error_message(e.message)
         return Response(result, status=500)
    def post(self, request, team_name, plugin_id, *args, **kwargs):
        """
        创建分享插件记录
        ---
        parameter:
            - name: team_name
              description: 团队名
              required: true
              type: string
              paramType: path
            - name: plugin_id
              description: 插件id
              required: true
              type: string
              paramType: path
            - name: build_version
              description: 构建版本
              required: true
              type: string
              paramType: path
        """
        team_id = self.team.tenant_id

        plugin = plugin_repo.get_plugin_by_plugin_id(team_id, plugin_id)
        if not plugin:
            return Response(general_message(404, 'plugin not exist', '插件不存在'))

        share_record = share_service.get_service_share_record_by_group_id(
            plugin_id)
        if share_record:
            if not share_record.is_success and share_record.step < 3:
                result = general_message(20021,
                                         "share not complete",
                                         "有分享流程未完成",
                                         bean=share_record.to_dict())
                return Response(result, status=200)

        status, msg, msg_show = market_plugin_service.check_plugin_share_condition(
            self.team, plugin_id, self.response_region)
        if status != 200:
            return Response(general_message(status, msg, msg_show),
                            status=status)

        record = {
            "group_share_id": make_uuid(),
            "group_id": plugin_id,
            "team_name": team_name,
            "is_success": False,
            "step": 1,
        }
        service_share_record = share_service.create_service_share_record(
            **record)
        result = general_message(200,
                                 "create success",
                                 "创建成功",
                                 bean=service_share_record.to_dict())
        return Response(result, status=200)
Beispiel #4
0
    def post(self, request, group_id, *args, **kwargs):
        """
        生成分享应用实体,向数据中心发送分享任务
        ---
        parameter:
            - name: team_name
              description: 团队名
              required: true
              type: string
              paramType: path
            - name: group_id
              description: 应用组id
              required: true
              type: string
              paramType: path
            - name: group_name
              description: 应用包名字
              required: true
              type: string
              paramType: body
            - name: version
              description: 应用包版本
              required: true
              type: string
              paramType: body
            - name: scope
              description: 分享应用包可用范围("team", u"团队"), ("enterprise", u"公司"), ("goodrain", u"好雨云市场")
              required: true
              type: string
              paramType: body
            - name: pic
              description: 应用包头像
              required: true
              type: string
              paramType: body
            - name: app_template_incomplete
              description: 不完整的App模版
              required: true
              type: string
              paramType: body
        """
        group_name = request.data.get("group_name", None)
        version = request.data.get("version", "v1.0")
        describe = request.data.get("describe",
                                    "This is a default description.")
        scope = request.data.get("scope", "team")
        pic = request.data.get("pic", None)
        app_template_incomplete = request.data.get("app_template_incomplete",
                                                   None)
        source = request.data.get('source', 'local')
        # is_random = request.data.get("is_random", False)
        # 插件
        try:
            group_id = str(group_id)
            if group_id == "-1":
                code = 400
                result = general_message(code, "query success", "未分组应用不可分享")
                return Response(result, status=code)
            else:
                if group_id is None or not group_id.isdigit():
                    code = 400
                    result = general_message(
                        code, "group_id is missing or not digit!",
                        "group_id缺失或非数字")
                    return Response(result, status=code)
                team_id = self.team.tenant_id
                group_count = group_repo.get_group_count_by_team_id_and_group_id(
                    team_id=team_id, group_id=group_id)
                if group_count == 0:
                    code = 400
                    result = general_message(code, "group is not yours!",
                                             "这个应用组不是你的!")
                    return Response(result, status=code)
                else:
                    if RainbondCenterApp.objects.filter(
                            group_name=group_name, version=version).exists():
                        result = general_message(400, "failed", "此应用包该版本已经存在")
                        return Response(result, status=400)
                    else:
                        step = 0
                        for service_incomplete in app_template_incomplete:
                            service_env_map_list = service_incomplete.get(
                                "service_env_map_list", None)
                            if service_env_map_list:
                                for service_env in service_env_map_list:
                                    is_change = service_env.get(
                                        "is_change", None)
                                    is_change_p = request.data.get(
                                        "is_change", False)
                                    is_change = is_change_p

                            is_slug, data = app_store.judge_service_type(
                                scope=scope,
                                team_name=self.team_name,
                                service=service_incomplete)

                            if is_slug:
                                service_incomplete["service_slug"] = data
                            else:
                                service_incomplete["service_image"] = data

                        app_template = app_template_incomplete

                        app = share_service.create_basic_app_info(
                            group_key=make_uuid(),
                            group_name=group_name,
                            version=version,
                            describe=describe,
                            scope=scope,
                            pic=pic,
                            source=source,
                            share_team=self.team.tenant_id,
                            share_user=request.user.user_id,
                            tenant_service_group_id=group_id,
                            app_template=json_dump(app_template))
                        fields_dict = {
                            "group_share_id": app.ID,
                            "group_id": group_id,
                            "team_id": team_id,
                            "is_success": False,
                            "step": step
                        }
                        service_share_record = share_service.create_service_share_record(
                            **fields_dict)
                        for service in app_template:
                            if service.get("service_slug", None):
                                logger.debug("group.publish",
                                             "service group publish slug.")
                                code, msg, event_id = share_service.upload_slug(
                                    request,
                                    team=self.team,
                                    scope=scope,
                                    region_name=self.response_region,
                                    app=app,
                                    service=service)
                                step += 1
                                fields_dict.update({
                                    "step": step,
                                    "is_success": False
                                })
                                service_share_record = share_service.create_service_share_record(
                                    **fields_dict)
                                result = general_message(200,
                                                         'share running……',
                                                         '应用包正在分享……',
                                                         bean={
                                                             "event_id":
                                                             event_id,
                                                             "app_id": app.ID,
                                                             "group_id":
                                                             group_id
                                                         })
                            else:
                                logger.debug("group.publish",
                                             "service group publish image.")
                                code, msg, event_id = share_service.upload_image(
                                    request,
                                    team=self.team,
                                    scope=scope,
                                    region_name=self.response_region,
                                    app=app,
                                    service=service)
                                result = general_message(200,
                                                         'share running……',
                                                         '应用包正在分享……',
                                                         bean={
                                                             "event_id":
                                                             event_id,
                                                             "app_id": app.ID,
                                                             "group_id":
                                                             group_id
                                                         })
                            return Response(result, status=200)
        except Exception as e:
            logger.exception(e)
            result = error_message(e.message)
            return Response(result, status=500)