python-gitlab 4.9.0__tar.gz → 4.11.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 (351) hide show
  1. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/CHANGELOG.md +92 -0
  2. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/PKG-INFO +3 -1
  3. python_gitlab-4.11.0/docs/api-usage-graphql.rst +52 -0
  4. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/api-usage.rst +4 -4
  5. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/cli-usage.rst +3 -3
  6. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/faq.rst +1 -1
  7. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/groups.rst +8 -4
  8. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/pipelines_and_jobs.rst +1 -1
  9. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/projects.rst +7 -3
  10. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/index.rst +1 -0
  11. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/__init__.py +2 -1
  12. python_gitlab-4.11.0/gitlab/_backends/graphql.py +24 -0
  13. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/_version.py +1 -1
  14. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/client.py +116 -47
  15. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/exceptions.py +5 -0
  16. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/utils.py +91 -2
  17. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/hooks.py +29 -0
  18. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/members.py +4 -2
  19. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/pyproject.toml +1 -0
  20. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/python_gitlab.egg-info/PKG-INFO +3 -1
  21. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/python_gitlab.egg-info/SOURCES.txt +5 -0
  22. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/python_gitlab.egg-info/requires.txt +3 -0
  23. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/requirements-docs.txt +3 -3
  24. python_gitlab-4.11.0/requirements-lint.txt +14 -0
  25. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/requirements-test.txt +3 -2
  26. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/requirements.txt +2 -0
  27. python_gitlab-4.11.0/tests/functional/api/test_graphql.py +20 -0
  28. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/functional/cli/test_cli_projects.py +1 -1
  29. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/functional/fixtures/.env +1 -1
  30. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/functional/fixtures/set_token.rb +1 -1
  31. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/install/test_install.py +1 -1
  32. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_hooks.py +64 -0
  33. python_gitlab-4.11.0/tests/unit/test_graphql.py +60 -0
  34. python_gitlab-4.11.0/tests/unit/test_retry.py +41 -0
  35. python_gitlab-4.9.0/requirements-lint.txt +0 -13
  36. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/AUTHORS +0 -0
  37. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/COPYING +0 -0
  38. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/MANIFEST.in +0 -0
  39. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/README.rst +0 -0
  40. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/Makefile +0 -0
  41. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/__init__.py +0 -0
  42. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/_static/js/gitter.js +0 -0
  43. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/api/gitlab.rst +0 -0
  44. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/api/gitlab.v4.rst +0 -0
  45. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/api-levels.rst +0 -0
  46. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/api-objects.rst +0 -0
  47. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/api-usage-advanced.rst +0 -0
  48. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/changelog.md +0 -0
  49. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/cli-examples.rst +0 -0
  50. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/cli-objects.rst +0 -0
  51. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/conf.py +0 -0
  52. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/ext/__init__.py +0 -0
  53. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/ext/docstrings.py +0 -0
  54. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/ext/manager_tmpl.j2 +0 -0
  55. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/access_requests.rst +0 -0
  56. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/appearance.rst +0 -0
  57. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/applications.rst +0 -0
  58. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/badges.rst +0 -0
  59. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/boards.rst +0 -0
  60. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/branches.rst +0 -0
  61. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/bulk_imports.rst +0 -0
  62. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/ci_lint.rst +0 -0
  63. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/cluster_agents.rst +0 -0
  64. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/clusters.rst +0 -0
  65. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/commits.rst +0 -0
  66. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/deploy_keys.rst +0 -0
  67. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/deploy_tokens.rst +0 -0
  68. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/deployments.rst +0 -0
  69. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/discussions.rst +0 -0
  70. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/draft_notes.rst +0 -0
  71. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/emojis.rst +0 -0
  72. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/environments.rst +0 -0
  73. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/epics.rst +0 -0
  74. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/events.rst +0 -0
  75. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/features.rst +0 -0
  76. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/geo_nodes.rst +0 -0
  77. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/group_access_tokens.rst +0 -0
  78. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/invitations.rst +0 -0
  79. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/issues.rst +0 -0
  80. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/iterations.rst +0 -0
  81. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/job_token_scope.rst +0 -0
  82. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/keys.rst +0 -0
  83. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/labels.rst +0 -0
  84. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/merge_request_approvals.rst +0 -0
  85. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/merge_requests.rst +0 -0
  86. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/merge_trains.rst +0 -0
  87. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/messages.rst +0 -0
  88. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/milestones.rst +0 -0
  89. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/namespaces.rst +0 -0
  90. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/notes.rst +0 -0
  91. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/notifications.rst +0 -0
  92. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/packages.rst +0 -0
  93. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/pagesdomains.rst +0 -0
  94. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/personal_access_tokens.rst +0 -0
  95. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/project_access_tokens.rst +0 -0
  96. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/protected_branches.rst +0 -0
  97. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/protected_container_repositories.rst +0 -0
  98. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/protected_environments.rst +0 -0
  99. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/protected_packages.rst +0 -0
  100. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/releases.rst +0 -0
  101. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/remote_mirrors.rst +0 -0
  102. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/repositories.rst +0 -0
  103. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/repository_tags.rst +0 -0
  104. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/resource_groups.rst +0 -0
  105. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/runners.rst +0 -0
  106. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/search.rst +0 -0
  107. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/secure_files.rst +0 -0
  108. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/settings.rst +0 -0
  109. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/sidekiq.rst +0 -0
  110. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/snippets.rst +0 -0
  111. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/statistics.rst +0 -0
  112. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/system_hooks.rst +0 -0
  113. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/templates.rst +0 -0
  114. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/todos.rst +0 -0
  115. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/topics.rst +0 -0
  116. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/users.rst +0 -0
  117. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/variables.rst +0 -0
  118. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/gl_objects/wikis.rst +0 -0
  119. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/make.bat +0 -0
  120. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/docs/release-notes.rst +0 -0
  121. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/__main__.py +0 -0
  122. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/_backends/__init__.py +0 -0
  123. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/_backends/protocol.py +0 -0
  124. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/_backends/requests_backend.py +0 -0
  125. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/base.py +0 -0
  126. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/cli.py +0 -0
  127. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/config.py +0 -0
  128. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/const.py +0 -0
  129. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/mixins.py +0 -0
  130. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/py.typed +0 -0
  131. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/types.py +0 -0
  132. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/__init__.py +0 -0
  133. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/cli.py +0 -0
  134. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/__init__.py +0 -0
  135. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/access_requests.py +0 -0
  136. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/appearance.py +0 -0
  137. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/applications.py +0 -0
  138. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/artifacts.py +0 -0
  139. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/audit_events.py +0 -0
  140. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/award_emojis.py +0 -0
  141. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/badges.py +0 -0
  142. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/boards.py +0 -0
  143. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/branches.py +0 -0
  144. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/broadcast_messages.py +0 -0
  145. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/bulk_imports.py +0 -0
  146. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/ci_lint.py +0 -0
  147. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/cluster_agents.py +0 -0
  148. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/clusters.py +0 -0
  149. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/commits.py +0 -0
  150. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/container_registry.py +0 -0
  151. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/custom_attributes.py +0 -0
  152. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/deploy_keys.py +0 -0
  153. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/deploy_tokens.py +0 -0
  154. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/deployments.py +0 -0
  155. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/discussions.py +0 -0
  156. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/draft_notes.py +0 -0
  157. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/environments.py +0 -0
  158. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/epics.py +0 -0
  159. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/events.py +0 -0
  160. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/export_import.py +0 -0
  161. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/features.py +0 -0
  162. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/files.py +0 -0
  163. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/geo_nodes.py +0 -0
  164. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/group_access_tokens.py +0 -0
  165. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/groups.py +0 -0
  166. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/integrations.py +0 -0
  167. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/invitations.py +0 -0
  168. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/issues.py +0 -0
  169. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/iterations.py +0 -0
  170. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/job_token_scope.py +0 -0
  171. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/jobs.py +0 -0
  172. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/keys.py +0 -0
  173. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/labels.py +0 -0
  174. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/ldap.py +0 -0
  175. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/merge_request_approvals.py +0 -0
  176. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/merge_requests.py +0 -0
  177. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/merge_trains.py +0 -0
  178. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/milestones.py +0 -0
  179. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/namespaces.py +0 -0
  180. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/notes.py +0 -0
  181. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/notification_settings.py +0 -0
  182. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/package_protection_rules.py +0 -0
  183. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/packages.py +0 -0
  184. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/pages.py +0 -0
  185. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/personal_access_tokens.py +0 -0
  186. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/pipelines.py +0 -0
  187. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/project_access_tokens.py +0 -0
  188. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/projects.py +0 -0
  189. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/push_rules.py +0 -0
  190. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/registry_protection_rules.py +0 -0
  191. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/releases.py +0 -0
  192. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/repositories.py +0 -0
  193. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/resource_groups.py +0 -0
  194. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/reviewers.py +0 -0
  195. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/runners.py +0 -0
  196. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/secure_files.py +0 -0
  197. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/service_accounts.py +0 -0
  198. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/settings.py +0 -0
  199. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/sidekiq.py +0 -0
  200. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/snippets.py +0 -0
  201. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/statistics.py +0 -0
  202. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/tags.py +0 -0
  203. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/templates.py +0 -0
  204. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/todos.py +0 -0
  205. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/topics.py +0 -0
  206. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/triggers.py +0 -0
  207. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/users.py +0 -0
  208. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/variables.py +0 -0
  209. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/gitlab/v4/objects/wikis.py +0 -0
  210. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/python_gitlab.egg-info/dependency_links.txt +0 -0
  211. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/python_gitlab.egg-info/entry_points.txt +0 -0
  212. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/python_gitlab.egg-info/top_level.txt +0 -0
  213. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/requirements-docker.txt +0 -0
  214. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/requirements-precommit.txt +0 -0
  215. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/setup.cfg +0 -0
  216. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/__init__.py +0 -0
  217. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/conftest.py +0 -0
  218. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/functional/__init__.py +0 -0
  219. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/functional/api/__init__.py +0 -0
  220. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/functional/api/test_boards.py +0 -0
  221. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/functional/api/test_branches.py +0 -0
  222. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/functional/api/test_bulk_imports.py +0 -0
  223. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/functional/api/test_current_user.py +0 -0
  224. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/functional/api/test_deploy_keys.py +0 -0
  225. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/functional/api/test_deploy_tokens.py +0 -0
  226. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/functional/api/test_epics.py +0 -0
  227. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/functional/api/test_gitlab.py +0 -0
  228. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/functional/api/test_groups.py +0 -0
  229. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/functional/api/test_import_export.py +0 -0
  230. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/functional/api/test_issues.py +0 -0
  231. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/functional/api/test_keys.py +0 -0
  232. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/functional/api/test_lazy_objects.py +0 -0
  233. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/functional/api/test_merge_requests.py +0 -0
  234. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/functional/api/test_packages.py +0 -0
  235. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/functional/api/test_project_job_token_scope.py +0 -0
  236. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/functional/api/test_projects.py +0 -0
  237. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/functional/api/test_push_rules.py +0 -0
  238. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/functional/api/test_registry.py +0 -0
  239. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/functional/api/test_releases.py +0 -0
  240. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/functional/api/test_repository.py +0 -0
  241. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/functional/api/test_services.py +0 -0
  242. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/functional/api/test_snippets.py +0 -0
  243. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/functional/api/test_statistics.py +0 -0
  244. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/functional/api/test_topics.py +0 -0
  245. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/functional/api/test_users.py +0 -0
  246. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/functional/api/test_variables.py +0 -0
  247. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/functional/api/test_wikis.py +0 -0
  248. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/functional/cli/__init__.py +0 -0
  249. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/functional/cli/conftest.py +0 -0
  250. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/functional/cli/test_cli.py +0 -0
  251. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/functional/cli/test_cli_artifacts.py +0 -0
  252. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/functional/cli/test_cli_packages.py +0 -0
  253. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/functional/cli/test_cli_repository.py +0 -0
  254. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/functional/cli/test_cli_resource_access_tokens.py +0 -0
  255. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/functional/cli/test_cli_users.py +0 -0
  256. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/functional/cli/test_cli_v4.py +0 -0
  257. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/functional/cli/test_cli_variables.py +0 -0
  258. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/functional/conftest.py +0 -0
  259. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/functional/ee-test.py +0 -0
  260. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/functional/fixtures/__init__.py +0 -0
  261. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/functional/fixtures/avatar.png +0 -0
  262. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/functional/fixtures/create_license.rb +0 -0
  263. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/functional/fixtures/docker-compose.yml +0 -0
  264. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/functional/fixtures/docker.py +0 -0
  265. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/functional/fixtures/invalid_auth.cfg +0 -0
  266. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/functional/fixtures/invalid_version.cfg +0 -0
  267. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/functional/helpers.py +0 -0
  268. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/smoke/__init__.py +0 -0
  269. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/smoke/test_dists.py +0 -0
  270. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/__init__.py +0 -0
  271. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/_backends/__init__.py +0 -0
  272. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/_backends/test_requests_backend.py +0 -0
  273. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/base/test_rest_manager.py +0 -0
  274. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/base/test_rest_object.py +0 -0
  275. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/conftest.py +0 -0
  276. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/helpers.py +0 -0
  277. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/meta/__init__.py +0 -0
  278. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/meta/test_ensure_type_hints.py +0 -0
  279. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/meta/test_imports.py +0 -0
  280. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/meta/test_mro.py +0 -0
  281. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/mixins/__init__.py +0 -0
  282. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/mixins/test_meta_mixins.py +0 -0
  283. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/mixins/test_mixin_methods.py +0 -0
  284. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/mixins/test_object_mixins_attributes.py +0 -0
  285. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/__init__.py +0 -0
  286. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/conftest.py +0 -0
  287. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_appearance.py +0 -0
  288. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_applications.py +0 -0
  289. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_audit_events.py +0 -0
  290. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_badges.py +0 -0
  291. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_bridges.py +0 -0
  292. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_bulk_imports.py +0 -0
  293. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_ci_lint.py +0 -0
  294. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_cluster_agents.py +0 -0
  295. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_commits.py +0 -0
  296. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_deploy_tokens.py +0 -0
  297. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_deployments.py +0 -0
  298. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_draft_notes.py +0 -0
  299. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_environments.py +0 -0
  300. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_group_access_tokens.py +0 -0
  301. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_groups.py +0 -0
  302. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_invitations.py +0 -0
  303. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_issues.py +0 -0
  304. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_iterations.py +0 -0
  305. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_job_artifacts.py +0 -0
  306. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_job_token_scope.py +0 -0
  307. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_jobs.py +0 -0
  308. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_keys.py +0 -0
  309. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_members.py +0 -0
  310. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_merge_request_pipelines.py +0 -0
  311. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_merge_requests.py +0 -0
  312. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_merge_trains.py +0 -0
  313. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_package_protection_rules.py +0 -0
  314. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_packages.py +0 -0
  315. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_personal_access_tokens.py +0 -0
  316. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_pipeline_schedules.py +0 -0
  317. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_pipelines.py +0 -0
  318. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_project_access_tokens.py +0 -0
  319. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_project_import_export.py +0 -0
  320. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_project_merge_request_approvals.py +0 -0
  321. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_project_statistics.py +0 -0
  322. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_projects.py +0 -0
  323. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_registry_protection_rules.py +0 -0
  324. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_registry_repositories.py +0 -0
  325. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_releases.py +0 -0
  326. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_remote_mirrors.py +0 -0
  327. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_repositories.py +0 -0
  328. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_resource_groups.py +0 -0
  329. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_resource_iteration_events.py +0 -0
  330. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_resource_label_events.py +0 -0
  331. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_resource_milestone_events.py +0 -0
  332. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_resource_state_events.py +0 -0
  333. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_runners.py +0 -0
  334. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_secure_files.py +0 -0
  335. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_services.py +0 -0
  336. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_snippets.py +0 -0
  337. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_statistics.py +0 -0
  338. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_submodules.py +0 -0
  339. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_todos.py +0 -0
  340. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_topics.py +0 -0
  341. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_users.py +0 -0
  342. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/objects/test_variables.py +0 -0
  343. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/test_cli.py +0 -0
  344. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/test_config.py +0 -0
  345. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/test_exceptions.py +0 -0
  346. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/test_gitlab.py +0 -0
  347. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/test_gitlab_auth.py +0 -0
  348. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/test_gitlab_http_methods.py +0 -0
  349. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/test_types.py +0 -0
  350. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tests/unit/test_utils.py +0 -0
  351. {python_gitlab-4.9.0 → python_gitlab-4.11.0}/tox.ini +0 -0
