python-gitlab 4.4.0__tar.gz → 4.5.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 (343) hide show
  1. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/CHANGELOG.md +286 -0
  2. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/PKG-INFO +18 -1
  3. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/README.rst +17 -0
  4. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/api-usage.rst +5 -0
  5. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/cli-examples.rst +6 -1
  6. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/faq.rst +20 -0
  7. python_gitlab-4.5.0/docs/gl_objects/job_token_scope.rst +101 -0
  8. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/personal_access_tokens.rst +2 -2
  9. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/protected_branches.rst +5 -0
  10. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/_backends/protocol.py +2 -4
  11. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/_version.py +1 -1
  12. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/cli.py +13 -1
  13. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/client.py +0 -1
  14. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/utils.py +3 -3
  15. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/cli.py +9 -0
  16. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/artifacts.py +2 -1
  17. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/audit_events.py +1 -0
  18. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/branches.py +10 -3
  19. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/deployments.py +1 -0
  20. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/features.py +1 -0
  21. python_gitlab-4.5.0/gitlab/v4/objects/job_token_scope.py +77 -0
  22. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/jobs.py +4 -1
  23. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/merge_request_approvals.py +4 -56
  24. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/merge_requests.py +1 -0
  25. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/pipelines.py +2 -1
  26. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/projects.py +1 -0
  27. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/repositories.py +1 -0
  28. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/secure_files.py +1 -0
  29. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/users.py +1 -0
  30. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/variables.py +1 -0
  31. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/python_gitlab.egg-info/PKG-INFO +18 -1
  32. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/python_gitlab.egg-info/SOURCES.txt +1 -0
  33. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/requirements-docker.txt +1 -1
  34. python_gitlab-4.5.0/requirements-docs.txt +6 -0
  35. python_gitlab-4.5.0/requirements-lint.txt +13 -0
  36. python_gitlab-4.5.0/requirements-precommit.txt +1 -0
  37. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/requirements-test.txt +6 -6
  38. python_gitlab-4.5.0/requirements.txt +3 -0
  39. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/functional/api/test_boards.py +0 -2
  40. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/functional/api/test_bulk_imports.py +29 -1
  41. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/functional/api/test_current_user.py +1 -3
  42. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/functional/api/test_deploy_keys.py +1 -1
  43. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/functional/api/test_deploy_tokens.py +6 -6
  44. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/functional/api/test_epics.py +0 -1
  45. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/functional/api/test_gitlab.py +1 -3
  46. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/functional/api/test_groups.py +4 -8
  47. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/functional/api/test_import_export.py +9 -0
  48. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/functional/api/test_issues.py +1 -8
  49. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/functional/api/test_keys.py +1 -0
  50. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/functional/api/test_lazy_objects.py +5 -2
  51. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/functional/api/test_merge_requests.py +33 -29
  52. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/functional/api/test_packages.py +1 -0
  53. python_gitlab-4.5.0/tests/functional/api/test_project_job_token_scope.py +116 -0
  54. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/functional/api/test_projects.py +27 -19
  55. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/functional/api/test_releases.py +0 -1
  56. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/functional/api/test_repository.py +1 -3
  57. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/functional/api/test_services.py +1 -3
  58. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/functional/api/test_snippets.py +12 -6
  59. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/functional/api/test_topics.py +0 -1
  60. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/functional/api/test_users.py +32 -27
  61. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/functional/api/test_variables.py +0 -3
  62. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/functional/cli/conftest.py +11 -0
  63. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/functional/cli/test_cli.py +16 -0
  64. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/functional/cli/test_cli_repository.py +15 -7
  65. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/functional/cli/test_cli_resource_access_tokens.py +5 -2
  66. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/functional/cli/test_cli_users.py +5 -0
  67. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/functional/cli/test_cli_v4.py +13 -38
  68. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/functional/conftest.py +30 -48
  69. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/functional/fixtures/.env +1 -1
  70. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/functional/fixtures/docker.py +1 -0
  71. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/functional/fixtures/set_token.rb +1 -1
  72. python_gitlab-4.5.0/tests/functional/helpers.py +71 -0
  73. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/smoke/test_dists.py +7 -7
  74. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/meta/test_ensure_type_hints.py +1 -0
  75. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/meta/test_imports.py +1 -0
  76. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/meta/test_mro.py +4 -6
  77. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/objects/test_badges.py +1 -0
  78. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/objects/test_bridges.py +1 -0
  79. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/objects/test_deploy_tokens.py +1 -0
  80. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/objects/test_deployments.py +1 -0
  81. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/objects/test_draft_notes.py +1 -0
  82. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/objects/test_environments.py +1 -0
  83. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/objects/test_issues.py +1 -0
  84. python_gitlab-4.5.0/tests/unit/objects/test_job_token_scope.py +202 -0
  85. python_gitlab-4.5.0/tests/unit/objects/test_jobs.py +170 -0
  86. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/objects/test_keys.py +1 -0
  87. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/objects/test_members.py +1 -0
  88. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/objects/test_merge_request_pipelines.py +1 -0
  89. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/objects/test_merge_requests.py +1 -0
  90. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/objects/test_merge_trains.py +1 -0
  91. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/objects/test_packages.py +1 -0
  92. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/objects/test_pipeline_schedules.py +1 -0
  93. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/objects/test_pipelines.py +1 -0
  94. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/objects/test_project_import_export.py +1 -0
  95. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/objects/test_project_merge_request_approvals.py +18 -18
  96. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/objects/test_project_statistics.py +1 -0
  97. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/objects/test_registry_repositories.py +1 -0
  98. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/objects/test_releases.py +1 -0
  99. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/objects/test_repositories.py +1 -0
  100. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/objects/test_resource_groups.py +3 -2
  101. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/objects/test_submodules.py +1 -0
  102. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/objects/test_todos.py +1 -0
  103. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/objects/test_topics.py +1 -0
  104. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/objects/test_users.py +1 -0
  105. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/test_cli.py +61 -0
  106. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/test_gitlab_http_methods.py +1 -0
  107. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tox.ini +14 -3
  108. python-gitlab-4.4.0/docs/gl_objects/job_token_scope.rst +0 -51
  109. python-gitlab-4.4.0/gitlab/v4/objects/job_token_scope.py +0 -29
  110. python-gitlab-4.4.0/requirements-docs.txt +0 -6
  111. python-gitlab-4.4.0/requirements-lint.txt +0 -13
  112. python-gitlab-4.4.0/requirements-precommit.txt +0 -1
  113. python-gitlab-4.4.0/requirements.txt +0 -3
  114. python-gitlab-4.4.0/tests/functional/helpers.py +0 -55
  115. python-gitlab-4.4.0/tests/unit/objects/test_job_token_scope.py +0 -63
  116. python-gitlab-4.4.0/tests/unit/objects/test_jobs.py +0 -96
  117. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/AUTHORS +0 -0
  118. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/COPYING +0 -0
  119. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/MANIFEST.in +0 -0
  120. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/Makefile +0 -0
  121. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/__init__.py +0 -0
  122. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/_static/js/gitter.js +0 -0
  123. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/api/gitlab.rst +0 -0
  124. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/api/gitlab.v4.rst +0 -0
  125. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/api-levels.rst +0 -0
  126. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/api-objects.rst +0 -0
  127. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/api-usage-advanced.rst +0 -0
  128. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/changelog.md +0 -0
  129. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/cli-objects.rst +0 -0
  130. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/cli-usage.rst +0 -0
  131. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/conf.py +0 -0
  132. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/ext/__init__.py +0 -0
  133. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/ext/docstrings.py +0 -0
  134. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/ext/manager_tmpl.j2 +0 -0
  135. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/access_requests.rst +0 -0
  136. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/appearance.rst +0 -0
  137. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/applications.rst +0 -0
  138. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/badges.rst +0 -0
  139. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/boards.rst +0 -0
  140. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/branches.rst +0 -0
  141. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/bulk_imports.rst +0 -0
  142. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/ci_lint.rst +0 -0
  143. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/clusters.rst +0 -0
  144. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/commits.rst +0 -0
  145. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/deploy_keys.rst +0 -0
  146. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/deploy_tokens.rst +0 -0
  147. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/deployments.rst +0 -0
  148. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/discussions.rst +0 -0
  149. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/draft_notes.rst +0 -0
  150. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/emojis.rst +0 -0
  151. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/environments.rst +0 -0
  152. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/epics.rst +0 -0
  153. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/events.rst +0 -0
  154. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/features.rst +0 -0
  155. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/geo_nodes.rst +0 -0
  156. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/group_access_tokens.rst +0 -0
  157. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/groups.rst +0 -0
  158. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/invitations.rst +0 -0
  159. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/issues.rst +0 -0
  160. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/iterations.rst +0 -0
  161. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/keys.rst +0 -0
  162. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/labels.rst +0 -0
  163. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/merge_request_approvals.rst +0 -0
  164. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/merge_requests.rst +0 -0
  165. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/merge_trains.rst +0 -0
  166. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/messages.rst +0 -0
  167. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/milestones.rst +0 -0
  168. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/namespaces.rst +0 -0
  169. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/notes.rst +0 -0
  170. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/notifications.rst +0 -0
  171. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/packages.rst +0 -0
  172. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/pagesdomains.rst +0 -0
  173. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/pipelines_and_jobs.rst +0 -0
  174. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/project_access_tokens.rst +0 -0
  175. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/projects.rst +0 -0
  176. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/protected_environments.rst +0 -0
  177. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/releases.rst +0 -0
  178. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/remote_mirrors.rst +0 -0
  179. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/repositories.rst +0 -0
  180. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/repository_tags.rst +0 -0
  181. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/resource_groups.rst +0 -0
  182. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/runners.rst +0 -0
  183. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/search.rst +0 -0
  184. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/secure_files.rst +0 -0
  185. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/settings.rst +0 -0
  186. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/sidekiq.rst +0 -0
  187. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/snippets.rst +0 -0
  188. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/statistics.rst +0 -0
  189. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/system_hooks.rst +0 -0
  190. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/templates.rst +0 -0
  191. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/todos.rst +0 -0
  192. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/topics.rst +0 -0
  193. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/users.rst +0 -0
  194. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/variables.rst +0 -0
  195. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/gl_objects/wikis.rst +0 -0
  196. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/index.rst +0 -0
  197. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/make.bat +0 -0
  198. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/docs/release-notes.rst +0 -0
  199. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/__init__.py +0 -0
  200. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/__main__.py +0 -0
  201. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/_backends/__init__.py +0 -0
  202. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/_backends/requests_backend.py +0 -0
  203. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/base.py +0 -0
  204. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/config.py +0 -0
  205. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/const.py +0 -0
  206. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/exceptions.py +0 -0
  207. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/mixins.py +0 -0
  208. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/py.typed +0 -0
  209. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/types.py +0 -0
  210. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/__init__.py +0 -0
  211. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/__init__.py +0 -0
  212. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/access_requests.py +0 -0
  213. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/appearance.py +0 -0
  214. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/applications.py +0 -0
  215. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/award_emojis.py +0 -0
  216. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/badges.py +0 -0
  217. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/boards.py +0 -0
  218. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/broadcast_messages.py +0 -0
  219. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/bulk_imports.py +0 -0
  220. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/ci_lint.py +0 -0
  221. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/clusters.py +0 -0
  222. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/commits.py +0 -0
  223. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/container_registry.py +0 -0
  224. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/custom_attributes.py +0 -0
  225. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/deploy_keys.py +0 -0
  226. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/deploy_tokens.py +0 -0
  227. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/discussions.py +0 -0
  228. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/draft_notes.py +0 -0
  229. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/environments.py +0 -0
  230. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/epics.py +0 -0
  231. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/events.py +0 -0
  232. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/export_import.py +0 -0
  233. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/files.py +0 -0
  234. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/geo_nodes.py +0 -0
  235. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/group_access_tokens.py +0 -0
  236. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/groups.py +0 -0
  237. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/hooks.py +0 -0
  238. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/integrations.py +0 -0
  239. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/invitations.py +0 -0
  240. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/issues.py +0 -0
  241. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/iterations.py +0 -0
  242. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/keys.py +0 -0
  243. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/labels.py +0 -0
  244. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/ldap.py +0 -0
  245. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/members.py +0 -0
  246. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/merge_trains.py +0 -0
  247. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/milestones.py +0 -0
  248. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/namespaces.py +0 -0
  249. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/notes.py +0 -0
  250. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/notification_settings.py +0 -0
  251. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/packages.py +0 -0
  252. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/pages.py +0 -0
  253. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/personal_access_tokens.py +0 -0
  254. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/project_access_tokens.py +0 -0
  255. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/push_rules.py +0 -0
  256. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/releases.py +0 -0
  257. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/resource_groups.py +0 -0
  258. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/reviewers.py +0 -0
  259. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/runners.py +0 -0
  260. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/settings.py +0 -0
  261. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/sidekiq.py +0 -0
  262. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/snippets.py +0 -0
  263. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/statistics.py +0 -0
  264. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/tags.py +0 -0
  265. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/templates.py +0 -0
  266. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/todos.py +0 -0
  267. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/topics.py +0 -0
  268. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/triggers.py +0 -0
  269. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/gitlab/v4/objects/wikis.py +0 -0
  270. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/pyproject.toml +0 -0
  271. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/python_gitlab.egg-info/dependency_links.txt +0 -0
  272. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/python_gitlab.egg-info/entry_points.txt +0 -0
  273. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/python_gitlab.egg-info/requires.txt +0 -0
  274. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/python_gitlab.egg-info/top_level.txt +0 -0
  275. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/setup.cfg +0 -0
  276. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/__init__.py +0 -0
  277. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/conftest.py +0 -0
  278. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/functional/__init__.py +0 -0
  279. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/functional/api/__init__.py +0 -0
  280. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/functional/api/test_branches.py +0 -0
  281. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/functional/api/test_push_rules.py +0 -0
  282. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/functional/api/test_statistics.py +0 -0
  283. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/functional/api/test_wikis.py +0 -0
  284. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/functional/cli/__init__.py +0 -0
  285. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/functional/cli/test_cli_artifacts.py +0 -0
  286. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/functional/cli/test_cli_packages.py +0 -0
  287. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/functional/cli/test_cli_projects.py +0 -0
  288. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/functional/cli/test_cli_variables.py +0 -0
  289. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/functional/ee-test.py +0 -0
  290. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/functional/fixtures/__init__.py +0 -0
  291. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/functional/fixtures/avatar.png +0 -0
  292. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/functional/fixtures/create_license.rb +0 -0
  293. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/functional/fixtures/docker-compose.yml +0 -0
  294. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/functional/fixtures/invalid_auth.cfg +0 -0
  295. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/functional/fixtures/invalid_version.cfg +0 -0
  296. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/install/test_install.py +0 -0
  297. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/smoke/__init__.py +0 -0
  298. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/__init__.py +0 -0
  299. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/_backends/__init__.py +0 -0
  300. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/_backends/test_requests_backend.py +0 -0
  301. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/base/test_rest_manager.py +0 -0
  302. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/base/test_rest_object.py +0 -0
  303. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/conftest.py +0 -0
  304. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/helpers.py +0 -0
  305. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/meta/__init__.py +0 -0
  306. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/mixins/__init__.py +0 -0
  307. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/mixins/test_meta_mixins.py +0 -0
  308. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/mixins/test_mixin_methods.py +0 -0
  309. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/mixins/test_object_mixins_attributes.py +0 -0
  310. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/objects/__init__.py +0 -0
  311. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/objects/conftest.py +0 -0
  312. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/objects/test_appearance.py +0 -0
  313. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/objects/test_applications.py +0 -0
  314. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/objects/test_audit_events.py +0 -0
  315. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/objects/test_bulk_imports.py +0 -0
  316. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/objects/test_ci_lint.py +0 -0
  317. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/objects/test_commits.py +0 -0
  318. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/objects/test_group_access_tokens.py +0 -0
  319. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/objects/test_groups.py +0 -0
  320. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/objects/test_hooks.py +0 -0
  321. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/objects/test_invitations.py +0 -0
  322. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/objects/test_iterations.py +0 -0
  323. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/objects/test_job_artifacts.py +0 -0
  324. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/objects/test_personal_access_tokens.py +0 -0
  325. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/objects/test_project_access_tokens.py +0 -0
  326. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/objects/test_projects.py +0 -0
  327. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/objects/test_remote_mirrors.py +0 -0
  328. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/objects/test_resource_iteration_events.py +0 -0
  329. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/objects/test_resource_label_events.py +0 -0
  330. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/objects/test_resource_milestone_events.py +0 -0
  331. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/objects/test_resource_state_events.py +0 -0
  332. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/objects/test_runners.py +0 -0
  333. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/objects/test_secure_files.py +0 -0
  334. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/objects/test_services.py +0 -0
  335. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/objects/test_snippets.py +0 -0
  336. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/objects/test_statistics.py +0 -0
  337. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/objects/test_variables.py +0 -0
  338. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/test_config.py +0 -0
  339. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/test_exceptions.py +0 -0
  340. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/test_gitlab.py +0 -0
  341. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/test_gitlab_auth.py +0 -0
  342. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/test_types.py +0 -0
  343. {python-gitlab-4.4.0 → python_gitlab-4.5.0}/tests/unit/test_utils.py +0 -0
