diff --git a/pagure/api/project.py b/pagure/api/project.py
index 57322b4..5590a1a 100644
--- a/pagure/api/project.py
+++ b/pagure/api/project.py
@@ -287,6 +287,10 @@ def api_projects():
| | | | returned depending if |
| | | | they are forks or not |
+---------------+----------+---------------+--------------------------+
+ | ``short`` | boolean | Optional | | Whether to return the |
+ | | | | entrie project JSON |
+ | | | | or just a sub-set |
+ +---------------+----------+---------------+--------------------------+
Sample response
^^^^^^^^^^^^^^^
@@ -381,11 +385,16 @@ def api_projects():
namespace = flask.request.values.get('namespace', None)
owner = flask.request.values.get('owner', None)
pattern = flask.request.values.get('pattern', None)
+ short = flask.request.values.get('short', None)
if str(fork).lower() in ['1', 'true']:
fork = True
elif str(fork).lower() in ['0', 'false']:
fork = False
+ if str(short).lower() in ['1', 'true']:
+ short = True
+ else:
+ short = False
private = False
if authenticated() and username == flask.g.fas_user.username:
@@ -399,16 +408,31 @@ def api_projects():
raise pagure.exceptions.APIError(
404, error_code=APIERROR.ENOPROJECTS)
+ if not short:
+ projects = [p.to_json(api=True, public=True) for p in projects]
+ else:
+ projects = [
+ {
+ 'name': p.name,
+ 'namespace': p.namespace,
+ 'fullname': p.fullname.replace('forks/', 'fork/', 1)
+ if p.fullname.startswith('forks/') else p.fullname,
+ 'description': p.description,
+ }
+ for p in projects
+ ]
+
jsonout = flask.jsonify({
'total_projects': len(projects),
- 'projects': [p.to_json(api=True, public=True) for p in projects],
+ 'projects': projects,
'args': {
'tags': tags,
'username': username,
'fork': fork,
'pattern': pattern,
'namespace': namespace,
- 'owner': owner
+ 'owner': owner,
+ 'short': short,
}
})
return jsonout
diff --git a/pagure/templates/_browseheader.html b/pagure/templates/_browseheader.html
index b28bd70..c9c2271 100644
--- a/pagure/templates/_browseheader.html
+++ b/pagure/templates/_browseheader.html
@@ -9,6 +9,9 @@
+ {% if select == 'projects' %}
+
+ {% endif %}
- {{browse_header(select=select)}}
+ {{ browse_header(select=select) }}
@@ -33,18 +33,23 @@
-{% if username %}
-
-{% endif %}
-
{% endblock %}
diff --git a/pagure/ui/app.py b/pagure/ui/app.py
index fc48bd2..0e0a332 100644
--- a/pagure/ui/app.py
+++ b/pagure/ui/app.py
@@ -158,6 +158,12 @@ def search():
stype = flask.request.args.get('type', 'projects')
term = flask.request.args.get('term')
page = flask.request.args.get('page', 1)
+ direct = flask.request.values.get('direct', None)
+ if str(direct).lower() in ['1', 'true']:
+ direct = True
+ else:
+ direct = False
+
try:
page = int(page)
if page < 1:
@@ -165,6 +171,11 @@ def search():
except ValueError:
page = 1
+ if direct:
+ return flask.redirect(
+ flask.url_for('view_repo', repo='') + term
+ )
+
if stype == 'projects':
return flask.redirect(flask.url_for('view_projects', pattern=term))
elif stype == 'projects_forks':
diff --git a/tests/test_pagure_flask_api_project.py b/tests/test_pagure_flask_api_project.py
index a1e1eca..636d028 100644
--- a/tests/test_pagure_flask_api_project.py
+++ b/tests/test_pagure_flask_api_project.py
@@ -235,6 +235,107 @@ class PagureFlaskApiProjecttests(tests.Modeltests):
data = json.loads(output.data)
self.assertDictEqual(data, expected_rv)
+ def test_api_projects_pattern(self):
+ """ Test the api_projects method of the flask api. """
+ tests.create_projects(self.session)
+
+ output = self.app.get('/api/0/projects?pattern=test')
+ self.assertEqual(output.status_code, 200)
+ data = json.loads(output.data)
+ data['projects'][0]['date_created'] = "1436527638"
+ expected_data = {
+ "args": {
+ "fork": None,
+ "namespace": None,
+ "owner": None,
+ "pattern": "test",
+ "short": False,
+ "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": "test project #1",
+ "fullname": "test",
+ "id": 1,
+ "milestones": {},
+ "name": "test",
+ "namespace": None,
+ "parent": None,
+ "priorities": {},
+ "tags": [],
+ "user": {
+ "fullname": "PY C",
+ "name": "pingou"
+ }
+ }
+ ],
+ "total_projects": 1
+ }
+ self.assertDictEqual(data, expected_data)
+
+ def test_api_projects_pattern_short(self):
+ """ Test the api_projects method of the flask api. """
+ tests.create_projects(self.session)
+
+ output = self.app.get('/api/0/projects?pattern=te*&short=1')
+ self.assertEqual(output.status_code, 200)
+ data = json.loads(output.data)
+ expected_data = {
+ "args": {
+ "fork": None,
+ "namespace": None,
+ "owner": None,
+ "pattern": "te*",
+ "short": True,
+ "tags": [],
+ "username": None
+ },
+ "projects": [
+ {
+ "description": "test project #1",
+ "fullname": "test",
+ "name": "test",
+ "namespace": None
+ },
+ {
+ "description": "test project #2",
+ "fullname": "test2",
+ "name": "test2",
+ "namespace": None
+ },
+ {
+ "description": "namespaced test project",
+ "fullname": "somenamespace/test3",
+ "name": "test3",
+ "namespace": "somenamespace"
+ }
+ ],
+ "total_projects": 3
+ }
+ self.assertDictEqual(data, expected_data)
+
def test_api_projects(self):
""" Test the api_projects method of the flask api. """
tests.create_projects(self.session)
@@ -272,6 +373,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests):
"namespace": None,
"owner": None,
"pattern": None,
+ "short": False,
"tags": ["infra"],
"username": None
},
@@ -323,6 +425,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests):
"namespace": None,
"owner": "pingou",
"pattern": None,
+ "short": False,
"tags": [],
"username": None
},
@@ -446,6 +549,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests):
"namespace": None,
"owner": None,
"pattern": None,
+ "short": False,
"tags": [],
"username": "pingou"
},
@@ -564,6 +668,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests):
"namespace": None,
"owner": None,
"pattern": None,
+ "short": False,
"tags": ["infra"],
"username": "pingou",
},
@@ -613,6 +718,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests):
"owner": None,
"namespace": "somenamespace",
"pattern": None,
+ "short": False,
"tags": [],
"username": None
},