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.
Files changed (359) hide show
  1. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/CHANGELOG.md +8 -0
  2. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/PKG-INFO +1 -1
  3. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/merge_request_approvals.rst +77 -16
  4. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/_version.py +1 -1
  5. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/groups.py +2 -0
  6. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/merge_request_approvals.py +22 -0
  7. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/python_gitlab.egg-info/PKG-INFO +1 -1
  8. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/python_gitlab.egg-info/SOURCES.txt +1 -0
  9. python_gitlab-5.6.0/tests/unit/objects/test_group_merge_request_approvals.py +253 -0
  10. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/AUTHORS +0 -0
  11. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/COPYING +0 -0
  12. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/MANIFEST.in +0 -0
  13. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/README.rst +0 -0
  14. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/Makefile +0 -0
  15. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/__init__.py +0 -0
  16. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/_static/js/gitter.js +0 -0
  17. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/api/gitlab.rst +0 -0
  18. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/api/gitlab.v4.rst +0 -0
  19. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/api-levels.rst +0 -0
  20. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/api-objects.rst +0 -0
  21. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/api-usage-advanced.rst +0 -0
  22. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/api-usage-graphql.rst +0 -0
  23. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/api-usage.rst +0 -0
  24. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/changelog.md +0 -0
  25. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/cli-examples.rst +0 -0
  26. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/cli-objects.rst +0 -0
  27. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/cli-usage.rst +0 -0
  28. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/conf.py +0 -0
  29. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/ext/__init__.py +0 -0
  30. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/ext/docstrings.py +0 -0
  31. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/ext/manager_tmpl.j2 +0 -0
  32. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/faq.rst +0 -0
  33. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/access_requests.rst +0 -0
  34. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/appearance.rst +0 -0
  35. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/applications.rst +0 -0
  36. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/badges.rst +0 -0
  37. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/boards.rst +0 -0
  38. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/branches.rst +0 -0
  39. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/bulk_imports.rst +0 -0
  40. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/ci_lint.rst +0 -0
  41. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/cluster_agents.rst +0 -0
  42. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/clusters.rst +0 -0
  43. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/commits.rst +0 -0
  44. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/deploy_keys.rst +0 -0
  45. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/deploy_tokens.rst +0 -0
  46. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/deployments.rst +0 -0
  47. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/discussions.rst +0 -0
  48. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/draft_notes.rst +0 -0
  49. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/emojis.rst +0 -0
  50. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/environments.rst +0 -0
  51. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/epics.rst +0 -0
  52. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/events.rst +0 -0
  53. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/features.rst +0 -0
  54. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/geo_nodes.rst +0 -0
  55. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/group_access_tokens.rst +0 -0
  56. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/groups.rst +0 -0
  57. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/invitations.rst +0 -0
  58. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/issues.rst +0 -0
  59. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/iterations.rst +0 -0
  60. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/job_token_scope.rst +0 -0
  61. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/keys.rst +0 -0
  62. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/labels.rst +0 -0
  63. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/merge_requests.rst +0 -0
  64. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/merge_trains.rst +0 -0
  65. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/messages.rst +0 -0
  66. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/milestones.rst +0 -0
  67. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/namespaces.rst +0 -0
  68. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/notes.rst +0 -0
  69. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/notifications.rst +0 -0
  70. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/packages.rst +0 -0
  71. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/pagesdomains.rst +0 -0
  72. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/personal_access_tokens.rst +0 -0
  73. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/pipelines_and_jobs.rst +0 -0
  74. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/project_access_tokens.rst +0 -0
  75. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/projects.rst +0 -0
  76. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/protected_branches.rst +0 -0
  77. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/protected_container_repositories.rst +0 -0
  78. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/protected_environments.rst +0 -0
  79. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/protected_packages.rst +0 -0
  80. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/pull_mirror.rst +0 -0
  81. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/releases.rst +0 -0
  82. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/remote_mirrors.rst +0 -0
  83. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/repositories.rst +0 -0
  84. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/repository_tags.rst +0 -0
  85. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/resource_groups.rst +0 -0
  86. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/runners.rst +0 -0
  87. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/search.rst +0 -0
  88. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/secure_files.rst +0 -0
  89. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/settings.rst +0 -0
  90. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/sidekiq.rst +0 -0
  91. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/snippets.rst +0 -0
  92. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/statistics.rst +0 -0
  93. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/status_checks.rst +0 -0
  94. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/system_hooks.rst +0 -0
  95. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/templates.rst +0 -0
  96. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/todos.rst +0 -0
  97. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/topics.rst +0 -0
  98. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/users.rst +0 -0
  99. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/variables.rst +0 -0
  100. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/gl_objects/wikis.rst +0 -0
  101. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/index.rst +0 -0
  102. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/make.bat +0 -0
  103. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/docs/release-notes.rst +0 -0
  104. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/__init__.py +0 -0
  105. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/__main__.py +0 -0
  106. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/_backends/__init__.py +0 -0
  107. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/_backends/graphql.py +0 -0
  108. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/_backends/protocol.py +0 -0
  109. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/_backends/requests_backend.py +0 -0
  110. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/base.py +0 -0
  111. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/cli.py +0 -0
  112. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/client.py +0 -0
  113. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/config.py +0 -0
  114. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/const.py +0 -0
  115. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/exceptions.py +0 -0
  116. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/mixins.py +0 -0
  117. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/py.typed +0 -0
  118. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/types.py +0 -0
  119. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/utils.py +0 -0
  120. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/__init__.py +0 -0
  121. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/cli.py +0 -0
  122. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/__init__.py +0 -0
  123. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/access_requests.py +0 -0
  124. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/appearance.py +0 -0
  125. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/applications.py +0 -0
  126. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/artifacts.py +0 -0
  127. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/audit_events.py +0 -0
  128. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/award_emojis.py +0 -0
  129. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/badges.py +0 -0
  130. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/boards.py +0 -0
  131. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/branches.py +0 -0
  132. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/broadcast_messages.py +0 -0
  133. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/bulk_imports.py +0 -0
  134. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/ci_lint.py +0 -0
  135. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/cluster_agents.py +0 -0
  136. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/clusters.py +0 -0
  137. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/commits.py +0 -0
  138. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/container_registry.py +0 -0
  139. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/custom_attributes.py +0 -0
  140. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/deploy_keys.py +0 -0
  141. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/deploy_tokens.py +0 -0
  142. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/deployments.py +0 -0
  143. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/discussions.py +0 -0
  144. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/draft_notes.py +0 -0
  145. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/environments.py +0 -0
  146. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/epics.py +0 -0
  147. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/events.py +0 -0
  148. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/export_import.py +0 -0
  149. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/features.py +0 -0
  150. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/files.py +0 -0
  151. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/geo_nodes.py +0 -0
  152. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/group_access_tokens.py +0 -0
  153. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/hooks.py +0 -0
  154. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/integrations.py +0 -0
  155. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/invitations.py +0 -0
  156. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/issues.py +0 -0
  157. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/iterations.py +0 -0
  158. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/job_token_scope.py +0 -0
  159. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/jobs.py +0 -0
  160. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/keys.py +0 -0
  161. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/labels.py +0 -0
  162. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/ldap.py +0 -0
  163. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/members.py +0 -0
  164. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/merge_requests.py +0 -0
  165. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/merge_trains.py +0 -0
  166. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/milestones.py +0 -0
  167. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/namespaces.py +0 -0
  168. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/notes.py +0 -0
  169. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/notification_settings.py +0 -0
  170. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/package_protection_rules.py +0 -0
  171. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/packages.py +0 -0
  172. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/pages.py +0 -0
  173. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/personal_access_tokens.py +0 -0
  174. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/pipelines.py +0 -0
  175. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/project_access_tokens.py +0 -0
  176. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/projects.py +0 -0
  177. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/push_rules.py +0 -0
  178. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/registry_protection_repository_rules.py +0 -0
  179. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/registry_protection_rules.py +0 -0
  180. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/releases.py +0 -0
  181. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/repositories.py +0 -0
  182. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/resource_groups.py +0 -0
  183. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/reviewers.py +0 -0
  184. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/runners.py +0 -0
  185. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/secure_files.py +0 -0
  186. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/service_accounts.py +0 -0
  187. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/settings.py +0 -0
  188. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/sidekiq.py +0 -0
  189. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/snippets.py +0 -0
  190. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/statistics.py +0 -0
  191. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/status_checks.py +0 -0
  192. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/tags.py +0 -0
  193. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/templates.py +0 -0
  194. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/todos.py +0 -0
  195. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/topics.py +0 -0
  196. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/triggers.py +0 -0
  197. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/users.py +0 -0
  198. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/variables.py +0 -0
  199. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/gitlab/v4/objects/wikis.py +0 -0
  200. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/pyproject.toml +0 -0
  201. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/python_gitlab.egg-info/dependency_links.txt +0 -0
  202. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/python_gitlab.egg-info/entry_points.txt +0 -0
  203. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/python_gitlab.egg-info/requires.txt +0 -0
  204. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/python_gitlab.egg-info/top_level.txt +0 -0
  205. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/requirements-docker.txt +0 -0
  206. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/requirements-docs.txt +0 -0
  207. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/requirements-lint.txt +0 -0
  208. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/requirements-precommit.txt +0 -0
  209. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/requirements-test.txt +0 -0
  210. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/requirements.txt +0 -0
  211. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/setup.cfg +0 -0
  212. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/__init__.py +0 -0
  213. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/conftest.py +0 -0
  214. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/__init__.py +0 -0
  215. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/__init__.py +0 -0
  216. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_boards.py +0 -0
  217. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_branches.py +0 -0
  218. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_bulk_imports.py +0 -0
  219. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_current_user.py +0 -0
  220. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_deploy_keys.py +0 -0
  221. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_deploy_tokens.py +0 -0
  222. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_epics.py +0 -0
  223. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_gitlab.py +0 -0
  224. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_graphql.py +0 -0
  225. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_groups.py +0 -0
  226. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_import_export.py +0 -0
  227. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_issues.py +0 -0
  228. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_keys.py +0 -0
  229. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_lazy_objects.py +0 -0
  230. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_merge_requests.py +0 -0
  231. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_packages.py +0 -0
  232. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_project_job_token_scope.py +0 -0
  233. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_projects.py +0 -0
  234. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_push_rules.py +0 -0
  235. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_registry.py +0 -0
  236. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_releases.py +0 -0
  237. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_repository.py +0 -0
  238. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_services.py +0 -0
  239. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_snippets.py +0 -0
  240. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_statistics.py +0 -0
  241. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_topics.py +0 -0
  242. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_users.py +0 -0
  243. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_variables.py +0 -0
  244. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/api/test_wikis.py +0 -0
  245. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/cli/__init__.py +0 -0
  246. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/cli/conftest.py +0 -0
  247. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/cli/test_cli.py +0 -0
  248. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/cli/test_cli_artifacts.py +0 -0
  249. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/cli/test_cli_files.py +0 -0
  250. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/cli/test_cli_packages.py +0 -0
  251. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/cli/test_cli_projects.py +0 -0
  252. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/cli/test_cli_repository.py +0 -0
  253. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/cli/test_cli_resource_access_tokens.py +0 -0
  254. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/cli/test_cli_users.py +0 -0
  255. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/cli/test_cli_v4.py +0 -0
  256. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/cli/test_cli_variables.py +0 -0
  257. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/conftest.py +0 -0
  258. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/ee-test.py +0 -0
  259. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/fixtures/.env +0 -0
  260. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/fixtures/__init__.py +0 -0
  261. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/fixtures/avatar.png +0 -0
  262. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/fixtures/create_license.rb +0 -0
  263. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/fixtures/docker-compose.yml +0 -0
  264. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/fixtures/docker.py +0 -0
  265. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/fixtures/invalid_auth.cfg +0 -0
  266. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/fixtures/invalid_version.cfg +0 -0
  267. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/fixtures/set_token.rb +0 -0
  268. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/functional/helpers.py +0 -0
  269. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/install/test_install.py +0 -0
  270. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/smoke/__init__.py +0 -0
  271. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/smoke/test_dists.py +0 -0
  272. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/__init__.py +0 -0
  273. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/_backends/__init__.py +0 -0
  274. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/_backends/test_requests_backend.py +0 -0
  275. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/base/test_rest_manager.py +0 -0
  276. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/base/test_rest_object.py +0 -0
  277. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/conftest.py +0 -0
  278. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/helpers.py +0 -0
  279. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/meta/__init__.py +0 -0
  280. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/meta/test_ensure_type_hints.py +0 -0
  281. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/meta/test_imports.py +0 -0
  282. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/meta/test_mro.py +0 -0
  283. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/mixins/__init__.py +0 -0
  284. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/mixins/test_meta_mixins.py +0 -0
  285. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/mixins/test_mixin_methods.py +0 -0
  286. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/mixins/test_object_mixins_attributes.py +0 -0
  287. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/__init__.py +0 -0
  288. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/conftest.py +0 -0
  289. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_appearance.py +0 -0
  290. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_applications.py +0 -0
  291. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_audit_events.py +0 -0
  292. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_badges.py +0 -0
  293. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_bridges.py +0 -0
  294. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_bulk_imports.py +0 -0
  295. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_ci_lint.py +0 -0
  296. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_cluster_agents.py +0 -0
  297. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_commits.py +0 -0
  298. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_deploy_tokens.py +0 -0
  299. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_deployments.py +0 -0
  300. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_draft_notes.py +0 -0
  301. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_environments.py +0 -0
  302. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_group_access_tokens.py +0 -0
  303. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_groups.py +0 -0
  304. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_hooks.py +0 -0
  305. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_invitations.py +0 -0
  306. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_issues.py +0 -0
  307. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_iterations.py +0 -0
  308. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_job_artifacts.py +0 -0
  309. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_job_token_scope.py +0 -0
  310. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_jobs.py +0 -0
  311. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_keys.py +0 -0
  312. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_members.py +0 -0
  313. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_merge_request_pipelines.py +0 -0
  314. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_merge_requests.py +0 -0
  315. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_merge_trains.py +0 -0
  316. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_package_protection_rules.py +0 -0
  317. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_packages.py +0 -0
  318. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_personal_access_tokens.py +0 -0
  319. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_pipeline_schedules.py +0 -0
  320. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_pipelines.py +0 -0
  321. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_project_access_tokens.py +0 -0
  322. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_project_import_export.py +0 -0
  323. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_project_merge_request_approvals.py +0 -0
  324. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_project_statistics.py +0 -0
  325. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_projects.py +0 -0
  326. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_pull_mirror.py +0 -0
  327. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_registry_protection_rules.py +0 -0
  328. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_registry_repositories.py +0 -0
  329. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_releases.py +0 -0
  330. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_remote_mirrors.py +0 -0
  331. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_repositories.py +0 -0
  332. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_resource_groups.py +0 -0
  333. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_resource_iteration_events.py +0 -0
  334. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_resource_label_events.py +0 -0
  335. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_resource_milestone_events.py +0 -0
  336. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_resource_state_events.py +0 -0
  337. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_runners.py +0 -0
  338. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_secure_files.py +0 -0
  339. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_services.py +0 -0
  340. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_snippets.py +0 -0
  341. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_statistics.py +0 -0
  342. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_status_checks.py +0 -0
  343. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_submodules.py +0 -0
  344. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_templates.py +0 -0
  345. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_todos.py +0 -0
  346. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_topics.py +0 -0
  347. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_users.py +0 -0
  348. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/objects/test_variables.py +0 -0
  349. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/test_cli.py +0 -0
  350. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/test_config.py +0 -0
  351. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/test_exceptions.py +0 -0
  352. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/test_gitlab.py +0 -0
  353. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/test_gitlab_auth.py +0 -0
  354. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/test_gitlab_http_methods.py +0 -0
  355. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/test_graphql.py +0 -0
  356. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/test_retry.py +0 -0
  357. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/test_types.py +0 -0
  358. {python_gitlab-5.5.0 → python_gitlab-5.6.0}/tests/unit/test_utils.py +0 -0
  359. {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.5.0
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
- request level.
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 or MR-level MR approvals settings::
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 project-level or MR-level MR approvals settings::
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
@@ -3,4 +3,4 @@ __copyright__ = "Copyright 2013-2019 Gauvain Pocentek, 2019-2023 python-gitlab t
3
3
  __email__ = "gauvainpocentek@gmail.com"
4
4
  __license__ = "LGPL3"
5
5
  __title__ = "python-gitlab"
6
- __version__ = "5.5.0"
6
+ __version__ = "5.6.0"
@@ -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.5.0
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