summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gitlab/__init__.py9
-rw-r--r--gitlab/objects.py27
-rw-r--r--gitlab/tests/test_manager.py69
3 files changed, 105 insertions, 0 deletions
diff --git a/gitlab/__init__.py b/gitlab/__init__.py
index 02fb175..2c2f01d 100644
--- a/gitlab/__init__.py
+++ b/gitlab/__init__.py
@@ -469,14 +469,23 @@ class Gitlab(object):
Returns a list of matching projects.
"""
+ warnings.warn("`search_projects()` is deprecated, "
+ "use `projects.search()` instead",
+ DeprecationWarning)
return self._list_projects("/projects/search/" + query, **kwargs)
def all_projects(self, **kwargs):
"""Lists all the projects (need admin rights)."""
+ warnings.warn("`all_projects()` is deprecated, "
+ "use `projects.all()` instead",
+ DeprecationWarning)
return self._list_projects("/projects/all", **kwargs)
def owned_projects(self, **kwargs):
"""Lists owned projects."""
+ warnings.warn("`owned_projects()` is deprecated, "
+ "use `projects.owned()` instead",
+ DeprecationWarning)
return self._list_projects("/projects/owned", **kwargs)
def Group(self, id=None, **kwargs):
diff --git a/gitlab/objects.py b/gitlab/objects.py
index 3637fe8..aaaadbb 100644
--- a/gitlab/objects.py
+++ b/gitlab/objects.py
@@ -1016,6 +1016,33 @@ class UserProject(GitlabObject):
class ProjectManager(BaseManager):
obj_cls = Project
+ def _custom_list(self, url, **kwargs):
+ r = self.gitlab._raw_get(url, **kwargs)
+ raise_error_from_response(r, GitlabListError)
+
+ l = []
+ for o in r.json():
+ p = Project(self, o)
+ p._from_api = True
+ l.append(p)
+
+ return l
+
+ def search(self, query, **kwargs):
+ """Searches projects by name.
+
+ Returns a list of matching projects.
+ """
+ return self._custom_list("/projects/search/" + query, **kwargs)
+
+ def all(self, **kwargs):
+ """Lists all the projects (need admin rights)."""
+ return self._custom_list("/projects/all", **kwargs)
+
+ def owned(self, **kwargs):
+ """Lists owned projects."""
+ return self._custom_list("/projects/owned", **kwargs)
+
class UserProjectManager(BaseManager):
obj_cls = UserProject
diff --git a/gitlab/tests/test_manager.py b/gitlab/tests/test_manager.py
index 837e013..bba278f 100644
--- a/gitlab/tests/test_manager.py
+++ b/gitlab/tests/test_manager.py
@@ -145,3 +145,72 @@ class TestGitlabManager(unittest.TestCase):
self.assertIsInstance(fake_obj, FakeObject)
self.assertEqual(fake_obj.id, 1)
self.assertEqual(fake_obj.name, "fake_name")
+
+ def test_project_manager_owned(self):
+ mgr = ProjectManager(self.gitlab)
+
+ @urlmatch(scheme="http", netloc="localhost",
+ path="/api/v3/projects/owned", method="get")
+ def resp_get_all(url, request):
+ headers = {'content-type': 'application/json'}
+ content = ('[{"name": "name1", "id": 1}, '
+ '{"name": "name2", "id": 2}]')
+ content = content.encode("utf-8")
+ return response(200, content, headers, None, 5, request)
+
+ with HTTMock(resp_get_all):
+ data = mgr.owned()
+ self.assertEqual(type(data), list)
+ self.assertEqual(2, len(data))
+ self.assertEqual(type(data[0]), Project)
+ self.assertEqual(type(data[1]), Project)
+ self.assertEqual(data[0].name, "name1")
+ self.assertEqual(data[1].name, "name2")
+ self.assertEqual(data[0].id, 1)
+ self.assertEqual(data[1].id, 2)
+
+ def test_project_manager_all(self):
+ mgr = ProjectManager(self.gitlab)
+
+ @urlmatch(scheme="http", netloc="localhost",
+ path="/api/v3/projects/all", method="get")
+ def resp_get_all(url, request):
+ headers = {'content-type': 'application/json'}
+ content = ('[{"name": "name1", "id": 1}, '
+ '{"name": "name2", "id": 2}]')
+ content = content.encode("utf-8")
+ return response(200, content, headers, None, 5, request)
+
+ with HTTMock(resp_get_all):
+ data = mgr.all()
+ self.assertEqual(type(data), list)
+ self.assertEqual(2, len(data))
+ self.assertEqual(type(data[0]), Project)
+ self.assertEqual(type(data[1]), Project)
+ self.assertEqual(data[0].name, "name1")
+ self.assertEqual(data[1].name, "name2")
+ self.assertEqual(data[0].id, 1)
+ self.assertEqual(data[1].id, 2)
+
+ def test_project_manager_search(self):
+ mgr = ProjectManager(self.gitlab)
+
+ @urlmatch(scheme="http", netloc="localhost",
+ path="/api/v3/projects/search/foo", method="get")
+ def resp_get_all(url, request):
+ headers = {'content-type': 'application/json'}
+ content = ('[{"name": "foo1", "id": 1}, '
+ '{"name": "foo2", "id": 2}]')
+ content = content.encode("utf-8")
+ return response(200, content, headers, None, 5, request)
+
+ with HTTMock(resp_get_all):
+ data = mgr.search('foo')
+ self.assertEqual(type(data), list)
+ self.assertEqual(2, len(data))
+ self.assertEqual(type(data[0]), Project)
+ self.assertEqual(type(data[1]), Project)
+ self.assertEqual(data[0].name, "foo1")
+ self.assertEqual(data[1].name, "foo2")
+ self.assertEqual(data[0].id, 1)
+ self.assertEqual(data[1].id, 2)