Skip to content

Commit b9d469b

Browse files
committed
feat: add ProjectPackageFile
Add ProjectPackageFile and the ability to list project package package_files. Fixes #1372
1 parent 6fde243 commit b9d469b

File tree

3 files changed

+104
-3
lines changed

3 files changed

+104
-3
lines changed

docs/gl_objects/packages.rst

+22
Original file line numberDiff line numberDiff line change
@@ -66,3 +66,25 @@ Filter the results by ``package_type`` or ``package_name`` ::
6666

6767
packages = group.packages.list(package_type='pypi')
6868

69+
70+
Project Package Files
71+
=====================
72+
73+
Reference
74+
---------
75+
76+
* v4 API:
77+
78+
+ :class:`gitlab.v4.objects.ProjectPackageFile`
79+
+ :class:`gitlab.v4.objects.ProjectPackageFileManager`
80+
+ :attr:`gitlab.v4.objects.ProjectPackage.package_files`
81+
82+
* GitLab API: https://docs.gitlab.com/ee/api/packages.html#list-package-files
83+
84+
Examples
85+
--------
86+
87+
List package files for package in project::
88+
89+
package = project.packages.get(1)
90+
package_files = package.package_files.list()

gitlab/tests/objects/test_packages.py

+69-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import pytest
77
import responses
88

9-
from gitlab.v4.objects import GroupPackage, ProjectPackage
9+
from gitlab.v4.objects import GroupPackage, ProjectPackage, ProjectPackageFile
1010

1111

1212
package_content = {
@@ -54,6 +54,51 @@
5454
],
5555
}
5656

57+
package_file_content = [
58+
{
59+
"id": 25,
60+
"package_id": 1,
61+
"created_at": "2018-11-07T15:25:52.199Z",
62+
"file_name": "my-app-1.5-20181107.152550-1.jar",
63+
"size": 2421,
64+
"file_md5": "58e6a45a629910c6ff99145a688971ac",
65+
"file_sha1": "ebd193463d3915d7e22219f52740056dfd26cbfe",
66+
"pipelines": [
67+
{
68+
"id": 123,
69+
"status": "pending",
70+
"ref": "new-pipeline",
71+
"sha": "a91957a858320c0e17f3a0eca7cfacbff50ea29a",
72+
"web_url": "https://example.com/foo/bar/pipelines/47",
73+
"created_at": "2016-08-11T11:28:34.085Z",
74+
"updated_at": "2016-08-11T11:32:35.169Z",
75+
"user": {
76+
"name": "Administrator",
77+
"avatar_url": "https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon",
78+
},
79+
}
80+
],
81+
},
82+
{
83+
"id": 26,
84+
"package_id": 1,
85+
"created_at": "2018-11-07T15:25:56.776Z",
86+
"file_name": "my-app-1.5-20181107.152550-1.pom",
87+
"size": 1122,
88+
"file_md5": "d90f11d851e17c5513586b4a7e98f1b2",
89+
"file_sha1": "9608d068fe88aff85781811a42f32d97feb440b5",
90+
},
91+
{
92+
"id": 27,
93+
"package_id": 1,
94+
"created_at": "2018-11-07T15:26:00.556Z",
95+
"file_name": "maven-metadata.xml",
96+
"size": 767,
97+
"file_md5": "6dfd0cce1203145a927fef5e3a1c650c",
98+
"file_sha1": "d25932de56052d320a8ac156f745ece73f6a8cd2",
99+
},
100+
]
101+
57102

58103
@pytest.fixture
59104
def resp_list_packages():
@@ -94,6 +139,21 @@ def resp_delete_package(no_content):
94139
yield rsps
95140

96141

142+
@pytest.fixture
143+
def resp_list_package_files():
144+
with responses.RequestsMock() as rsps:
145+
rsps.add(
146+
method=responses.GET,
147+
url=re.compile(
148+
r"http://localhost/api/v4/projects/1/packages/1/package_files"
149+
),
150+
json=package_file_content,
151+
content_type="application/json",
152+
status=200,
153+
)
154+
yield rsps
155+
156+
97157
def test_list_project_packages(project, resp_list_packages):
98158
packages = project.packages.list()
99159
assert isinstance(packages, list)
@@ -117,3 +177,11 @@ def test_get_project_package(project, resp_get_package):
117177
def test_delete_project_package(project, resp_delete_package):
118178
package = project.packages.get(1, lazy=True)
119179
package.delete()
180+
181+
182+
def test_list_project_packages(project, resp_list_package_files):
183+
package = project.packages.get(1, lazy=True)
184+
package_files = package.package_files.list()
185+
assert isinstance(package_files, list)
186+
assert isinstance(package_files[0], ProjectPackageFile)
187+
assert package_files[0].id == 25

gitlab/v4/objects/packages.py

+13-2
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
from gitlab.base import RESTManager, RESTObject
22
from gitlab.mixins import DeleteMixin, GetMixin, ListMixin, ObjectDeleteMixin
33

4-
54
__all__ = [
65
"GroupPackage",
76
"GroupPackageManager",
87
"ProjectPackage",
98
"ProjectPackageManager",
9+
"ProjectPackageFile",
10+
"ProjectPackageFileManager",
1011
]
1112

1213

@@ -28,7 +29,7 @@ class GroupPackageManager(ListMixin, RESTManager):
2829

2930

3031
class ProjectPackage(ObjectDeleteMixin, RESTObject):
31-
pass
32+
_managers = (("package_files", "ProjectPackageFileManager"),)
3233

3334

3435
class ProjectPackageManager(ListMixin, GetMixin, DeleteMixin, RESTManager):
@@ -41,3 +42,13 @@ class ProjectPackageManager(ListMixin, GetMixin, DeleteMixin, RESTManager):
4142
"package_type",
4243
"package_name",
4344
)
45+
46+
47+
class ProjectPackageFile(RESTObject):
48+
pass
49+
50+
51+
class ProjectPackageFileManager(ListMixin, RESTManager):
52+
_path = "/projects/%(project_id)s/packages/%(package_id)s/package_files"
53+
_obj_cls = ProjectPackageFile
54+
_from_parent_attrs = {"project_id": "project_id", "package_id": "id"}

0 commit comments

Comments
 (0)