#2249 Add the ability to query the project API by namespace
Merged 6 years ago by pingou. Opened 6 years ago by mprahl.

file modified
+47 -2
@@ -98,6 +98,9 @@

      |               |          |               |   having commit rights   |

      |               |          |               |   to it                  |

      +---------------+----------+---------------+--------------------------+

+     | ``namespace`` | string   | Optional      | | Filters the projects   |

+     |               |          |               |   by namespace           |

+     +---------------+----------+---------------+--------------------------+

      | ``fork``      | boolean  | Optional      | | Filters the projects   |

      |               |          |               |   returned depending if  |

      |               |          |               |   they are forks or not  |
@@ -112,22 +115,60 @@

            "total_projects": 2,

            "projects": [

              {

+               "access_groups": {

+                 "admin": [],

+                 "commit": [],

+                 "ticket": []

+               },

+               "access_users": {

+                 "admin": [],

+                 "commit": [

+                   "some_user"

+                 ],

+                 "owner": [

+                   "pingou"

+                 ],

+                 "ticket": []

+               },

+               "close_status": [],

+               "custom_keys": [],

                "date_created": "1427441537",

                "description": "A web-based calendar for Fedora",

+               "milestones": {},

+               "namespace": null,

                "id": 7,

                "name": "fedocal",

                "fullname": "fedocal",

                "parent": null,

+               "priorities": {},

+               "tags": [],

                "user": {

                  "fullname": "Pierre-Yves C",

                  "name": "pingou"

                }

              },

              {

+               "access_groups": {

+                 "admin": [],

+                 "commit": [],

+                 "ticket": []

+               },

+               "access_users": {

+                 "admin": [],

+                 "commit": [],

+                 "owner": [

+                   "pingou"

+                 ],

+                 "ticket": []

+               },

+               "close_status": [],

+               "custom_keys": [],

                "date_created": "1431666007",

                "description": "An awesome messaging servicefor everyone",

                "id": 12,

+               "milestones": {},

                "name": "fedmsg",

+               "namespace": null,

                "fullname": "forks/pingou/fedmsg",

                "parent": {

                  "date_created": "1433423298",
@@ -141,6 +182,8 @@

                    "name": "ralph"

                  }

                },

+               "priorities": {},

+               "tags": [],

                "user": {

                  "fullname": "Pierre-Yves C",

                  "name": "pingou"
@@ -153,6 +196,7 @@

      tags = flask.request.values.getlist('tags')

      username = flask.request.values.get('username', None)

      fork = flask.request.values.get('fork', None)

+     namespace = flask.request.values.get('namespace', None)

      pattern = flask.request.values.get('pattern', None)

  

      if str(fork).lower() in ['1', 'true']:
@@ -165,8 +209,8 @@

          private = flask.g.fas_user.username

  

      projects = pagure.lib.search_projects(

-         SESSION, username=username, fork=fork,

-         tags=tags, pattern=pattern, private=private)

+         SESSION, username=username, fork=fork, tags=tags, pattern=pattern,

+         private=private, namespace=namespace)

  

      if not projects:

          raise pagure.exceptions.APIError(
@@ -180,6 +224,7 @@

              'username': username,

              'fork': fork,

              'pattern': pattern,

+             'namespace': namespace

          }

      })

      return jsonout

