From 6c3d54ce18470697a5871a0a0054f5782f023b0c Mon Sep 17 00:00:00 2001 From: Matt Prahl Date: Apr 24 2017 20:34:52 +0000 Subject: [PATCH 1/3] 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) From 091babfa083a82e668b49f86ac9373952618c966 Mon Sep 17 00:00:00 2001 From: Matt Prahl Date: Apr 25 2017 14:40:51 +0000 Subject: [PATCH 2/3] Update the docstring for api_projects --- diff --git a/pagure/api/project.py b/pagure/api/project.py index 732922f..85dc480 100644 --- a/pagure/api/project.py +++ b/pagure/api/project.py @@ -115,22 +115,60 @@ def api_projects(): "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", @@ -144,6 +182,8 @@ def api_projects(): "name": "ralph" } }, + "priorities": {}, + "tags": [], "user": { "fullname": "Pierre-Yves C", "name": "pingou" diff --git a/tests/test_pagure_flask_api_ui_private_repo.py b/tests/test_pagure_flask_api_ui_private_repo.py index 2fe9166..61cd14d 100644 --- a/tests/test_pagure_flask_api_ui_private_repo.py +++ b/tests/test_pagure_flask_api_ui_private_repo.py @@ -925,6 +925,7 @@ class PagurePrivateRepotest(tests.Modeltests): { "args": { "fork": None, + "namespace": None, "pattern": None, "tags": [], "username": "pingou" @@ -976,6 +977,7 @@ class PagurePrivateRepotest(tests.Modeltests): { "args": { "fork": None, + "namespace": None, "pattern": None, "tags": ["infra"], "username": "pingou" From ada420c0679ca12a17c0f1545db2da7ab7a787ed Mon Sep 17 00:00:00 2001 From: Matt Prahl Date: Apr 25 2017 14:40:51 +0000 Subject: [PATCH 3/3] Clean up test_api_projects test --- diff --git a/tests/test_pagure_flask_api_project.py b/tests/test_pagure_flask_api_project.py index 1eb24ca..838e11a 100644 --- a/tests/test_pagure_flask_api_project.py +++ b/tests/test_pagure_flask_api_project.py @@ -142,46 +142,46 @@ class PagureFlaskApiProjecttests(tests.Modeltests): data = json.loads(output.data) data['projects'][0]['date_created'] = "1436527638" expected_data = { - 'args': { - 'fork': None, - 'namespace': 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) @@ -194,7 +194,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): expected_data = { "args": { "fork": None, - 'namespace': None, + "namespace": None, "pattern": None, "tags": [], "username": "pingou" @@ -311,10 +311,10 @@ class PagureFlaskApiProjecttests(tests.Modeltests): expected_data = { "args": { "fork": None, + "namespace": None, "pattern": None, "tags": ["infra"], "username": "pingou", - 'namespace': None }, "projects": [{ "access_groups": { @@ -359,7 +359,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): expected_data = { "args": { "fork": None, - 'namespace': "somenamespace", + "namespace": "somenamespace", "pattern": None, "tags": [], "username": None