8000 Fix a few remaining methods · DavidGarfinkle/python-gitlab@3488c5c · GitHub
[go: up one dir, main page]

Skip to content

Commit 3488c5c

Browse files
author
Gauvain Pocentek
committed
Fix a few remaining methods
1 parent 68f4114 commit 3488c5c

File tree

2 files changed

+62
-100
lines changed

2 files changed

+62
-100
lines changed

gitlab/base.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -552,6 +552,7 @@ def __init__(self, manager, attrs):
552552
'_updated_attrs': {},
553553
'_module': importlib.import_module(self.__module__)
554554
})
555+
self.__dict__['_parent_attrs'] = self.manager.parent_attrs
555556

556557
# TODO(gpocentek): manage the creation of new objects from the received
557558
# data (_constructor_types)
@@ -565,7 +566,10 @@ def __getattr__(self, name):
565566
try:
566567
return self.__dict__['_attrs'][name]
567568
except KeyError:
568-
raise AttributeError(name)
569+
try:
570+
return self.__dict__['_parent_attrs'][name]
571+
except:
572+
raise AttributeError(name)
569573

570574
def __setattr__(self, name, value):
571575
self.__dict__['_updated_attrs'][name] = value
@@ -660,14 +664,20 @@ def __init__(self, gl, parent=None):
660664
self._parent = parent # for nested managers
661665
self._computed_path = self._compute_path()
662666

667+
@property
668+
def parent_attrs(self):
669+
return self._parent_attrs
670+
663671
def _compute_path(self, path=None):
672+
self._parent_attrs = {}
664673
if path is None:
665674
path = self._path
666675
if self._parent is None or not hasattr(self, '_from_parent_attrs'):
667676
return path
668677

669678
data = {self_attr: getattr(self._parent, parent_attr)
670679
for self_attr, parent_attr in self._from_parent_attrs.items()}
680+
self._parent_attrs = data
671681
return path % data
672682

673683
@property

gitlab/v4/objects.py

Lines changed: 51 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -906,44 +906,35 @@ def cancel_merge_when_pipeline_succeeds(self, **kwargs):
906906
self._update_attrs(server_data)
907907

908908
def closes_issues(self, **kwargs):
909-
"""List issues closed by the MR.
909+
"""List issues that will close on merge."
910910
911911
Returns:
912-
list (ProjectIssue): List of closed issues
913-
914-
Raises:
915-
GitlabConnectionError: If the server cannot be reached.
916-
GitlabGetError: If the server fails to perform the request.
912+
list (ProjectIssue): List of issues
917913
"""
918-
# FIXME(gpocentek)
919-
url = ('/projects/%s/merge_requests/%s/closes_issues' %
920-
(self.project_id, self.iid))
921-
return self.gitlab._raw_list(url, ProjectIssue, **kwargs)
914+
path = '%s/%s/closes_issues' % (self.manager.path, self.get_id())
915+
data_list = self.manager.gitlab.http_list(path, **kwargs)
916+
manager = ProjectIssueManager(self.manager.gitlab,
917+
parent=self.manager._parent)
918+
return RESTObjectList(manager, ProjectIssue, data_list)
922919

923920
def commits(self, **kwargs):
924921
"""List the merge request commits.
925922
926923
Returns:
927924
list (ProjectCommit): List of commits
928-
929-
Raises:
930-
GitlabConnectionError: If the server cannot be reached.
931-
GitlabListError: If the server fails to perform the request.
932925
"""
933-
# FIXME(gpocentek)
934-
url = ('/projects/%s/merge_requests/%s/commits' %
935-
(self.project_id, self.iid))
936-
return self.gitlab._raw_list(url, ProjectCommit, **kwargs)
926+
927+
path = '%s/%s/commits' % (self.manager.path, self.get_id())
928+
data_list = self.manager.gitlab.http_list(path, **kwargs)
929+
manager = ProjectCommitManager(self.manager.gitlab,
930+
parent=self.manager._parent)
931+
return RESTObjectList(manager, ProjectCommit, data_list)
937932

938933
def changes(self, **kwargs):
939934
"""List the merge request changes.
940935
941936
Returns:
942937
list (dict): List of changes
943-
944-
Raises:
945-
GitlabConnectionError: If the server cannot be reached.
946-
GitlabListError: If the server fails to perform the request.
947938
"""
948939
path = '%s/%s/changes' % (self.manager.path, self.get_id())
949940
return self.manager.gitlab.http_get(path, **kwargs)
@@ -960,14 +951,6 @@ def merge(self, merge_commit_message=None,
960951
branch
961952
merged_when_build_succeeds (bool): Wait for the build to succeed,
962953
then merge
963-
964-
Returns:
965-
ProjectMergeRequest: The updated MR
966-
Raises:
967-
GitlabConnectionError: If the server cannot be reached.
968-
GitlabMRForbiddenError: If the user doesn't have permission to
969-
close thr MR
970-
GitlabMRClosedError: If the MR is already closed
971954
"""
972955
path = '%s/%s/merge' % (self.manager.path, self.get_id())
973956
data = {}
@@ -1002,23 +985,31 @@ class ProjectMilestone(SaveMixin, RESTObject):
1002985
_short_print_attr = 'title'
1003986

