diff --git a/backend/code_review_backend/app/settings.py b/backend/code_review_backend/app/settings.py index 1c44e0fc2..8c418f4c1 100644 --- a/backend/code_review_backend/app/settings.py +++ b/backend/code_review_backend/app/settings.py @@ -170,6 +170,9 @@ # Cors open by default in dev CORS_ORIGIN_ALLOW_ALL = True +# Use production Phabricator instance by default +PHABRICATOR_HOST = "https://phabricator.services.mozilla.com" + # Heroku settings override to run the web app in production mode if "DYNO" in os.environ: logger.info("Setting up Heroku environment") @@ -215,5 +218,9 @@ # Setup Cors allowed domains CORS_ORIGIN_WHITELIST = taskcluster.secrets.get("cors-domains", []) + # Override Phabricator instance + if "PHABRICATOR" in taskcluster.secrets: + PHABRICATOR_HOST = taskcluster.secrets["PHABRICATOR"]["url"] + else: logger.info("Skipping taskcluster configuration") diff --git a/backend/code_review_backend/issues/models.py b/backend/code_review_backend/issues/models.py index e1296c97a..2d1193736 100644 --- a/backend/code_review_backend/issues/models.py +++ b/backend/code_review_backend/issues/models.py @@ -3,8 +3,10 @@ # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. +import urllib.parse import uuid +from django.conf import settings from django.db import models LEVEL_WARNING = "warning" @@ -47,6 +49,10 @@ class Revision(PhabricatorModel): def __str__(self): return f"D{self.id} - {self.title}" + @property + def phabricator_url(self): + return urllib.parse.urljoin(settings.PHABRICATOR_HOST, f"D{self.id}") + class Diff(PhabricatorModel): revision = models.ForeignKey( diff --git a/backend/code_review_backend/issues/serializers.py b/backend/code_review_backend/issues/serializers.py index 57f5c66ca..7e007f424 100644 --- a/backend/code_review_backend/issues/serializers.py +++ b/backend/code_review_backend/issues/serializers.py @@ -32,10 +32,19 @@ class RevisionSerializer(serializers.ModelSerializer): diffs_url = serializers.HyperlinkedIdentityField( view_name="revision-diffs-list", lookup_url_kwarg="revision_id" ) + phabricator_url = serializers.URLField(read_only=True) class Meta: model = Revision - fields = ("id", "repository", "phid", "title", "bugzilla_id", "diffs_url") + fields = ( + "id", + "repository", + "phid", + "title", + "bugzilla_id", + "diffs_url", + "phabricator_url", + ) class DiffSerializer(serializers.ModelSerializer): diff --git a/backend/code_review_backend/issues/tests/test_diff.py b/backend/code_review_backend/issues/tests/test_diff.py index 0516f37ac..881ce1435 100644 --- a/backend/code_review_backend/issues/tests/test_diff.py +++ b/backend/code_review_backend/issues/tests/test_diff.py @@ -62,6 +62,7 @@ def test_list_diffs(self): "title": "Revision 1", "bugzilla_id": 10000, "diffs_url": "http://testserver/v1/revision/1/diffs/", + "phabricator_url": "https://phabricator.services.mozilla.com/D1", }, "phid": "PHID-DIFF-1", "review_task_id": "task-0", @@ -78,6 +79,7 @@ def test_list_diffs(self): "title": "Revision 2", "bugzilla_id": 10001, "diffs_url": "http://testserver/v1/revision/2/diffs/", + "phabricator_url": "https://phabricator.services.mozilla.com/D2", }, "phid": "PHID-DIFF-2", "review_task_id": "task-1", @@ -94,6 +96,7 @@ def test_list_diffs(self): "title": "Revision 1", "bugzilla_id": 10000, "diffs_url": "http://testserver/v1/revision/1/diffs/", + "phabricator_url": "https://phabricator.services.mozilla.com/D1", }, "phid": "PHID-DIFF-3", "review_task_id": "task-2",