def get(self, request, *args, **kwargs): """ 获取组件的持久化路径 --- parameters: - name: tenantName description: 租户名 required: true type: string paramType: path - name: serviceAlias description: 组件别名 required: true type: string paramType: path """ is_config = parse_argument(request, 'is_config', value_type=bool, default=False) volumes = volume_service.get_service_volumes(self.tenant, self.service, is_config) volumes_list = [] if is_config: for tenant_service_volume in volumes: cf_file = volume_repo.get_service_config_file( tenant_service_volume["ID"]) if cf_file: tenant_service_volume[ "file_content"] = cf_file.file_content volumes_list.append(tenant_service_volume) else: dependents = mnt_service.get_volume_dependent( self.tenant, self.service) name2deps = {} if dependents: for dep in dependents: if name2deps.get(dep["volume_name"], None) is None: name2deps[dep["volume_name"]] = [] name2deps[dep["volume_name"]].append(dep) for vo in volumes: vo["dep_services"] = name2deps.get(vo["volume_name"], None) volumes_list.append(vo) result = general_message(200, "success", "查询成功", list=volumes_list) return Response(result, status=result["code"])
def get(self, request, *args, **kwargs): """ 获取组件的持久化路径 --- parameters: - name: tenantName description: 租户名 required: true type: string paramType: path - name: serviceAlias description: 组件别名 required: true type: string paramType: path """ volume_types = parse_argument(request, 'volume_types', value_type=list) try: q = Q(volume_type__in=volume_types) if volume_types else Q() tenant_service_volumes = volume_service.get_service_volumes(self.tenant, self.service).filter(q) volumes_list = [] if tenant_service_volumes: for tenant_service_volume in tenant_service_volumes: volume_dict = dict() volume_dict["service_id"] = tenant_service_volume.service_id volume_dict["category"] = tenant_service_volume.category volume_dict["host_path"] = tenant_service_volume.host_path volume_dict["volume_type"] = tenant_service_volume.volume_type volume_dict["volume_path"] = tenant_service_volume.volume_path volume_dict["volume_name"] = tenant_service_volume.volume_name volume_dict["ID"] = tenant_service_volume.ID if tenant_service_volume.volume_type == "config-file": cf_file = volume_repo.get_service_config_file(tenant_service_volume.ID) if cf_file: volume_dict["file_content"] = cf_file.file_content volumes_list.append(volume_dict) result = general_message(200, "success", "查询成功", list=volumes_list) except Exception as e: logger.exception(e) result = error_message(e.message) return Response(result, status=result["code"])
def test_not_get_argument_return_list(self): """测试获取不到 list 参数""" value = parse_argument(self.request, 'not_list', value_type=list) self.assertEqual(value, None)
def test_not__return_int(self): """测试获取不到 int 参数""" value = parse_argument(self.request, 'not_int', value_type=int) self.assertEqual(value, None)
def test_parse_argument_return_list(self): """测试 list 参数获取""" value = parse_argument(self.request, 'c', value_type=list) self.assertEqual(isinstance(value, list), True) self.assertEqual(value, ['django', 'test'])
def test_parse_argument_return_str(self): """测试 str 参数获取""" value = parse_argument(self.request, 'b', value_type=str) self.assertEqual(value, 'hello')
def test_parse_argument_return_int(self): """测试 int 参数获取""" value = parse_argument(self.request, 'a', value_type=int) self.assertEqual(value, 1)
def test_parse_argument_return_bool_error(self): """测试 bool 参数获取错误""" try: parse_argument(self.request, 'a', value_type=bool) except AbortRequest as e: self.assertEqual(isinstance(e, AbortRequest), True)
def get(self, request, app_id, *args, **kwargs): page = parse_argument(request, 'page', value_type=int, default=1) page_size = parse_argument(request, 'page_size', value_type=int, default=10) records, total = upgrade_service.list_records(self.tenant_name, self.region_name, self.app_id, AppUpgradeRecordType.UPGRADE.value, page, page_size) return MessageResponse(msg="success", bean={"total": total}, list=records)
def test_parse_argument_default_error(self): """测试默认参数类型错误""" with self.assertRaises(TypeError): parse_argument(self.request, 'a', default='hello', value_type=int)
def test_value_type_error(self): """测试 value_type TypeError""" with self.assertRaises(TypeError): parse_argument(self.request, 'a', value_type=dict)
def post(self, request, team_name, share_id, *args, **kwargs): """ 生成分享应用实体,向数据中心发送分享任务 --- parameter: - name: team_name description: 团队名 required: true type: string paramType: path - name: share_id description: 分享流程ID required: true type: string paramType: path """ use_force = parse_argument(request, 'use_force', default=False, value_type=bool) try: share_record = share_service.get_service_share_record_by_ID(ID=share_id, team_name=team_name) if not share_record: result = general_message(404, "share record not found", "分享流程不存在,请退出重试") return Response(result, status=404) if share_record.is_success or share_record.step >= 3: result = general_message(400, "share record is complete", "分享流程已经完成,请重新进行分享") return Response(result, status=400) if not request.data: result = general_message(400, "share info can not be empty", "分享信息不能为空") return Response(result, status=400) app_version_info = request.data.get("app_version_info", None) share_app_info = request.data.get("share_service_list", None) if not app_version_info or not share_app_info: result = general_message(400, "share info can not be empty", "分享应用基本信息或应用信息不能为空") return Response(result, status=400) if not app_version_info.get("app_model_id", None): result = general_message(400, "share app model id can not be empty", "分享应用信息不全") return Response(result, status=400) if share_app_info: for app in share_app_info: extend_method = app.get("extend_method", "") if is_singleton(extend_method): extend_method_map = app.get("extend_method_map") if extend_method_map and extend_method_map.get("max_node", 1) > 1: result = general_message(400, "service type do not allow multiple node", "分享应用不支持多实例") return Response(result, status=400) # 继续给app_template_incomplete赋值 code, msg, bean = share_service.create_share_info( share_record=share_record, share_team=self.team, share_user=request.user, share_info=request.data, use_force=use_force) result = general_message(code, "create share info", msg, bean=bean) return Response(result, status=code) except ServiceHandleException as e: raise e except Exception as e: logger.exception(e) result = error_message(e.message) return Response(result, status=500)
def get(self, request, *args, **kwargs): """ 获取服务挂载的服务 --- parameters: - name: tenantName description: 租户名 required: true type: string paramType: path - name: serviceAlias description: 服务别名 required: true type: string paramType: path - name: type description: 查询的类别 mnt(已挂载的,默认)| unmnt (未挂载的) required: false type: string paramType: query - name: page description: 页号(默认第一页) required: false type: integer paramType: query - name: page_size description: 每页大小(默认10) required: false type: integer paramType: query """ query_type = request.GET.get("type", "mnt") page = request.GET.get("page", 1) page_size = request.GET.get("page_size", 10) volume_types = parse_argument(request, 'volume_types', value_type=list) try: if query_type == "mnt": mnt_list, total = mnt_service.get_service_mnt_details( self.tenant, self.service, volume_types) elif query_type == "unmnt": q = Q(volume_type__in=volume_types) if volume_types else Q() services = app_service.get_app_list( self.tenant.pk, self.user, self.tenant.tenant_id, self.service.service_region) services_ids = [s.service_id for s in services] mnt_list, total = mnt_service.get_service_unmnt_details( self.tenant, self.service, services_ids, page, page_size, q) else: return Response(general_message(400, "param error", "参数错误"), status=400) result = general_message(200, "success", "查询成功", list=mnt_list, total=total) except Exception as e: logger.exception(e) result = error_message(e.message) return Response(result, status=result["code"])
def get(self, request, group_id, *args, **kwargs): upgrade_group_id = parse_argument( request, 'upgrade_group_id', default=None, value_type=int, error='upgrade_group_id is a required parameter') version = parse_argument(request, 'version', value_type=str, required=True, error='version is a required parameter') changes = upgrade_service.get_property_changes(self.tenant, self.region, self.user, self.app, upgrade_group_id, version) return MessageResponse(msg="success", list=changes)
def get(self, request, *args, **kwargs): """ 获取组件挂载的组件 --- parameters: - name: tenantName description: 租户名 required: true type: string paramType: path - name: serviceAlias description: 组件别名 required: true type: string paramType: path - name: type description: 查询的类别 mnt(已挂载的,默认)| unmnt (未挂载的) required: false type: string paramType: query - name: page description: 页号(默认第一页) required: false type: integer paramType: query - name: page_size description: 每页大小(默认10) required: false type: integer paramType: query """ query = request.GET.get("query", "") if query == "undefined": query = "" query_type = request.GET.get("type", "mnt") page = request.GET.get("page", 1) page_size = request.GET.get("page_size", 10) volume_types = parse_argument(request, 'volume_types', value_type=list) is_config = parse_argument(request, 'is_config', value_type=bool, default=False) if query == "undefined": query = "" if volume_types is not None and ('config-file' in volume_types): is_config = True if query_type == "mnt": mnt_list, total = mnt_service.get_service_mnt_details( self.tenant, self.service, volume_types) elif query_type == "unmnt": services = app_service.get_app_list(self.tenant.tenant_id, self.service.service_region, query) services_ids = [s.service_id for s in services] mnt_list, total = mnt_service.get_service_unmount_volume_list( self.tenant, self.service, services_ids, page, page_size, is_config) else: return Response(general_message(400, "param error", "参数错误"), status=400) result = general_message(200, "success", "查询成功", list=mnt_list, total=total) return Response(result, status=result["code"])
def test_parse_argument_return_bool(self): """测试 bool 参数获取""" value = parse_argument(self.request, 'd', value_type=bool) self.assertEqual(value, True)
def post(self, request, team_name, share_id, *args, **kwargs): """ 生成分享应用实体,向数据中心发送分享任务 --- parameter: - name: team_name description: 团队名 required: true type: string paramType: path - name: share_id description: 分享流程ID required: true type: string paramType: path """ use_force = parse_argument(request, 'use_force', default=False, value_type=bool) try: share_record = share_service.get_service_share_record_by_ID( ID=share_id, team_name=team_name) if not share_record: result = general_message(404, "share record not found", "分享流程不存在,请退出重试") return Response(result, status=404) if share_record.is_success or share_record.step >= 3: result = general_message(400, "share record is complete", "分享流程已经完成,请重新进行分享") return Response(result, status=400) if not request.data: result = general_message(400, "share info can not be empty", "分享信息不能为空") return Response(result, status=400) share_group_info = request.data.get("share_group_info", None) if share_group_info["scope"] == "goodrain": enterprise = enterprise_services.get_enterprise_by_enterprise_id( self.team.enterprise_id) if not enterprise.is_active: return Response(general_message( 10407, "enterprise is not active", "企业未激活"), status=403) share_app_info = request.data.get("share_service_list", None) if not share_group_info or not share_app_info: result = general_message(400, "share info can not be empty", "分享应用基本信息或应用信息不能为空") return Response(result, status=400) if not share_group_info.get("group_key", None): result = general_message(400, "share group key can not be empty", "分享应用信息不全") return Response(result, status=400) # 继续给app_template_incomplete赋值 code, msg, bean = share_service.create_share_info( share_record=share_record, share_team=self.team, share_user=request.user, share_info=request.data, use_force=use_force) result = general_message(code, "create share info", msg, bean=bean) return Response(result, status=code) except ServiceHandleException as e: raise e except Exception as e: logger.exception(e) result = error_message(e.message) return Response(result, status=500)
def get(self, request, app_id, *args, **kwargs): upgrade_group_id = parse_argument(request, "upgrade_group_id") record_type = parse_argument(request, "record_type") record = upgrade_service.get_latest_upgrade_record(self.team, self.app, upgrade_group_id, record_type) return MessageResponse(msg="success", bean=record)