1004987
def issues(self, **kwargs):
1005-
url = '/projects/%s/milestones/%s/issues' % (self.project_id, self.id)
1006-
return self.gitlab._raw_list(url, ProjectIssue, **kwargs)
988+
"""List issues related to this milestone
989+
990+
Returns:
991+
list (ProjectIssue): The list of issues
992+
"""
993+
994+
path = '%s/%s/issues' % (self.manager.path, self.get_id())
995+
data_list = self.manager.gitlab.http_list(path, **kwargs)
996+
manager = ProjectCommitManager(self.manager.gitlab,
997+
parent=self.manager._parent)
998+
# FIXME(gpocentek): the computed manager path is not correct
999+
return RESTObjectList(manager, ProjectIssue, data_list)
10071000

10081001
def merge_requests(self, **kwargs):
10091002
"""List the merge requests related to this milestone
10101003
10111004
Returns:
10121005
list (ProjectMergeRequest): List of merge requests
1013-
1014-
Raises:
1015-
GitlabConnectionError: If the server cannot be reached.
1016-
GitlabListError: If the server fails to perform the request.
10171006
"""
1018-
# FIXME(gpocentek)
1019-
url = ('/projects/%s/milestones/%s/merge_requests' %
1020-
(self.project_id, self.id))
1021-
return self.gitlab._raw_list(url, ProjectMergeRequest, **kwargs)
1007+
path = '%s/%s/merge_requests' % (self.manager.path, self.get_id())
1008+
data_list = self.manager.gitlab.http_list(path, **kwargs)
1009+
manager = ProjectCommitManager(self.manager.gitlab,
1010+
parent=self.manager._parent)
1011+
# FIXME(gpocentek): the computed manager path is not correct
1012+
return RESTObjectList(manager, ProjectMergeRequest, data_list)
10221013

10231014

10241015
class ProjectMilestoneManager(RetrieveMixin, CreateMixin, DeleteMixin,
@@ -1425,20 +1416,29 @@ def repository_tree(self, path='', ref='', **kwargs):
14251416
14261417
Returns:
14271418
str: The json representation of the tree.
1428-
1429-
Raises:
1430-
GitlabConnectionError: If the server cannot be reached.
1431-
GitlabGetError: If the server fails to perform the request.
14321419
"""
1433-
path = '/projects/%s/repository/tree' % self.get_id()
1420+
gl_path = '/projects/%s/repository/tree' % self.get_id()
14341421
query_data = {}
14351422
if path:
14361423
query_data['path'] = path
14371424
if ref:
14381425
query_data['ref'] = ref
1439-
return self.manager.gitlab.http_get(path, query_data=query_data,
1426+
return self.manager.gitlab.http_get(gl_path, query_data=query_data,
14401427
**kwargs)
14411428

1429+
def repository_blob(self, sha, **kwargs):
1430+
"""Returns a blob by blob SHA.
1431+
1432+
Args:
1433+
sha(str): ID of the blob
1434+
1435+
Returns:
1436+
str: The blob as json
1437+
"""
1438+
1439+
path = '/projects/%s/repository/blobs/%s' % (self.get_id(), sha)
1440+
return self.manager.gitlab.http_get(path, **kwargs)
1441+
14421442
def repository_raw_blob(self, sha, streamed=False, action=None,
14431443
chunk_size=1024, **kwargs):
14441444
"""Returns the raw file contents for a blob by blob SHA.
@@ -1454,13 +1454,9 @@ def repository_raw_blob(self, sha, streamed=False, action=None,
14541454
14551455
Returns:
14561456
str: The blob content
1457-
1458-
Raises:
1459-
GitlabConnectionError: If the server cannot be reached.
1460-
GitlabGetError: If the server fails to perform the request.
14611457
"""
1462-
path = '/projects/%s/repository/raw_blobs/%s' % (self.get_id(), sha)
1463-
result = self.gitlab._raw_get(path, streamed=streamed, **kwargs)
1458+
path = '/projects/%s/repository/blobs/%s/raw' % (self.get_id(), sha)
1459+
result = self.manager.gitlab.http_get(path, streamed=streamed, **kwargs)
14641460
return utils.response_content(result, streamed, action, chunk_size)
14651461

14661462
def repository_compare(self, from_, to, **kwargs):
@@ -1472,10 +1468,6 @@ def repository_compare(self, from_, to, **kwargs):
14721468
14731469
Returns:
14741470
str: The diff
1475-
1476-
Raises:
1477-
GitlabConnectionError: If the server cannot be reached.
1478-
GitlabGetError: If the server fails to perform the request.
14791471
"""
14801472
path = '/projects/%s/repository/compare' % self.get_id()
14811473
query_data = {'from': from_, 'to': to}
@@ -1486,11 +1478,7 @@ def repository_contributors(self, **kwargs):
14861478
"""Returns a list of contributors for the project.
14871479
14881480
Returns:
1489-
list: The contibutors
1490-
1491-
Raises:
1492-
GitlabConnectionError: If the server cannot be reached.
1493-
GitlabGetError: If the server fails to perform the request.
1481+
list: The contributors
14941482
"""
14951483
path = '/projects/%s/repository/contributors' % self.get_id()
14961484
return self.manager.gitlab.http_get(path, **kwargs)
@@ -1510,38 +1498,26 @@ def repository_archive(self, sha=None, streamed=False, action=None,
15101498
15111499
Returns:
15121500
str: The binary data of the archive.
1513-
1514-
Raises:
1515-
GitlabConnectionError: If the server cannot be reached.
1516-
GitlabGetError: If the server fails to perform the request.
15171501
"""
15181502
path = '/projects/%s/repository/archive' % self.get_id()
15191503
query_data = {}
15201504
if sha:
15211505
query_data['sha'] = sha
1522-
result = self.gitlab._raw_get(path, query_data=query_data,
1523-
streamed=streamed, **kwargs)
1506+
result = self.manager.gitlab.http_get(path, query_data=query_data,
1507+
streamed=streamed, **kwargs)
15241508
return utils.response_content(result, streamed, action, chunk_size)
15251509

15261510
def create_fork_relation(self, forked_from_id, **kwargs):
15271511
"""Create a forked from/to relation between existing projects.
15281512
15291513
Args:
15301514
forked_from_id (int): The ID of the project that was forked from
1531-
1532-
Raises:
1533-
GitlabConnectionError: If the server cannot be reached.
1534-
GitlabCreateError: If the server fails to perform the request.
15351515
"""
15361516
path = '/projects/%s/fork/%s' % (self.get_id(), forked_from_id)
15371517
self.manager.gitlab.http_post(path, **kwargs)
15381518

15391519
def delete_fork_relation(self, **kwargs):
15401520
"""Delete a forked relation between existing projects.
1541-
1542-
Raises:
1543-
GitlabConnectionError: If the server cannot be reached.
1544-
GitlabDeleteError: If the server fails to perform the request.
15451521
"""
15461522
path = '/projects/%s/fork' % self.get_id()
15471523
self.manager.gitlab.http_delete(path, **kwargs)
@@ -1551,10 +1527,6 @@ def star(self, **kwargs):
15511527
15521528
Returns:
15531529
Project: the updated Project
1554-
1555-
Raises:
1556-
GitlabCreateError: If the action cannot be done
1557-
GitlabConnectionError: If the server cannot be reached.
15581530
"""
15591531
path = '/projects/%s/star' % self.get_id()
15601532
server_data = self.manager.gitlab.http_post(path, **kwargs)
@@ -1565,10 +1537,6 @@ def unstar(self, **kwargs):
15651537
15661538
Returns:
15671539
Project: the updated Project
1568-
1569-
Raises:
1570-
GitlabDeleteError: If the action cannot be done
1571-
GitlabConnectionError: If the server cannot be reached.
15721540
"""
15731541
path = '/projects/%s/unstar' % self.get_id()
15741542
server_data = self.manager.gitlab.http_post(path, **kwargs)
@@ -1579,10 +1547,6 @@ def archive(self, **kwargs):
15791547
15801548
Returns:
15811549
Project: the updated Project
1582-
1583-
Raises:
1584-
GitlabCreateError: If the action cannot be done
1585-
GitlabConnectionError: If the server cannot be reached.
15861550
"""
15871551
path = '/projects/%s/archive' % self.get_id()
15881552
server_data = self.manager.gitlab.http_post(path, **kwargs)
@@ -1593,10 +1557,6 @@ def unarchive(self, **kwargs):
15931557
15941558
Returns:
15951559
Project: the updated Project
1596-
1597-
Raises:
1598-
GitlabDeleteError: If the action cannot be done
1599-
GitlabConnectionError: If the server cannot be reached.
16001560
"""
16011561
path = '/projects/%s/unarchive' % self.get_id()
16021562
server_data = self.manager.gitlab.http_post(path, **kwargs)
@@ -1608,10 +1568,6 @@ def share(self, group_id, group_access, expires_at=None, **kwargs):
16081568
Args:
16091569
group_id (int): ID of the group.
16101570
group_access (int): Access level for the group.
1611-
1612-
Raises:
1613-
GitlabConnectionError: If the server cannot be reached.
1614-
GitlabCreateError: If the server fails to perform the request.
16151571
"""
16161572
path = '/projects/%s/share' % self.get_id()
16171573
data = {'group_id': group_id,
@@ -1628,10 +1584,6 @@ def trigger_pipeline(self, ref, token, variables={}, **kwargs):
16281584
ref (str): Commit to build; can be a commit SHA, a branch name, ...
16291585
token (str): The trigger token
16301586
variables (dict): Variables passed to the build script
1631-
1632-
Raises:
1633-
GitlabConnectionError: If the server cannot be reached.
1634-
GitlabCreateError: If the server fails to perform the request.
16351587
"""
16361588
path = '/projects/%s/trigger/pipeline' % self.get_id()
16371589
form = {r'variables[%s]' % k: v for k, v in six.iteritems(variables)}

0 commit comments

Comments
 (0)
0