python-gitlab 5.5.0__tar.gz → 5.6.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/CHANGELOG.md +8 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/PKG-INFO +1 -1
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/merge_request_approvals.rst +77 -16
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/_version.py +1 -1
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/groups.py +2 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/merge_request_approvals.py +22 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/python_gitlab.egg-info/PKG-INFO +1 -1
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/python_gitlab.egg-info/SOURCES.txt +1 -0
- python_gitlab-5.6.0/tests/unit/objects/test_group_merge_request_approvals.py +253 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/AUTHORS +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/COPYING +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/MANIFEST.in +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/README.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/Makefile +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/__init__.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/_static/js/gitter.js +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/api/gitlab.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/api/gitlab.v4.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/api-levels.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/api-objects.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/api-usage-advanced.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/api-usage-graphql.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/api-usage.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/changelog.md +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/cli-examples.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/cli-objects.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/cli-usage.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/conf.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/ext/__init__.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/ext/docstrings.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/ext/manager_tmpl.j2 +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/faq.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/access_requests.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/appearance.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/applications.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/badges.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/boards.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/branches.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/bulk_imports.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/ci_lint.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/cluster_agents.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/clusters.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/commits.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/deploy_keys.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/deploy_tokens.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/deployments.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/discussions.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/draft_notes.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/emojis.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/environments.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/epics.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/events.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/features.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/geo_nodes.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/group_access_tokens.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/groups.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/invitations.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/issues.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/iterations.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/job_token_scope.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/keys.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/labels.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/merge_requests.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/merge_trains.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/messages.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/milestones.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/namespaces.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/notes.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/notifications.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/packages.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/pagesdomains.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/personal_access_tokens.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/pipelines_and_jobs.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/project_access_tokens.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/projects.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/protected_branches.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/protected_container_repositories.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/protected_environments.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/protected_packages.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/pull_mirror.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/releases.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/remote_mirrors.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/repositories.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/repository_tags.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/resource_groups.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/runners.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/search.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/secure_files.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/settings.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/sidekiq.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/snippets.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/statistics.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/status_checks.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/system_hooks.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/templates.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/todos.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/topics.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/users.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/variables.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/wikis.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/index.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/make.bat +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/release-notes.rst +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/__init__.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/__main__.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/_backends/__init__.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/_backends/graphql.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/_backends/protocol.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/_backends/requests_backend.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/base.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/cli.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/client.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/config.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/const.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/exceptions.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/mixins.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/py.typed +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/types.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/utils.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/__init__.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/cli.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/__init__.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/access_requests.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/appearance.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/applications.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/artifacts.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/audit_events.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/award_emojis.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/badges.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/boards.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/branches.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/broadcast_messages.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/bulk_imports.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/ci_lint.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/cluster_agents.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/clusters.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/commits.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/container_registry.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/custom_attributes.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/deploy_keys.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/deploy_tokens.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/deployments.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/discussions.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/draft_notes.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/environments.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/epics.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/events.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/export_import.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/features.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/files.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/geo_nodes.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/group_access_tokens.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/hooks.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/integrations.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/invitations.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/issues.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/iterations.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/job_token_scope.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/jobs.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/keys.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/labels.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/ldap.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/members.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/merge_requests.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/merge_trains.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/milestones.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/namespaces.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/notes.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/notification_settings.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/package_protection_rules.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/packages.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/pages.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/personal_access_tokens.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/pipelines.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/project_access_tokens.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/projects.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/push_rules.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/registry_protection_repository_rules.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/registry_protection_rules.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/releases.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/repositories.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/resource_groups.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/reviewers.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/runners.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/secure_files.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/service_accounts.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/settings.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/sidekiq.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/snippets.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/statistics.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/status_checks.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/tags.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/templates.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/todos.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/topics.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/triggers.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/users.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/variables.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/wikis.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/pyproject.toml +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/python_gitlab.egg-info/dependency_links.txt +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/python_gitlab.egg-info/entry_points.txt +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/python_gitlab.egg-info/requires.txt +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/python_gitlab.egg-info/top_level.txt +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/requirements-docker.txt +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/requirements-docs.txt +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/requirements-lint.txt +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/requirements-precommit.txt +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/requirements-test.txt +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/requirements.txt +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/setup.cfg +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/__init__.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/conftest.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/__init__.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/__init__.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_boards.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_branches.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_bulk_imports.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_current_user.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_deploy_keys.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_deploy_tokens.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_epics.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_gitlab.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_graphql.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_groups.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_import_export.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_issues.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_keys.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_lazy_objects.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_merge_requests.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_packages.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_project_job_token_scope.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_projects.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_push_rules.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_registry.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_releases.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_repository.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_services.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_snippets.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_statistics.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_topics.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_users.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_variables.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_wikis.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/cli/__init__.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/cli/conftest.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/cli/test_cli.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/cli/test_cli_artifacts.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/cli/test_cli_files.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/cli/test_cli_packages.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/cli/test_cli_projects.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/cli/test_cli_repository.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/cli/test_cli_resource_access_tokens.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/cli/test_cli_users.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/cli/test_cli_v4.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/cli/test_cli_variables.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/conftest.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/ee-test.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/fixtures/.env +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/fixtures/__init__.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/fixtures/avatar.png +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/fixtures/create_license.rb +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/fixtures/docker-compose.yml +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/fixtures/docker.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/fixtures/invalid_auth.cfg +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/fixtures/invalid_version.cfg +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/fixtures/set_token.rb +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/helpers.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/install/test_install.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/smoke/__init__.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/smoke/test_dists.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/__init__.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/_backends/__init__.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/_backends/test_requests_backend.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/base/test_rest_manager.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/base/test_rest_object.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/conftest.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/helpers.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/meta/__init__.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/meta/test_ensure_type_hints.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/meta/test_imports.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/meta/test_mro.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/mixins/__init__.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/mixins/test_meta_mixins.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/mixins/test_mixin_methods.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/mixins/test_object_mixins_attributes.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/__init__.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/conftest.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_appearance.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_applications.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_audit_events.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_badges.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_bridges.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_bulk_imports.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_ci_lint.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_cluster_agents.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_commits.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_deploy_tokens.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_deployments.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_draft_notes.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_environments.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_group_access_tokens.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_groups.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_hooks.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_invitations.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_issues.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_iterations.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_job_artifacts.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_job_token_scope.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_jobs.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_keys.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_members.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_merge_request_pipelines.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_merge_requests.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_merge_trains.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_package_protection_rules.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_packages.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_personal_access_tokens.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_pipeline_schedules.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_pipelines.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_project_access_tokens.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_project_import_export.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_project_merge_request_approvals.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_project_statistics.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_projects.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_pull_mirror.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_registry_protection_rules.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_registry_repositories.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_releases.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_remote_mirrors.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_repositories.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_resource_groups.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_resource_iteration_events.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_resource_label_events.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_resource_milestone_events.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_resource_state_events.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_runners.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_secure_files.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_services.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_snippets.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_statistics.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_status_checks.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_submodules.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_templates.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_todos.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_topics.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_users.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_variables.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/test_cli.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/test_config.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/test_exceptions.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/test_gitlab.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/test_gitlab_auth.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/test_gitlab_http_methods.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/test_graphql.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/test_retry.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/test_types.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/test_utils.py +0 -0
- {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tox.ini +0 -0
@@ -1,6 +1,14 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
3
|
|
4
|
+
## v5.6.0 (2025-01-28)
|
5
|
+
|
6
|
+
### Features
|
7
|
+
|
8
|
+
- **group**: Add support for group level MR approval rules
|
9
|
+
([`304bdd0`](https://github.com/python-gitlab/python-gitlab/commit/304bdd09cd5e6526576c5ec58cb3acd7e1a783cb))
|
10
|
+
|
11
|
+
|
4
12
|
## v5.5.0 (2025-01-28)
|
5
13
|
|
6
14
|
### Chores
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: python-gitlab
|
3
|
-
Version: 5.
|
3
|
+
Version: 5.6.0
|
4
4
|
Summary: The python wrapper for the GitLab REST and GraphQL APIs.
|
5
5
|
Author-email: Gauvain Pocentek <gauvain@pocentek.net>
|
6
6
|
Maintainer-email: John Villalovos <john@sodarock.com>, Max Wittig <max.wittig@siemens.com>, Nejc Habjan <nejc.habjan@siemens.com>, Roger Meier <r.meier@siemens.com>
|
@@ -2,8 +2,47 @@
|
|
2
2
|
Merge request approvals settings
|
3
3
|
################################
|
4
4
|
|
5
|
-
Merge request approvals can be defined at the project level or at the merge
|
6
|
-
|
5
|
+
Merge request approvals can be defined at the group level, or the project level or at the merge request level.
|
6
|
+
|
7
|
+
Group approval rules
|
8
|
+
====================
|
9
|
+
|
10
|
+
References
|
11
|
+
----------
|
12
|
+
|
13
|
+
* v4 API:
|
14
|
+
|
15
|
+
+ :class:`gitlab.v4.objects.GroupApprovalRule`
|
16
|
+
+ :class:`gitlab.v4.objects.GroupApprovalRuleManager`
|
17
|
+
|
18
|
+
* GitLab API: https://docs.gitlab.com/ee/api/merge_request_approvals.html
|
19
|
+
|
20
|
+
Examples
|
21
|
+
--------
|
22
|
+
|
23
|
+
List group-level MR approval rules::
|
24
|
+
|
25
|
+
group_approval_rules = group.approval_rules.list()
|
26
|
+
|
27
|
+
Change group-level MR approval rule::
|
28
|
+
|
29
|
+
g_approval_rule = group.approval_rules.get(123)
|
30
|
+
g_approval_rule.user_ids = [234]
|
31
|
+
g_approval_rule.save()
|
32
|
+
|
33
|
+
Create new group-level MR approval rule::
|
34
|
+
|
35
|
+
group.approval_rules.create({
|
36
|
+
"name": "my new approval rule",
|
37
|
+
"approvals_required": 2,
|
38
|
+
"rule_type": "regular",
|
39
|
+
"user_ids": [105],
|
40
|
+
"group_ids": [653, 654],
|
41
|
+
})
|
42
|
+
|
43
|
+
|
44
|
+
Project approval rules
|
45
|
+
======================
|
7
46
|
|
8
47
|
References
|
9
48
|
----------
|
@@ -15,15 +54,6 @@ References
|
|
15
54
|
+ :class:`gitlab.v4.objects.ProjectApprovalRule`
|
16
55
|
+ :class:`gitlab.v4.objects.ProjectApprovalRuleManager`
|
17
56
|
+ :attr:`gitlab.v4.objects.Project.approvals`
|
18
|
-
+ :class:`gitlab.v4.objects.ProjectMergeRequestApproval`
|
19
|
-
+ :class:`gitlab.v4.objects.ProjectMergeRequestApprovalManager`
|
20
|
-
+ :attr:`gitlab.v4.objects.ProjectMergeRequest.approvals`
|
21
|
-
+ :class:`gitlab.v4.objects.ProjectMergeRequestApprovalRule`
|
22
|
-
+ :class:`gitlab.v4.objects.ProjectMergeRequestApprovalRuleManager`
|
23
|
-
+ :attr:`gitlab.v4.objects.ProjectMergeRequest.approval_rules`
|
24
|
-
+ :class:`gitlab.v4.objects.ProjectMergeRequestApprovalState`
|
25
|
-
+ :class:`gitlab.v4.objects.ProjectMergeRequestApprovalStateManager`
|
26
|
-
+ :attr:`gitlab.v4.objects.ProjectMergeRequest.approval_state`
|
27
57
|
|
28
58
|
* GitLab API: https://docs.gitlab.com/ee/api/merge_request_approvals.html
|
29
59
|
|
@@ -43,7 +73,41 @@ Delete project-level MR approval rule::
|
|
43
73
|
|
44
74
|
p_approvalrule.delete()
|
45
75
|
|
46
|
-
Get project-level
|
76
|
+
Get project-level MR approvals settings::
|
77
|
+
|
78
|
+
p_mras = project.approvals.get()
|
79
|
+
|
80
|
+
Change project-level MR approvals settings::
|
81
|
+
|
82
|
+
p_mras.approvals_before_merge = 2
|
83
|
+
p_mras.save()
|
84
|
+
|
85
|
+
|
86
|
+
Merge request approval rules
|
87
|
+
============================
|
88
|
+
|
89
|
+
References
|
90
|
+
----------
|
91
|
+
|
92
|
+
* v4 API:
|
93
|
+
|
94
|
+
+ :class:`gitlab.v4.objects.ProjectMergeRequestApproval`
|
95
|
+
+ :class:`gitlab.v4.objects.ProjectMergeRequestApprovalManager`
|
96
|
+
+ :attr:`gitlab.v4.objects.ProjectMergeRequest.approvals`
|
97
|
+
+ :class:`gitlab.v4.objects.ProjectMergeRequestApprovalRule`
|
98
|
+
+ :class:`gitlab.v4.objects.ProjectMergeRequestApprovalRuleManager`
|
99
|
+
+ :attr:`gitlab.v4.objects.ProjectMergeRequest.approval_rules`
|
100
|
+
+ :class:`gitlab.v4.objects.ProjectMergeRequestApprovalState`
|
101
|
+
+ :class:`gitlab.v4.objects.ProjectMergeRequestApprovalStateManager`
|
102
|
+
+ :attr:`gitlab.v4.objects.ProjectMergeRequest.approval_state`
|
103
|
+
|
104
|
+
* GitLab API: https://docs.gitlab.com/ee/api/merge_request_approvals.html
|
105
|
+
|
106
|
+
Examples
|
107
|
+
--------
|
108
|
+
|
109
|
+
|
110
|
+
Get MR-level MR approvals settings::
|
47
111
|
|
48
112
|
p_mras = project.approvals.get()
|
49
113
|
|
@@ -53,10 +117,7 @@ Get MR-level approval state::
|
|
53
117
|
|
54
118
|
mr_approval_state = mr.approval_state.get()
|
55
119
|
|
56
|
-
Change
|
57
|
-
|
58
|
-
p_mras.approvals_before_merge = 2
|
59
|
-
p_mras.save()
|
120
|
+
Change MR-level MR approvals settings::
|
60
121
|
|
61
122
|
mr.approvals.set_approvers(approvals_required=1)
|
62
123
|
# or
|
@@ -39,6 +39,7 @@ from .members import ( # noqa: F401
|
|
39
39
|
GroupMemberAllManager,
|
40
40
|
GroupMemberManager,
|
41
41
|
)
|
42
|
+
from .merge_request_approvals import GroupApprovalRuleManager
|
42
43
|
from .merge_requests import GroupMergeRequestManager # noqa: F401
|
43
44
|
from .milestones import GroupMilestoneManager # noqa: F401
|
44
45
|
from .notification_settings import GroupNotificationSettingsManager # noqa: F401
|
@@ -70,6 +71,7 @@ class Group(SaveMixin, ObjectDeleteMixin, RESTObject):
|
|
70
71
|
|
71
72
|
access_tokens: GroupAccessTokenManager
|
72
73
|
accessrequests: GroupAccessRequestManager
|
74
|
+
approval_rules: GroupApprovalRuleManager
|
73
75
|
audit_events: GroupAuditEventManager
|
74
76
|
badges: GroupBadgeManager
|
75
77
|
billable_members: GroupBillableMemberManager
|
@@ -16,6 +16,8 @@ from gitlab.mixins import (
|
|
16
16
|
from gitlab.types import RequiredOptional
|
17
17
|
|
18
18
|
__all__ = [
|
19
|
+
"GroupApprovalRule",
|
20
|
+
"GroupApprovalRuleManager",
|
19
21
|
"ProjectApproval",
|
20
22
|
"ProjectApprovalManager",
|
21
23
|
"ProjectApprovalRule",
|
@@ -29,6 +31,26 @@ __all__ = [
|
|
29
31
|
]
|
30
32
|
|
31
33
|
|
34
|
+
class GroupApprovalRule(SaveMixin, RESTObject):
|
35
|
+
_id_attr = "id"
|
36
|
+
_repr_attr = "name"
|
37
|
+
|
38
|
+
|
39
|
+
class GroupApprovalRuleManager(RetrieveMixin, CreateMixin, UpdateMixin, RESTManager):
|
40
|
+
_path = "/groups/{group_id}/approval_rules"
|
41
|
+
_obj_cls = GroupApprovalRule
|
42
|
+
_from_parent_attrs = {"group_id": "id"}
|
43
|
+
_create_attrs = RequiredOptional(
|
44
|
+
required=("name", "approvals_required"),
|
45
|
+
optional=("user_ids", "group_ids", "rule_type"),
|
46
|
+
)
|
47
|
+
|
48
|
+
def get(
|
49
|
+
self, id: Union[str, int], lazy: bool = False, **kwargs: Any
|
50
|
+
) -> GroupApprovalRule:
|
51
|
+
return cast(GroupApprovalRule, super().get(id=id, lazy=lazy, **kwargs))
|
52
|
+
|
53
|
+
|
32
54
|
class ProjectApproval(SaveMixin, RESTObject):
|
33
55
|
_id_attr = None
|
34
56
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: python-gitlab
|
3
|
-
Version: 5.
|
3
|
+
Version: 5.6.0
|
4
4
|
Summary: The python wrapper for the GitLab REST and GraphQL APIs.
|
5
5
|
Author-email: Gauvain Pocentek <gauvain@pocentek.net>
|
6
6
|
Maintainer-email: John Villalovos <john@sodarock.com>, Max Wittig <max.wittig@siemens.com>, Nejc Habjan <nejc.habjan@siemens.com>, Roger Meier <r.meier@siemens.com>
|
@@ -308,6 +308,7 @@ tests/unit/objects/test_deployments.py
|
|
308
308
|
tests/unit/objects/test_draft_notes.py
|
309
309
|
tests/unit/objects/test_environments.py
|
310
310
|
tests/unit/objects/test_group_access_tokens.py
|
311
|
+
tests/unit/objects/test_group_merge_request_approvals.py
|
311
312
|
tests/unit/objects/test_groups.py
|
312
313
|
tests/unit/objects/test_hooks.py
|
313
314
|
tests/unit/objects/test_invitations.py
|
@@ -0,0 +1,253 @@
|
|
1
|
+
"""
|
2
|
+
Gitlab API: https://docs.gitlab.com/ee/api/merge_request_approvals.html
|
3
|
+
"""
|
4
|
+
|
5
|
+
import copy
|
6
|
+
import json
|
7
|
+
|
8
|
+
import pytest
|
9
|
+
import responses
|
10
|
+
|
11
|
+
approval_rule_id = 7
|
12
|
+
approval_rule_name = "security"
|
13
|
+
approvals_required = 3
|
14
|
+
user_ids = [5, 50]
|
15
|
+
group_ids = [5]
|
16
|
+
|
17
|
+
new_approval_rule_name = "new approval rule"
|
18
|
+
new_approval_rule_user_ids = user_ids
|
19
|
+
new_approval_rule_approvals_required = 2
|
20
|
+
|
21
|
+
updated_approval_rule_user_ids = [5]
|
22
|
+
updated_approval_rule_approvals_required = 1
|
23
|
+
|
24
|
+
|
25
|
+
@pytest.fixture
|
26
|
+
def resp_group_approval_rules():
|
27
|
+
content = [
|
28
|
+
{
|
29
|
+
"id": approval_rule_id,
|
30
|
+
"name": approval_rule_name,
|
31
|
+
"rule_type": "regular",
|
32
|
+
"report_type": None,
|
33
|
+
"eligible_approvers": [
|
34
|
+
{
|
35
|
+
"id": user_ids[0],
|
36
|
+
"name": "John Doe",
|
37
|
+
"username": "jdoe",
|
38
|
+
"state": "active",
|
39
|
+
"avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
|
40
|
+
"web_url": "http://localhost/jdoe",
|
41
|
+
},
|
42
|
+
{
|
43
|
+
"id": user_ids[1],
|
44
|
+
"name": "Group Member 1",
|
45
|
+
"username": "group_member_1",
|
46
|
+
"state": "active",
|
47
|
+
"avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
|
48
|
+
"web_url": "http://localhost/group_member_1",
|
49
|
+
},
|
50
|
+
],
|
51
|
+
"approvals_required": approvals_required,
|
52
|
+
"users": [
|
53
|
+
{
|
54
|
+
"id": 5,
|
55
|
+
"name": "John Doe",
|
56
|
+
"username": "jdoe",
|
57
|
+
"state": "active",
|
58
|
+
"avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
|
59
|
+
"web_url": "http://localhost/jdoe",
|
60
|
+
}
|
61
|
+
],
|
62
|
+
"groups": [
|
63
|
+
{
|
64
|
+
"id": 5,
|
65
|
+
"name": "group1",
|
66
|
+
"path": "group1",
|
67
|
+
"description": "",
|
68
|
+
"visibility": "public",
|
69
|
+
"lfs_enabled": False,
|
70
|
+
"avatar_url": None,
|
71
|
+
"web_url": "http://localhost/groups/group1",
|
72
|
+
"request_access_enabled": False,
|
73
|
+
"full_name": "group1",
|
74
|
+
"full_path": "group1",
|
75
|
+
"parent_id": None,
|
76
|
+
"ldap_cn": None,
|
77
|
+
"ldap_access": None,
|
78
|
+
}
|
79
|
+
],
|
80
|
+
"applies_to_all_protected_branches": False,
|
81
|
+
"protected_branches": [
|
82
|
+
{
|
83
|
+
"id": 1,
|
84
|
+
"name": "main",
|
85
|
+
"push_access_levels": [
|
86
|
+
{
|
87
|
+
"access_level": 30,
|
88
|
+
"access_level_description": "Developers + Maintainers",
|
89
|
+
}
|
90
|
+
],
|
91
|
+
"merge_access_levels": [
|
92
|
+
{
|
93
|
+
"access_level": 30,
|
94
|
+
"access_level_description": "Developers + Maintainers",
|
95
|
+
}
|
96
|
+
],
|
97
|
+
"unprotect_access_levels": [
|
98
|
+
{"access_level": 40, "access_level_description": "Maintainers"}
|
99
|
+
],
|
100
|
+
"code_owner_approval_required": "false",
|
101
|
+
}
|
102
|
+
],
|
103
|
+
"contains_hidden_groups": False,
|
104
|
+
}
|
105
|
+
]
|
106
|
+
|
107
|
+
new_content = dict(content[0])
|
108
|
+
new_content["id"] = approval_rule_id + 1 # Assign a new ID for the new rule
|
109
|
+
new_content["name"] = new_approval_rule_name
|
110
|
+
new_content["approvals_required"] = new_approval_rule_approvals_required
|
111
|
+
|
112
|
+
updated_mr_ars_content = copy.deepcopy(content[0])
|
113
|
+
updated_mr_ars_content["name"] = new_approval_rule_name
|
114
|
+
updated_mr_ars_content["approvals_required"] = (
|
115
|
+
updated_approval_rule_approvals_required
|
116
|
+
)
|
117
|
+
|
118
|
+
list_request_options = {
|
119
|
+
"include_newly_created_rule": False,
|
120
|
+
"updated_first_rule": False,
|
121
|
+
}
|
122
|
+
|
123
|
+
def list_request_callback(request):
|
124
|
+
if request.method == "GET":
|
125
|
+
if list_request_options["include_newly_created_rule"]:
|
126
|
+
# Include newly created rule in the list response
|
127
|
+
return (
|
128
|
+
200,
|
129
|
+
{"Content-Type": "application/json"},
|
130
|
+
json.dumps(content + [new_content]),
|
131
|
+
)
|
132
|
+
elif list_request_options["updated_first_rule"]:
|
133
|
+
# Include updated first rule in the list response
|
134
|
+
return (
|
135
|
+
200,
|
136
|
+
{"Content-Type": "application/json"},
|
137
|
+
json.dumps([updated_mr_ars_content]),
|
138
|
+
)
|
139
|
+
else:
|
140
|
+
return (200, {"Content-Type": "application/json"}, json.dumps(content))
|
141
|
+
return (404, {}, "")
|
142
|
+
|
143
|
+
with responses.RequestsMock(assert_all_requests_are_fired=False) as rsps:
|
144
|
+
# Mock the API responses for listing all rules for group with ID 1
|
145
|
+
rsps.add(
|
146
|
+
method=responses.GET,
|
147
|
+
url="http://localhost/api/v4/groups/1/approval_rules",
|
148
|
+
json=content,
|
149
|
+
content_type="application/json",
|
150
|
+
status=200,
|
151
|
+
)
|
152
|
+
# Mock the API responses for listing all rules for group with ID 1
|
153
|
+
# Use a callback to dynamically determine the response based on the request
|
154
|
+
rsps.add_callback(
|
155
|
+
method=responses.GET,
|
156
|
+
url="http://localhost/api/v4/groups/1/approval_rules",
|
157
|
+
callback=list_request_callback,
|
158
|
+
content_type="application/json",
|
159
|
+
)
|
160
|
+
# Mock the API responses for getting a specific rule for group with ID 1 and approvalrule with ID 7
|
161
|
+
rsps.add(
|
162
|
+
method=responses.GET,
|
163
|
+
url="http://localhost/api/v4/groups/1/approval_rules/7",
|
164
|
+
json=content[0],
|
165
|
+
content_type="application/json",
|
166
|
+
status=200,
|
167
|
+
)
|
168
|
+
# Mock the API responses for creating a new rule for group with ID 1
|
169
|
+
rsps.add(
|
170
|
+
method=responses.POST,
|
171
|
+
url="http://localhost/api/v4/groups/1/approval_rules",
|
172
|
+
json=new_content,
|
173
|
+
content_type="application/json",
|
174
|
+
status=200,
|
175
|
+
)
|
176
|
+
# Mock the API responses for updating a specific rule for group with ID 1 and approval rule with ID 7
|
177
|
+
rsps.add(
|
178
|
+
method=responses.PUT,
|
179
|
+
url="http://localhost/api/v4/groups/1/approval_rules/7",
|
180
|
+
json=updated_mr_ars_content,
|
181
|
+
content_type="application/json",
|
182
|
+
status=200,
|
183
|
+
)
|
184
|
+
|
185
|
+
yield rsps, list_request_options
|
186
|
+
|
187
|
+
|
188
|
+
def test_list_group_mr_approval_rules(group, resp_group_approval_rules):
|
189
|
+
approval_rules = group.approval_rules.list()
|
190
|
+
assert len(approval_rules) == 1
|
191
|
+
assert approval_rules[0].name == approval_rule_name
|
192
|
+
assert approval_rules[0].id == approval_rule_id
|
193
|
+
assert (
|
194
|
+
repr(approval_rules[0])
|
195
|
+
== f"<GroupApprovalRule id:{approval_rule_id} name:{approval_rule_name}>"
|
196
|
+
)
|
197
|
+
|
198
|
+
|
199
|
+
def test_save_group_mr_approval_rule(group, resp_group_approval_rules):
|
200
|
+
_, list_request_options = resp_group_approval_rules
|
201
|
+
|
202
|
+
# Before: existing approval rule
|
203
|
+
approval_rules = group.approval_rules.list()
|
204
|
+
assert len(approval_rules) == 1
|
205
|
+
assert approval_rules[0].name == approval_rule_name
|
206
|
+
|
207
|
+
rule_to_be_changed = group.approval_rules.get(approval_rules[0].id)
|
208
|
+
rule_to_be_changed.name = new_approval_rule_name
|
209
|
+
rule_to_be_changed.approvals_required = new_approval_rule_approvals_required
|
210
|
+
rule_to_be_changed.save()
|
211
|
+
|
212
|
+
# Set the flag to return updated rule in the list response
|
213
|
+
list_request_options["updated_first_rule"] = True
|
214
|
+
|
215
|
+
# After: changed approval rule
|
216
|
+
approval_rules = group.approval_rules.list()
|
217
|
+
assert len(approval_rules) == 1
|
218
|
+
assert approval_rules[0].name == new_approval_rule_name
|
219
|
+
assert (
|
220
|
+
repr(approval_rules[0])
|
221
|
+
== f"<GroupApprovalRule id:{approval_rule_id} name:{new_approval_rule_name}>"
|
222
|
+
)
|
223
|
+
|
224
|
+
|
225
|
+
def test_create_group_mr_approval_rule(group, resp_group_approval_rules):
|
226
|
+
_, list_request_options = resp_group_approval_rules
|
227
|
+
|
228
|
+
# Before: existing approval rules
|
229
|
+
approval_rules = group.approval_rules.list()
|
230
|
+
assert len(approval_rules) == 1
|
231
|
+
|
232
|
+
new_approval_rule_data = {
|
233
|
+
"name": new_approval_rule_name,
|
234
|
+
"approvals_required": new_approval_rule_approvals_required,
|
235
|
+
"rule_type": "regular",
|
236
|
+
"user_ids": new_approval_rule_user_ids,
|
237
|
+
"group_ids": group_ids,
|
238
|
+
}
|
239
|
+
|
240
|
+
response = group.approval_rules.create(new_approval_rule_data)
|
241
|
+
assert response.approvals_required == new_approval_rule_approvals_required
|
242
|
+
assert len(response.eligible_approvers) == len(new_approval_rule_user_ids)
|
243
|
+
assert response.eligible_approvers[0]["id"] == new_approval_rule_user_ids[0]
|
244
|
+
assert response.name == new_approval_rule_name
|
245
|
+
|
246
|
+
# Set the flag to include the new rule in the list response
|
247
|
+
list_request_options["include_newly_created_rule"] = True
|
248
|
+
|
249
|
+
# After: list approval rules
|
250
|
+
approval_rules = group.approval_rules.list()
|
251
|
+
assert len(approval_rules) == 2
|
252
|
+
assert approval_rules[1].name == new_approval_rule_name
|
253
|
+
assert approval_rules[1].approvals_required == new_approval_rule_approvals_required
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/protected_container_repositories.rst
RENAMED
File without changes
|
File without changes
|