@@ -1,5 +1,97 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## v4.11.0 (2024-09-13)
4
+
5
+ ### Chore
6
+
7
+ * chore(pre-commit): add deps ([`fe5e608`](https://github.com/python-gitlab/python-gitlab/commit/fe5e608bc6cc04863bd4d1d9dbe101fffd88e954))
8
+
9
+ * chore(deps): update all non-major dependencies ([`fac8bf9`](https://github.com/python-gitlab/python-gitlab/commit/fac8bf9f3e2a0218f96337536d08dec9991bfc1a))
10
+
11
+ * chore(deps): update dependency types-setuptools to v74 ([`bdfaddb`](https://github.com/python-gitlab/python-gitlab/commit/bdfaddb89ae7ba351bd3a21c6cecc528772db4de))
12
+
13
+ * chore(deps): update all non-major dependencies ([`88c7529`](https://github.com/python-gitlab/python-gitlab/commit/88c75297377dd1f1106b5bc673946cebd563e0a1))
14
+
15
+ ### Documentation
16
+
17
+ * docs(objects): fix typo in get latest pipeline ([`b9f5c12`](https://github.com/python-gitlab/python-gitlab/commit/b9f5c12d3ba6ca4e4321a81e7610d03fb4440c02))
18
+
19
+ ### Feature
20
+
21
+ * feat(client): make retries configurable in GraphQL ([`145870e`](https://github.com/python-gitlab/python-gitlab/commit/145870e628ed3b648a0a29fc551a6f38469b684a))
22
+
23
+ * feat(client): add retry handling to GraphQL client ([`8898c38`](https://github.com/python-gitlab/python-gitlab/commit/8898c38b97ed36d9ff8f2f20dee27ef1448b9f83))
24
+
25
+ * feat(api): add exclusive GET attrs for /projects/:id/members ([`e637808`](https://github.com/python-gitlab/python-gitlab/commit/e637808bcb74498438109d7ed352071ebaa192d5))
26
+
27
+ * feat: add a minimal GraphQL client ([`d6b1b0a`](https://github.com/python-gitlab/python-gitlab/commit/d6b1b0a962bbf0f4e0612067fc075dbdcbb772f8))
28
+
29
+ * feat(api): add exclusive GET attrs for /groups/:id/members ([`d44ddd2`](https://github.com/python-gitlab/python-gitlab/commit/d44ddd2b00d78bb87ff6a4776e64e05e0c1524e1))
30
+
31
+ ### Refactor
32
+
33
+ * refactor(client): move retry logic into utility ([`3235c48`](https://github.com/python-gitlab/python-gitlab/commit/3235c48328c2866f7d46597ba3c0c2488e6c375c))
34
+
35
+ ## v4.10.0 (2024-08-28)
36
+
37
+ ### Chore
38
+
39
+ * chore(release): track tags for renovate ([`d600444`](https://github.com/python-gitlab/python-gitlab/commit/d6004449ad5aaaf2132318a78523818996ec3e21))
40
+
41
+ * chore(deps): update python-semantic-release/upload-to-gh-release digest to 17c75b7 ([`12caaa4`](https://github.com/python-gitlab/python-gitlab/commit/12caaa496740cb15e6220511751b7a20e2d29d07))
42
+
43
+ * chore(deps): update dependency types-setuptools to v73 ([`d55c045`](https://github.com/python-gitlab/python-gitlab/commit/d55c04502bee0fb42e2ef359cde3bc1b4b510b1a))
44
+
45
+ * chore(deps): update all non-major dependencies ([`2ade0d9`](https://github.com/python-gitlab/python-gitlab/commit/2ade0d9f4922226143e2e3835a7449fde9c49d66))
46
+
47
+ * chore(deps): update gitlab/gitlab-ee docker tag to v17.3.1-ee.0 ([`3fdd130`](https://github.com/python-gitlab/python-gitlab/commit/3fdd130a8e87137e5a048d5cb78e43aa476c8f34))
48
+
49
+ * chore(deps): update all non-major dependencies ([`0578bf0`](https://github.com/python-gitlab/python-gitlab/commit/0578bf07e7903037ffef6558e914766b6cf6f545))
50
+
51
+ * chore(deps): update gitlab/gitlab-ee docker tag to v17.3.0-ee.0 ([`e5a46f5`](https://github.com/python-gitlab/python-gitlab/commit/e5a46f57de166f94e01f5230eb6ad91f319791e4))
52
+
53
+ * chore(deps): update dependency myst-parser to v4 ([`930d4a2`](https://github.com/python-gitlab/python-gitlab/commit/930d4a21b8afed833b4b2e6879606bbadaee19a1))
54
+
55
+ * chore(deps): update dependency sphinx to v8 ([`cb65ffb`](https://github.com/python-gitlab/python-gitlab/commit/cb65ffb6957bf039f35926d01f15db559e663915))
56
+
57
+ * chore(deps): update gitlab/gitlab-ee docker tag to v17.2.2-ee.0 ([`b2275f7`](https://github.com/python-gitlab/python-gitlab/commit/b2275f767dd620c6cb2c27b0470f4e8151c76550))
58
+
59
+ * chore(deps): update all non-major dependencies ([`31786a6`](https://github.com/python-gitlab/python-gitlab/commit/31786a60da4b9a10dec0eab3a0b078aa1e94d809))
60
+
61
+ ### Documentation
62
+
63
+ * docs(faq): correct the attribute fetching example
64
+
65
+ There is an example about object attributes in the FAQ. It shows how to
66
+ properly fetch all attributes of all projects, by using list() followed
67
+ by a get(id) call.
68
+
69
+ Unfortunately this example used a wrong variable name, which caused it
70
+ not to work and which could have made it slightly confusing to readers.
71
+ This commit fixes that, by changing the variable name.
72
+
73
+ Now the example uses one variable for two Python objects. As they
74
+ correspond to the same GitLab object and the intended behavior is to
75
+ obtain that very object, just with all attributes, this is fine and is
76
+ probably what readers will find most useful in this context. ([`43a16ac`](https://github.com/python-gitlab/python-gitlab/commit/43a16ac17ce78cf18e0fc10fa8229f052eed3946))
77
+
78
+ ### Feature
79
+
80
+ * feat(api): project/group hook test triggering
81
+
82
+ Add the ability to trigger tests of project and group hooks.
83
+
84
+ Fixes #2924 ([`9353f54`](https://github.com/python-gitlab/python-gitlab/commit/9353f5406d6762d09065744bfca360ccff36defe))
85
+
86
+ ### Test
87
+
88
+ * test(cli): allow up to 30 seconds for a project export
89
+
90
+ Before we allowed a maximum of around 15 seconds for the
91
+ project-export. Often times the CI was failing with this value.
92
+
93
+ Change it to a maximum of around 30 seconds. ([`bdc155b`](https://github.com/python-gitlab/python-gitlab/commit/bdc155b716ef63ef1398ee1e6f5ca67da1109c13))
94
+
3
95
  ## v4.9.0 (2024-08-06)
4
96
 
5
97
  ### Chore
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: python-gitlab
3
- Version: 4.9.0
3
+ Version: 4.11.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>
@@ -34,6 +34,8 @@ Provides-Extra: autocompletion
34
34
  Requires-Dist: argcomplete<3,>=1.10.0; extra == "autocompletion"
35
35
  Provides-Extra: yaml
36
36
  Requires-Dist: PyYaml>=6.0.1; extra == "yaml"
37
+ Provides-Extra: graphql
38
+ Requires-Dist: gql[httpx]<4,>=3.5.0; extra == "graphql"
37
39
 
38
40
  python-gitlab
39
41
  =============
@@ -0,0 +1,52 @@
1
+ ############################
2
+ Using the GraphQL API (beta)
3
+ ############################
4
+
5
+ python-gitlab provides basic support for executing GraphQL queries and mutations.
6
+
7
+ .. danger::
8
+
9
+ The GraphQL client is experimental and only provides basic support.
10
+ It does not currently support pagination, obey rate limits,
11
+ or attempt complex retries. You can use it to build simple queries and mutations.
12
+
13
+ It is currently unstable and its implementation may change. You can expect a more
14
+ mature client in one of the upcoming versions.
15
+
16
+ The ``gitlab.GraphQL`` class
17
+ ==================================
18
+
19
+ As with the REST client, you connect to a GitLab instance by creating a ``gitlab.GraphQL`` object:
20
+
21
+ .. code-block:: python
22
+
23
+ import gitlab
24
+
25
+ # anonymous read-only access for public resources (GitLab.com)
26
+ gq = gitlab.GraphQL()
27
+
28
+ # anonymous read-only access for public resources (self-hosted GitLab instance)
29
+ gq = gitlab.GraphQL('https://gitlab.example.com')
30
+
31
+ # personal access token or OAuth2 token authentication (GitLab.com)
32
+ gq = gitlab.GraphQL(token='glpat-JVNSESs8EwWRx5yDxM5q')
33
+
34
+ # personal access token or OAuth2 token authentication (self-hosted GitLab instance)
35
+ gq = gitlab.GraphQL('https://gitlab.example.com', token='glpat-JVNSESs8EwWRx5yDxM5q')
36
+
37
+ Sending queries
38
+ ===============
39
+
40
+ Get the result of a query:
41
+
42
+ .. code-block:: python
43
+
44
+ query = """{
45
+ query {
46
+ currentUser {
47
+ name
48
+ }
49
+ }
50
+ """
51
+
52
+ result = gq.execute(query)
@@ -1,8 +1,8 @@
1
- ############################
2
- Getting started with the API
3
- ############################
1
+ ##################
2
+ Using the REST API
3
+ ##################
4
4
 
5
- python-gitlab only supports GitLab API v4.
5
+ python-gitlab currently only supports v4 of the GitLab REST API.
6
6
 
7
7
  ``gitlab.Gitlab`` class
8
8
  =======================
@@ -1,6 +1,6 @@
1
- ############################
2
- Getting started with the CLI
3
- ############################
1
+ #############
2
+ Using the CLI
3
+ #############
4
4
 
5
5
  ``python-gitlab`` provides a :command:`gitlab` command-line tool to interact
6
6
  with GitLab servers.
@@ -58,7 +58,7 @@ To retrieve an object with all attributes, use a ``get()`` call.
58
58
 
59
59
  Example with projects::
60
60
 
61
- for projects in gl.projects.list():
61
+ for project in gl.projects.list():
62
62
  # Retrieve project object with all attributes
63
63
  project = gl.projects.get(project.id)
64
64
 
@@ -89,7 +89,7 @@ Remove a group::
89
89
  group.delete()
90
90
 
91
91
  Restore a Group marked for deletion (Premium only):::
92
-
92
+
93
93
  group.restore()
94
94
 
95
95
 
@@ -368,9 +368,9 @@ SAML group links
368
368
 
369
369
  Add a SAML group link to an existing GitLab group::
370
370
 
371
- saml_link = group.saml_group_links.create({
372
- "saml_group_name": "<your_saml_group_name>",
373
- "access_level": <chosen_access_level>
371
+ saml_link = group.saml_group_links.create({
372
+ "saml_group_name": "<your_saml_group_name>",
373
+ "access_level": <chosen_access_level>
374
374
  })
375
375
 
376
376
  List a group's SAML group links::
@@ -419,6 +419,10 @@ Update a group hook::
419
419
  hook.push_events = 0
420
420
  hook.save()
421
421
 
422
+ Test a group hook::
423
+
424
+ hook.test("push_events")
425
+
422
426
  Delete a group hook::
423
427
 
424
428
  group.hooks.delete(hook_id)
@@ -51,7 +51,7 @@ Delete a pipeline::
51
51
 
52
52
  Get latest pipeline::
53
53
 
54
- projet.pipelines.latest(ref="main")
54
+ project.pipelines.latest(ref="main")
55
55
 
56
56
 
57
57
  Triggers
@@ -353,7 +353,7 @@ Import the project using file stored on a remote URL::
353
353
  output = gl.projects.remote_import(
354
354
  url="https://whatever.com/url/file.tar.gz",
355
355
  path="my_new_remote_project",
356
- name="My New Remote Project",
356
+ name="My New Remote Project",
357
357
  namespace="my-group",
358
358
  override_params={'visibility': 'private'},
359
359
  )
@@ -367,7 +367,7 @@ Import the project using file stored on AWS S3::
367
367
  file_key="aws-file-key",
368
368
  access_key_id="aws-access-key-id",
369
369
  secret_access_key="secret-access-key",
370
- name="My New Remote Project",
370
+ name="My New Remote Project",
371
371
  namespace="my-group",
372
372
  override_params={'visibility': 'private'},
373
373
  )
@@ -449,7 +449,7 @@ Get file details from headers, without fetching its entire content::
449
449
  print(headers["X-Gitlab-Size"])
450
450
 
451
451
  Get a raw file::
452
-
452
+
453
453
  raw_content = project.files.raw(file_path='README.rst', ref='main')
454
454
  print(raw_content)
455
455
  with open('/tmp/raw-download.txt', 'wb') as f:
@@ -689,6 +689,10 @@ Update a project hook::
689
689
  hook.push_events = 0
690
690
  hook.save()
691
691
 
692
+ Test a project hook::
693
+
694
+ hook.test("push_events")
695
+
692
696
  Delete a project hook::
693
697
 
694
698
  project.hooks.delete(hook_id)
@@ -7,6 +7,7 @@
7
7
  cli-usage
8
8
  api-usage
9
9
  api-usage-advanced
10
+ api-usage-graphql
10
11
  cli-examples
11
12
  api-objects
12
13
  api/gitlab
@@ -27,7 +27,7 @@ from gitlab._version import ( # noqa: F401
27
27
  __title__,
28
28
  __version__,
29
29
  )
30
- from gitlab.client import Gitlab, GitlabList # noqa: F401
30
+ from gitlab.client import Gitlab, GitlabList, GraphQL # noqa: F401
31
31
  from gitlab.exceptions import * # noqa: F401,F403
32
32
 
33
33
  warnings.filterwarnings("default", category=DeprecationWarning, module="^gitlab")
@@ -42,5 +42,6 @@ __all__ = [
42
42
  "__version__",
43
43
  "Gitlab",
44
44
  "GitlabList",
45
+ "GraphQL",
45
46
  ]
46
47
  __all__.extend(gitlab.exceptions.__all__)
@@ -0,0 +1,24 @@
1
+ from typing import Any
2
+
3
+ import httpx
4
+ from gql.transport.httpx import HTTPXTransport
5
+
6
+
7
+ class GitlabTransport(HTTPXTransport):
8
+ """A gql httpx transport that reuses an existing httpx.Client.
9
+ By default, gql's transports do not have a keep-alive session
10
+ and do not enable providing your own session that's kept open.
11
+ This transport lets us provide and close our session on our own
12
+ and provide additional auth.
13
+ For details, see https://github.com/graphql-python/gql/issues/91.
14
+ """
15
+
16
+ def __init__(self, *args: Any, client: httpx.Client, **kwargs: Any):
17
+ super().__init__(*args, **kwargs)
18
+ self.client = client
19
+
20
+ def connect(self) -> None:
21
+ pass
22
+
23
+ def close(self) -> None:
24
+ pass
@@ -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.9.0"
6
+ __version__ = "4.11.0"
@@ -2,7 +2,6 @@
2
2
 
3
3
  import os
4
4
  import re
5
- import time
6
5
  from typing import (
7
6
  Any,
8
7
  BinaryIO,
@@ -25,6 +24,19 @@ import gitlab.const
25
24
  import gitlab.exceptions
26
25
  from gitlab import _backends, utils
27
26
 
27
+ try:
28
+ import gql
29
+ import gql.transport.exceptions
30
+ import graphql
31
+ import httpx
32
+
33
+ from ._backends.graphql import GitlabTransport
34
+
35
+ _GQL_INSTALLED = True
36
+ except ImportError: # pragma: no cover
37
+ _GQL_INSTALLED = False
38
+
39
+
28
40
  REDIRECT_MSG = (
29
41
  "python-gitlab detected a {status_code} ({reason!r}) redirection. You must update "
30
42
  "your GitLab URL to the correct URL to avoid issues. The redirection was from: "
@@ -89,7 +101,7 @@ class Gitlab:
89
101
  self._api_version = str(api_version)
90
102
  self._server_version: Optional[str] = None
91
103
  self._server_revision: Optional[str] = None
92
- self._base_url = self._get_base_url(url)
104
+ self._base_url = utils.get_base_url(url)
93
105
  self._url = f"{self._base_url}/api/v{api_version}"
94
106
  #: Timeout to use for requests to gitlab server
95
107
  self.timeout = timeout
@@ -557,18 +569,6 @@ class Gitlab:
557
569
  "verify": self.ssl_verify,
558
570
  }
559
571
 
560
- @staticmethod
561
- def _get_base_url(url: Optional[str] = None) -> str:
562
- """Return the base URL with the trailing slash stripped.
563
- If the URL is a Falsy value, return the default URL.
564
- Returns:
565
- The base URL
566
- """
567
- if not url:
568
- return gitlab.const.DEFAULT_URL
569
-
570
- return url.rstrip("/")
571
-
572
572
  def _build_url(self, path: str) -> str:
573
573
  """Returns the full url from path.
574
574
 
@@ -718,7 +718,12 @@ class Gitlab:
718
718
  send_data = self._backend.prepare_send_data(files, post_data, raw)
719
719
  opts["headers"]["Content-type"] = send_data.content_type
720
720
 
721
- cur_retries = 0
721
+ retry = utils.Retry(
722
+ max_retries=max_retries,
723
+ obey_rate_limit=obey_rate_limit,
724
+ retry_transient_errors=retry_transient_errors,
725
+ )
726
+
722
727
  while True:
723
728
  try:
724
729
  result = self._backend.http_request(
@@ -733,14 +738,8 @@ class Gitlab:
733
738
  **opts,
734
739
  )
735
740
  except (requests.ConnectionError, requests.exceptions.ChunkedEncodingError):
736
- if retry_transient_errors and (
737
- max_retries == -1 or cur_retries < max_retries
738
- ):
739
- wait_time = 2**cur_retries * 0.1
740
- cur_retries += 1
741
- time.sleep(wait_time)
741
+ if retry.handle_retry():
742
742
  continue
743
-
744
743
  raise
745
744
 
746
745
  self._check_redirects(result.response)
@@ -748,31 +747,10 @@ class Gitlab:
748
747
  if 200 <= result.status_code < 300:
749
748
  return result.response
750
749
 
751
- def should_retry() -> bool:
752
- if result.status_code == 429 and obey_rate_limit:
753
- return True
754
-
755
- if not retry_transient_errors:
756
- return False
757
- if result.status_code in gitlab.const.RETRYABLE_TRANSIENT_ERROR_CODES:
758
- return True
759
- if result.status_code == 409 and "Resource lock" in result.reason:
760
- return True
761
-
762
- return False
763
-
764
- if should_retry():
765
- # Response headers documentation:
766
- # https://docs.gitlab.com/ee/user/admin_area/settings/user_and_ip_rate_limits.html#response-headers
767
- if max_retries == -1 or cur_retries < max_retries:
768
- wait_time = 2**cur_retries * 0.1
769
- if "Retry-After" in result.headers:
770
- wait_time = int(result.headers["Retry-After"])
771
- elif "RateLimit-Reset" in result.headers:
772
- wait_time = int(result.headers["RateLimit-Reset"]) - time.time()
773
- cur_retries += 1
774
- time.sleep(wait_time)
775
- continue
750
+ if retry.handle_retry_on_status(
751
+ result.status_code, result.headers, result.reason
752
+ ):
753
+ continue
776
754
 
777
755
  error_message = result.content
778
756
  try:
@@ -1296,3 +1274,94 @@ class GitlabList:
1296
1274
  return self.next()
1297
1275
 
1298
1276
  raise StopIteration
1277
+
1278
+
1279
+ class GraphQL:
1280
+ def __init__(
1281
+ self,
1282
+ url: Optional[str] = None,
1283
+ *,
1284
+ token: Optional[str] = None,
1285
+ ssl_verify: Union[bool, str] = True,
1286
+ client: Optional[httpx.Client] = None,
1287
+ timeout: Optional[float] = None,
1288
+ user_agent: str = gitlab.const.USER_AGENT,
1289
+ fetch_schema_from_transport: bool = False,
1290
+ max_retries: int = 10,
1291
+ obey_rate_limit: bool = True,
1292
+ retry_transient_errors: bool = False,
1293
+ ) -> None:
1294
+ if not _GQL_INSTALLED:
1295
+ raise ImportError(
1296
+ "The GraphQL client could not be initialized because "
1297
+ "the gql dependencies are not installed. "
1298
+ "Install them with 'pip install python-gitlab[graphql]'"
1299
+ )
1300
+ self._base_url = utils.get_base_url(url)
1301
+ self._timeout = timeout
1302
+ self._token = token
1303
+ self._url = f"{self._base_url}/api/graphql"
1304
+ self._user_agent = user_agent
1305
+ self._ssl_verify = ssl_verify
1306
+ self._max_retries = max_retries
1307
+ self._obey_rate_limit = obey_rate_limit
1308
+ self._retry_transient_errors = retry_transient_errors
1309
+
1310
+ opts = self._get_client_opts()
1311
+ self._http_client = client or httpx.Client(**opts)
1312
+ self._transport = GitlabTransport(self._url, client=self._http_client)
1313
+ self._client = gql.Client(
1314
+ transport=self._transport,
1315
+ fetch_schema_from_transport=fetch_schema_from_transport,
1316
+ )
1317
+ self._gql = gql.gql
1318
+
1319
+ def __enter__(self) -> "GraphQL":
1320
+ return self
1321
+
1322
+ def __exit__(self, *args: Any) -> None:
1323
+ self._http_client.close()
1324
+
1325
+ def _get_client_opts(self) -> Dict[str, Any]:
1326
+ headers = {"User-Agent": self._user_agent}
1327
+
1328
+ if self._token:
1329
+ headers["Authorization"] = f"Bearer {self._token}"
1330
+
1331
+ return {
1332
+ "headers": headers,
1333
+ "timeout": self._timeout,
1334
+ "verify": self._ssl_verify,
1335
+ }
1336
+
1337
+ def execute(
1338
+ self, request: Union[str, graphql.Source], *args: Any, **kwargs: Any
1339
+ ) -> Any:
1340
+ parsed_document = self._gql(request)
1341
+ retry = utils.Retry(
1342
+ max_retries=self._max_retries,
1343
+ obey_rate_limit=self._obey_rate_limit,
1344
+ retry_transient_errors=self._retry_transient_errors,
1345
+ )
1346
+
1347
+ while True:
1348
+ try:
1349
+ result = self._client.execute(parsed_document, *args, **kwargs)
1350
+ except gql.transport.exceptions.TransportServerError as e:
1351
+ if retry.handle_retry_on_status(
1352
+ status_code=e.code, headers=self._transport.response_headers
1353
+ ):
1354
+ continue
1355
+
1356
+ if e.code == 401:
1357
+ raise gitlab.exceptions.GitlabAuthenticationError(
1358
+ response_code=e.code,
1359
+ error_message=str(e),
1360
+ )
1361
+
1362
+ raise gitlab.exceptions.GitlabHttpError(
1363
+ response_code=e.code,
1364
+ error_message=str(e),
1365
+ )
1366
+
1367
+ return result
@@ -316,6 +316,10 @@ class GitlabDeploymentApprovalError(GitlabOperationError):
316
316
  pass
317
317
 
318
318
 
319
+ class GitlabHookTestError(GitlabOperationError):
320
+ pass
321
+
322
+
319
323
  # For an explanation of how these type-hints work see:
320
324
  # https://mypy.readthedocs.io/en/stable/generics.html#declaring-decorators
321
325
  #
@@ -370,6 +374,7 @@ __all__ = [
370
374
  "GitlabGetError",
371
375
  "GitlabGroupTransferError",
372
376
  "GitlabHeadError",
377
+ "GitlabHookTestError",
373
378
  "GitlabHousekeepingError",
374
379
  "GitlabHttpError",
375
380
  "GitlabImportError",