diff options
-rw-r--r-- | gitlab/__init__.py | 9 | ||||
-rw-r--r-- | gitlab/objects.py | 27 | ||||
-rw-r--r-- | gitlab/tests/test_manager.py | 69 |
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) |