@@ -142,45 +142,46 @@

          data = json.loads(output.data)

          data['projects'][0]['date_created'] = "1436527638"

          expected_data = {

-             'args': {

-                 'fork': None,

-                 'pattern': None,

-                 'tags': ['infra'],

-                 'username': None

+             "args": {

+                 "fork": None,

+                 "namespace": None,

+                 "pattern": None,

+                 "tags": ["infra"],

+                 "username": None

              },

-             'projects': [{

-                 'access_groups': {

-                     'admin': [],

-                     'commit': [],

-                     'ticket': []},

-                 'access_users': {

-                      'admin': [],

-                      'commit': [],

-                      'owner': ['pingou'],

-                      'ticket': []},

-                 'close_status': [

-                     'Invalid',

-                     'Insufficient data',

-                     'Fixed',

-                     'Duplicate'

+             "projects": [{

+                 "access_groups": {

+                     "admin": [],

+                     "commit": [],

+                     "ticket": []},

+                 "access_users": {

+                      "admin": [],

+                      "commit": [],

+                      "owner": ["pingou"],

+                      "ticket": []},

+                 "close_status": [

+                     "Invalid",

+                     "Insufficient data",

+                     "Fixed",

+                     "Duplicate"

                  ],

-                 'custom_keys': [],

-                 'date_created': '1436527638',

-                 'description': 'test project #1',

-                 'fullname': 'test',

-                 'id': 1,

-                 'milestones': {},

-                 'name': 'test',

-                 'namespace': None,

-                 'parent': None,

-                 'priorities': {},

-                 'tags': ['infra'],

-                 'user': {

-                     'fullname': 'PY C',

-                     'name': 'pingou'

+                 "custom_keys": [],

+                 "date_created": "1436527638",

+                 "description": "test project #1",

+                 "fullname": "test",

+                 "id": 1,

+                 "milestones": {},

+                 "name": "test",

+                 "namespace": None,

+                 "parent": None,

+                 "priorities": {},

+                 "tags": ["infra"],

+                 "user": {

+                     "fullname": "PY C",

+                     "name": "pingou"

                  }

              }],

-             'total_projects': 1

+             "total_projects": 1

          }

          self.assertDictEqual(data, expected_data)

  
@@ -193,6 +194,7 @@

          expected_data = {

              "args": {

                  "fork": None,

+                 "namespace": None,

                  "pattern": None,

                  "tags": [],

                  "username": "pingou"
@@ -309,9 +311,10 @@

          expected_data = {

              "args": {

                  "fork": None,

+                 "namespace": None,

                  "pattern": None,

                  "tags": ["infra"],

-                 "username": "pingou"

+                 "username": "pingou",

              },

              "projects": [{

                  "access_groups": {
@@ -349,6 +352,56 @@

          }

          self.assertDictEqual(data, expected_data)

  

+         output = self.app.get('/api/0/projects?namespace=somenamespace')

+         self.assertEqual(output.status_code, 200)

+         data = json.loads(output.data)

+         data['projects'][0]['date_created'] = "1436527638"

+         expected_data = {

+             "args": {

+                 "fork": None,

+                 "namespace": "somenamespace",

+                 "pattern": None,

+                 "tags": [],

+                 "username": None

+             },

+             "projects": [

+                 {

+                     "access_groups": {

+                         "admin": [],

+                         "commit": [],

+                         "ticket": []},

+                     "access_users": {

+                         "admin": [],

+                         "commit": [],

+                         "owner": ["pingou"],

+                         "ticket": []},

+                     "close_status": [

+                         "Invalid",

+                         "Insufficient data",

+                         "Fixed",

+                         "Duplicate"

+                     ],

+                     "custom_keys": [],

+                     "date_created": "1436527638",

+                     "description": "namespaced test project",

+                     "fullname": "somenamespace/test3",

+                     "id": 3,

+                     "milestones": {},

+                     "name": "test3",

+                     "namespace": "somenamespace",

+                     "parent": None,

+                     "priorities": {},

+                     "tags": [],

+                     "user": {

+                         "fullname": "PY C",

+                         "name": "pingou"

+                     }

+                 }

+             ],

+             "total_projects": 1

+         }

+         self.assertDictEqual(data, expected_data)

+ 

      def test_api_project(self):

          """ Test the api_project method of the flask api. """

          tests.create_projects(self.session)

@@ -925,6 +925,7 @@

                  {

                      "args": {

                          "fork": None,

+                         "namespace": None,

                          "pattern": None,

                          "tags": [],

                          "username": "pingou"
@@ -976,6 +977,7 @@

                  {

                      "args": {

                          "fork": None,

+                         "namespace": None,

                          "pattern": None,

                          "tags": ["infra"],

                          "username": "pingou"

  • Add the ability to query the project API by namespace
  • Clean up the Project API docstring
  • Clean up some of the Project API test

Pretty please pagure-ci rebuild

Looks like the last jenkins error is legit

3 new commits added

  • Clean up test_api_projects test
  • Update the docstring for api_projects
  • Add the ability to query projects by a namespace in the API
6 years ago

Pretty please pagure-ci rebuild

Okay, Jenkins now succeeds.

Looks good to me, thanks! :)

Pull-Request has been merged by pingou

6 years ago