python-gitlab 4.5.0__tar.gz → 4.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 (337) hide show
  1. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/CHANGELOG.md +155 -0
  2. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/PKG-INFO +3 -3
  3. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/groups.rst +21 -0
  4. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/iterations.rst +10 -0
  5. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/_version.py +1 -1
  6. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/cli.py +20 -4
  7. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/client.py +2 -2
  8. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/mixins.py +22 -14
  9. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/cli.py +23 -11
  10. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/__init__.py +1 -0
  11. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/artifacts.py +5 -2
  12. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/ci_lint.py +4 -4
  13. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/commits.py +6 -6
  14. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/container_registry.py +2 -2
  15. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/deploy_keys.py +3 -1
  16. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/deployments.py +2 -2
  17. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/environments.py +1 -1
  18. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/files.py +15 -7
  19. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/geo_nodes.py +4 -4
  20. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/groups.py +13 -7
  21. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/integrations.py +3 -1
  22. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/issues.py +6 -4
  23. python_gitlab-4.6.0/gitlab/v4/objects/iterations.py +53 -0
  24. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/jobs.py +11 -14
  25. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/merge_request_approvals.py +8 -3
  26. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/merge_requests.py +13 -12
  27. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/milestones.py +4 -4
  28. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/namespaces.py +3 -1
  29. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/packages.py +4 -4
  30. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/pipelines.py +4 -4
  31. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/projects.py +21 -18
  32. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/repositories.py +13 -9
  33. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/runners.py +2 -2
  34. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/secure_files.py +1 -1
  35. python_gitlab-4.6.0/gitlab/v4/objects/service_accounts.py +18 -0
  36. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/sidekiq.py +4 -4
  37. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/snippets.py +3 -3
  38. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/todos.py +2 -2
  39. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/topics.py +2 -2
  40. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/users.py +10 -10
  41. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/pyproject.toml +2 -2
  42. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/python_gitlab.egg-info/PKG-INFO +3 -3
  43. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/python_gitlab.egg-info/SOURCES.txt +1 -0
  44. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/python_gitlab.egg-info/requires.txt +2 -2
  45. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/requirements-lint.txt +5 -5
  46. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/requirements-test.txt +2 -2
  47. python_gitlab-4.6.0/requirements.txt +2 -0
  48. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/functional/api/test_groups.py +9 -0
  49. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/functional/cli/test_cli.py +0 -6
  50. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/functional/fixtures/.env +1 -1
  51. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/test_groups.py +26 -0
  52. python_gitlab-4.5.0/gitlab/v4/objects/iterations.py +0 -26
  53. python_gitlab-4.5.0/requirements.txt +0 -3
  54. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/AUTHORS +0 -0
  55. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/COPYING +0 -0
  56. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/MANIFEST.in +0 -0
  57. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/README.rst +0 -0
  58. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/Makefile +0 -0
  59. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/__init__.py +0 -0
  60. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/_static/js/gitter.js +0 -0
  61. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/api/gitlab.rst +0 -0
  62. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/api/gitlab.v4.rst +0 -0
  63. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/api-levels.rst +0 -0
  64. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/api-objects.rst +0 -0
  65. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/api-usage-advanced.rst +0 -0
  66. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/api-usage.rst +0 -0
  67. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/changelog.md +0 -0
  68. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/cli-examples.rst +0 -0
  69. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/cli-objects.rst +0 -0
  70. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/cli-usage.rst +0 -0
  71. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/conf.py +0 -0
  72. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/ext/__init__.py +0 -0
  73. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/ext/docstrings.py +0 -0
  74. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/ext/manager_tmpl.j2 +0 -0
  75. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/faq.rst +0 -0
  76. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/access_requests.rst +0 -0
  77. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/appearance.rst +0 -0
  78. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/applications.rst +0 -0
  79. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/badges.rst +0 -0
  80. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/boards.rst +0 -0
  81. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/branches.rst +0 -0
  82. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/bulk_imports.rst +0 -0
  83. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/ci_lint.rst +0 -0
  84. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/clusters.rst +0 -0
  85. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/commits.rst +0 -0
  86. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/deploy_keys.rst +0 -0
  87. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/deploy_tokens.rst +0 -0
  88. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/deployments.rst +0 -0
  89. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/discussions.rst +0 -0
  90. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/draft_notes.rst +0 -0
  91. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/emojis.rst +0 -0
  92. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/environments.rst +0 -0
  93. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/epics.rst +0 -0
  94. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/events.rst +0 -0
  95. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/features.rst +0 -0
  96. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/geo_nodes.rst +0 -0
  97. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/group_access_tokens.rst +0 -0
  98. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/invitations.rst +0 -0
  99. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/issues.rst +0 -0
  100. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/job_token_scope.rst +0 -0
  101. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/keys.rst +0 -0
  102. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/labels.rst +0 -0
  103. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/merge_request_approvals.rst +0 -0
  104. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/merge_requests.rst +0 -0
  105. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/merge_trains.rst +0 -0
  106. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/messages.rst +0 -0
  107. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/milestones.rst +0 -0
  108. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/namespaces.rst +0 -0
  109. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/notes.rst +0 -0
  110. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/notifications.rst +0 -0
  111. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/packages.rst +0 -0
  112. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/pagesdomains.rst +0 -0
  113. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/personal_access_tokens.rst +0 -0
  114. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/pipelines_and_jobs.rst +0 -0
  115. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/project_access_tokens.rst +0 -0
  116. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/projects.rst +0 -0
  117. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/protected_branches.rst +0 -0
  118. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/protected_environments.rst +0 -0
  119. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/releases.rst +0 -0
  120. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/remote_mirrors.rst +0 -0
  121. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/repositories.rst +0 -0
  122. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/repository_tags.rst +0 -0
  123. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/resource_groups.rst +0 -0
  124. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/runners.rst +0 -0
  125. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/search.rst +0 -0
  126. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/secure_files.rst +0 -0
  127. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/settings.rst +0 -0
  128. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/sidekiq.rst +0 -0
  129. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/snippets.rst +0 -0
  130. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/statistics.rst +0 -0
  131. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/system_hooks.rst +0 -0
  132. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/templates.rst +0 -0
  133. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/todos.rst +0 -0
  134. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/topics.rst +0 -0
  135. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/users.rst +0 -0
  136. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/variables.rst +0 -0
  137. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/gl_objects/wikis.rst +0 -0
  138. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/index.rst +0 -0
  139. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/make.bat +0 -0
  140. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/docs/release-notes.rst +0 -0
  141. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/__init__.py +0 -0
  142. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/__main__.py +0 -0
  143. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/_backends/__init__.py +0 -0
  144. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/_backends/protocol.py +0 -0
  145. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/_backends/requests_backend.py +0 -0
  146. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/base.py +0 -0
  147. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/config.py +0 -0
  148. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/const.py +0 -0
  149. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/exceptions.py +0 -0
  150. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/py.typed +0 -0
  151. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/types.py +0 -0
  152. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/utils.py +0 -0
  153. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/__init__.py +0 -0
  154. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/access_requests.py +0 -0
  155. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/appearance.py +0 -0
  156. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/applications.py +0 -0
  157. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/audit_events.py +0 -0
  158. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/award_emojis.py +0 -0
  159. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/badges.py +0 -0
  160. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/boards.py +0 -0
  161. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/branches.py +0 -0
  162. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/broadcast_messages.py +0 -0
  163. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/bulk_imports.py +0 -0
  164. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/clusters.py +0 -0
  165. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/custom_attributes.py +0 -0
  166. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/deploy_tokens.py +0 -0
  167. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/discussions.py +0 -0
  168. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/draft_notes.py +0 -0
  169. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/epics.py +0 -0
  170. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/events.py +0 -0
  171. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/export_import.py +0 -0
  172. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/features.py +0 -0
  173. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/group_access_tokens.py +0 -0
  174. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/hooks.py +0 -0
  175. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/invitations.py +0 -0
  176. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/job_token_scope.py +0 -0
  177. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/keys.py +0 -0
  178. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/labels.py +0 -0
  179. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/ldap.py +0 -0
  180. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/members.py +0 -0
  181. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/merge_trains.py +0 -0
  182. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/notes.py +0 -0
  183. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/notification_settings.py +0 -0
  184. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/pages.py +0 -0
  185. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/personal_access_tokens.py +0 -0
  186. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/project_access_tokens.py +0 -0
  187. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/push_rules.py +0 -0
  188. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/releases.py +0 -0
  189. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/resource_groups.py +0 -0
  190. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/reviewers.py +0 -0
  191. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/settings.py +0 -0
  192. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/statistics.py +0 -0
  193. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/tags.py +0 -0
  194. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/templates.py +0 -0
  195. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/triggers.py +0 -0
  196. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/variables.py +0 -0
  197. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/gitlab/v4/objects/wikis.py +0 -0
  198. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/python_gitlab.egg-info/dependency_links.txt +0 -0
  199. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/python_gitlab.egg-info/entry_points.txt +0 -0
  200. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/python_gitlab.egg-info/top_level.txt +0 -0
  201. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/requirements-docker.txt +0 -0
  202. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/requirements-docs.txt +0 -0
  203. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/requirements-precommit.txt +0 -0
  204. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/setup.cfg +0 -0
  205. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/__init__.py +0 -0
  206. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/conftest.py +0 -0
  207. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/functional/__init__.py +0 -0
  208. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/functional/api/__init__.py +0 -0
  209. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/functional/api/test_boards.py +0 -0
  210. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/functional/api/test_branches.py +0 -0
  211. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/functional/api/test_bulk_imports.py +0 -0
  212. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/functional/api/test_current_user.py +0 -0
  213. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/functional/api/test_deploy_keys.py +0 -0
  214. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/functional/api/test_deploy_tokens.py +0 -0
  215. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/functional/api/test_epics.py +0 -0
  216. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/functional/api/test_gitlab.py +0 -0
  217. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/functional/api/test_import_export.py +0 -0
  218. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/functional/api/test_issues.py +0 -0
  219. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/functional/api/test_keys.py +0 -0
  220. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/functional/api/test_lazy_objects.py +0 -0
  221. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/functional/api/test_merge_requests.py +0 -0
  222. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/functional/api/test_packages.py +0 -0
  223. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/functional/api/test_project_job_token_scope.py +0 -0
  224. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/functional/api/test_projects.py +0 -0
  225. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/functional/api/test_push_rules.py +0 -0
  226. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/functional/api/test_releases.py +0 -0
  227. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/functional/api/test_repository.py +0 -0
  228. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/functional/api/test_services.py +0 -0
  229. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/functional/api/test_snippets.py +0 -0
  230. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/functional/api/test_statistics.py +0 -0
  231. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/functional/api/test_topics.py +0 -0
  232. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/functional/api/test_users.py +0 -0
  233. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/functional/api/test_variables.py +0 -0
  234. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/functional/api/test_wikis.py +0 -0
  235. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/functional/cli/__init__.py +0 -0
  236. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/functional/cli/conftest.py +0 -0
  237. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/functional/cli/test_cli_artifacts.py +0 -0
  238. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/functional/cli/test_cli_packages.py +0 -0
  239. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/functional/cli/test_cli_projects.py +0 -0
  240. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/functional/cli/test_cli_repository.py +0 -0
  241. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/functional/cli/test_cli_resource_access_tokens.py +0 -0
  242. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/functional/cli/test_cli_users.py +0 -0
  243. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/functional/cli/test_cli_v4.py +0 -0
  244. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/functional/cli/test_cli_variables.py +0 -0
  245. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/functional/conftest.py +0 -0
  246. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/functional/ee-test.py +0 -0
  247. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/functional/fixtures/__init__.py +0 -0
  248. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/functional/fixtures/avatar.png +0 -0
  249. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/functional/fixtures/create_license.rb +0 -0
  250. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/functional/fixtures/docker-compose.yml +0 -0
  251. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/functional/fixtures/docker.py +0 -0
  252. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/functional/fixtures/invalid_auth.cfg +0 -0
  253. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/functional/fixtures/invalid_version.cfg +0 -0
  254. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/functional/fixtures/set_token.rb +0 -0
  255. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/functional/helpers.py +0 -0
  256. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/install/test_install.py +0 -0
  257. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/smoke/__init__.py +0 -0
  258. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/smoke/test_dists.py +0 -0
  259. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/__init__.py +0 -0
  260. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/_backends/__init__.py +0 -0
  261. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/_backends/test_requests_backend.py +0 -0
  262. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/base/test_rest_manager.py +0 -0
  263. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/base/test_rest_object.py +0 -0
  264. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/conftest.py +0 -0
  265. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/helpers.py +0 -0
  266. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/meta/__init__.py +0 -0
  267. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/meta/test_ensure_type_hints.py +0 -0
  268. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/meta/test_imports.py +0 -0
  269. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/meta/test_mro.py +0 -0
  270. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/mixins/__init__.py +0 -0
  271. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/mixins/test_meta_mixins.py +0 -0
  272. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/mixins/test_mixin_methods.py +0 -0
  273. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/mixins/test_object_mixins_attributes.py +0 -0
  274. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/__init__.py +0 -0
  275. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/conftest.py +0 -0
  276. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/test_appearance.py +0 -0
  277. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/test_applications.py +0 -0
  278. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/test_audit_events.py +0 -0
  279. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/test_badges.py +0 -0
  280. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/test_bridges.py +0 -0
  281. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/test_bulk_imports.py +0 -0
  282. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/test_ci_lint.py +0 -0
  283. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/test_commits.py +0 -0
  284. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/test_deploy_tokens.py +0 -0
  285. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/test_deployments.py +0 -0
  286. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/test_draft_notes.py +0 -0
  287. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/test_environments.py +0 -0
  288. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/test_group_access_tokens.py +0 -0
  289. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/test_hooks.py +0 -0
  290. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/test_invitations.py +0 -0
  291. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/test_issues.py +0 -0
  292. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/test_iterations.py +0 -0
  293. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/test_job_artifacts.py +0 -0
  294. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/test_job_token_scope.py +0 -0
  295. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/test_jobs.py +0 -0
  296. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/test_keys.py +0 -0
  297. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/test_members.py +0 -0
  298. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/test_merge_request_pipelines.py +0 -0
  299. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/test_merge_requests.py +0 -0
  300. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/test_merge_trains.py +0 -0
  301. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/test_packages.py +0 -0
  302. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/test_personal_access_tokens.py +0 -0
  303. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/test_pipeline_schedules.py +0 -0
  304. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/test_pipelines.py +0 -0
  305. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/test_project_access_tokens.py +0 -0
  306. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/test_project_import_export.py +0 -0
  307. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/test_project_merge_request_approvals.py +0 -0
  308. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/test_project_statistics.py +0 -0
  309. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/test_projects.py +0 -0
  310. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/test_registry_repositories.py +0 -0
  311. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/test_releases.py +0 -0
  312. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/test_remote_mirrors.py +0 -0
  313. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/test_repositories.py +0 -0
  314. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/test_resource_groups.py +0 -0
  315. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/test_resource_iteration_events.py +0 -0
  316. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/test_resource_label_events.py +0 -0
  317. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/test_resource_milestone_events.py +0 -0
  318. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/test_resource_state_events.py +0 -0
  319. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/test_runners.py +0 -0
  320. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/test_secure_files.py +0 -0
  321. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/test_services.py +0 -0
  322. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/test_snippets.py +0 -0
  323. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/test_statistics.py +0 -0
  324. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/test_submodules.py +0 -0
  325. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/test_todos.py +0 -0
  326. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/test_topics.py +0 -0
  327. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/test_users.py +0 -0
  328. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/objects/test_variables.py +0 -0
  329. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/test_cli.py +0 -0
  330. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/test_config.py +0 -0
  331. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/test_exceptions.py +0 -0
  332. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/test_gitlab.py +0 -0
  333. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/test_gitlab_auth.py +0 -0
  334. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/test_gitlab_http_methods.py +0 -0
  335. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/test_types.py +0 -0
  336. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tests/unit/test_utils.py +0 -0
  337. {python_gitlab-4.5.0 → python_gitlab-4.6.0}/tox.ini +0 -0