@@ -2,6 +2,292 @@
2
2
 
3
3
 
4
4
 
5
+ ## v4.5.0 (2024-05-13)
6
+
7
+ ### Build
8
+
9
+ * build: Add "--no-cache-dir" to pip commands in Dockerfile
10
+
11
+ This would not leave cache files in the built docker image.
12
+
13
+ Additionally, also only build the wheel in the build phase.
14
+
15
+ On my machine, before this PR, size is 74845395; after this PR, size is
16
+ 72617713. ([`4ef94c8`](https://github.com/python-gitlab/python-gitlab/commit/4ef94c8260e958873bb626e86d3241daa22f7ce6))
17
+
18
+ ### Chore
19
+
20
+ * chore(deps): update all non-major dependencies ([`4f338ae`](https://github.com/python-gitlab/python-gitlab/commit/4f338aed9c583a20ff5944e6ccbba5737c18b0f4))
21
+
22
+ * chore(deps): update gitlab/gitlab-ee docker tag to v16.11.2-ee.0 ([`9be48f0`](https://github.com/python-gitlab/python-gitlab/commit/9be48f0bcc2d32b5e8489f62f963389d5d54b2f2))
23
+
24
+ * chore(deps): update dependency myst-parser to v3 ([`9289189`](https://github.com/python-gitlab/python-gitlab/commit/92891890eb4730bc240213a212d392bcb869b800))
25
+
26
+ * chore(deps): update all non-major dependencies ([`65d0e65`](https://github.com/python-gitlab/python-gitlab/commit/65d0e6520dcbcf5a708a87960c65fdcaf7e44bf3))
27
+
28
+ * chore(deps): update dependency jinja2 to v3.1.4 [security] ([`8ea10c3`](https://github.com/python-gitlab/python-gitlab/commit/8ea10c360175453c721ad8e27386e642c2b68d88))
29
+
30
+ * chore(deps): update all non-major dependencies ([`1f0343c`](https://github.com/python-gitlab/python-gitlab/commit/1f0343c1154ca8ae5b1f61de1db2343a2ad652ec))
31
+
32
+ * chore(deps): update gitlab/gitlab-ee docker tag to v16.11.1-ee.0 ([`1ed8d6c`](https://github.com/python-gitlab/python-gitlab/commit/1ed8d6c21d3463b2ad09eb553871042e98090ffd))
33
+
34
+ * chore(deps): update all non-major dependencies ([`0e9f4da`](https://github.com/python-gitlab/python-gitlab/commit/0e9f4da30cea507fcf83746008d9de2ee5a3bb9d))
35
+
36
+ * chore(deps): update gitlab/gitlab-ee docker tag to v16 ([`ea8c4c2`](https://github.com/python-gitlab/python-gitlab/commit/ea8c4c2bc9f17f510415a697e0fb19cabff4135e))
37
+
38
+ * chore(deps): update all non-major dependencies ([`d5b5fb0`](https://github.com/python-gitlab/python-gitlab/commit/d5b5fb00d8947ed9733cbb5a273e2866aecf33bf))
39
+
40
+ * chore(deps): update dependency pytest-cov to v5 ([`db32000`](https://github.com/python-gitlab/python-gitlab/commit/db3200089ea83588ea7ad8bd5a7175d81f580630))
41
+
42
+ * chore: update `mypy` to 1.9.0 and resolve one issue
43
+
44
+ mypy 1.9.0 flagged one issue in the code. Resolve the issue. Current
45
+ unit tests already check that a `None` value returns `text/plain`. So
46
+ function is still working as expected. ([`dd00bfc`](https://github.com/python-gitlab/python-gitlab/commit/dd00bfc9c832aba0ed377573fe2e9120b296548d))
47
+
48
+ * chore(deps): update dependency black to v24.3.0 [security] ([`f6e8692`](https://github.com/python-gitlab/python-gitlab/commit/f6e8692cfc84b5af2eb6deec4ae1c4935b42e91c))
49
+
50
+ * chore(deps): update all non-major dependencies ([`14a3ffe`](https://github.com/python-gitlab/python-gitlab/commit/14a3ffe4cc161be51a39c204350b5cd45c602335))
51
+
52
+ * chore(deps): update all non-major dependencies ([`3c4dcca`](https://github.com/python-gitlab/python-gitlab/commit/3c4dccaf51695334a5057b85d5ff4045739d1ad1))
53
+
54
+ * chore(deps): update all non-major dependencies ([`04c569a`](https://github.com/python-gitlab/python-gitlab/commit/04c569a2130d053e35c1f2520ef8bab09f2f9651))
55
+
56
+ * chore: add tox `labels` to enable running groups of environments
57
+
58
+ tox now has a feature of `labels` which allows running groups of
59
+ environments using the command `tox -m LABEL_NAME`. For example
60
+ `tox -m lint` which has been setup to run the linters.
61
+
62
+ Bumped the minimum required version of tox to be 4.0, which was
63
+ released over a year ago. ([`d7235c7`](https://github.com/python-gitlab/python-gitlab/commit/d7235c74f8605f4abfb11eb257246864c7dcf709))
64
+
65
+ * chore: add py312 & py313 to tox environment list
66
+
67
+ Even though there isn't a Python 3.13 at this time, this is done for
68
+ the future. tox is already configured to just warn about missing
69
+ Python versions, but not fail if they don't exist. ([`679ddc7`](https://github.com/python-gitlab/python-gitlab/commit/679ddc7587d2add676fd2398cb9673bd1ca272e3))
70
+
71
+ * chore(deps): update python-semantic-release/python-semantic-release action to v9 ([`e11d889`](https://github.com/python-gitlab/python-gitlab/commit/e11d889cd19ec1555b2bbee15355a8cdfad61d5f))
72
+
73
+ * chore(deps): update all non-major dependencies ([`3c4b27e`](https://github.com/python-gitlab/python-gitlab/commit/3c4b27e64f4b51746b866f240a1291c2637355cc))
74
+
75
+ * chore(deps): update dependency furo to v2024 ([`f6fd02d`](https://github.com/python-gitlab/python-gitlab/commit/f6fd02d956529e2c4bce261fe7b3da1442aaea12))
76
+
77
+ * chore(deps): update dependency pytest to v8 ([`253babb`](https://github.com/python-gitlab/python-gitlab/commit/253babb9a7f8a7d469440fcfe1b2741ddcd8475e))
78
+
79
+ * chore(deps): update dependency pytest-docker to v3 ([`35d2aec`](https://github.com/python-gitlab/python-gitlab/commit/35d2aec04532919d6dd7b7090bc4d5209eddd10d))
80
+
81
+ * chore: update version of `black` for `pre-commit`
82
+
83
+ The version of `black` needs to be updated to be in sync with what is
84
+ in `requirements-lint.txt` ([`3501716`](https://github.com/python-gitlab/python-gitlab/commit/35017167a80809a49351f9e95916fafe61c7bfd5))
85
+
86
+ * chore(deps): update all non-major dependencies ([`7dc2fa6`](https://github.com/python-gitlab/python-gitlab/commit/7dc2fa6e632ed2c9adeb6ed32c4899ec155f6622))
87
+
88
+ * chore(deps): update codecov/codecov-action action to v4 ([`d2be1f7`](https://github.com/python-gitlab/python-gitlab/commit/d2be1f7608acadcc2682afd82d16d3706b7f7461))
89
+
90
+ * chore: adapt style for black v24 ([`4e68d32`](https://github.com/python-gitlab/python-gitlab/commit/4e68d32c77ed587ab42d229d9f44c3bc40d1d0e5))
91
+
92
+ * chore(deps): update dependency black to v24 ([`f59aee3`](https://github.com/python-gitlab/python-gitlab/commit/f59aee3ddcfaeeb29fcfab4cc6768dff6b5558cb))
93
+
94
+ * chore(deps): update all non-major dependencies ([`48726fd`](https://github.com/python-gitlab/python-gitlab/commit/48726fde9b3c2424310ff590b366b9fdefa4a146))
95
+
96
+ ### Documentation
97
+
98
+ * docs: add FAQ about conflicting parameters
99
+
100
+ We have received multiple issues lately about this. Add it to the FAQ. ([`683ce72`](https://github.com/python-gitlab/python-gitlab/commit/683ce723352cc09e1a4b65db28be981ae6bb9f71))
101
+
102
+ * docs(README): tweak GitLab CI usage docs ([`d9aaa99`](https://github.com/python-gitlab/python-gitlab/commit/d9aaa994568ad4896a1e8a0533ef0d1d2ba06bfa))
103
+
104
+ * docs: how to run smoke tests
105
+
106
+ Signed-off-by: Tim Knight <tim.knight1@engineering.digital.dwp.gov.uk> ([`2d1f487`](https://github.com/python-gitlab/python-gitlab/commit/2d1f4872390df10174f865f7a935bc73f7865fec))
107
+
108
+ * docs(objects): minor rst formatting typo
109
+
110
+ To correctly format a code block have to use `::` ([`57dfd17`](https://github.com/python-gitlab/python-gitlab/commit/57dfd1769b4e22b43dc0936aa3600cd7e78ba289))
111
+
112
+ * docs: correct rotate token example
113
+
114
+ Rotate token returns a dict. Change example to print the entire dict.
115
+
116
+ Closes: #2836 ([`c53e695`](https://github.com/python-gitlab/python-gitlab/commit/c53e6954f097ed10d52b40660d2fba73c2e0e300))
117
+
118
+ * docs: Note how to use the Docker image from within GitLab CI
119
+
120
+ Ref: #2823 ([`6d4bffb`](https://github.com/python-gitlab/python-gitlab/commit/6d4bffb5aaa676d32fc892ef1ac002973bc040cb))
121
+
122
+ * docs(artifacts): Fix argument indentation ([`c631eeb`](https://github.com/python-gitlab/python-gitlab/commit/c631eeb55556920f5975b1fa2b1a0354478ce3c0))
123
+
124
+ ### Feature
125
+
126
+ * feat(job_token_scope): support Groups in job token allowlist API (#2816)
127
+
128
+ * feat(job_token_scope): support job token access allowlist API
129
+
130
+ Signed-off-by: Tim Knight <tim.knight1@engineering.digital.dwp.gov.uk>
131
+ l.dwp.gov.uk>
132
+ Co-authored-by: Nejc Habjan <nejc.habjan@siemens.com> ([`2d1b749`](https://github.com/python-gitlab/python-gitlab/commit/2d1b7499a93db2c9600b383e166f7463a5f22085))
133
+
134
+ * feat(cli): allow skipping initial auth calls ([`001e596`](https://github.com/python-gitlab/python-gitlab/commit/001e59675f4a417a869f813d79c298a14268b87d))
135
+
136
+ * feat(api): allow updating protected branches (#2771)
137
+
138
+ * feat(api): allow updating protected branches
139
+
140
+ Closes #2390 ([`a867c48`](https://github.com/python-gitlab/python-gitlab/commit/a867c48baa6f10ffbfb785e624a6e3888a859571))
141
+
142
+ ### Fix
143
+
144
+ * fix: Consider `scope` an ArrayAttribute in PipelineJobManager
145
+
146
+ List query params like 'scope' were not being handled correctly for
147
+ pipeline/jobs endpoint.
148
+ This change ensures multiple values are appended with '[]', resulting in
149
+ the correct URL structure.
150
+
151
+ Signed-off-by: Guilherme Gallo <guilherme.gallo@collabora.com>
152
+
153
+ ---
154
+
155
+ Background:
156
+ If one queries for pipeline jobs with `scope=["failed", "success"]`
157
+
158
+ One gets:
159
+ GET /api/v4/projects/176/pipelines/1113028/jobs?scope=success&scope=failed
160
+
161
+ But it is supposed to get:
162
+ GET /api/v4/projects/176/pipelines/1113028/jobs?scope[]=success&scope[]=failed
163
+
164
+ The current version only considers the last element of the list argument.
165
+
166
+ Signed-off-by: Guilherme Gallo <guilherme.gallo@collabora.com> ([`c5d0404`](https://github.com/python-gitlab/python-gitlab/commit/c5d0404ac9edfbfd328e7b4f07f554366377df3f))
167
+
168
+ * fix(test): use different ids for merge request, approval rule, project
169
+
170
+ The original bug was that the merge request identifier was used instead of the
171
+ approval rule identifier. The test didn't notice that because it used `1` for
172
+ all identifiers. Make these identifiers different so that a mixup will become
173
+ apparent. ([`c23e6bd`](https://github.com/python-gitlab/python-gitlab/commit/c23e6bd5785205f0f4b4c80321153658fc23fb98))
174
+
175
+ * fix(api): fix saving merge request approval rules
176
+
177
+ Closes #2548 ([`b8b3849`](https://github.com/python-gitlab/python-gitlab/commit/b8b3849b2d4d3f2d9e81e5cf4f6b53368f7f0127))
178
+
179
+ * fix: user.warn() to show correct filename of issue
180
+
181
+ Previously would only go to the 2nd level of the stack for determining
182
+ the offending filename and line number. When it should be showing the
183
+ first filename outside of the python-gitlab source code. As we want it
184
+ to show the warning for the user of the libraries code.
185
+
186
+ Update test to show it works as expected. ([`529f1fa`](https://github.com/python-gitlab/python-gitlab/commit/529f1faacee46a88cb0a542306309eb835516796))
187
+
188
+ * fix(api): update manual job status when playing it ([`9440a32`](https://github.com/python-gitlab/python-gitlab/commit/9440a3255018d6a6e49269caf4c878d80db508a8))
189
+
190
+ * fix(cli): allow exclusive arguments as optional (#2770)
191
+
192
+ * fix(cli): allow exclusive arguments as optional
193
+
194
+ The CLI takes its arguments from the RequiredOptional, which has three fields: required, optional, and exclusive. In practice, the exclusive options are not defined as either required or optional, and would not be allowed in the CLI. This changes that, so that exclusive options are also added to the argument parser.
195
+
196
+ * fix(cli): inform argument parser that options are mutually exclusive
197
+
198
+ * fix(cli): use correct exclusive options, add unit test
199
+
200
+ Closes #2769 ([`7ec3189`](https://github.com/python-gitlab/python-gitlab/commit/7ec3189d6eacdb55925e8be886a44d7ee09eb9ca))
201
+
202
+ ### Test
203
+
204
+ * test: remove approve step
205
+
206
+ Signed-off-by: Tim Knight <tim.knight1@engineering.digital.dwp.gov.uk> ([`48a6705`](https://github.com/python-gitlab/python-gitlab/commit/48a6705558c5ab6fb08c62a18de350a5985099f8))
207
+
208
+ * test: tidy up functional tests
209
+
210
+ Signed-off-by: Tim Knight <tim.knight1@engineering.digital.dwp.gov.uk> ([`06266ea`](https://github.com/python-gitlab/python-gitlab/commit/06266ea5966c601c035ad8ce5840729e5f9baa57))
211
+
212
+ * test: update api tests for GL 16.10
213
+
214
+ - Make sure we're testing python-gitlab functionality,
215
+ make sure we're not awaiting on Gitlab Async functions
216
+ - Decouple and improve test stability
217
+
218
+ Signed-off-by: Tim Knight <tim.knight1@engineering.digital.dwp.gov.uk> ([`4bef473`](https://github.com/python-gitlab/python-gitlab/commit/4bef47301342703f87c1ce1d2920d54f9927a66a))
219
+
220
+ * test(functional): enable bulk import feature flag before test ([`b81da2e`](https://github.com/python-gitlab/python-gitlab/commit/b81da2e66ce385525730c089dbc2a5a85ba23287))
221
+
222
+ * test: don't use weak passwords
223
+
224
+ Newer versions of GitLab will refuse to create a user with a weak
225
+ password. In order for us to move to a newer GitLab version in testing
226
+ use a stronger password for the tests that create a user. ([`c64d126`](https://github.com/python-gitlab/python-gitlab/commit/c64d126142cc77eae4297b8deec27bb1d68b7a13))
227
+
228
+ * test: update tests for gitlab 16.8 functionality
229
+
230
+ - use programmatic dates for expires_at in tokens tests
231
+ - set PAT for 16.8 into tests
232
+
233
+ Signed-off-by: Tim Knight <tim.knight1@engineering.digital.dwp.gov.uk> ([`f8283ae`](https://github.com/python-gitlab/python-gitlab/commit/f8283ae69efd86448ae60d79dd8321af3f19ba1b))
234
+
235
+ * test(smoke): normalize all dist titles for smoke tests ([`ee013fe`](https://github.com/python-gitlab/python-gitlab/commit/ee013fe1579b001b4b30bae33404e827c7bdf8c1))
236
+
237
+
238
+ ## v4.4.0 (2024-01-15)
239
+
240
+ ### Chore
241
+
242
+ * chore(deps): update all non-major dependencies ([`550f935`](https://github.com/python-gitlab/python-gitlab/commit/550f9355d29a502bb022f68dab6c902bf6913552))
243
+
244
+ * chore(deps): update pre-commit hook pycqa/flake8 to v7 ([`9a199b6`](https://github.com/python-gitlab/python-gitlab/commit/9a199b6089152e181e71a393925e0ec581bc55ca))
245
+
246
+ * chore(deps): update dependency jinja2 to v3.1.3 [security] ([`880913b`](https://github.com/python-gitlab/python-gitlab/commit/880913b67cce711d96e89ce6813e305e4ba10908))
247
+
248
+ * chore(deps): update dependency flake8 to v7 ([`20243c5`](https://github.com/python-gitlab/python-gitlab/commit/20243c532a8a6d28eee0caff5b9c30cc7376a162))
249
+
250
+ * chore(deps): update all non-major dependencies ([`cbc13a6`](https://github.com/python-gitlab/python-gitlab/commit/cbc13a61e0f15880b49a3d0208cc603d7d0b57e3))
251
+
252
+ * chore(ci): align upload and download action versions ([`dcca59d`](https://github.com/python-gitlab/python-gitlab/commit/dcca59d1a5966283c1120cfb639c01a76214d2b2))
253
+
254
+ * chore(deps): update actions/upload-artifact action to v4 ([`7114af3`](https://github.com/python-gitlab/python-gitlab/commit/7114af341dd12b7fb63ffc08650c455ead18ab70))
255
+
256
+ * chore(ci): add Python 3.13 development CI job
257
+
258
+ Add a job to test the development versions of Python 3.13. ([`ff0c11b`](https://github.com/python-gitlab/python-gitlab/commit/ff0c11b7b75677edd85f846a4dbdab08491a6bd7))
259
+
260
+ * chore(deps): update all non-major dependencies ([`369a595`](https://github.com/python-gitlab/python-gitlab/commit/369a595a8763109a2af8a95a8e2423ebb30b9320))
261
+
262
+ ### Feature
263
+
264
+ * feat(api): add reviewer_details manager for mergrequest to get reviewers of merge request
265
+
266
+ Those changes implements 'GET /projects/:id/merge_requests/:merge_request_iid/reviewers' gitlab API call.
267
+ Naming for call is not reviewers because reviewers atribute already presen in merge request response ([`adbd90c`](https://github.com/python-gitlab/python-gitlab/commit/adbd90cadffe1d9e9716a6e3826f30664866ad3f))
268
+
269
+ * feat(api): support access token rotate API ([`b13971d`](https://github.com/python-gitlab/python-gitlab/commit/b13971d5472cb228f9e6a8f2fa05a7cc94d03ebe))
270
+
271
+ * feat(api): support single resource access token get API ([`dae9e52`](https://github.com/python-gitlab/python-gitlab/commit/dae9e522a26041f5b3c6461cc8a5e284f3376a79))
272
+
273
+ ### Fix
274
+
275
+ * fix(cli): support binary files with `@` notation
276
+
277
+ Support binary files being used in the CLI with arguments using the
278
+ `@` notation. For example `--avatar @/path/to/avatar.png`
279
+
280
+ Also explicitly catch the common OSError exception, which is the
281
+ parent exception for things like: FileNotFoundError, PermissionError
282
+ and more exceptions.
283
+
284
+ Remove the bare exception handling. We would rather have the full
285
+ traceback of any exceptions that we don't know about and add them
286
+ later if needed.
287
+
288
+ Closes: #2752 ([`57749d4`](https://github.com/python-gitlab/python-gitlab/commit/57749d46de1d975aacb82758c268fc26e5e6ed8b))
289
+
290
+
5
291
  ## v4.3.0 (2023-12-28)
6
292
 
7
293
  ### Chore
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: python-gitlab
3
- Version: 4.4.0
3
+ Version: 4.5.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>
@@ -149,6 +149,23 @@ You can also mount your own config file:
149
149
 
150
150
  $ docker run -it --rm -v /path/to/python-gitlab.cfg:/etc/python-gitlab.cfg registry.gitlab.com/python-gitlab/python-gitlab:latest <command> ...
151
151
 
152
+ Usage inside GitLab CI
153
+ ~~~~~~~~~~~~~~~~~~~~~~
154
+
155
+ If you want to use the Docker image directly inside your GitLab CI as an ``image``, you will need to override
156
+ the ``entrypoint``, `as noted in the official GitLab documentation <https://docs.gitlab.com/ee/ci/docker/using_docker_images.html#override-the-entrypoint-of-an-image>`__:
157
+
158
+ .. code-block:: yaml
159
+
160
+ Job Name:
161
+ image:
162
+ name: registry.gitlab.com/python-gitlab/python-gitlab:latest
163
+ entrypoint: [""]
164
+ before_script:
165
+ gitlab --version
166
+ script:
167
+ gitlab <command>
168
+
152
169
  Building the image
153
170
  ~~~~~~~~~~~~~~~~~~
154
171
 
@@ -112,6 +112,23 @@ You can also mount your own config file:
112
112
 
113
113
  $ docker run -it --rm -v /path/to/python-gitlab.cfg:/etc/python-gitlab.cfg registry.gitlab.com/python-gitlab/python-gitlab:latest <command> ...
114
114
 
115
+ Usage inside GitLab CI
116
+ ~~~~~~~~~~~~~~~~~~~~~~
117
+
118
+ If you want to use the Docker image directly inside your GitLab CI as an ``image``, you will need to override
119
+ the ``entrypoint``, `as noted in the official GitLab documentation <https://docs.gitlab.com/ee/ci/docker/using_docker_images.html#override-the-entrypoint-of-an-image>`__:
120
+
121
+ .. code-block:: yaml
122
+
123
+ Job Name:
124
+ image:
125
+ name: registry.gitlab.com/python-gitlab/python-gitlab:latest
126
+ entrypoint: [""]
127
+ before_script:
128
+ gitlab --version
129
+ script:
130
+ gitlab <command>
131
+
115
132
  Building the image
116
133
  ~~~~~~~~~~~~~~~~~~
117
134
 
@@ -162,6 +162,11 @@ with the GitLab server error message:
162
162
  ...
163
163
  GitlabListError: 400: sort does not have a valid value
164
164
 
165
+ .. _conflicting_parameters:
166
+
167
+ Conflicting Parameters
168
+ ======================
169
+
165
170
  You can use the ``query_parameters`` argument to send arguments that would
166
171
  conflict with python or python-gitlab when using them as kwargs:
167
172
 
@@ -9,9 +9,11 @@ CLI examples
9
9
  CI Lint
10
10
  -------
11
11
 
12
+ **ci-lint has been Removed in Gitlab 16, use project-ci-lint instead**
13
+
12
14
  Lint a CI YAML configuration from a string:
13
15
 
14
- .. note::
16
+ .. note::
15
17
 
16
18
  To see output, you will need to use the ``-v``/``--verbose`` flag.
17
19
 
@@ -39,6 +41,9 @@ Validate a CI YAML configuration from a file (lints and exits with non-zero on f
39
41
 
40
42
  $ gitlab ci-lint validate --content @.gitlab-ci.yml
41
43
 
44
+ Project CI Lint
45
+ ---------------
46
+
42
47
  Lint a project's CI YAML configuration:
43
48
 
44
49
  .. code-block:: console
@@ -78,3 +78,23 @@ access an attribute that is shadowed by python-gitlab's own methods or managers.
78
78
 
79
79
  You can use the object's ``attributes`` dictionary to access it directly instead.
80
80
  See the :ref:`objects` section for more details on how attributes are exposed.
81
+
82
+ .. _conflicting_parameters_faq:
83
+
84
+ I cannot use the parameter ``path`` (or some other parameter) as it conflicts with the library
85
+ """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
86
+
87
+ ``path`` is used by the python-gitlab library and cannot be used as a parameter
88
+ if wanting to send it to the GitLab instance. You can use the
89
+ ``query_parameters`` argument to send arguments that would conflict with python
90
+ or python-gitlab when using them as kwargs:
91
+
92
+ .. code-block:: python
93
+
94
+ ## invalid, as ``path`` is interpreted by python-gitlab as the Path or full
95
+ ## URL to query ('/projects' or 'http://whatever/v4/api/projects')
96
+ project.commits.list(path='some_file_path', iterator=True)
97
+
98
+ project.commits.list(query_parameters={'path': 'some_file_path'}, iterator=True) # OK
99
+
100
+ See :ref:`Conflicting Parameters <conflicting_parameters>` for more information.
@@ -0,0 +1,101 @@
1
+ #####################
2
+ CI/CD job token scope
3
+ #####################
4
+
5
+ Reference
6
+ ---------
7
+
8
+ * v4 API:
9
+
10
+ + :class:`gitlab.v4.objects.ProjectJobTokenScope`
11
+ + :class:`gitlab.v4.objects.ProjectJobTokenScopeManager`
12
+ + :attr:`gitlab.v4.objects.Project.job_token_scope`
13
+
14
+ * GitLab API: https://docs.gitlab.com/ee/api/project_job_token_scopes.html
15
+
16
+ Examples
17
+ --------
18
+
19
+ .. warning::
20
+
21
+ The GitLab API does **not** return any data when saving or updating
22
+ the job token scope settings. You need to call ``refresh()`` (or ``get()``
23
+ a new object) as shown below to get the latest state.
24
+
25
+ Get a project's CI/CD job token access settings::
26
+
27
+ scope = project.job_token_scope.get()
28
+ print(scope.inbound_enabled)
29
+ # True
30
+
31
+ Update the job token scope settings::
32
+
33
+ scope.enabled = False
34
+ scope.save()
35
+
36
+ .. warning::
37
+
38
+ As you can see above, the attributes you receive from and send to the GitLab API
39
+ are not consistent. GitLab returns ``inbound_enabled`` and ``outbound_enabled``,
40
+ but expects ``enabled``, which only refers to the inbound scope. This is important
41
+ when accessing and updating these attributes.
42
+
43
+ Or update the job token scope settings directly::
44
+
45
+ project.job_token_scope.update(new_data={"enabled": True})
46
+
47
+ Refresh the current state of job token scope::
48
+
49
+ scope.refresh()
50
+ print(scope.inbound_enabled)
51
+ # False
52
+
53
+ Get a project's CI/CD job token inbound allowlist::
54
+
55
+ allowlist = scope.allowlist.list()
56
+
57
+ Add a project to the project's inbound allowlist::
58
+
59
+ allowed_project = scope.allowlist.create({"target_project_id": 42})
60
+
61
+ Remove a project from the project's inbound allowlist::
62
+
63
+ allowed_project.delete()
64
+ # or directly using a project ID
65
+ scope.allowlist.delete(42)
66
+
67
+ .. warning::
68
+
69
+ Similar to above, the ID attributes you receive from the create and list
70
+ APIs are not consistent (in create() the id is returned as ``source_project_id`` whereas list() returns as ``id``). To safely retrieve the ID of the allowlisted project
71
+ regardless of how the object was created, always use its ``.get_id()`` method.
72
+
73
+ Using ``.get_id()``::
74
+
75
+ resp = allowlist.create({"target_project_id": 2})
76
+ allowlist_id = resp.get_id()
77
+
78
+ allowlists = project.allowlist.list()
79
+ for allowlist in allowlists:
80
+ allowlist_id == allowlist.get_id()
81
+
82
+ Get a project's CI/CD job token inbound groups allowlist::
83
+
84
+ allowlist = scope.groups_allowlist.list()
85
+
86
+ Add a project to the project's inbound groups allowlist::
87
+
88
+ allowed_project = scope.groups_allowlist.create({"target_project_id": 42})
89
+
90
+ Remove a project from the project's inbound agroups llowlist::
91
+
92
+ allowed_project.delete()
93
+ # or directly using a Group ID
94
+ scope.groups_allowlist.delete(42)
95
+
96
+ .. warning::
97
+
98
+ Similar to above, the ID attributes you receive from the create and list
99
+ APIs are not consistent. To safely retrieve the ID of the allowlisted group
100
+ regardless of how the object was created, always use its ``.get_id()`` method.
101
+
@@ -58,8 +58,8 @@ Rotate a personal access token and retrieve its new value::
58
58
  token.rotate()
59
59
  print(token.token)
60
60
  # or directly using a token ID
61
- new_token = gl.personal_access_tokens.rotate(42)
62
- print(new_token.token)
61
+ new_token_dict = gl.personal_access_tokens.rotate(42)
62
+ print(new_token_dict)
63
63
 
64
64
  Create a personal access token for a user (admin only)::
65
65
 
@@ -27,6 +27,11 @@ Get a single protected branch::
27
27
 
28
28
  p_branch = project.protectedbranches.get('main')
29
29
 
30
+ Update a protected branch::
31
+
32
+ p_branch.allow_force_push = True
33
+ p_branch.save()
34
+
30
35
  Create a protected branch::
31
36
 
32
37
  p_branch = project.protectedbranches.create({
@@ -13,8 +13,7 @@ else:
13
13
 
14
14
  class BackendResponse(Protocol):
15
15
  @abc.abstractmethod
16
- def __init__(self, response: requests.Response) -> None:
17
- ...
16
+ def __init__(self, response: requests.Response) -> None: ...
18
17
 
19
18
 
20
19
  class Backend(Protocol):
@@ -30,5 +29,4 @@ class Backend(Protocol):
30
29
  verify: Optional[Union[bool, str]],
31
30
  stream: Optional[bool],
32
31
  **kwargs: Any,
33
- ) -> BackendResponse:
34
- ...
32
+ ) -> BackendResponse: ...
@@ -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.4.0"
6
+ __version__ = "4.5.0"
@@ -282,6 +282,16 @@ def _get_base_parser(add_help: bool = True) -> argparse.ArgumentParser:
282
282
  help=("GitLab CI job token [env var: CI_JOB_TOKEN]"),
283
283
  required=False,
284
284
  )
285
+ parser.add_argument(
286
+ "--skip-login",
287
+ help=(
288
+ "Skip initial authenticated API call to the current user endpoint. "
289
+ "This may be useful when invoking the CLI in scripts. "
290
+ "[env var: GITLAB_SKIP_LOGIN]"
291
+ ),
292
+ action="store_true",
293
+ default=os.getenv("GITLAB_SKIP_LOGIN"),
294
+ )
285
295
  return parser
286
296
 
287
297
 
@@ -368,6 +378,7 @@ def main() -> None:
368
378
  debug = args.debug
369
379
  gitlab_resource = args.gitlab_resource
370
380
  resource_action = args.resource_action
381
+ skip_login = args.skip_login
371
382
 
372
383
  args_dict = vars(args)
373
384
  # Remove CLI behavior-related args
@@ -390,6 +401,7 @@ def main() -> None:
390
401
  "private_token",
391
402
  "oauth_token",
392
403
  "job_token",
404
+ "skip_login",
393
405
  ):
394
406
  args_dict.pop(item)
395
407
  args_dict = {k: _parse_value(v) for k, v in args_dict.items() if v is not None}
@@ -398,7 +410,7 @@ def main() -> None:
398
410
  gl = gitlab.Gitlab.merge_config(vars(options), gitlab_id, config_files)
399
411
  if debug:
400
412
  gl.enable_debug()
401
- if gl.private_token or gl.oauth_token:
413
+ if not skip_login and (gl.private_token or gl.oauth_token):
402
414
  gl.auth()
403
415
  except Exception as e:
404
416
  die(str(e))
@@ -40,7 +40,6 @@ _PAGINATION_URL = (
40
40
 
41
41
 
42
42
  class Gitlab:
43
-
44
43
  """Represents a GitLab server connection.
45
44
 
46
45
  Args:
@@ -18,7 +18,8 @@ class _StdoutStream:
18
18
 
19
19
  def get_content_type(content_type: Optional[str]) -> str:
20
20
  message = email.message.Message()
21
- message["content-type"] = content_type
21
+ if content_type is not None:
22
+ message["content-type"] = content_type
22
23
 
23
24
  return message.get_content_type()
24
25
 
@@ -191,8 +192,7 @@ def warn(
191
192
  stacklevel = 1
192
193
  warning_from = ""
193
194
  for stacklevel, frame in enumerate(reversed(stack), start=1):
194
- if stacklevel == 2:
195
- warning_from = f" (python-gitlab: {frame.filename}:{frame.lineno})"
195
+ warning_from = f" (python-gitlab: {frame.filename}:{frame.lineno})"
196
196
  frame_dir = str(pathlib.Path(frame.filename).parent.resolve())
197
197
  if not frame_dir.startswith(str(pg_dir)):
198
198
  break
@@ -262,6 +262,10 @@ def _populate_sub_parser_by_class(
262
262
  sub_parser_action.add_argument(
263
263
  f"--{x.replace('_', '-')}", required=False
264
264
  )
265
+ if mgr_cls._create_attrs.exclusive:
266
+ group = sub_parser_action.add_mutually_exclusive_group()
267
+ for x in mgr_cls._create_attrs.exclusive:
268
+ group.add_argument(f"--{x.replace('_', '-')}")
265
269
 
266
270
  if action_name == "update":
267
271
  if cls._id_attr is not None:
@@ -280,6 +284,11 @@ def _populate_sub_parser_by_class(
280
284
  f"--{x.replace('_', '-')}", required=False
281
285
  )
282
286
 
287
+ if mgr_cls._update_attrs.exclusive:
288
+ group = sub_parser_action.add_mutually_exclusive_group()
289
+ for x in mgr_cls._update_attrs.exclusive:
290
+ group.add_argument(f"--{x.replace('_', '-')}")
291
+
283
292
  if cls.__name__ in cli.custom_actions:
284
293
  name = cls.__name__
285
294
  for action_name in cli.custom_actions[name]: