23
23
from gitlab .base import * # noqa
24
24
from gitlab .exceptions import * # noqa
25
25
from gitlab .mixins import * # noqa
26
- from gitlab .mixins import update_attrs
26
+ from gitlab .mixins import awaitable_postprocess , update_attrs
27
27
28
28
VISIBILITY_PRIVATE = "private"
29
29
VISIBILITY_INTERNAL = "internal"
@@ -1075,6 +1075,10 @@ class GroupMemberManager(CRUDMixin, RESTManager):
1075
1075
_create_attrs = (("access_level" , "user_id" ), ("expires_at" ,))
1076
1076
_update_attrs = (("access_level" ,), ("expires_at" ,))
1077
1077
1078
+ @awaitable_postprocess
1079
+ def _all_postprocess (self , sever_data ):
1080
+ return [self ._obj_cls (self , item ) for item in server_data ]
1081
+
1078
1082
@cli .register_custom_action ("GroupMemberManager" )
1079
1083
@exc .on_http_error (exc .GitlabListError )
1080
1084
def all (self , ** kwargs ):
@@ -1098,7 +1102,7 @@ def all(self, **kwargs):
1098
1102
1099
1103
path = "%s/all" % self .path
1100
1104
obj = self .gitlab .http_list (path , ** kwargs )
1101
- return [ self ._obj_cls ( self , item ) for item in obj ] # TODO???
1105
+ return self ._all_postprocess ( obj )
1102
1106
1103
1107
1104
1108
class GroupMergeRequest (RESTObject ):
@@ -1134,6 +1138,12 @@ class GroupMergeRequestManager(ListMixin, RESTManager):
1134
1138
class GroupMilestone (SaveMixin , ObjectDeleteMixin , RESTObject ):
1135
1139
_short_print_attr = "title"
1136
1140
1141
+ @awaitable_postprocess
1142
+ def _issues_postprocess (self , server_data ):
1143
+ manager = GroupIssueManager (self .manager .gitlab , parent = self .manager ._parent )
1144
+ # FIXME(gpocentek): the computed manager path is not correct
1145
+ return RESTObjectList (manager , GroupIssue , server_data )
1146
+
1137
1147
@cli .register_custom_action ("GroupMilestone" )
1138
1148
@exc .on_http_error (exc .GitlabListError )
1139
1149
def issues (self , ** kwargs ):
@@ -1157,9 +1167,13 @@ def issues(self, **kwargs):
1157
1167
1158
1168
path = "%s/%s/issues" % (self .manager .path , self .get_id ())
1159
1169
data_list = self .manager .gitlab .http_list (path , as_list = False , ** kwargs )
1170
+ return self ._issues_postprocess (data_list )
1171
+
1172
+ @awaitable_postprocess
1173
+ def _merge_requests_postprocess (self , server_data ):
1160
1174
manager = GroupIssueManager (self .manager .gitlab , parent = self .manager ._parent )
1161
1175
# FIXME(gpocentek): the computed manager path is not correct
1162
- return RESTObjectList (manager , GroupIssue , data_list ) # TODO: ???
1176
+ return RESTObjectList (manager , GroupMergeRequest , server_data )
1163
1177
1164
1178
@cli .register_custom_action ("GroupMilestone" )
1165
1179
@exc .on_http_error (exc .GitlabListError )
@@ -1183,9 +1197,7 @@ def merge_requests(self, **kwargs):
1183
1197
"""
1184
1198
path = "%s/%s/merge_requests" % (self .manager .path , self .get_id ())
1185
1199
data_list = self .manager .gitlab .http_list (path , as_list = False , ** kwargs )
1186
- manager = GroupIssueManager (self .manager .gitlab , parent = self .manager ._parent )
1187
- # FIXME(gpocentek): the computed manager path is not correct
1188
- return RESTObjectList (manager , GroupMergeRequest , data_list ) # TODO: ???
1200
+ return self ._merge_requests_postprocess (data_list )
1189
1201
1190
1202
1191
1203
class GroupMilestoneManager (CRUDMixin , RESTManager ):
@@ -1466,6 +1478,13 @@ class LDAPGroupManager(RESTManager):
1466
1478
_obj_cls = LDAPGroup
1467
1479
_list_filters = ("search" , "provider" )
1468
1480
1481
+ @awaitable_postprocess
1482
+ def _list_postprocess (self , server_data ):
1483
+ if isinstance (obj , list ):
1484
+ return [self ._obj_cls (self , item ) for item in server_data ]
1485
+ else :
1486
+ return base .RESTObjectList (self , self ._obj_cls , server_data )
1487
+
1469
1488
@exc .on_http_error (exc .GitlabListError )
1470
1489
def list (self , ** kwargs ):
1471
1490
"""Retrieve a list of objects.
@@ -1494,11 +1513,8 @@ def list(self, **kwargs):
1494
1513
else :
1495
1514
path = self ._path
1496
1515
1497
- obj = self .gitlab .http_list (path , ** data ) # TODO: ???
1498
- if isinstance (obj , list ):
1499
- return [self ._obj_cls (self , item ) for item in obj ]
1500
- else :
1501
- return base .RESTObjectList (self , self ._obj_cls , obj )
1516
+ obj = self .gitlab .http_list (path , ** data )
1517
+ return self ._list_postprocess (server_data )
1502
1518
1503
1519
1504
1520
class License (RESTObject ):
@@ -2406,6 +2422,12 @@ class ProjectIssueLinkManager(ListMixin, CreateMixin, DeleteMixin, RESTManager):
2406
2422
_from_parent_attrs = {"project_id" : "project_id" , "issue_iid" : "iid" }
2407
2423
_create_attrs = (("target_project_id" , "target_issue_iid" ), tuple ())
2408
2424
2425
+ @awaitable_postprocess
2426
+ def _create_postprocess (self , server_data ):
2427
+ source_issue = ProjectIssue (self ._parent .manager , server_data ["source_issue" ])
2428
+ target_issue = ProjectIssue (self ._parent .manager , server_data ["target_issue" ])
2429
+ return source_issue , target_issue
2430
+
2409
2431
@exc .on_http_error (exc .GitlabCreateError )
2410
2432
def create (self , data , ** kwargs ):
2411
2433
"""Create a new object.
@@ -2424,9 +2446,7 @@ def create(self, data, **kwargs):
2424
2446
"""
2425
2447
self ._check_missing_create_attrs (data )
2426
2448
server_data = self .gitlab .http_post (self .path , post_data = data , ** kwargs )
2427
- source_issue = ProjectIssue (self ._parent .manager , server_data ["source_issue" ])
2428
- target_issue = ProjectIssue (self ._parent .manager , server_data ["target_issue" ])
2429
- return source_issue , target_issue # TODO: ???
2449
+ return self ._create_postprocess (server_data )
2430
2450
2431
2451
2432
2452
class ProjectIssueResourceLabelEvent (RESTObject ):
@@ -2654,6 +2674,18 @@ class ProjectTag(ObjectDeleteMixin, RESTObject):
2654
2674
_id_attr = "name"
2655
2675
_short_print_attr = "name"
2656
2676
2677
+ @exc .on_http_error (exc .GitlabCreateError )
2678
+ def _create_release_description (self , path , data , ** kwargs ):
2679
+ return self .manager .gitlab .http_post (path , post_data = data , ** kwargs )
2680
+
2681
+ @exc .on_http_error (exc .GitlabUpdateError )
2682
+ def _update_release_description (self , path , data , ** kwargs ):
2683
+ return self .manager .gitlab .http_put (path , post_data = data , ** kwargs )
2684
+
2685
+ @awaitable_postprocess
2686
+ def _set_release_description_postprocess (self , server_data ):
2687
+ self .release = server_data
2688
+
2657
2689
@cli .register_custom_action ("ProjectTag" , ("description" ,))
2658
2690
def set_release_description (self , description , ** kwargs ):
2659
2691
"""Set the release notes on the tag.
@@ -2674,20 +2706,10 @@ def set_release_description(self, description, **kwargs):
2674
2706
path = "%s/%s/release" % (self .manager .path , id )
2675
2707
data = {"description" : description }
2676
2708
if self .release is None :
2677
- try :
2678
- server_data = self .manager .gitlab .http_post (
2679
- path , post_data = data , ** kwargs
2680
- )
2681
- except exc .GitlabHttpError as e :
2682
- raise exc .GitlabCreateError (e .response_code , e .error_message )
2709
+ server_data = self ._create_release_description (path , data , ** kwargs )
2683
2710
else :
2684
- try :
2685
- server_data = self .manager .gitlab .http_put (
2686
- path , post_data = data , ** kwargs
2687
- )
2688
- except exc .GitlabHttpError as e :
2689
- raise exc .GitlabUpdateError (e .response_code , e .error_message )
2690
- self .release = server_data # TODO: ???
2711
+ server_data = self ._update_release_description (path , data , ** kwargs )
2712
+ return self ._set_release_description_postprocess (server_data )
2691
2713
2692
2714
2693
2715
class ProjectTagManager (NoUpdateMixin , RESTManager ):
@@ -2890,6 +2912,11 @@ def cancel_merge_when_pipeline_succeeds(self, **kwargs):
2890
2912
)
2891
2913
return self .manager .gitlab .http_put (path , ** kwargs )
2892
2914
2915
+ @awaitable_postprocess
2916
+ def _close_issues_postprocess (self , data_list ):
2917
+ manager = ProjectIssueManager (self .manager .gitlab , parent = self .manager ._parent )
2918
+ return RESTObjectList (manager , ProjectIssue , data_list )
2919
+
2893
2920
@cli .register_custom_action ("ProjectMergeRequest" )
2894
2921
@exc .on_http_error (exc .GitlabListError )
2895
2922
def closes_issues (self , ** kwargs ):
@@ -2912,8 +2939,12 @@ def closes_issues(self, **kwargs):
2912
2939
"""
2913
2940
path = "%s/%s/closes_issues" % (self .manager .path , self .get_id ())
2914
2941
data_list = self .manager .gitlab .http_list (path , as_list = False , ** kwargs )
2915
- manager = ProjectIssueManager (self .manager .gitlab , parent = self .manager ._parent )
2916
- return RESTObjectList (manager , ProjectIssue , data_list ) # TODO: ???
2942
+ return self ._close_issues_postprocess (data_list )
2943
+
2944
+ @awaitable_postprocess
2945
+ def _commits_postprocess (self , data_list ):
2946
+ manager = ProjectCommitManager (self .manager .gitlab , parent = self .manager ._parent )
2947
+ return RESTObjectList (manager , ProjectCommit , data_list )
2917
2948
2918
2949
@cli .register_custom_action ("ProjectMergeRequest" )
2919
2950
@exc .on_http_error (exc .GitlabListError )
@@ -2938,8 +2969,7 @@ def commits(self, **kwargs):
2938
2969
2939
2970
path = "%s/%s/commits" % (self .manager .path , self .get_id ())
2940
2971
data_list = self .manager .gitlab .http_list (path , as_list = False , ** kwargs )
2941
- manager = ProjectCommitManager (self .manager .gitlab , parent = self .manager ._parent )
2942
- return RESTObjectList (manager , ProjectCommit , data_list ) # TODO: ???
2972
+ return self ._commits_postprocess (server_data )
2943
2973
2944
2974
@cli .register_custom_action ("ProjectMergeRequest" )
2945
2975
@exc .on_http_error (exc .GitlabListError )
@@ -3135,6 +3165,12 @@ class ProjectMergeRequestManager(CRUDMixin, RESTManager):
3135
3165
class ProjectMilestone (SaveMixin , ObjectDeleteMixin , RESTObject ):
3136
3166
_short_print_attr = "title"
3137
3167
3168
+ @awaitable_postprocess
3169
+ def _issues_postprocess (self , data_list ):
3170
+ manager = ProjectIssueManager (self .manager .gitlab , parent = self .manager ._parent )
3171
+ # FIXME(gpocentek): the computed manager path is not correct
3172
+ return RESTObjectList (manager , ProjectIssue , data_list )
3173
+
3138
3174
@cli .register_custom_action ("ProjectMilestone" )
3139
3175
@exc .on_http_error (exc .GitlabListError )
3140
3176
def issues (self , ** kwargs ):
@@ -3158,9 +3194,15 @@ def issues(self, **kwargs):
3158
3194
3159
3195
path = "%s/%s/issues" % (self .manager .path , self .get_id ())
3160
3196
data_list = self .manager .gitlab .http_list (path , as_list = False , ** kwargs )
3161
- manager = ProjectIssueManager (self .manager .gitlab , parent = self .manager ._parent )
3197
+ return self ._issues_postprocess (data_list )
3198
+
3199
+ @awaitable_postprocess
3200
+ def _merge_requests_postprocess (self , data_list ):
3201
+ manager = ProjectMergeRequestManager (
3202
+ self .manager .gitlab , parent = self .manager ._parent
3203
+ )
3162
3204
# FIXME(gpocentek): the computed manager path is not correct
3163
- return RESTObjectList (manager , ProjectIssue , data_list ) # TODO: ???
3205
+ return RESTObjectList (manager , ProjectMergeRequest , data_list )
3164
3206
3165
3207
@cli .register_custom_action ("ProjectMilestone" )
3166
3208
@exc .on_http_error (exc .GitlabListError )
@@ -3184,11 +3226,7 @@ def merge_requests(self, **kwargs):
3184
3226
"""
3185
3227
path = "%s/%s/merge_requests" % (self .manager .path , self .get_id ())
3186
3228
data_list = self .manager .gitlab .http_list (path , as_list = False , ** kwargs )
3187
- manager = ProjectMergeRequestManager (
3188
- self .manager .gitlab , parent = self .manager ._parent
3189
- )
3190
- # FIXME(gpocentek): the computed manager path is not correct
3191
- return RESTObjectList (manager , ProjectMergeRequest , data_list ) # TODO: ???
3229
+ return self ._merge_requests_postprocess (server_data )
3192
3230
3193
3231
3194
3232
class ProjectMilestoneManager (CRUDMixin , RESTManager ):
@@ -3883,6 +3921,11 @@ class ProjectServiceManager(GetMixin, UpdateMixin, DeleteMixin, RESTManager):
3883
3921
"teamcity" : (("teamcity_url" , "build_type" , "username" , "password" ), tuple ()),
3884
3922
}
3885
3923
3924
+ @awaitable_postprocess
3925
+ def _get_postprocess (self , obj , id ):
3926
+ obj .id = id
3927
+ return obj
3928
+
3886
3929
def get (self , id , ** kwargs ):
3887
3930
"""Retrieve a single object.
3888
3931
@@ -3901,8 +3944,11 @@ def get(self, id, **kwargs):
3901
3944
GitlabGetError: If the server cannot perform the request
3902
3945
"""
3903
3946
obj = super (ProjectServiceManager , self ).get (id , ** kwargs )
3904
- obj .id = id
3905
- return obj # TODO: ???
3947
+ return self ._get_postprocess (obj , id )
3948
+
3949
+ @awaitable_postprocess
3950
+ def _update_postprocess (self , server_data , id ):
3951
+ self .id = id
3906
3952
3907
3953
def update (self , id = None , new_data = None , ** kwargs ):
3908
3954
"""Update an object on the server.
@@ -3920,8 +3966,8 @@ def update(self, id=None, new_data=None, **kwargs):
3920
3966
GitlabUpdateError: If the server cannot perform the request
3921
3967
"""
3922
3968
new_data = new_data or {}
3923
- super (ProjectServiceManager , self ).update (id , new_data , ** kwargs )
3924
- self .id = id # TODO: ???
3969
+ server_data = super (ProjectServiceManager , self ).update (id , new_data , ** kwargs )
3970
+ return self ._update_postprocess ( server_data , id )
3925
3971
3926
3972
@cli .register_custom_action ("ProjectServiceManager" )
3927
3973
def available (self , ** kwargs ):
@@ -4557,6 +4603,14 @@ def housekeeping(self, **kwargs):
4557
4603
path = "/projects/%s/housekeeping" % self .get_id ()
4558
4604
return self .manager .gitlab .http_post (path , ** kwargs )
4559
4605
4606
+ @awaitable_postprocess
4607
+ def _upload_postprocess (self , sever_data ):
4608
+ return {
4609
+ "alt" : server_data ["alt" ],
4610
+ "url" : server_data ["url" ],
4611
+ "markdown" : server_data ["markdown" ],
4612
+ }
4613
+
4560
4614
# see #56 - add file attachment features
4561
4615
@cli .register_custom_action ("Project" , ("filename" , "filepath" ))
4562
4616
@exc .on_http_error (exc .GitlabUploadError )
@@ -4600,11 +4654,7 @@ def upload(self, filename, filedata=None, filepath=None, **kwargs):
4600
4654
file_info = {"file" : (filename , filedata )}
4601
4655
data = self .manager .gitlab .http_post (url , files = file_info )
4602
4656
4603
- return {
4604
- "alt" : data ["alt" ],
4605
- "url" : data ["url" ],
4606
- "markdown" : data ["markdown" ],
4607
- } # TODO: ???
4657
+ return self ._upload_post_process (data )
4608
4658
4609
4659
@cli .register_custom_action ("Project" , optional = ("wiki" ,))
4610
4660
@exc .on_http_error (exc .GitlabGetError )
0 commit comments