diff --git a/README.rst b/README.rst index bdb7ff6..d80d6b0 100644 --- a/README.rst +++ b/README.rst @@ -56,6 +56,7 @@ Contributors * @mgusek * Samuel Bachmann * @agustinhenze +* @Verteo License diff --git a/aptly_api/parts/repos.py b/aptly_api/parts/repos.py index 3a0fb9a..e3eed55 100644 --- a/aptly_api/parts/repos.py +++ b/aptly_api/parts/repos.py @@ -127,6 +127,27 @@ def add_uploaded_file(self, reponame: str, dir: str, filename: Optional[str] = N return self.filereport_from_response(resp.json()) + def include_uploaded_file(self, reponame: str, dir: str, filename: Optional[str] = None, + remove_processed_files: bool = True, force_replace: bool = False, + accept_unsigned: bool = False, ignore_signature: bool = False) -> FileReport: + params = { + "noRemoveFiles": "0" if remove_processed_files else "1", + } + if force_replace: + params["forceReplace"] = "1" + if accept_unsigned: + params["acceptUnsigned"] = "1" + if ignore_signature: + params["ignoreSignature"] = "1" + + if filename is None: + resp = self.do_post("api/repos/%s/include/%s" % (quote(reponame), quote(dir),), params=params) + else: + resp = self.do_post("api/repos/%s/include/%s/%s" % (quote(reponame), quote(dir), quote(filename),), + params=params) + + return self.filereport_from_response(resp.json()) + def add_packages_by_key(self, reponame: str, *package_keys: str) -> Repo: resp = self.do_post("api/repos/%s/packages" % quote(reponame), json={ "PackageRefs": package_keys, diff --git a/aptly_api/tests/test_repos.py b/aptly_api/tests/test_repos.py index 7756807..9b7adb0 100644 --- a/aptly_api/tests/test_repos.py +++ b/aptly_api/tests/test_repos.py @@ -177,6 +177,34 @@ def test_add_dir(self, *, rmock: requests_mock.Mocker) -> None: 'Removed': [], 'Warnings': []}) ) + def test_include_file(self, *, rmock: requests_mock.Mocker) -> None: + rmock.post("http://test/api/repos/aptly-repo/include/test/dirmngr_2.1.18-6_amd64.changes", + text='{"FailedFiles":[],"Report":{"Warnings":[],' + '"Added":["dirmngr-dbgsmy_2.1.18-6_amd64 added", "dirmngr_2.1.18-6_source added",' + '"dirmngr_2.1.18-6_amd64 added"],"Removed":[]}}') + self.assertEqual( + self.rapi.include_uploaded_file("aptly-repo", "test", "dirmngr_2.1.18-6_amd64.changes", + force_replace=True, ignore_signature=True, + accept_unsigned=True), + FileReport(failed_files=[], + report={'Added': ['dirmngr-dbgsmy_2.1.18-6_amd64 added', 'dirmngr_2.1.18-6_source added', + 'dirmngr_2.1.18-6_amd64 added'], + 'Removed': [], 'Warnings': []}) + ) + + def test_include_dir(self, *, rmock: requests_mock.Mocker) -> None: + rmock.post("http://test/api/repos/aptly-repo/include/test", + text='{"FailedFiles":[],"Report":{"Warnings":[],' + '"Added":["dirmngr-dbgsmy_2.1.18-6_amd64 added", "dirmngr_2.1.18-6_source added",' + '"dirmngr_2.1.18-6_amd64 added"],"Removed":[]}}') + self.assertEqual( + self.rapi.include_uploaded_file("aptly-repo", "test", force_replace=True), + FileReport(failed_files=[], + report={'Added': ['dirmngr-dbgsmy_2.1.18-6_amd64 added', 'dirmngr_2.1.18-6_source added', + 'dirmngr_2.1.18-6_amd64 added'], + 'Removed': [], 'Warnings': []}) + ) + def test_add_package(self, *, rmock: requests_mock.Mocker) -> None: rmock.post("http://test/api/repos/aptly-repo/packages", text='{"Name":"aptly-repo","Comment":"","DefaultDistribution":"","DefaultComponent":""}')