From 54b7c5f91b4ad1db1f716f25cc7973ec7542f0d4 Mon Sep 17 00:00:00 2001
From: Jakub Kadlcik <frostyx@email.cz>
Date: Tue, 12 Oct 2021 12:54:05 +0200
Subject: [PATCH] copr: migrate all calls to APIv3
In the latest Copr release we dropped all APIv1 code from frontend.
https://docs.pagure.org/copr.copr/release-notes/2021-10-01.html
Unfortunatelly we frogot to migrate DNF copr plugin to APIv3 and
therefore the following commands started failing with 404.
dnf copr search tests
dnf copr list --available-by-user frostyx
---
plugins/copr.py | 40 +++++++++++++++++-----------------------
1 file changed, 17 insertions(+), 23 deletions(-)
diff --git a/plugins/copr.py b/plugins/copr.py
index 8841f03..7fc6c6f 100644
--- a/plugins/copr.py
+++ b/plugins/copr.py
@@ -355,51 +355,45 @@ Bugzilla. In case of problems, contact the owner of this repository.
"Re-enable the project to fix this."))
def _list_user_projects(self, user_name):
- # http://copr.fedorainfracloud.org/api/coprs/ignatenkobrain/
- api_path = "/api/coprs/{}/".format(user_name)
- res = self.base.urlopen(self.copr_url + api_path, mode='w+')
+ # https://copr.fedorainfracloud.org/api_3/project/list?ownername=ignatenkobrain
+ api_path = "/api_3/project/list?ownername={0}".format(user_name)
+ url = self.copr_url + api_path
+ res = self.base.urlopen(url, mode='w+')
try:
json_parse = json.loads(res.read())
except ValueError:
raise dnf.exceptions.Error(
_("Can't parse repositories for username '{}'.")
.format(user_name))
self._check_json_output(json_parse)
section_text = _("List of {} coprs").format(user_name)
self._print_match_section(section_text)
- i = 0
- while i < len(json_parse["repos"]):
- msg = "{0}/{1} : ".format(user_name,
- json_parse["repos"][i]["name"])
- desc = json_parse["repos"][i]["description"]
- if not desc:
- desc = _("No description given")
+
+ for item in json_parse["items"]:
+ msg = "{0}/{1} : ".format(user_name, item["name"])
+ desc = item["description"] or _("No description given")
msg = self.base.output.fmtKeyValFill(ucd(msg), desc)
print(msg)
- i += 1
def _search(self, query):
- # http://copr.fedorainfracloud.org/api/coprs/search/tests/
- api_path = "/api/coprs/search/{}/".format(query)
- res = self.base.urlopen(self.copr_url + api_path, mode='w+')
+ # https://copr.fedorainfracloud.org/api_3/project/search?query=tests
+ api_path = "/api_3/project/search?query={}".format(query)
+ url = self.copr_url + api_path
+ res = self.base.urlopen(url, mode='w+')
try:
json_parse = json.loads(res.read())
except ValueError:
raise dnf.exceptions.Error(_("Can't parse search for '{}'."
).format(query))
self._check_json_output(json_parse)
section_text = _("Matched: {}").format(query)
self._print_match_section(section_text)
- i = 0
- while i < len(json_parse["repos"]):
- msg = "{0}/{1} : ".format(json_parse["repos"][i]["username"],
- json_parse["repos"][i]["coprname"])
- desc = json_parse["repos"][i]["description"]
- if not desc:
- desc = _("No description given.")
+
+ for item in json_parse["items"]:
+ msg = "{0} : ".format(item["full_name"])
+ desc = item["description"] or _("No description given.")
msg = self.base.output.fmtKeyValFill(ucd(msg), desc)
print(msg)
- i += 1
def _print_match_section(self, text):
formatted = self.base.output.fmtSection(text)
@@ -624,7 +618,7 @@ Bugzilla. In case of problems, contact the owner of this repository.
@classmethod
def _check_json_output(cls, json_obj):
- if json_obj["output"] != "ok":
+ if "error" in json_obj:
raise dnf.exceptions.Error("{}".format(json_obj["error"]))
@classmethod
--
libgit2 1.0.1