Skip to content

Commit 3a49f09

Browse files
JohnVillalovosnejch
authored andcommitted
feat: add support for select="package_file" in package upload
Add ability to use `select="package_file"` when uploading a generic package as described in: https://docs.gitlab.com/ee/user/packages/generic_packages/index.html Closes: #2557
1 parent 8202e3f commit 3a49f09

File tree

2 files changed

+31
-11
lines changed

2 files changed

+31
-11
lines changed

gitlab/v4/objects/packages.py

+14-11
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ def upload(
4747
package_version: str,
4848
file_name: str,
4949
path: Union[str, Path],
50+
select: Optional[str] = None,
5051
**kwargs: Any,
5152
) -> GenericPackage:
5253
"""Upload a file as a generic package.
@@ -58,6 +59,7 @@ def upload(
5859
version regex rules
5960
file_name: The name of the file as uploaded in the registry
6061
path: The path to a local file to upload
62+
select: GitLab API accepts a value of 'package_file'
6163
6264
Raises:
6365
GitlabConnectionError: If the server cannot be reached
@@ -77,20 +79,21 @@ def upload(
7779
raise exc.GitlabUploadError(f"Failed to read package file {path}") from e
7880

7981
url = f"{self._computed_path}/{package_name}/{package_version}/{file_name}"
80-
server_data = self.gitlab.http_put(url, post_data=file_data, raw=True, **kwargs)
82+
query_data = {} if select is None else {"select": select}
83+
server_data = self.gitlab.http_put(
84+
url, query_data=query_data, post_data=file_data, raw=True, **kwargs
85+
)
8186
if TYPE_CHECKING:
8287
assert isinstance(server_data, dict)
8388

84-
return self._obj_cls(
85-
self,
86-
attrs={
87-
"package_name": package_name,
88-
"package_version": package_version,
89-
"file_name": file_name,
90-
"path": path,
91-
"message": server_data["message"],
92-
},
93-
)
89+
attrs = {
90+
"package_name": package_name,
91+
"package_version": package_version,
92+
"file_name": file_name,
93+
"path": path,
94+
}
95+
attrs.update(server_data)
96+
return self._obj_cls(self, attrs=attrs)
9497

9598
@cli.register_custom_action(
9699
"GenericPackageManager",

tests/functional/api/test_packages.py

+17
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
package_name = "hello-world"
1111
package_version = "v1.0.0"
1212
file_name = "hello.tar.gz"
13+
file_name2 = "hello2.tar.gz"
1314
file_content = "package content"
1415

1516

@@ -37,6 +38,22 @@ def test_upload_generic_package(tmp_path, project):
3738
assert package.message == "201 Created"
3839

3940

41+
def test_upload_generic_package_select(tmp_path, project):
42+
path = tmp_path / file_name2
43+
path.write_text(file_content)
44+
package = project.generic_packages.upload(
45+
package_name=package_name,
46+
package_version=package_version,
47+
file_name=file_name2,
48+
path=path,
49+
select="package_file",
50+
)
51+
52+
assert isinstance(package, GenericPackage)
53+
assert package.file_name == file_name2
54+
assert package.size == path.stat().st_size
55+
56+
4057
def test_download_generic_package(project):
4158
package = project.generic_packages.download(
4259
package_name=package_name,

0 commit comments

Comments
 (0)