This is simpler to use than the "identity" field, if patchew-cli is going to
use a PUT request to the REST API instead of testing-report.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
api/rest.py | 28 ++++++++++++++++++++++++++++
mods/testing.py | 16 ++++++++++------
2 files changed, 38 insertions(+), 6 deletions(-)
diff --git a/api/rest.py b/api/rest.py
index 9ec0ae8..bd46211 100644
--- a/api/rest.py
+++ b/api/rest.py
@@ -77,6 +77,34 @@ class PatchewPermission(permissions.BasePermission):
class ImportPermission(PatchewPermission):
allowed_groups = ('importers',)
+# utility function to generate REST API URLs
+
+def reverse_detail(obj, request):
+ if isinstance(obj, Project):
+ return rest_framework.reverse.reverse("project-detail",
+ request=request,
+ kwargs={"pk": obj.id})
+ if isinstance(obj, Message):
+ assert obj.is_series_head
+ return rest_framework.reverse.reverse("series-detail",
+ request=request,
+ kwargs={"projects_pk": obj.project.id,
+ "message_id": obj.message_id})
+ if isinstance(obj, ProjectResult):
+ po = obj.obj
+ return rest_framework.reverse.reverse("results-detail",
+ request=request,
+ kwargs={"projects_pk": po.id,
+ "name": obj.name})
+ if isinstance(obj, MessageResult):
+ m = obj.obj
+ return rest_framework.reverse.reverse("results-detail",
+ request=request,
+ kwargs={"projects_pk": m.project.id,
+ "series_message_id": m.message_id,
+ "name": obj.name}),
+ raise Error("unhandled object type")
+
# pluggable field for plugin support
class PluginMethodField(SerializerMethodField):
diff --git a/mods/testing.py b/mods/testing.py
index 0266fb9..ecd63d1 100644
--- a/mods/testing.py
+++ b/mods/testing.py
@@ -20,6 +20,7 @@ import math
from api.views import APILoginRequiredView
from api.models import (Message, MessageProperty, MessageResult,
Project, ProjectResult, Result)
+from api.rest import reverse_detail
from api.search import SearchEngine
from event import emit_event, declare_event, register_handler
from patchew.logviewer import LogView
@@ -388,17 +389,18 @@ class TestingGetView(APILoginRequiredView):
name = "testing-get"
allowed_groups = ["testers"]
- def _generate_test_data(self, project, repo, head, base, identity, test):
+ def _generate_test_data(self, project, repo, head, base, identity, result_uri, test):
r = {"project": project,
"repo": repo,
"head": head,
"base": base,
"test": test,
- "identity": identity
+ "identity": identity,
+ "result_uri": result_uri,
}
return r
- def _generate_series_test_data(self, s, test):
+ def _generate_series_test_data(self, request, s, result, test):
gr = s.git_result
assert gr.is_success()
return self._generate_test_data(project=s.project.name,
@@ -410,15 +412,17 @@ class TestingGetView(APILoginRequiredView):
"message-id": s.message_id,
"subject": s.subject,
},
+ result_uri=reverse_detail(result, request),
test=test)
- def _generate_project_test_data(self, project, repo, head, base, test):
+ def _generate_project_test_data(self, request, project, repo, head, base, result, test):
return self._generate_test_data(project=project,
repo=repo, head=head, base=base,
identity={
"type": "project",
"head": head,
},
+ result_uri=reverse_detail(result, request),
test=test)
def _find_applicable_test(self, queryset, user, po, tester, capabilities):
@@ -448,7 +452,7 @@ class TestingGetView(APILoginRequiredView):
candidates = self._find_applicable_test(ProjectResult.objects.filter(project=po),
request.user, po, tester, capabilities)
for r, test in candidates:
- td = self._generate_project_test_data(po.name, repo, head, tested, test)
+ td = self._generate_project_test_data(request, po.name, repo, head, tested, r, test)
return r, po, td
return None
@@ -457,7 +461,7 @@ class TestingGetView(APILoginRequiredView):
request.user, po, tester, capabilities)
for r, test in candidates:
s = r.message
- td = self._generate_series_test_data(s, test)
+ td = self._generate_series_test_data(request, s, r, test)
return r, s, td
return None
--
2.17.1
_______________________________________________
Patchew-devel mailing list
Patchew-devel@redhat.com
https://www.redhat.com/mailman/listinfo/patchew-devel