Skip to content

Commit 89fa520

Browse files
committed
feature: 仓库及发布API,单元测试通过
1 parent 5b5914f commit 89fa520

File tree

4 files changed

+67
-6
lines changed

4 files changed

+67
-6
lines changed

coding_devops_sdk/openapi/client.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,10 @@
55
import requests
66

77
from coding_devops_sdk.config import settings
8-
from coding_devops_sdk.openapi.depot import DepotAPIMixin, IntegratedDepotAPIMixin
8+
from coding_devops_sdk.openapi.depot import DepotAPIMixin, IntegratedDepotAPIMixin, ReleaseAPIMixin, \
9+
IntegratedReleaseAPIMixin
910
from coding_devops_sdk.openapi.exceptions import raise_if_error
10-
from coding_devops_sdk.openapi.project import ProjectAPIMixin
11+
from coding_devops_sdk.openapi.project import ProjectAPIMixin, IntegratedProjectAPIMixin
1112

1213

1314
class BaseAPIClient(object):
@@ -36,9 +37,9 @@ def request_api(self, action, **kwargs):
3637

3738
class CodingDevOpsAPIClient(
3839
BaseAPIClient,
39-
ProjectAPIMixin,
40-
DepotAPIMixin,
41-
IntegratedDepotAPIMixin,
40+
ProjectAPIMixin, IntegratedProjectAPIMixin,
41+
DepotAPIMixin, IntegratedDepotAPIMixin,
42+
ReleaseAPIMixin, IntegratedReleaseAPIMixin,
4243
):
4344
"""
4445
Coding DevOps OpenAPI Client

coding_devops_sdk/openapi/depot.py

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,5 +46,36 @@ def is_path_in_depot(self):
4646

4747
class IntegratedDepotAPIMixin(object):
4848
def describe_project_depot_info_list_by_name(self, project_name: str) -> list:
49-
project_id = self.describe_project_by_name(project_name=project_name)['Id']
49+
project_id = self.get_project_id_by_name(project_name)
5050
return self.describe_project_depot_info_list(project_id=project_id)
51+
52+
def get_depot_id_by_name(self, project_name, depot_name):
53+
"""
54+
55+
:param project_name:
56+
:param depot_name:
57+
:return:
58+
"""
59+
depots = self.describe_project_depot_info_list_by_name(project_name)
60+
# https://stackoverflow.com/questions/4391697/find-the-index-of-a-dict-within-a-list-by-matching-the-dicts-value
61+
return next((depot for depot in depots if depot['Name'] == depot_name))['Id']
62+
63+
64+
class ReleaseAPIMixin(object):
65+
def describe_git_releases(self, depot_id, status: int = 0, **kwargs):
66+
"""
67+
68+
:param depot_id:
69+
:param status: 版本状态。0:全部;1:已发布;2:预发布。
70+
:param kwargs:
71+
:return:
72+
"""
73+
kwargs['DepotId'] = depot_id
74+
kwargs['Status'] = status
75+
return self.request_api(action='DescribeGitReleases', **kwargs)['ReleasePageList']['Releases']
76+
77+
78+
class IntegratedReleaseAPIMixin(object):
79+
def describe_git_releases_by_name(self, project_name, depot_name, **kwargs):
80+
depot_id = self.get_depot_id_by_name(project_name, depot_name)
81+
return self.describe_git_releases(depot_id)

coding_devops_sdk/openapi/project.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,8 @@ class ProjectAPIMixin(object):
55
def describe_project_by_name(self, project_name):
66
kwargs = {'ProjectName': project_name}
77
return self.request_api(action="DescribeProjectByName", **kwargs)['Project']
8+
9+
10+
class IntegratedProjectAPIMixin(object):
11+
def get_project_id_by_name(self, project_name):
12+
return self.describe_project_by_name(project_name=project_name)['Id']

tests/test_openapi_depot.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,30 @@ def test_describe_project_depot_info_list_by_name(self):
1717
self.assertTrue(data)
1818
print(data)
1919

20+
def test_get_depot_id_by_name(self):
21+
depot_id = coding_openapi_client.get_depot_id_by_name(
22+
project_name=settings.TEST_PROJECT_NAME,
23+
depot_name=settings.TEST_DEPOT_NAME,
24+
)
25+
self.assertEqual(settings.TEST_DEPOT_ID, depot_id)
26+
27+
28+
class ReleaseAPITestCase(unittest.TestCase):
29+
def test_describe_git_releases(self):
30+
data = coding_openapi_client.describe_git_releases(depot_id=settings.TEST_DEPOT_ID)
31+
self.assertTrue(data)
32+
33+
34+
class IntegratedReleaseAPITestCase(unittest.TestCase):
35+
def test_describe_git_releases_by_name(self):
36+
data = coding_openapi_client.describe_git_releases_by_name(
37+
project_name=settings.TEST_PROJECT_NAME,
38+
depot_name=settings.TEST_DEPOT_NAME,
39+
status=1
40+
)
41+
self.assertTrue(data)
42+
print(data)
43+
2044

2145
if __name__ == '__main__':
2246
unittest.main()

0 commit comments

Comments
 (0)