summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/ext/docstrings.py18
-rw-r--r--docs/ext/gl_tmpl.j25
-rw-r--r--gitlab/__init__.py150
3 files changed, 46 insertions, 127 deletions
diff --git a/docs/ext/docstrings.py b/docs/ext/docstrings.py
index b380b64..5e5f82f 100644
--- a/docs/ext/docstrings.py
+++ b/docs/ext/docstrings.py
@@ -45,9 +45,17 @@ class GitlabDocstring(GoogleDocstring):
def __init__(self, *args, **kwargs):
super(GitlabDocstring, self).__init__(*args, **kwargs)
- if hasattr(self._obj, 'obj_cls') and self._obj.obj_cls is not None:
- self._parsed_lines = self._build_doc('manager_tmpl.j2',
- cls=self._obj.obj_cls)
+ if getattr(self._obj, '__name__', None) == 'Gitlab':
+ mgrs = []
+ gl = self._obj('http://dummy', private_token='dummy')
+ for item in vars(gl).items():
+ if hasattr(item[1], 'obj_cls'):
+ mgrs.append(item)
+ self._parsed_lines.extend(self._build_doc('gl_tmpl.j2',
+ mgrs=sorted(mgrs)))
+ elif hasattr(self._obj, 'obj_cls') and self._obj.obj_cls is not None:
+ self._parsed_lines.extend(self._build_doc('manager_tmpl.j2',
+ cls=self._obj.obj_cls))
elif hasattr(self._obj, 'canUpdate') and self._obj.canUpdate:
- self._parsed_lines = self._build_doc('object_tmpl.j2',
- obj=self._obj)
+ self._parsed_lines.extend(self._build_doc('object_tmpl.j2',
+ obj=self._obj))
diff --git a/docs/ext/gl_tmpl.j2 b/docs/ext/gl_tmpl.j2
new file mode 100644
index 0000000..dbccbcc
--- /dev/null
+++ b/docs/ext/gl_tmpl.j2
@@ -0,0 +1,5 @@
+{% for attr, mgr in mgrs %}
+.. attribute:: {{ attr }}
+
+ {{ mgr.__class__ | classref() }} manager for {{ mgr.obj_cls | classref() }} objects.
+{% endfor %}
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):