summaryrefslogtreecommitdiff
path: root/gitlab
diff options
context:
space:
mode:
authorGauvain Pocentek <gauvain@pocentek.net>2016-11-05 18:43:19 +0100
committerGauvain Pocentek <gauvain@pocentek.net>2016-11-05 18:43:19 +0100
commit81e1c13e05172d86b613f13ddacc896db5ffd250 (patch)
tree5e9a67c993992163c2428d30f2cd8c2c04ac55f7 /gitlab
parent92180e47f76eaf293728cb1d463f601925404123 (diff)
downloadgitlab-81e1c13e05172d86b613f13ddacc896db5ffd250.tar.gz
Make the manager objects create mor dynamic
For the gitlab.Gitlab object make the detection of "submanagers" more dynamic. This will avoid duplication of definitions. Update the sphinx extension to add these managers in the list of attributes.
Diffstat (limited to 'gitlab')
-rw-r--r--gitlab/__init__.py150
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):