22
22
import inspect
23
23
import itertools
24
24
import json
25
+ import re
25
26
import warnings
26
27
27
28
import requests
@@ -64,86 +65,6 @@ class Gitlab(object):
64
65
timeout (float): Timeout to use for requests to the GitLab server.
65
66
http_username (str): Username for HTTP authentication
66
67
http_password (str): Password for HTTP authentication
67
-
68
- Attributes:
69
- user_emails (UserEmailManager): Manager for GitLab users' emails.
70
- user_keys (UserKeyManager): Manager for GitLab users' SSH keys.
71
- users (UserManager): Manager for GitLab users
72
- broadcastmessages (BroadcastMessageManager): Manager for broadcast
73
- messages
74
- keys (DeployKeyManager): Manager for deploy keys
75
- group_accessrequests (GroupAccessRequestManager): Manager for GitLab
76
- groups access requests
77
- group_issues (GroupIssueManager): Manager for GitLab group issues
78
- group_projects (GroupProjectManager): Manager for GitLab group projects
79
- group_members (GroupMemberManager): Manager for GitLab group members
80
- groups (GroupManager): Manager for GitLab members
81
- hooks (HookManager): Manager for GitLab hooks
82
- issues (IssueManager): Manager for GitLab issues
83
- licenses (LicenseManager): Manager for licenses
84
- namespaces (NamespaceManager): Manager for namespaces
85
- notificationsettings (NotificationSettingsManager): Manager for global
86
- notification settings
87
- project_accessrequests (ProjectAccessRequestManager): Manager for
88
- GitLab projects access requests
89
- project_boards (ProjectBoardManager): Manager for GitLab projects
90
- boards
91
- project_board_lists (ProjectBoardListManager): Manager for GitLab
92
- project board lists
93
- project_branches (ProjectBranchManager): Manager for GitLab projects
94
- branches
95
- project_builds (ProjectBuildManager): Manager for GitLab projects
96
- builds
97
- project_commits (ProjectCommitManager): Manager for GitLab projects
98
- commits
99
- project_commit_comments (ProjectCommitCommentManager): Manager for
100
- GitLab projects commits comments
101
- project_commit_statuses (ProjectCommitStatusManager): Manager for
102
- GitLab projects commits statuses
103
- project_deployments (ProjectDeploymentManager): Manager for GitLab
104
- projects deployments
105
- project_keys (ProjectKeyManager): Manager for GitLab projects keys
106
- project_environments (ProjectEnvironmentManager): Manager for GitLab
107
- projects environments
108
- project_events (ProjectEventManager): Manager for GitLab projects
109
- events
110
- project_forks (ProjectForkManager): Manager for GitLab projects forks
111
- project_hooks (ProjectHookManager): Manager for GitLab projects hooks
112
- project_issue_notes (ProjectIssueNoteManager): Manager for GitLab notes
113
- on issues
114
- project_issues (ProjectIssueManager): Manager for GitLab projects
115
- issues
116
- project_members (ProjectMemberManager): Manager for GitLab projects
117
- members
118
- project_notes (ProjectNoteManager): Manager for GitLab projects notes
119
- project_pipelines (ProjectPipelineManager): Manager for GitLab projects
120
- pipelines
121
- project_tags (ProjectTagManager): Manager for GitLab projects tags
122
- project_mergerequest_notes (ProjectMergeRequestNoteManager): Manager
123
- for GitLab notes on merge requests
124
- project_mergerequests (ProjectMergeRequestManager): Manager for GitLab
125
- projects merge requests
126
- project_milestones (ProjectMilestoneManager): Manager for GitLab
127
- projects milestones
128
- project_labels (ProjectLabelManager): Manager for GitLab projects
129
- labels
130
- project_files (ProjectFileManager): Manager for GitLab projects files
131
- project_services (ProjectServiceManager): Manager for the GitLab
132
- projects services
133
- project_snippet_notes (ProjectSnippetNoteManager): Manager for GitLab
134
- note on snippets
135
- project_snippets (ProjectSnippetManager): Manager for GitLab projects
136
- snippets
137
- project_triggers (ProjectTriggerManager): Manager for build triggers
138
- project_variables (ProjectVariableManager): Manager for build variables
139
- user_projects (UserProjectManager): Manager for GitLab projects users
140
- projects (ProjectManager): Manager for GitLab projects
141
- runners (RunnerManager): Manager for the CI runners
142
- settings (ApplicationSettingsManager): manager for the Gitlab settings
143
- team_members (TeamMemberManager): Manager for GitLab teams members
144
- team_projects (TeamProjectManager): Manager for GitLab teams projects
145
- teams (TeamManager): Manager for GitLab teams
146
- todos (TodoManager): Manager for user todos
147
68
"""
148
69
149
70
def __init__ (self , url , private_token = None , email = None , password = None ,
@@ -168,60 +89,45 @@ def __init__(self, url, private_token=None, email=None, password=None,
168
89
#: Create a session object for requests
169
90
self .session = requests .Session ()
170
91
171
- self .settings = ApplicationSettingsManager (self )
172
- self .user_emails = UserEmailManager (self )
173
- self .user_keys = UserKeyManager (self )
174
- self .users = UserManager (self )
175
92
self .broadcastmessages = BroadcastMessageManager (self )
176
93
self .keys = KeyManager (self )
177
- self .group_accessrequests = GroupAccessRequestManager (self )
178
- self .group_issues = GroupIssueManager (self )
179
- self .group_projects = GroupProjectManager (self )
180
- self .group_members = GroupMemberManager (self )
181
94
self .groups = GroupManager (self )
182
95
self .hooks = HookManager (self )
183
96
self .issues = IssueManager (self )
184
97
self .licenses = LicenseManager (self )
185
98
self .namespaces = NamespaceManager (self )
186
99
self .notificationsettings = NotificationSettingsManager (self )
187
- self .project_accessrequests = ProjectAccessRequestManager (self )
188
- self .project_boards = ProjectBoardManager (self )
189
- self .project_board_listss = ProjectBoardListManager (self )
190
- self .project_branches = ProjectBranchManager (self )
191
- self .project_builds = ProjectBuildManager (self )
192
- self .project_commits = ProjectCommitManager (self )
193
- self .project_commit_comments = ProjectCommitCommentManager (self )
194
- self .project_commit_statuses = ProjectCommitStatusManager (self )
195
- self .project_deployments = ProjectDeploymentManager (self )
196
- self .project_keys = ProjectKeyManager (self )
197
- self .project_environments = ProjectEnvironmentManager (self )
198
- self .project_events = ProjectEventManager (self )
199
- self .project_forks = ProjectForkManager (self )
200
- self .project_hooks = ProjectHookManager (self )
201
- self .project_issue_notes = ProjectIssueNoteManager (self )
202
- self .project_issues = ProjectIssueManager (self )
203
- self .project_members = ProjectMemberManager (self )
204
- self .project_notes = ProjectNoteManager (self )
205
- self .project_pipelines = ProjectPipelineManager (self )
206
- self .project_tags = ProjectTagManager (self )
207
- self .project_mergerequest_notes = ProjectMergeRequestNoteManager (self )
208
- self .project_mergerequests = ProjectMergeRequestManager (self )
209
- self .project_milestones = ProjectMilestoneManager (self )
210
- self .project_labels = ProjectLabelManager (self )
211
- self .project_files = ProjectFileManager (self )
212
- self .project_services = ProjectServiceManager (self )
213
- self .project_snippet_notes = ProjectSnippetNoteManager (self )
214
- self .project_snippets = ProjectSnippetManager (self )
215
- self .project_triggers = ProjectTriggerManager (self )
216
- self .project_variables = ProjectVariableManager (self )
217
- self .user_projects = UserProjectManager (self )
218
100
self .projects = ProjectManager (self )
219
101
self .runners = RunnerManager (self )
220
- self .team_members = TeamMemberManager (self )
221
- self .team_projects = TeamProjectManager (self )
102
+ self .settings = ApplicationSettingsManager (self )
103
+ self .sidekiq = SidekiqManager (self )
104
+ self .users = UserManager (self )
222
105
self .teams = TeamManager (self )
223
106
self .todos = TodoManager (self )
224
- self .sidekiq = SidekiqManager (self )
107
+
108
+ # build the "submanagers"
109
+ for parent_cls in six .itervalues (globals ()):
110
+ if (not inspect .isclass (parent_cls )
111
+ or not issubclass (parent_cls , GitlabObject )
112
+ or parent_cls == CurrentUser ):
113
+ continue
114
+
115
+ if not parent_cls .managers :
116
+ continue
117
+
118
+ for var , cls , attrs in parent_cls .managers :
119
+ var_name = '%s_%s' % (self ._cls_to_manager_prefix (parent_cls ),
120
+ var )
121
+ manager = cls (self )
122
+ setattr (self , var_name , manager )
123
+
124
+ def _cls_to_manager_prefix (self , cls ):
125
+ # Manage bad naming decisions
126
+ camel_case = (cls .__name__
127
+ .replace ('NotificationSettings' , 'Notificationsettings' )
128
+ .replace ('MergeRequest' , 'Mergerequest' )
129
+ .replace ('AccessRequest' , 'Accessrequest' ))
130
+ return re .sub (r'(.)([A-Z])' , r'\1_\2' , camel_case ).lower ()
225
131
226
132
@staticmethod
227
133
def from_config (gitlab_id = None , config_files = None ):
0 commit comments