Skip to content

Commit 753b09f

Browse files
authored
fix: service instance retrieve could filter to_be_delete (TencentBlueKing#202)
1 parent 9b78eb9 commit 753b09f

6 files changed

Lines changed: 62 additions & 3 deletions

File tree

sdks/paas-service/CHANGES.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
# 版本历史
22

3+
## 2.0.1
4+
- Support querying service instance with parameter to_be_deleted
5+
36
## 2.0.0
47
- 支持 Python 3.11,移除对 Python 3.6, 3.7 的支持
58

sdks/paas-service/paas_service/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,6 @@
1616
We undertake not to change the open source license (MIT license) applicable
1717
to the current version of the project delivered to anyone in the future.
1818
"""
19-
__version__ = '2.0.0'
19+
__version__ = '2.0.1'
2020

2121
default_app_config = 'paas_service.apps.PaaSServiceConfig'

sdks/paas-service/paas_service/serializers.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,10 @@ class Meta(object):
7272
exclude = ['config', 'credentials']
7373

7474

75+
class ServiceInstanceQuerySLZ(serializers.Serializer):
76+
to_be_deleted = serializers.BooleanField(required=False, default=False)
77+
78+
7579
class ServiceInstanceBinderSLZ(serializers.Serializer):
7680
config = serializers.DictField(required=False, default=dict)
7781
credentials = serializers.DictField(required=True)

sdks/paas-service/paas_service/views.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,11 @@ def provision(self, request, service_id, instance_id):
173173
@m_verified_client_required
174174
def retrieve(self, request, instance_id):
175175
"""Retrieve an instance"""
176-
instance = get_object_or_404(ServiceInstance, pk=instance_id, to_be_deleted=False)
176+
slz = serializers.ServiceInstanceQuerySLZ(data=request.query_params)
177+
slz.is_valid(raise_exception=True)
178+
data = slz.validated_data
179+
180+
instance = get_object_or_404(ServiceInstance, pk=instance_id, to_be_deleted=data.get("to_be_deleted", False))
177181
instance.prerender(request)
178182
return Response(serializers.ServiceInstanceSLZ(instance).data)
179183

sdks/paas-service/pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[tool]
22
[tool.poetry]
33
name = "paas_service"
4-
version = "2.0.0"
4+
version = "2.0.1"
55
description = "A Django application for developing BK-PaaS add-on services."
66
readme = "README.md"
77
authors = ["blueking <blueking@tencent.com>"]

sdks/paas-service/tests/test_apis.py

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,3 +299,51 @@ def test_retrieve_by_fields_when_not_found(self, rf, service, platform_client):
299299
response = view(request, service_id=service.pk)
300300
response.render()
301301
assert response.status_code == 404
302+
303+
def test_retrieve(self, rf, service, instance_with_credentials, platform_client):
304+
view = SvcInstanceViewSet.as_view({'get': 'retrieve'})
305+
306+
request = rf.get(f"/instances/{instance_with_credentials.pk}")
307+
request.client = platform_client
308+
309+
response = view(request, instance_id=instance_with_credentials.pk)
310+
response.render()
311+
assert response.status_code == 200
312+
assert response.data["uuid"] == str(instance_with_credentials.uuid)
313+
314+
def test_retrieve_to_be_deleted(self, rf, service, instance_with_credentials, platform_client):
315+
instance_with_credentials.to_be_deleted=True
316+
instance_with_credentials.save()
317+
318+
view = SvcInstanceViewSet.as_view({'get': 'retrieve'})
319+
320+
request = rf.get(f"/instances/{instance_with_credentials.pk}/?to_be_deleted=true")
321+
request.client = platform_client
322+
323+
response = view(request, instance_id=instance_with_credentials.pk)
324+
response.render()
325+
assert response.status_code == 200
326+
assert response.data["uuid"] == str(instance_with_credentials.uuid)
327+
328+
def test_retrieve_when_not_found(self, rf, service, instance_with_credentials, platform_client):
329+
instance_with_credentials.to_be_deleted=True
330+
instance_with_credentials.save()
331+
332+
view = SvcInstanceViewSet.as_view({'get': 'retrieve'})
333+
334+
request = rf.get(f"/instances/{instance_with_credentials.pk}")
335+
request.client = platform_client
336+
337+
response = view(request, instance_id=instance_with_credentials.pk)
338+
response.render()
339+
assert response.status_code == 404
340+
341+
def test_retrieve_to_be_deleted_when_not_found(self, rf, service, instance_with_credentials, platform_client):
342+
view = SvcInstanceViewSet.as_view({'get': 'retrieve'})
343+
344+
request = rf.get(f"/instances/{instance_with_credentials.pk}/?to_be_deleted=true")
345+
request.client = platform_client
346+
347+
response = view(request, instance_id=instance_with_credentials.pk)
348+
response.render()
349+
assert response.status_code == 404

0 commit comments

Comments
 (0)