Skip to content

Commit 5ef6ffb

Browse files
wklkencursoragent
andauthored
refactor(dashboard): remove unused dead code (#3038)
Drop unreachable Open permission apply paths, test-only helpers, and empty manager scaffolding while redirecting OpenAPI conversion tests to the production v3-to-v2 converters. Co-authored-by: Cursor <cursoragent@cursor.com>
1 parent 30afb8f commit 5ef6ffb

21 files changed

Lines changed: 47 additions & 735 deletions

File tree

.gitignore

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,16 @@ bkcodeai.json
1919
.worktrees
2020

2121
*.png
22+
2223
docs/superpowers
2324
specs/
25+
.specify/
26+
.superpowers/
27+
.codex/
28+
.codebuddy/
29+
.venv
30+
node_modules
31+
.mypy_cache
32+
.pytest_cache
33+
.ruff_cache
34+
.benchmarks

src/core-api/.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,6 @@ core
3333
*.log
3434
bk-apigateway-core-api
3535
.coverage.cov
36-
config.yaml
36+
config.yaml
37+
bin
38+
Makefile.bk

src/dashboard/apigateway/apigateway/apis/open/permission/serializers.py

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -140,28 +140,6 @@ class GatewayResourceIDs(serializers.Serializer):
140140
)
141141

142142

143-
class PaaSAppPermissionApplyV2InputSLZ(serializers.Serializer):
144-
"""
145-
PaaS中应用申请访问网关API的权限
146-
- 提供给 paas 开发者中心的接口
147-
- 应用页面申请授权,支持网关+resource维度
148-
"""
149-
150-
target_app_code = serializers.CharField(label="", validators=[BKAppCodeValidator()])
151-
gateway_resource_ids = serializers.ListField(
152-
help_text="申请资源id列表(资源+网关)",
153-
child=GatewayResourceIDs(),
154-
allow_empty=False,
155-
required=True,
156-
max_length=100,
157-
)
158-
reason = serializers.CharField(allow_blank=True, required=False, default="")
159-
expire_days = serializers.ChoiceField(
160-
choices=PermissionApplyExpireDaysEnum.get_choices(),
161-
default=PermissionApplyExpireDaysEnum.SIX_MONTH.value,
162-
)
163-
164-
165143
class AppPermissionApplyV1InputSLZ(serializers.Serializer):
166144
"""
167145
普通应用直接申请访问网关API的权限

src/dashboard/apigateway/apigateway/apis/open/permission/views.py

Lines changed: 0 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
from blue_krill.async_utils.django_utils import apply_async_on_commit
2424
from django.conf import settings
2525
from django.db import transaction
26-
from django.utils.decorators import method_decorator
2726
from django.utils.translation import gettext as _
2827
from drf_yasg.utils import swagger_auto_schema
2928
from rest_framework import status, viewsets
@@ -60,7 +59,6 @@
6059
from apigateway.utils.responses import V1OKJsonResponse
6160

6261
from . import serializers
63-
from .serializers import PaaSAppPermissionApplyV2InputSLZ
6462

6563
logger = logging.getLogger(__name__)
6664

@@ -301,68 +299,6 @@ def post(self, request, *args, **kwargs):
301299
return V1OKJsonResponse("OK")
302300

303301

304-
@method_decorator(
305-
name="post",
306-
decorator=swagger_auto_schema(
307-
request_body=PaaSAppPermissionApplyV2InputSLZ,
308-
tags=["OpenAPI.V1"],
309-
),
310-
)
311-
class AppPermissionApplyAPIView(APIView):
312-
"""
313-
权限批量申请(网关+resource)
314-
"""
315-
316-
permission_classes = [OpenAPIPermission]
317-
318-
@transaction.atomic
319-
def post(self, request, *args, **kwargs):
320-
slz = serializers.PaaSAppPermissionApplyV2InputSLZ(
321-
data=request.data,
322-
context={
323-
"request": request,
324-
},
325-
)
326-
slz.is_valid(raise_exception=True)
327-
328-
data = slz.validated_data
329-
330-
record_ids = []
331-
for gateway_resources in data.get("gateway_resource_ids"):
332-
gateway = Gateway.objects.get(id=gateway_resources["gateway_id"])
333-
resource_ids = gateway_resources.get("resource_ids") or []
334-
if resource_ids:
335-
# 如果传了resource_ids就是按照资源维度申请
336-
manager = PermissionDimensionManager.get_manager(GrantDimensionEnum.RESOURCE.value)
337-
grant_dimension = str(GrantDimensionEnum.RESOURCE.value)
338-
else:
339-
manager = PermissionDimensionManager.get_manager(GrantDimensionEnum.API.value)
340-
grant_dimension = str(GrantDimensionEnum.API.value)
341-
342-
record = manager.create_apply_record(
343-
data["target_app_code"],
344-
gateway,
345-
resource_ids,
346-
grant_dimension,
347-
data["reason"],
348-
data.get("expire_days", PermissionApplyExpireDaysEnum.FOREVER.value),
349-
request.user.username,
350-
)
351-
record_ids.append(record.id)
352-
try:
353-
for record_id in record_ids:
354-
apply_async_on_commit(send_mail_for_perm_apply, args=[record_id])
355-
except Exception: # pylint: disable=broad-except
356-
logger.exception("send mail to gateway manager fail. apply_record_ids=%s", record_ids)
357-
358-
return V1OKJsonResponse(
359-
"OK",
360-
data={
361-
"record_ids": record_ids,
362-
},
363-
)
364-
365-
366302
class AppPermissionViewSet(viewsets.ViewSet):
367303
permission_classes = [OpenAPIPermission]
368304

src/dashboard/apigateway/apigateway/apis/web/gateway/serializers.py

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -414,13 +414,6 @@ class Meta:
414414
}
415415

416416

417-
class GatewayFeatureFlagsOutputSLZ(serializers.Serializer):
418-
feature_flags = serializers.DictField(help_text="网关特性集")
419-
420-
class Meta:
421-
ref_name = "apigateway.apis.web.gateway.serializers.GatewayFeatureFlagsOutputSLZ"
422-
423-
424417
class GatewayTenantAppInfoTenant(serializers.Serializer):
425418
mode = serializers.CharField(help_text="租户模式")
426419
id = serializers.CharField(help_text="租户 ID")

src/dashboard/apigateway/apigateway/apis/web/setting/serializers.py

Lines changed: 0 additions & 27 deletions
This file was deleted.

src/dashboard/apigateway/apigateway/apis/web/stage/serializers.py

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -370,13 +370,6 @@ class Meta:
370370
ref_name = "apigateway.apis.web.stage.serializers.StageStatusInputSLZ"
371371

372372

373-
class StageDeployInputSLZ(serializers.Serializer):
374-
resource_version = serializers.SerializerMethodField(help_text="当前生效资源版本")
375-
376-
class Meta:
377-
ref_name = "apigateway.apis.web.stage.serializers.StageDeployInputSLZ"
378-
379-
380373
class ProgrammableDeploymentInfoSLZ(serializers.Serializer):
381374
branch = serializers.CharField(help_text="部署分支", default="", required=False)
382375
deploy_id = serializers.CharField(help_text="部署ID", default="", required=False)

src/dashboard/apigateway/apigateway/apps/plugin/managers.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,6 @@
2424
from apigateway.apps.plugin.constants import PluginBindingScopeEnum
2525

2626

27-
class PluginConfigManager(models.Manager):
28-
pass
29-
30-
3127
class PluginBindingManager(models.Manager):
3228
def delete_by_gateway_id(self, gateway_id: int):
3329
self.filter(gateway_id=gateway_id).delete()

src/dashboard/apigateway/apigateway/apps/plugin/models.py

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,7 @@
2626
PluginBindingSourceEnum,
2727
PluginTypeScopeEnum,
2828
)
29-
from apigateway.apps.plugin.managers import (
30-
PluginBindingManager,
31-
PluginConfigManager,
32-
PluginTypeManager,
33-
)
29+
from apigateway.apps.plugin.managers import PluginBindingManager, PluginTypeManager
3430
from apigateway.common.i18n.field import I18nProperty
3531
from apigateway.common.mixins.models import OperatorModelMixin, TimestampedModelMixin
3632
from apigateway.core.models import Gateway
@@ -106,8 +102,6 @@ class PluginConfig(OperatorModelMixin, TimestampedModelMixin):
106102
description_en = description_i18n.field("en")
107103
yaml = models.TextField(blank=True, default=None, null=True)
108104

109-
objects: ClassVar[PluginConfigManager] = PluginConfigManager()
110-
111105
class Meta:
112106
db_table = "plugin_config"
113107
verbose_name = _("插件配置")

src/dashboard/apigateway/apigateway/biz/openapi/schema.py

Lines changed: 0 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -233,62 +233,6 @@ def convert_openapi2_response_headers_to_openapi(headers: dict) -> dict:
233233
return openapi_headers
234234

235235

236-
def convert_parameters_to_openapi2(openapi_parameters):
237-
"""
238-
转换 OpenAPI 3.0 的参数列表到 OpenAPI 2.0 的格式。
239-
"""
240-
parameters_openapi2 = []
241-
for param in openapi_parameters:
242-
v2_param = param.copy() # 复制参数对象
243-
if "schema" in param:
244-
# OpenAPI 3.0 中的 'schema' 需要被展开到参数对象的根级别
245-
v2_param.update(param["schema"])
246-
del v2_param["schema"]
247-
if "content" in param:
248-
# 对于参数的 'content',我们只能选择一个媒体类型
249-
content_type, content_value = next(iter(param["content"].items()))
250-
v2_param["type"] = content_value["schema"]["type"]
251-
del v2_param["content"]
252-
parameters_openapi2.append(v2_param)
253-
return parameters_openapi2
254-
255-
256-
def convert_request_body_to_openapi2(request_body):
257-
"""
258-
转换 OpenAPI 3.0 的请求体到 OpenAPI 2.0 的参数格式。
259-
"""
260-
parameters = []
261-
for content_type, content_value in request_body["content"].items():
262-
if "schema" not in content_value:
263-
continue
264-
param = {
265-
"in": "body",
266-
"name": "body",
267-
"required": request_body.get("required", False),
268-
"schema": content_value["schema"],
269-
"consumes": [content_type],
270-
}
271-
# 添加对应媒体类型的 'consumes' 字段
272-
parameters.append(param)
273-
return parameters
274-
275-
276-
def convert_responses_to_openapi2(responses):
277-
"""
278-
转换 OpenAPI 3.0 的响应对象到 OpenAPI 2.0 的格式。
279-
"""
280-
responses_openapi2 = {}
281-
for status_code, response3 in responses.items():
282-
response2 = {"description": response3.get("description", ""), "schema": {}}
283-
# OpenAPI 2.0 不支持每个响应状态码的多媒体类型,因此我们合并所有媒体类型
284-
for content_value in response3.get("content", {}).values():
285-
if "schema" not in content_value:
286-
continue
287-
response2["schema"] = content_value["schema"] # 直接取 schema,不区分媒体类型
288-
responses_openapi2[status_code] = response2
289-
return responses_openapi2
290-
291-
292236
def convert_operation_v3_to_v2(v3_operation):
293237
"""
294238
将 OpenAPI 3.0 的 operation 对象转换为 OpenAPI 2.0 的 operation 对象。

0 commit comments

Comments
 (0)