From 6c3d54ce18470697a5871a0a0054f5782f023b0c Mon Sep 17 00:00:00 2001 From: Matt Prahl Date: Apr 24 2017 20:34:52 +0000 Subject: Add the ability to query projects by a namespace in the API --- diff --git a/pagure/api/project.py b/pagure/api/project.py index 797d2b8..732922f 100644 --- a/pagure/api/project.py +++ b/pagure/api/project.py @@ -98,6 +98,9 @@ def api_projects(): | | | | 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 | @@ -153,6 +156,7 @@ def api_projects(): 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 +169,8 @@ def api_projects(): 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 +184,7 @@ def api_projects(): 'username': username, 'fork': fork, 'pattern': pattern, + 'namespace': namespace } }) return jsonout diff --git a/tests/test_pagure_flask_api_project.py b/tests/test_pagure_flask_api_project.py index c16298a..1eb24ca 100644 --- a/tests/test_pagure_flask_api_project.py +++ b/tests/test_pagure_flask_api_project.py @@ -144,6 +144,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): expected_data = { 'args': { 'fork': None, + 'namespace': None, 'pattern': None, 'tags': ['infra'], 'username': None @@ -193,6 +194,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): expected_data = { "args": { "fork": None, + 'namespace': None, "pattern": None, "tags": [], "username": "pingou" @@ -311,7 +313,8 @@ class PagureFlaskApiProjecttests(tests.Modeltests): "fork": None, "pattern": None, "tags": ["infra"], - "username": "pingou" + "username": "pingou", + 'namespace': None }, "projects": [{ "access_groups": { @@ -349,6 +352,56 @@ class PagureFlaskApiProjecttests(tests.Modeltests): } 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)