changeset 6654:bf9900e6e177

api: add option to get pullrequests for get_repo
author domruf <dominikruf@gmail.com>
date Wed, 29 Mar 2017 22:12:50 +0200
parents 98d26beb0965
children 6452215a54ee
files docs/api/api.rst kallithea/controllers/api/api.py kallithea/model/db.py kallithea/tests/api/api_base.py
diffstat 4 files changed, 63 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/docs/api/api.rst	Wed Mar 29 22:10:27 2017 +0200
+++ b/docs/api/api.rst	Wed Mar 29 22:12:50 2017 +0200
@@ -588,6 +588,7 @@
     args:     {
                 "repoid" : "<reponame or repo_id>",
                 "with_revision_names": "<bool> = Optional(False)",
+                "with_pullrequests": "<bool> = Optional(False)",
               }
 
 OUTPUT::
@@ -672,6 +673,55 @@
                             "<bookmarkname>": "<raw_id>",
                             ...
                          },
+                <if with_pullrequests == True>
+                "pull_requests": [
+                  {
+                    "status": "<pull_request_status>",
+                    "pull_request_id": <pull_request_id>,
+                    "description": "<pull_request_description>",
+                    "title": "<pull_request_title>",
+                    "url": "<pull_request_url>",
+                    "reviewers": [
+                      {
+                        "username": "<user_id>",
+                      },
+                      ...
+                    ],
+                    "org_repo_url": "<repo_url>",
+                    "org_ref_parts": [
+                      "<ref_type>",
+                      "<ref_name>",
+                      "<raw_id>"
+                    ],
+                    "other_ref_parts": [
+                      "<ref_type>",
+                      "<ref_name>",
+                      "<raw_id>"
+                    ],
+                    "comments": [
+                      {
+                        "username": "<user_id>",
+                        "text": "<comment text>",
+                        "comment_id": "<comment_id>",
+                      },
+                      ...
+                    ],
+                    "owner": "<username>",
+                    "statuses": [
+                      {
+                        "status": "<status_of_review>",        # "under_review", "approved" or "rejected"
+                        "reviewer": "<user_id>",
+                        "modified_at": "<date_time_of_review>" # iso 8601 date, server's timezone
+                      },
+                      ...
+                    ],
+                    "revisions": [
+                      "<raw_id>",
+                      ...
+                    ]
+                  },
+                  ...
+                ]
             }
     error:  null
 
--- a/kallithea/controllers/api/api.py	Wed Mar 29 22:10:27 2017 +0200
+++ b/kallithea/controllers/api/api.py	Wed Mar 29 22:12:50 2017 +0200
@@ -1126,7 +1126,8 @@
 
     # permission check inside
     def get_repo(self, repoid,
-                 with_revision_names=Optional(False)):
+                 with_revision_names=Optional(False),
+                 with_pullrequests=Optional(False)):
         """
         Gets an existing repository by it's name or repository_id. Members will return
         either users_group or user associated to that repository. This command can be
@@ -1227,7 +1228,8 @@
             for uf in repo.followers
         ]
 
-        data = repo.get_api_data(with_revision_names=Optional.extract(with_revision_names))
+        data = repo.get_api_data(with_revision_names=Optional.extract(with_revision_names),
+                                 with_pullrequests=Optional.extract(with_pullrequests))
         data['members'] = members
         data['followers'] = followers
         return data
--- a/kallithea/model/db.py	Wed Mar 29 22:10:27 2017 +0200
+++ b/kallithea/model/db.py	Wed Mar 29 22:12:50 2017 +0200
@@ -1246,10 +1246,11 @@
 
         return is_valid_repo(repo_name, cls.base_path())
 
-    def get_api_data(self, with_revision_names=False):
+    def get_api_data(self, with_revision_names=False,
+                           with_pullrequests=False):
         """
         Common function for generating repo api data.
-        Optionally, also return tags, branches and bookmarks.
+        Optionally, also return tags, branches, bookmarks and PRs.
         """
         repo = self
         data = dict(
@@ -1279,6 +1280,8 @@
                 branches=scm_repo.branches,
                 bookmarks=scm_repo.bookmarks,
             ))
+        if with_pullrequests:
+            data['pull_requests'] = repo.pull_requests_other
         rc_config = Setting.get_app_settings()
         repository_fields = str2bool(rc_config.get('repository_fields'))
         if repository_fields:
--- a/kallithea/tests/api/api_base.py	Wed Mar 29 22:10:27 2017 +0200
+++ b/kallithea/tests/api/api_base.py	Wed Mar 29 22:12:50 2017 +0200
@@ -777,6 +777,7 @@
                                   repoid=self.REPO)
         response = api_call(self, params)
         assert u"tags" not in response.json[u'result']
+        assert u'pull_requests' not in response.json[u'result']
 
         repo = RepoModel().get_by_repo_name(self.REPO)
         ret = repo.get_api_data()
@@ -808,9 +809,11 @@
         fixture.destroy_user_group(new_group)
 
         id_, params = _build_data(self.apikey, 'get_repo', repoid=self.REPO,
-                                  with_revision_names=True)
+                                  with_revision_names=True,
+                                  with_pullrequests=True)
         response = api_call(self, params)
         assert u"v0.2.0" in response.json[u'result'][u'tags']
+        assert u'pull_requests' in response.json[u'result']
 
     @parametrize('grant_perm', [
         ('repository.admin'),