def post(self, request, enterprise_id, market_name, *args, **kwargs): logo = request.data.get("logo") base64_logo = "" if logo: if logo.startswith(settings.MEDIA_URL): logo = logo.replace(settings.MEDIA_URL, settings.MEDIA_ROOT + "/") try: with open(logo, "rb") as f: base64_logo = "data:image/{};base64,".format(logo.split(".")[-1]) + base64.b64encode(f.read()).decode() except Exception as e: logger.exception(e) base64_logo = "" name = request.data.get("name", "") if not validate_name(name): raise ServiceHandleException(msg="error params", msg_show="应用名称只支持中文、字母、数字和-_组合,并且必须以中文、字母、数字开始和结束") dt = { "desc": request.data.get("desc"), "logo": base64_logo, "name": name, "publish_type": request.data.get("publish_type"), "tags": request.data.get("tags"), "introduction": request.data.get("introduction"), "org_id": request.data.get("org_id") } market = app_market_service.get_app_market_by_name(enterprise_id, market_name, raise_exception=True) rst = app_market_service.create_market_app_model(market, body=dt) result = general_message(200, msg="success", msg_show=None, bean=(rst.to_dict() if rst else None)) return Response(result, status=200)
def get_or_create_upgrade_record(self, tenant_id, group_id, group_key, upgrade_group_id, is_from_cloud, market_name): """获取或创建升级记录""" recode_kwargs = { "tenant_id": tenant_id, "group_id": group_id, "group_key": group_key, "create_time": datetime.now(), "is_from_cloud": is_from_cloud, "market_name": market_name, "upgrade_group_id": upgrade_group_id, } try: return upgrade_repo.get_app_not_upgrade_record(status__lt=UpgradeStatus.UPGRADED.value, **recode_kwargs) except AppUpgradeRecord.DoesNotExist: from console.services.group_service import group_service tenant = Tenants.objects.get(tenant_id=tenant_id) service_group_keys = group_service.get_group_service_sources(group_id).values_list('group_key', flat=True) if group_key in set(service_group_keys or []): if not is_from_cloud: app = rainbond_app_repo.get_rainbond_app_qs_by_key(tenant.enterprise_id, group_key) if not app: raise ServiceHandleException( msg="the rainbond app is not in the group", msg_show="该应用中没有这个云市组件", status_code=404) app_name = app.app_name else: market = app_market_service.get_app_market_by_name(tenant.enterprise_id, market_name, raise_exception=True) app = app_market_service.get_market_app_model(market, group_key) app_name = app.app_name app_record = upgrade_repo.create_app_upgrade_record(group_name=app_name, **recode_kwargs) return app_record else: raise AbortRequest(msg="the app model is not in the group", msg_show="该应用中没有这个应用模型", status_code=404)
def get_add_services(self, enterprise_id, services, group_key, version, market_name=None): """获取新增组件""" app_template = None if services: service_keys = services.values_list('service_key', flat=True) service_keys = set(service_keys) if service_keys else set() if not market_name: app = rainbond_app_repo.get_rainbond_app_by_key_version( group_key=group_key, version=version) if app: app_template = app.app_template else: market = app_market_service.get_app_market_by_name( enterprise_id, market_name, raise_exception=True) app = app_market_service.get_market_app_model_version( market, group_key, version, get_template=True) if app: app_template = app.template if app_template: return list( self.get_new_services( self.parse_app_template(app_template), service_keys).values()) else: return []
def post(self, request, enterprise_id, market_name, *args, **kwargs): logo = request.data.get("logo") base64_logo = "" if logo: try: with open(logo, "rb") as f: base64_logo = "data:image/{};base64,".format( logo.split(".")[-1]) + base64.b64encode(f.read()) except Exception as e: logger.error("parse app logo error: ", e) base64_logo = "" dt = { "desc": request.data.get("desc"), "logo": base64_logo, "name": request.data.get("name"), "publish_type": request.data.get("publish_type"), "tags": request.data.get("tags"), "introduction": request.data.get("introduction"), } market = app_market_service.get_app_market_by_name( enterprise_id, market_name, raise_exception=True) rst = app_market_service.create_market_app_model(market, body=dt) result = general_message(200, msg="success", msg_show=None, bean=(rst.to_dict() if rst else None)) return Response(result, status=200)
def get(self, request, enterprise_id, market_name, app_id, *args, **kwargs): query_all = request.GET.get("query_all", False) market_model = app_market_service.get_app_market_by_name( enterprise_id, market_name, raise_exception=True) data = app_market_service.get_market_app_model_versions( market_model, app_id, query_all=query_all, extend=True) result = general_message(200, "success", None, list=data) return Response(result, status=200)
def get(self, request, enterprise_id, market_name, *args, **kwargs): query = request.GET.get("query", None) query_all = request.GET.get("query_all", False) page = int(request.GET.get("page", 1)) page_size = int(request.GET.get("page_size", 10)) market_model = app_market_service.get_app_market_by_name(enterprise_id, market_name, raise_exception=True) data, page, page_size, total = app_market_service.get_market_app_models( market_model, page, page_size, query=query, query_all=query_all, extend=True) result = general_message(200, msg="success", msg_show=None, list=data, page=page, page_size=page_size, total=total) return Response(result, status=200)
def get(self, request, enterprise_id, market_name): market_model = app_market_service.get_app_market_by_name(enterprise_id, market_name, raise_exception=True) orgs = app_market_service.get_market_orgs(market_model) result = general_message(200, msg="success", msg_show=None, list=orgs) return Response(result, status=200)
def get(self, request, team_name, group_id, *args, **kwargs): data = [] market = dict() cloud_app = dict() page = int(request.GET.get("page", 1)) page_size = int(request.GET.get("page_size", 10)) total, share_records = share_repo.get_service_share_records_by_groupid( team_name=team_name, group_id=group_id, page=page, page_size=page_size) if not share_records: result = general_message(200, "success", "获取成功", bean={'total': total}, list=data) return Response(result, status=200) for share_record in share_records: app_model_name = share_record.share_app_model_name app_model_id = share_record.app_id upgrade_time = None store_name = share_record.share_store_name store_id = share_record.share_app_market_name scope = share_record.scope if scope != "goodrain" and not app_model_name: app = rainbond_app_repo.get_rainbond_app_by_app_id(self.tenant.enterprise_id, share_record.app_id) app_model_name = app.app_name if app else "" app_version = rainbond_app_repo.get_rainbond_app_version_by_record_id(share_record.ID) if app_version: upgrade_time = app_version.upgrade_time share_record.share_version_alias = app_version.version_alias share_record.share_app_version_info = app_version.app_version_info share_record.share_app_model_name = app_model_name share_record.save() if scope == "goodrain" and store_id and share_record.app_id and not app_model_name: try: mkt = market.get(share_record.share_app_market_name, None) if not mkt: mkt = app_market_service.get_app_market_by_name( self.tenant.enterprise_id, share_record.share_app_market_name, raise_exception=True) market[share_record.share_app_market_name] = mkt c_app = cloud_app.get(share_record.app_id, None) if not c_app: c_app = app_market_service.get_market_app_model(mkt, share_record.app_id, True) cloud_app[share_record.app_id] = c_app store_name = c_app.market_name app_model_name = c_app.app_name share_record.share_app_model_name = app_model_name share_record.share_store_name = store_name share_record.save() except ServiceHandleException: app_model_id = share_record.app_id data.append({ "app_model_id": app_model_id, "app_model_name": app_model_name, "version": share_record.share_version, "version_alias": share_record.share_version_alias, "scope": scope, "create_time": share_record.create_time, "upgrade_time": upgrade_time, "step": share_record.step, "is_success": share_record.is_success, "status": share_record.status, "scope_target": { "store_name": store_name, "store_id": store_id, }, "record_id": share_record.ID, "app_version_info": share_record.share_app_version_info, }) result = general_message(200, "success", "获取成功", bean={'total': total}, list=data) return Response(result, status=200)
def get_build_info(self, tenant, service): service_source = service_source_repo.get_service_source( team_id=service.tenant_id, service_id=service.service_id) code_from = service.code_from oauth_type = support_oauth_type.keys() if code_from in oauth_type: result_url = re_split("[:,@]", service.git_url) service.git_url = result_url[0] + '//' + result_url[-1] bean = { "user_name": "", "password": "", "service_source": service.service_source, "image": service.image, "cmd": service.cmd, "code_from": service.code_from, "version": service.version, "docker_cmd": service.docker_cmd, "create_time": service.create_time, "git_url": service.git_url, "code_version": service.code_version, "server_type": service.server_type, "language": service.language, "oauth_service_id": service.oauth_service_id, "full_name": service.git_full_name } if service_source: bean["user"] = service_source.user_name bean["password"] = service_source.password if service.service_source == 'market': from console.services.market_app_service import market_app_service from console.services.app import app_market_service if service_source: # get from cloud app = None app_version = None if service_source.extend_info: extend_info = json.loads(service_source.extend_info) if extend_info and extend_info.get("install_from_cloud", False): market_name = extend_info.get("market_name") bean["install_from_cloud"] = True try: market = app_market_service.get_app_market_by_name( tenant.enterprise_id, market_name, raise_exception=True) app, app_version = app_market_service.cloud_app_model_to_db_model( market, service_source.group_key, service_source.version) bean["market_error_code"] = 200 bean["market_status"] = 1 except ServiceHandleException as e: logger.debug(e) bean["market_status"] = 0 bean["market_error_code"] = e.error_code return bean bean["install_from_cloud"] = True bean["app_detail_url"] = app.describe if not app: try: app, app_version = market_app_service.get_rainbond_app_and_version( tenant.enterprise_id, service_source.group_key, service_source.version) except RbdAppNotFound: logger.warning( "not found app {0} version {1} in local market". format(service_source.group_key, service_source.version)) if app and app_version: bean["rain_app_name"] = app.app_name bean["details"] = app.details logger.debug("app_version: {}".format(app_version.version)) bean["app_version"] = app_version.version bean["version"] = app_version.version bean["group_key"] = app.app_id return bean
def get_build_infos(self, tenant, service_ids): from console.repositories.service_repo import service_repo apps = dict() markets = dict() build_infos = dict() services = service_repo.get_service_by_service_ids( service_ids=service_ids) svc_sources = service_source_repo.get_service_sources( team_id=tenant.tenant_id, service_ids=service_ids) service_sources = {svc_ss.service_id: svc_ss for svc_ss in svc_sources} for service in services: service_source = service_sources.get(service.service_id, None) code_from = service.code_from oauth_type = list(support_oauth_type.keys()) if code_from in oauth_type: result_url = re_split("[:,@]", service.git_url) service.git_url = result_url[0] + '//' + result_url[-1] bean = { "user_name": "", "password": "", "service_source": service.service_source, "image": service.image, "cmd": service.cmd, "code_from": service.code_from, "version": service.version, "docker_cmd": service.docker_cmd, "create_time": service.create_time, "git_url": service.git_url, "code_version": service.code_version, "server_type": service.server_type, "language": service.language, "oauth_service_id": service.oauth_service_id, "full_name": service.git_full_name } if service_source: bean["user"] = service_source.user_name bean["password"] = service_source.password if service.service_source == 'market': from console.services.app import app_market_service from console.services.market_app_service import market_app_service if not service_source: build_infos[service.service_id] = bean return build_infos # get from cloud app = None if service_source.extend_info: extend_info = json.loads(service_source.extend_info) if extend_info and extend_info.get("install_from_cloud", False): market_name = extend_info.get("market_name") bean["install_from_cloud"] = True try: market = markets.get(market_name, None) if not market: market = app_market_service.get_app_market_by_name( tenant.enterprise_id, market_name, raise_exception=True) markets[market_name] = market app = apps.get(service_source.group_key, None) if not app: app, _ = app_market_service.cloud_app_model_to_db_model( market, service_source.group_key, None) apps[service_source.group_key] = app bean["market_error_code"] = 200 bean["market_status"] = 1 except ServiceHandleException as e: logger.debug(e) bean["market_status"] = 0 bean["market_error_code"] = e.error_code bean["version"] = service_source.version bean["app_version"] = service_source.version return bean bean["install_from_cloud"] = True bean["app_detail_url"] = app.describe if not app: try: app = market_app_service.get_rainbond_app( tenant.enterprise_id, service_source.group_key) except RbdAppNotFound: logger.warning( "not found app {0} version {1} in local market". format(service_source.group_key, service_source.version)) if app: bean["rain_app_name"] = app.app_name bean["details"] = app.details bean["group_key"] = app.app_id bean["app_version"] = service_source.version bean["version"] = service_source.version build_infos[service.service_id] = bean return build_infos
def get(self, request, team_name, group_id, *args, **kwargs): data = [] share_records = share_repo.get_service_share_records_by_groupid( group_id=group_id) if share_records: for share_record in share_records: app_model_name = None app_model_id = None version_alias = None upgrade_time = None # todo get store name store_name = None store_id = share_record.share_app_market_name scope = share_record.scope app = rainbond_app_repo.get_rainbond_app_by_app_id( self.tenant.enterprise_id, share_record.app_id) if app: app_model_id = share_record.app_id app_model_name = app.app_name app_version = rainbond_app_repo.get_rainbond_app_version_by_record_id( share_record.ID) if app_version: version_alias = app_version.version_alias upgrade_time = app_version.upgrade_time else: try: if store_id and share_record.app_id: market = app_market_service.get_app_market_by_name( self.tenant.enterprise_id, share_record.share_app_market_name, raise_exception=True) cloud_app = app_market_service.get_market_app_model( market, share_record.app_id) if cloud_app: app_model_id = share_record.app_id app_model_name = cloud_app.app_name except ServiceHandleException: app_model_id = share_record.app_id data.append({ "app_model_id": app_model_id, "app_model_name": app_model_name, "version": share_record.share_version, "version_alias": (share_record.share_version_alias if share_record.share_version_alias else version_alias), "scope": scope, "create_time": share_record.create_time, "upgrade_time": upgrade_time, "step": share_record.step, "is_success": share_record.is_success, "status": share_record.status, "scope_target": { "store_name": store_name, "store_id": store_id, }, "record_id": share_record.ID, }) result = general_message(200, "success", None, list=data) return Response(result, status=200)