2222import inspect
2323import itertools
2424import json
25+ import re
2526import warnings
2627
2728import requests
@@ -64,86 +65,6 @@ class Gitlab(object):
6465 timeout (float): Timeout to use for requests to the GitLab server.
6566 http_username (str): Username for HTTP authentication
6667 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
14768 """
14869
14970 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,
16889 #: Create a session object for requests
16990 self .session = requests .Session ()
17091
171- self .settings = ApplicationSettingsManager (self )
172- self .user_emails = UserEmailManager (self )
173- self .user_keys = UserKeyManager (self )
174- self .users = UserManager (self )
17592 self .broadcastmessages = BroadcastMessageManager (self )
17693 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 )
18194 self .groups = GroupManager (self )
18295 self .hooks = HookManager (self )
18396 self .issues = IssueManager (self )
18497 self .licenses = LicenseManager (self )
18598 self .namespaces = NamespaceManager (self )
18699 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 )
218100 self .projects = ProjectManager (self )
219101 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 )
222105 self .teams = TeamManager (self )
223106 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 ()
225131
226132 @staticmethod
227133 def from_config (gitlab_id = None , config_files = None ):
0 commit comments