@@ -2,6 +2,161 @@
2
2
 
3
3
 
4
4
 
5
+ ## v4.6.0 (2024-05-28)
6
+
7
+ ### Chore
8
+
9
+ * chore(deps): update python-semantic-release/upload-to-gh-release digest to 673709c ([`1b550ac`](https://github.com/python-gitlab/python-gitlab/commit/1b550ac706c8c31331a7a9dac607aed49f5e1fcf))
10
+
11
+ * chore(deps): update all non-major dependencies ([`4c7014c`](https://github.com/python-gitlab/python-gitlab/commit/4c7014c13ed63f994e05b498d63b93dc8ab90c2e))
12
+
13
+ * chore: update commit reference in git-blame-ignore-revs ([`d0fd5ad`](https://github.com/python-gitlab/python-gitlab/commit/d0fd5ad5a70e7eb70aedba5a0d3082418c5ffa34))
14
+
15
+ * chore(cli): add ability to not add `_id_attr` as an argument
16
+
17
+ In some cases we don't want to have `_id_attr` as an argument.
18
+
19
+ Add ability to have it not be added as an argument. ([`2037352`](https://github.com/python-gitlab/python-gitlab/commit/20373525c1a1f98c18b953dbef896b2570d3d191))
20
+
21
+ * chore: create a CustomAction dataclass ([`61d8679`](https://github.com/python-gitlab/python-gitlab/commit/61d867925772cf38f20360c9b40140ac3203efb9))
22
+
23
+ * chore: add an initial .git-blame-ignore-revs
24
+
25
+ This adds the `.git-blame-ignore-revs` file which allows ignoring
26
+ certain commits when doing a `git blame --ignore-revs`
27
+
28
+ Ignore the commit that requires keyword arguments for
29
+ `register_custom_action()`
30
+
31
+ https://docs.github.com/en/repositories/working-with-files/using-files/viewing-a-file#ignore-commits-in-the-blame-view ([`74db84c`](https://github.com/python-gitlab/python-gitlab/commit/74db84ca878ec7029643ff7b00db55f9ea085e9b))
32
+
33
+ * chore: require keyword arguments for register_custom_action
34
+
35
+ This makes it more obvious when reading the code what each argument is
36
+ for. ([`7270523`](https://github.com/python-gitlab/python-gitlab/commit/7270523ad89a463c3542e072df73ba2255a49406))
37
+
38
+ * chore: remove typing-extensions from requirements.txt
39
+
40
+ We no longer support Python versions before 3.8. So it isn't needed
41
+ anymore. ([`d569128`](https://github.com/python-gitlab/python-gitlab/commit/d56912835360a1b5a03a20390fb45cb5e8b49ce4))
42
+
43
+ * chore(deps): update dependency requests to v2.32.0 [security] ([`1bc788c`](https://github.com/python-gitlab/python-gitlab/commit/1bc788ca979a36eeff2e35241bdefc764cf335ce))
44
+
45
+ * chore(deps): update all non-major dependencies ([`ba1eec4`](https://github.com/python-gitlab/python-gitlab/commit/ba1eec49556ee022de471aae8d15060189f816e3))
46
+
47
+ * chore(deps): update gitlab/gitlab-ee docker tag to v17 ([`5070d07`](https://github.com/python-gitlab/python-gitlab/commit/5070d07d13b9c87588dbfde3750340e322118779))
48
+
49
+ * chore(cli): on the CLI help show the API endpoint of resources
50
+
51
+ This makes it easier for people to map CLI command names to the API.
52
+
53
+ Looks like this:
54
+ $ gitlab --help
55
+ <snip>
56
+ The GitLab resource to manipulate.
57
+ application API endpoint: /applications
58
+ application-appearance
59
+ API endpoint: /application/appearance
60
+ application-settings
61
+ API endpoint: /application/settings
62
+ application-statistics
63
+ API endpoint: /application/statistics
64
+ <snip> ([`f1ef565`](https://github.com/python-gitlab/python-gitlab/commit/f1ef5650c3201f3883eb04ad90a874e8adcbcde2))
65
+
66
+ * chore(cli): add some simple help for the standard operations
67
+
68
+ Add help for the following standard operations:
69
+ * list: List the GitLab resources
70
+ * get: Get a GitLab resource
71
+ * create: Create a GitLab resource
72
+ * update: Update a GitLab resource
73
+ * delete: Delete a GitLab resource
74
+
75
+ For example:
76
+ $ gitlab project-key --help
77
+ usage: gitlab project-key [-h] {list,get,create,update,delete,enable} ...
78
+
79
+ options:
80
+ -h, --help show this help message and exit
81
+
82
+ action:
83
+ list
84
+ get
85
+ create
86
+ update
87
+ delete
88
+ enable
89
+ Action to execute on the GitLab resource.
90
+ list List the GitLab resources
91
+ get Get a GitLab resource
92
+ create Create a GitLab resource
93
+ update Update a GitLab resource
94
+ delete Delete a GitLab resource ([`5a4a940`](https://github.com/python-gitlab/python-gitlab/commit/5a4a940f42e43ed066838503638fe612813e504f))
95
+
96
+ * chore: correct type-hint for `job.trace()`
97
+
98
+ Closes: #2808 ([`840572e`](https://github.com/python-gitlab/python-gitlab/commit/840572e4fa36581405b604a985d0e130fe43f4ce))
99
+
100
+ * chore: add type info for ProjectFile.content
101
+
102
+ Closes: #2821 ([`62fa271`](https://github.com/python-gitlab/python-gitlab/commit/62fa2719ea129b3428e5e67d3d3a493f9aead863))
103
+
104
+ ### Feature
105
+
106
+ * feat(api): add additional parameter to project/group iteration search (#2796)
107
+
108
+ Co-authored-by: Cristiano Casella <cristiano.casella@seacom.it>
109
+ Co-authored-by: Nejc Habjan <hab.nejc@gmail.com> ([`623dac9`](https://github.com/python-gitlab/python-gitlab/commit/623dac9c8363c61dbf53f72af58835743e96656b))
110
+
111
+ * feat(api): add support for gitlab service account (#2851)
112
+
113
+
114
+ Co-authored-by: Nejc Habjan <hab.nejc@siemens.com> ([`b187dea`](https://github.com/python-gitlab/python-gitlab/commit/b187deadabbfdf0326ecd79a3ee64c9de10c53e0))
115
+
116
+ * feat: more usernames support for MR approvals
117
+
118
+ I don't think commit a2b8c8ccfb5d went far enough to enable usernames
119
+ support. We create and edit a lot of approval rules based on an external
120
+ service (similar to CODE_OWNERS), but only have the usernames available,
121
+ and currently, have to look up each user to get their user ID to populate
122
+ user_ids for .set_approvers() calls. Would very much like to skip the
123
+ lookup and just send the usernames, which this change should allow.
124
+
125
+ See: https://docs.gitlab.com/ee/api/merge_request_approvals.html#create-project-level-rule
126
+
127
+ Signed-off-by: Jarod Wilson <jarod@redhat.com> ([`12d195a`](https://github.com/python-gitlab/python-gitlab/commit/12d195a35a1bd14947fbd6688a8ad1bd3fc21617))
128
+
129
+ ### Fix
130
+
131
+ * fix(deps): update minimum dependency versions in pyproject.toml
132
+
133
+ Update the minimum versions of the dependencies in the pyproject.toml
134
+ file.
135
+
136
+ This is related to PR #2878 ([`37b5a70`](https://github.com/python-gitlab/python-gitlab/commit/37b5a704ef6b94774e54110ba3746a950e733986))
137
+
138
+ * fix(cli): don't require `--id` when enabling a deploy key
139
+
140
+ No longer require `--id` when doing:
141
+ gitlab project-key enable
142
+
143
+ Now only the --project-id and --key-id are required. ([`98fc578`](https://github.com/python-gitlab/python-gitlab/commit/98fc5789d39b81197351660b7a3f18903c2b91ba))
144
+
145
+ * fix: don't raise `RedirectError` for redirected `HEAD` requests ([`8fc13b9`](https://github.com/python-gitlab/python-gitlab/commit/8fc13b91d63d57c704d03b98920522a6469c96d7))
146
+
147
+ * fix: handle large number of approval rules
148
+
149
+ Use `iterator=True` when going through the list of current approval
150
+ rules. This allows it to handle more than the default of 20 approval
151
+ rules.
152
+
153
+ Closes: #2825 ([`ef8f0e1`](https://github.com/python-gitlab/python-gitlab/commit/ef8f0e190b1add3bbba9a7b194aba2f3c1a83b2e))
154
+
155
+ * fix(projects): fix 'import_project' file argument type for typings
156
+
157
+ Signed-off-by: Adrian DC <radian.dc@gmail.com> ([`33fbc14`](https://github.com/python-gitlab/python-gitlab/commit/33fbc14ea8432df7e637462379e567f4d0ad6c18))
158
+
159
+
5
160
  ## v4.5.0 (2024-05-13)
6
161
 
7
162
  ### Build
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: python-gitlab
3
- Version: 4.5.0
3
+ Version: 4.6.0
4
4
  Summary: A python wrapper for the GitLab API
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>
@@ -28,8 +28,8 @@ Requires-Python: >=3.8.0
28
28
  Description-Content-Type: text/x-rst
29
29
  License-File: COPYING
30
30
  License-File: AUTHORS
31
- Requires-Dist: requests>=2.25.0
32
- Requires-Dist: requests-toolbelt>=0.10.1
31
+ Requires-Dist: requests>=2.32.0
32
+ Requires-Dist: requests-toolbelt>=1.0.0
33
33
  Provides-Extra: autocompletion
34
34
  Requires-Dist: argcomplete<3,>=1.10.0; extra == "autocompletion"
35
35
  Provides-Extra: yaml
@@ -458,3 +458,24 @@ Edit group push rules::
458
458
  Delete group push rules::
459
459
 
460
460
  pr.delete()
461
+
462
+ Group Service Account
463
+ =====================
464
+
465
+ Reference
466
+ ---------
467
+
468
+ * v4 API:
469
+
470
+ + :class:`gitlab.v4.objects.GroupServiceAccount`
471
+ + :class:`gitlab.v4.objects.GroupServiceAccountManager`
472
+ + :attr:`gitlab.v4.objects.Group.serviceaccounts`
473
+
474
+ * GitLab API: https://docs.gitlab.com/ee/api/groups.html#service-accounts
475
+
476
+ Examples
477
+ ---------
478
+
479
+ Create group service account (only allowed at top level group)::
480
+
481
+ group.serviceaccount.create({'name': 'group-service-account', 'username': 'group-service-account'})
@@ -31,3 +31,13 @@ List iterations for a project's ancestor groups::
31
31
  List iterations for a group::
32
32
 
33
33
  iterations = group.iterations.list()
34
+
35
+ Unavailable filters or keyword conflicts::
36
+
37
+ In case you are trying to pass a parameter that collides with a python
38
+ keyword (i.e. `in`) or with python-gitlab's internal arguments, you'll have
39
+ to use the `query_parameters` argument:
40
+
41
+ ```
42
+ group.iterations.list(query_parameters={"in": "title"})
43
+ ```
@@ -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__ = "4.5.0"
6
+ __version__ = "4.6.0"
@@ -1,4 +1,5 @@
1
1
  import argparse
2
+ import dataclasses
2
3
  import functools
3
4
  import os
4
5
  import pathlib
@@ -29,12 +30,21 @@ from gitlab.base import RESTObject
29
30
  camel_upperlower_regex = re.compile(r"([A-Z]+)([A-Z][a-z])")
30
31
  camel_lowerupper_regex = re.compile(r"([a-z\d])([A-Z])")
31
32
 
33
+
34
+ @dataclasses.dataclass
35
+ class CustomAction:
36
+ required: Tuple[str, ...]
37
+ optional: Tuple[str, ...]
38
+ in_object: bool
39
+ requires_id: bool # if the `_id_attr` value should be a required argument
40
+
41
+
32
42
  # custom_actions = {
33
43
  # cls: {
34
44
  # action: (mandatory_args, optional_args, in_obj),
35
45
  # },
36
46
  # }
37
- custom_actions: Dict[str, Dict[str, Tuple[Tuple[str, ...], Tuple[str, ...], bool]]] = {}
47
+ custom_actions: Dict[str, Dict[str, CustomAction]] = {}
38
48
 
39
49
 
40
50
  # For an explanation of how these type-hints work see:
@@ -72,10 +82,12 @@ class VerticalHelpFormatter(argparse.HelpFormatter):
72
82
 
73
83
 
74
84
  def register_custom_action(
85
+ *,
75
86
  cls_names: Union[str, Tuple[str, ...]],
76
- mandatory: Tuple[str, ...] = (),
87
+ required: Tuple[str, ...] = (),
77
88
  optional: Tuple[str, ...] = (),
78
89
  custom_action: Optional[str] = None,
90
+ requires_id: bool = True, # if the `_id_attr` value should be a required argument
79
91
  ) -> Callable[[__F], __F]:
80
92
  def wrap(f: __F) -> __F:
81
93
  @functools.wraps(f)
@@ -98,7 +110,12 @@ def register_custom_action(
98
110
  custom_actions[final_name] = {}
99
111
 
100
112
  action = custom_action or f.__name__.replace("_", "-")
101
- custom_actions[final_name][action] = (mandatory, optional, in_obj)
113
+ custom_actions[final_name][action] = CustomAction(
114
+ required=required,
115
+ optional=optional,
116
+ in_object=in_obj,
117
+ requires_id=requires_id,
118
+ )
102
119
 
103
120
  return cast(__F, wrapped_f)
104
121
 
@@ -134,7 +151,6 @@ def _get_base_parser(add_help: bool = True) -> argparse.ArgumentParser:
134
151
  parser = argparse.ArgumentParser(
135
152
  add_help=add_help,
136
153
  description="GitLab API Command Line Interface",
137
- formatter_class=VerticalHelpFormatter,
138
154
  allow_abbrev=False,
139
155
  )
140
156
  parser.add_argument("--version", help="Display the version.", action="store_true")
@@ -625,8 +625,8 @@ class Gitlab:
625
625
  for item in result.history:
626
626
  if item.status_code not in (301, 302):
627
627
  continue
628
- # GET methods can be redirected without issue
629
- if item.request.method == "GET":
628
+ # GET and HEAD methods can be redirected without issue
629
+ if item.request.method in ("GET", "HEAD"):
630
630
  continue
631
631
  target = item.headers.get("location")
632
632
  raise gitlab.exceptions.RedirectError(
@@ -550,7 +550,7 @@ class UserAgentDetailMixin(_RestObjectBase):
550
550
  _updated_attrs: Dict[str, Any]
551
551
  manager: base.RESTManager
552
552
 
553
- @cli.register_custom_action(("Snippet", "ProjectSnippet", "ProjectIssue"))
553
+ @cli.register_custom_action(cls_names=("Snippet", "ProjectSnippet", "ProjectIssue"))
554
554
  @exc.on_http_error(exc.GitlabGetError)
555
555
  def user_agent_detail(self, **kwargs: Any) -> Dict[str, Any]:
556
556
  """Get the user agent detail.
@@ -578,7 +578,8 @@ class AccessRequestMixin(_RestObjectBase):
578
578
  manager: base.RESTManager
579
579
 
580
580
  @cli.register_custom_action(
581
- ("ProjectAccessRequest", "GroupAccessRequest"), (), ("access_level",)
581
+ cls_names=("ProjectAccessRequest", "GroupAccessRequest"),
582
+ optional=("access_level",),
582
583
  )
583
584
  @exc.on_http_error(exc.GitlabUpdateError)
584
585
  def approve(
@@ -611,7 +612,7 @@ class DownloadMixin(_RestObjectBase):
611
612
  _updated_attrs: Dict[str, Any]
612
613
  manager: base.RESTManager
613
614
 
614
- @cli.register_custom_action(("GroupExport", "ProjectExport"))
615
+ @cli.register_custom_action(cls_names=("GroupExport", "ProjectExport"))
615
616
  @exc.on_http_error(exc.GitlabGetError)
616
617
  def download(
617
618
  self,
@@ -721,7 +722,7 @@ class SubscribableMixin(_RestObjectBase):
721
722
  manager: base.RESTManager
722
723
 
723
724
  @cli.register_custom_action(
724
- ("ProjectIssue", "ProjectMergeRequest", "ProjectLabel", "GroupLabel")
725
+ cls_names=("ProjectIssue", "ProjectMergeRequest", "ProjectLabel", "GroupLabel")
725
726
  )
726
727
  @exc.on_http_error(exc.GitlabSubscribeError)
727
728
  def subscribe(self, **kwargs: Any) -> None:
@@ -741,7 +742,7 @@ class SubscribableMixin(_RestObjectBase):
741
742
  self._update_attrs(server_data)
742
743
 
743
744
  @cli.register_custom_action(
744
- ("ProjectIssue", "ProjectMergeRequest", "ProjectLabel", "GroupLabel")
745
+ cls_names=("ProjectIssue", "ProjectMergeRequest", "ProjectLabel", "GroupLabel")
745
746
  )
746
747
  @exc.on_http_error(exc.GitlabUnsubscribeError)
747
748
  def unsubscribe(self, **kwargs: Any) -> None:
@@ -769,7 +770,7 @@ class TodoMixin(_RestObjectBase):
769
770
  _updated_attrs: Dict[str, Any]
770
771
  manager: base.RESTManager
771
772
 
772
- @cli.register_custom_action(("ProjectIssue", "ProjectMergeRequest"))
773
+ @cli.register_custom_action(cls_names=("ProjectIssue", "ProjectMergeRequest"))
773
774
  @exc.on_http_error(exc.GitlabTodoError)
774
775
  def todo(self, **kwargs: Any) -> None:
775
776
  """Create a todo associated to the object.
@@ -793,7 +794,7 @@ class TimeTrackingMixin(_RestObjectBase):
793
794
  _updated_attrs: Dict[str, Any]
794
795
  manager: base.RESTManager
795
796
 
796
- @cli.register_custom_action(("ProjectIssue", "ProjectMergeRequest"))
797
+ @cli.register_custom_action(cls_names=("ProjectIssue", "ProjectMergeRequest"))
797
798
  @exc.on_http_error(exc.GitlabTimeTrackingError)
798
799
  def time_stats(self, **kwargs: Any) -> Dict[str, Any]:
799
800
  """Get time stats for the object.
@@ -819,7 +820,9 @@ class TimeTrackingMixin(_RestObjectBase):
819
820
  assert not isinstance(result, requests.Response)
820
821
  return result
821
822
 
822
- @cli.register_custom_action(("ProjectIssue", "ProjectMergeRequest"), ("duration",))
823
+ @cli.register_custom_action(
824
+ cls_names=("ProjectIssue", "ProjectMergeRequest"), required=("duration",)
825
+ )
823
826
  @exc.on_http_error(exc.GitlabTimeTrackingError)
824
827
  def time_estimate(self, duration: str, **kwargs: Any) -> Dict[str, Any]:
825
828
  """Set an estimated time of work for the object.
@@ -839,7 +842,7 @@ class TimeTrackingMixin(_RestObjectBase):
839
842
  assert not isinstance(result, requests.Response)
840
843
  return result
841
844
 
842
- @cli.register_custom_action(("ProjectIssue", "ProjectMergeRequest"))
845
+ @cli.register_custom_action(cls_names=("ProjectIssue", "ProjectMergeRequest"))
843
846
  @exc.on_http_error(exc.GitlabTimeTrackingError)
844
847
  def reset_time_estimate(self, **kwargs: Any) -> Dict[str, Any]:
845
848
  """Resets estimated time for the object to 0 seconds.
@@ -857,7 +860,9 @@ class TimeTrackingMixin(_RestObjectBase):
857
860
  assert not isinstance(result, requests.Response)
858
861
  return result
859
862
 
860
- @cli.register_custom_action(("ProjectIssue", "ProjectMergeRequest"), ("duration",))
863
+ @cli.register_custom_action(
864
+ cls_names=("ProjectIssue", "ProjectMergeRequest"), required=("duration",)
865
+ )
861
866
  @exc.on_http_error(exc.GitlabTimeTrackingError)
862
867
  def add_spent_time(self, duration: str, **kwargs: Any) -> Dict[str, Any]:
863
868
  """Add time spent working on the object.
@@ -877,7 +882,7 @@ class TimeTrackingMixin(_RestObjectBase):
877
882
  assert not isinstance(result, requests.Response)
878
883
  return result
879
884
 
880
- @cli.register_custom_action(("ProjectIssue", "ProjectMergeRequest"))
885
+ @cli.register_custom_action(cls_names=("ProjectIssue", "ProjectMergeRequest"))
881
886
  @exc.on_http_error(exc.GitlabTimeTrackingError)
882
887
  def reset_spent_time(self, **kwargs: Any) -> Dict[str, Any]:
883
888
  """Resets the time spent working on the object.
@@ -904,7 +909,7 @@ class ParticipantsMixin(_RestObjectBase):
904
909
  _updated_attrs: Dict[str, Any]
905
910
  manager: base.RESTManager
906
911
 
907
- @cli.register_custom_action(("ProjectMergeRequest", "ProjectIssue"))
912
+ @cli.register_custom_action(cls_names=("ProjectMergeRequest", "ProjectIssue"))
908
913
  @exc.on_http_error(exc.GitlabListError)
909
914
  def participants(self, **kwargs: Any) -> Dict[str, Any]:
910
915
  """List the participants.
@@ -932,7 +937,8 @@ class ParticipantsMixin(_RestObjectBase):
932
937
 
933
938
  class BadgeRenderMixin(_RestManagerBase):
934
939
  @cli.register_custom_action(
935
- ("GroupBadgeManager", "ProjectBadgeManager"), ("link_url", "image_url")
940
+ cls_names=("GroupBadgeManager", "ProjectBadgeManager"),
941
+ required=("link_url", "image_url"),
936
942
  )
937
943
  @exc.on_http_error(exc.GitlabRenderError)
938
944
  def render(self, link_url: str, image_url: str, **kwargs: Any) -> Dict[str, Any]:
@@ -1025,7 +1031,9 @@ class UploadMixin(_RestObjectBase):
1025
1031
  data = self.attributes
1026
1032
  return self._upload_path.format(**data)
1027
1033
 
1028
- @cli.register_custom_action(("Project", "ProjectWiki"), ("filename", "filepath"))
1034
+ @cli.register_custom_action(
1035
+ cls_names=("Project", "ProjectWiki"), required=("filename", "filepath")
1036
+ )
1029
1037
  @exc.on_http_error(exc.GitlabUploadError)
1030
1038
  def upload(
1031
1039
  self,
@@ -82,7 +82,7 @@ class GitlabCLI:
82
82
 
83
83
  def do_custom(self) -> Any:
84
84
  class_instance: Union[gitlab.base.RESTManager, gitlab.base.RESTObject]
85
- in_obj = cli.custom_actions[self.cls_name][self.resource_action][2]
85
+ in_obj = cli.custom_actions[self.cls_name][self.resource_action].in_object
86
86
 
87
87
  # Get the object (lazy), then act
88
88
  if in_obj:
@@ -207,12 +207,20 @@ def _populate_sub_parser_by_class(
207
207
  mgr_cls = getattr(gitlab.v4.objects, mgr_cls_name)
208
208
 
209
209
  action_parsers: Dict[str, argparse.ArgumentParser] = {}
210
- for action_name in ["list", "get", "create", "update", "delete"]:
210
+ for action_name, help_text in [
211
+ ("list", "List the GitLab resources"),
212
+ ("get", "Get a GitLab resource"),
213
+ ("create", "Create a GitLab resource"),
214
+ ("update", "Update a GitLab resource"),
215
+ ("delete", "Delete a GitLab resource"),
216
+ ]:
211
217
  if not hasattr(mgr_cls, action_name):
212
218
  continue
213
219
 
214
220
  sub_parser_action = sub_parser.add_parser(
215
- action_name, conflict_handler="resolve"
221
+ action_name,
222
+ conflict_handler="resolve",
223
+ help=help_text,
216
224
  )
217
225
  action_parsers[action_name] = sub_parser_action
218
226
  sub_parser_action.add_argument("--sudo", required=False)
@@ -307,19 +315,19 @@ def _populate_sub_parser_by_class(
307
315
  )
308
316
  sub_parser_action.add_argument("--sudo", required=False)
309
317
 
318
+ custom_action = cli.custom_actions[name][action_name]
310
319
  # We need to get the object somehow
311
320
  if not issubclass(cls, gitlab.mixins.GetWithoutIdMixin):
312
- if cls._id_attr is not None:
321
+ if cls._id_attr is not None and custom_action.requires_id:
313
322
  id_attr = cls._id_attr.replace("_", "-")
314
323
  sub_parser_action.add_argument(f"--{id_attr}", required=True)
315
324
 
316
- required, optional, dummy = cli.custom_actions[name][action_name]
317
- for x in required:
325
+ for x in custom_action.required:
318
326
  if x != cls._id_attr:
319
327
  sub_parser_action.add_argument(
320
328
  f"--{x.replace('_', '-')}", required=True
321
329
  )
322
- for x in optional:
330
+ for x in custom_action.optional:
323
331
  if x != cls._id_attr:
324
332
  sub_parser_action.add_argument(
325
333
  f"--{x.replace('_', '-')}", required=False
@@ -342,13 +350,13 @@ def _populate_sub_parser_by_class(
342
350
  )
343
351
  sub_parser_action.add_argument("--sudo", required=False)
344
352
 
345
- required, optional, dummy = cli.custom_actions[name][action_name]
346
- for x in required:
353
+ custom_action = cli.custom_actions[name][action_name]
354
+ for x in custom_action.required:
347
355
  if x != cls._id_attr:
348
356
  sub_parser_action.add_argument(
349
357
  f"--{x.replace('_', '-')}", required=True
350
358
  )
351
- for x in optional:
359
+ for x in custom_action.optional:
352
360
  if x != cls._id_attr:
353
361
  sub_parser_action.add_argument(
354
362
  f"--{x.replace('_', '-')}", required=False
@@ -374,8 +382,12 @@ def extend_parser(parser: argparse.ArgumentParser) -> argparse.ArgumentParser:
374
382
 
375
383
  for cls in sorted(classes, key=operator.attrgetter("__name__")):
376
384
  arg_name = cli.cls_to_gitlab_resource(cls)
385
+ mgr_cls_name = f"{cls.__name__}Manager"
386
+ mgr_cls = getattr(gitlab.v4.objects, mgr_cls_name)
377
387
  object_group = subparsers.add_parser(
378
- arg_name, formatter_class=cli.VerticalHelpFormatter
388
+ arg_name,
389
+ formatter_class=cli.VerticalHelpFormatter,
390
+ help=f"API endpoint: {mgr_cls._path}",
379
391
  )
380
392
 
381
393
  object_subparsers = object_group.add_subparsers(
@@ -59,6 +59,7 @@ from .resource_groups import *
59
59
  from .reviewers import *
60
60
  from .runners import *
61
61
  from .secure_files import *
62
+ from .service_accounts import *
62
63
  from .settings import *
63
64
  from .sidekiq import *
64
65
  from .snippets import *
@@ -44,7 +44,9 @@ class ProjectArtifactManager(RESTManager):
44
44
  self.gitlab.http_delete(path, **kwargs)
45
45
 
46
46
  @cli.register_custom_action(
47
- "ProjectArtifactManager", ("ref_name", "job"), ("job_token",)
47
+ cls_names="ProjectArtifactManager",
48
+ required=("ref_name", "job"),
49
+ optional=("job_token",),
48
50
  )
49
51
  @exc.on_http_error(exc.GitlabGetError)
50
52
  def download(
@@ -93,7 +95,8 @@ class ProjectArtifactManager(RESTManager):
93
95
  )
94
96
 
95
97
  @cli.register_custom_action(
96
- "ProjectArtifactManager", ("ref_name", "artifact_path", "job")
98
+ cls_names="ProjectArtifactManager",
99
+ required=("ref_name", "artifact_path", "job"),
97
100
  )
98
101
  @exc.on_http_error(exc.GitlabGetError)
99
102
  def raw(
@@ -31,8 +31,8 @@ class CiLintManager(CreateMixin, RESTManager):
31
31
  )
32
32
 
33
33
  @register_custom_action(
34
- "CiLintManager",
35
- ("content",),
34
+ cls_names="CiLintManager",
35
+ required=("content",),
36
36
  optional=("include_merged_yaml", "include_jobs"),
37
37
  )
38
38
  def validate(self, *args: Any, **kwargs: Any) -> None:
@@ -63,8 +63,8 @@ class ProjectCiLintManager(GetWithoutIdMixin, CreateMixin, RESTManager):
63
63
  return cast(ProjectCiLint, super().get(**kwargs))
64
64
 
65
65
  @register_custom_action(
66
- "ProjectCiLintManager",
67
- ("content",),
66
+ cls_names="ProjectCiLintManager",
67
+ required=("content",),
68
68
  optional=("dry_run", "include_jobs", "ref"),
69
69
  )
70
70
  def validate(self, *args: Any, **kwargs: Any) -> None:
@@ -28,7 +28,7 @@ class ProjectCommit(RESTObject):
28
28
  discussions: ProjectCommitDiscussionManager
29
29
  statuses: "ProjectCommitStatusManager"
30
30
 
31
- @cli.register_custom_action("ProjectCommit")
31
+ @cli.register_custom_action(cls_names="ProjectCommit")
32
32
  @exc.on_http_error(exc.GitlabGetError)
33
33
  def diff(self, **kwargs: Any) -> Union[gitlab.GitlabList, List[Dict[str, Any]]]:
34
34
  """Generate the commit diff.
@@ -46,7 +46,7 @@ class ProjectCommit(RESTObject):
46
46
  path = f"{self.manager.path}/{self.encoded_id}/diff"
47
47
  return self.manager.gitlab.http_list(path, **kwargs)
48
48
 
49
- @cli.register_custom_action("ProjectCommit", ("branch",))
49
+ @cli.register_custom_action(cls_names="ProjectCommit", required=("branch",))
50
50
  @exc.on_http_error(exc.GitlabCherryPickError)
51
51
  def cherry_pick(self, branch: str, **kwargs: Any) -> None:
52
52
  """Cherry-pick a commit into a branch.
@@ -63,7 +63,7 @@ class ProjectCommit(RESTObject):
63
63
  post_data = {"branch": branch}
64
64
  self.manager.gitlab.http_post(path, post_data=post_data, **kwargs)
65
65
 
66
- @cli.register_custom_action("ProjectCommit", optional=("type",))
66
+ @cli.register_custom_action(cls_names="ProjectCommit", optional=("type",))
67
67
  @exc.on_http_error(exc.GitlabGetError)
68
68
  def refs(
69
69
  self, type: str = "all", **kwargs: Any
@@ -85,7 +85,7 @@ class ProjectCommit(RESTObject):
85
85
  query_data = {"type": type}
86
86
  return self.manager.gitlab.http_list(path, query_data=query_data, **kwargs)
87
87
 
88
- @cli.register_custom_action("ProjectCommit")
88
+ @cli.register_custom_action(cls_names="ProjectCommit")
89
89
  @exc.on_http_error(exc.GitlabGetError)
90
90
  def merge_requests(
91
91
  self, **kwargs: Any
@@ -105,7 +105,7 @@ class ProjectCommit(RESTObject):
105
105
  path = f"{self.manager.path}/{self.encoded_id}/merge_requests"
106
106
  return self.manager.gitlab.http_list(path, **kwargs)
107
107
 
108
- @cli.register_custom_action("ProjectCommit", ("branch",))
108
+ @cli.register_custom_action(cls_names="ProjectCommit", required=("branch",))
109
109
  @exc.on_http_error(exc.GitlabRevertError)
110
110
  def revert(
111
111
  self, branch: str, **kwargs: Any
@@ -127,7 +127,7 @@ class ProjectCommit(RESTObject):
127
127
  post_data = {"branch": branch}
128
128
  return self.manager.gitlab.http_post(path, post_data=post_data, **kwargs)
129
129
 
130
- @cli.register_custom_action("ProjectCommit")
130
+ @cli.register_custom_action(cls_names="ProjectCommit")
131
131
  @exc.on_http_error(exc.GitlabGetError)
132
132
  def signature(self, **kwargs: Any) -> Union[Dict[str, Any], requests.Response]:
133
133
  """Get the signature of the commit.
@@ -42,8 +42,8 @@ class ProjectRegistryTagManager(DeleteMixin, RetrieveMixin, RESTManager):
42
42
  _path = "/projects/{project_id}/registry/repositories/{repository_id}/tags"
43
43
 
44
44
  @cli.register_custom_action(
45
- "ProjectRegistryTagManager",
46
- ("name_regex_delete",),
45
+ cls_names="ProjectRegistryTagManager",
46
+ required=("name_regex_delete",),
47
47
  optional=("keep_n", "name_regex_keep", "older_than"),
48
48
  )
49
49
  @exc.on_http_error(exc.GitlabDeleteError)
@@ -36,7 +36,9 @@ class ProjectKeyManager(CRUDMixin, RESTManager):
36
36
  _create_attrs = RequiredOptional(required=("title", "key"), optional=("can_push",))
37
37
  _update_attrs = RequiredOptional(optional=("title", "can_push"))
38
38
 
39
- @cli.register_custom_action("ProjectKeyManager", ("key_id",))
39
+ @cli.register_custom_action(
40
+ cls_names="ProjectKeyManager", required=("key_id",), requires_id=False
41
+ )
40
42
  @exc.on_http_error(exc.GitlabProjectDeployKeyError)
41
43
  def enable(
42
44
  self, key_id: int, **kwargs: Any
@@ -23,8 +23,8 @@ class ProjectDeployment(SaveMixin, RESTObject):
23
23
  mergerequests: ProjectDeploymentMergeRequestManager
24
24
 
25
25
  @cli.register_custom_action(
26
- "ProjectDeployment",
27
- mandatory=("status",),
26
+ cls_names="ProjectDeployment",
27
+ required=("status",),
28
28
  optional=("comment", "represented_as"),
29
29
  )
30
30
  @exc.on_http_error(exc.GitlabDeploymentApprovalError)