diff options
Diffstat (limited to 'gitlab/__init__.py')
| -rw-r--r-- | gitlab/__init__.py | 150 |
1 files changed, 28 insertions, 122 deletions
diff --git a/gitlab/__init__.py b/gitlab/__init__.py index d4de709..f91fdf2 100644 --- a/gitlab/__init__.py +++ b/gitlab/__init__.py @@ -22,6 +22,7 @@ from __future__ import absolute_import import inspect import itertools import json +import re import warnings import requests @@ -64,86 +65,6 @@ class Gitlab(object): timeout (float): Timeout to use for requests to the GitLab server. http_username (str): Username for HTTP authentication http_password (str): Password for HTTP authentication - - Attributes: - user_emails (UserEmailManager): Manager for GitLab users' emails. - user_keys (UserKeyManager): Manager for GitLab users' SSH keys. - users (UserManager): Manager for GitLab users - broadcastmessages (BroadcastMessageManager): Manager for broadcast - messages - keys (DeployKeyManager): Manager for deploy keys - group_accessrequests (GroupAccessRequestManager): Manager for GitLab - groups access requests - group_issues (GroupIssueManager): Manager for GitLab group issues - group_projects (GroupProjectManager): Manager for GitLab group projects - group_members (GroupMemberManager): Manager for GitLab group members - groups (GroupManager): Manager for GitLab members - hooks (HookManager): Manager for GitLab hooks - issues (IssueManager): Manager for GitLab issues - licenses (LicenseManager): Manager for licenses - namespaces (NamespaceManager): Manager for namespaces - notificationsettings (NotificationSettingsManager): Manager for global - notification settings - project_accessrequests (ProjectAccessRequestManager): Manager for - GitLab projects access requests - project_boards (ProjectBoardManager): Manager for GitLab projects - boards - project_board_lists (ProjectBoardListManager): Manager for GitLab - project board lists - project_branches (ProjectBranchManager): Manager for GitLab projects - branches - project_builds (ProjectBuildManager): Manager for GitLab projects - builds - project_commits (ProjectCommitManager): Manager for GitLab projects - commits - project_commit_comments (ProjectCommitCommentManager): Manager for - GitLab projects commits comments - project_commit_statuses (ProjectCommitStatusManager): Manager for - GitLab projects commits statuses - project_deployments (ProjectDeploymentManager): Manager for GitLab - projects deployments - project_keys (ProjectKeyManager): Manager for GitLab projects keys - project_environments (ProjectEnvironmentManager): Manager for GitLab - projects environments - project_events (ProjectEventManager): Manager for GitLab projects - events - project_forks (ProjectForkManager): Manager for GitLab projects forks - project_hooks (ProjectHookManager): Manager for GitLab projects hooks - project_issue_notes (ProjectIssueNoteManager): Manager for GitLab notes - on issues - project_issues (ProjectIssueManager): Manager for GitLab projects - issues - project_members (ProjectMemberManager): Manager for GitLab projects - members - project_notes (ProjectNoteManager): Manager for GitLab projects notes - project_pipelines (ProjectPipelineManager): Manager for GitLab projects - pipelines - project_tags (ProjectTagManager): Manager for GitLab projects tags - project_mergerequest_notes (ProjectMergeRequestNoteManager): Manager - for GitLab notes on merge requests - project_mergerequests (ProjectMergeRequestManager): Manager for GitLab - projects merge requests - project_milestones (ProjectMilestoneManager): Manager for GitLab - projects milestones - project_labels (ProjectLabelManager): Manager for GitLab projects - labels - project_files (ProjectFileManager): Manager for GitLab projects files - project_services (ProjectServiceManager): Manager for the GitLab - projects services - project_snippet_notes (ProjectSnippetNoteManager): Manager for GitLab - note on snippets - project_snippets (ProjectSnippetManager): Manager for GitLab projects - snippets - project_triggers (ProjectTriggerManager): Manager for build triggers - project_variables (ProjectVariableManager): Manager for build variables - user_projects (UserProjectManager): Manager for GitLab projects users - projects (ProjectManager): Manager for GitLab projects - runners (RunnerManager): Manager for the CI runners - settings (ApplicationSettingsManager): manager for the Gitlab settings - team_members (TeamMemberManager): Manager for GitLab teams members - team_projects (TeamProjectManager): Manager for GitLab teams projects - teams (TeamManager): Manager for GitLab teams - todos (TodoManager): Manager for user todos """ def __init__(self, url, private_token=None, email=None, password=None, @@ -168,60 +89,45 @@ class Gitlab(object): #: Create a session object for requests self.session = requests.Session() - self.settings = ApplicationSettingsManager(self) - self.user_emails = UserEmailManager(self) - self.user_keys = UserKeyManager(self) - self.users = UserManager(self) self.broadcastmessages = BroadcastMessageManager(self) self.keys = KeyManager(self) - self.group_accessrequests = GroupAccessRequestManager(self) - self.group_issues = GroupIssueManager(self) - self.group_projects = GroupProjectManager(self) - self.group_members = GroupMemberManager(self) self.groups = GroupManager(self) self.hooks = HookManager(self) self.issues = IssueManager(self) self.licenses = LicenseManager(self) self.namespaces = NamespaceManager(self) self.notificationsettings = NotificationSettingsManager(self) - self.project_accessrequests = ProjectAccessRequestManager(self) - self.project_boards = ProjectBoardManager(self) - self.project_board_listss = ProjectBoardListManager(self) - self.project_branches = ProjectBranchManager(self) - self.project_builds = ProjectBuildManager(self) - self.project_commits = ProjectCommitManager(self) - self.project_commit_comments = ProjectCommitCommentManager(self) - self.project_commit_statuses = ProjectCommitStatusManager(self) - self.project_deployments = ProjectDeploymentManager(self) - self.project_keys = ProjectKeyManager(self) - self.project_environments = ProjectEnvironmentManager(self) - self.project_events = ProjectEventManager(self) - self.project_forks = ProjectForkManager(self) - self.project_hooks = ProjectHookManager(self) - self.project_issue_notes = ProjectIssueNoteManager(self) - self.project_issues = ProjectIssueManager(self) - self.project_members = ProjectMemberManager(self) - self.project_notes = ProjectNoteManager(self) - self.project_pipelines = ProjectPipelineManager(self) - self.project_tags = ProjectTagManager(self) - self.project_mergerequest_notes = ProjectMergeRequestNoteManager(self) - self.project_mergerequests = ProjectMergeRequestManager(self) - self.project_milestones = ProjectMilestoneManager(self) - self.project_labels = ProjectLabelManager(self) - self.project_files = ProjectFileManager(self) - self.project_services = ProjectServiceManager(self) - self.project_snippet_notes = ProjectSnippetNoteManager(self) - self.project_snippets = ProjectSnippetManager(self) - self.project_triggers = ProjectTriggerManager(self) - self.project_variables = ProjectVariableManager(self) - self.user_projects = UserProjectManager(self) self.projects = ProjectManager(self) self.runners = RunnerManager(self) - self.team_members = TeamMemberManager(self) - self.team_projects = TeamProjectManager(self) + self.settings = ApplicationSettingsManager(self) + self.sidekiq = SidekiqManager(self) + self.users = UserManager(self) self.teams = TeamManager(self) self.todos = TodoManager(self) - self.sidekiq = SidekiqManager(self) + + # build the "submanagers" + for parent_cls in six.itervalues(globals()): + if (not inspect.isclass(parent_cls) + or not issubclass(parent_cls, GitlabObject) + or parent_cls == CurrentUser): + continue + + if not parent_cls.managers: + continue + + for var, cls, attrs in parent_cls.managers: + var_name = '%s_%s' % (self._cls_to_manager_prefix(parent_cls), + var) + manager = cls(self) + setattr(self, var_name, manager) + + def _cls_to_manager_prefix(self, cls): + # Manage bad naming decisions + camel_case = (cls.__name__ + .replace('NotificationSettings', 'Notificationsettings') + .replace('MergeRequest', 'Mergerequest') + .replace('AccessRequest', 'Accessrequest')) + return re.sub(r'(.)([A-Z])', r'\1_\2', camel_case).lower() @staticmethod def from_config(gitlab_id=None, config_files=None): |
