python-gitlab 7.0.0__tar.gz → 8.0.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 (365) hide show
  1. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/CHANGELOG.md +51 -0
  2. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/PKG-INFO +2 -2
  3. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/_version.py +1 -1
  4. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/cli.py +1 -1
  5. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/client.py +2 -5
  6. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/utils.py +1 -1
  7. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/files.py +8 -1
  8. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/projects.py +2 -0
  9. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/registry_protection_repository_rules.py +9 -1
  10. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/pyproject.toml +1 -1
  11. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/python_gitlab.egg-info/PKG-INFO +2 -2
  12. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/python_gitlab.egg-info/requires.txt +1 -1
  13. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/requirements-docker.txt +1 -1
  14. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/requirements-docs.txt +3 -3
  15. python_gitlab-8.0.0/requirements-lint.txt +14 -0
  16. python_gitlab-8.0.0/requirements-precommit.txt +1 -0
  17. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/requirements-test.txt +6 -6
  18. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/requirements.txt +1 -1
  19. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/api/test_epics.py +5 -3
  20. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/api/test_keys.py +9 -1
  21. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/api/test_project_job_token_scope.py +4 -0
  22. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/api/test_projects.py +2 -2
  23. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/api/test_registry.py +5 -0
  24. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/cli/test_cli_artifacts.py +2 -4
  25. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/fixtures/.env +1 -1
  26. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/fixtures/docker-compose.yml +1 -1
  27. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/helpers.py +11 -11
  28. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_registry_protection_rules.py +15 -0
  29. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/test_config.py +6 -16
  30. python_gitlab-7.0.0/requirements-lint.txt +0 -14
  31. python_gitlab-7.0.0/requirements-precommit.txt +0 -1
  32. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/AUTHORS +0 -0
  33. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/COPYING +0 -0
  34. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/MANIFEST.in +0 -0
  35. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/README.rst +0 -0
  36. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/Makefile +0 -0
  37. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/__init__.py +0 -0
  38. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/_static/js/gitter.js +0 -0
  39. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/api/gitlab.rst +0 -0
  40. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/api/gitlab.v4.rst +0 -0
  41. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/api-levels.rst +0 -0
  42. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/api-objects.rst +0 -0
  43. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/api-usage-advanced.rst +0 -0
  44. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/api-usage-graphql.rst +0 -0
  45. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/api-usage.rst +0 -0
  46. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/changelog.md +0 -0
  47. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/cli-examples.rst +0 -0
  48. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/cli-objects.rst +0 -0
  49. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/cli-usage.rst +0 -0
  50. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/conf.py +0 -0
  51. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/ext/__init__.py +0 -0
  52. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/ext/docstrings.py +0 -0
  53. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/ext/manager_tmpl.j2 +0 -0
  54. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/faq.rst +0 -0
  55. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/access_requests.rst +0 -0
  56. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/appearance.rst +0 -0
  57. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/applications.rst +0 -0
  58. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/badges.rst +0 -0
  59. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/boards.rst +0 -0
  60. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/branches.rst +0 -0
  61. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/bulk_imports.rst +0 -0
  62. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/ci_lint.rst +0 -0
  63. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/cluster_agents.rst +0 -0
  64. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/clusters.rst +0 -0
  65. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/commits.rst +0 -0
  66. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/deploy_keys.rst +0 -0
  67. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/deploy_tokens.rst +0 -0
  68. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/deployments.rst +0 -0
  69. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/discussions.rst +0 -0
  70. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/draft_notes.rst +0 -0
  71. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/emojis.rst +0 -0
  72. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/environments.rst +0 -0
  73. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/epics.rst +0 -0
  74. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/events.rst +0 -0
  75. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/features.rst +0 -0
  76. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/geo_nodes.rst +0 -0
  77. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/group_access_tokens.rst +0 -0
  78. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/groups.rst +0 -0
  79. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/invitations.rst +0 -0
  80. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/issues.rst +0 -0
  81. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/iterations.rst +0 -0
  82. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/job_token_scope.rst +0 -0
  83. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/keys.rst +0 -0
  84. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/labels.rst +0 -0
  85. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/member_roles.rst +0 -0
  86. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/merge_request_approvals.rst +0 -0
  87. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/merge_requests.rst +0 -0
  88. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/merge_trains.rst +0 -0
  89. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/messages.rst +0 -0
  90. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/milestones.rst +0 -0
  91. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/namespaces.rst +0 -0
  92. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/notes.rst +0 -0
  93. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/notifications.rst +0 -0
  94. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/packages.rst +0 -0
  95. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/pagesdomains.rst +0 -0
  96. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/personal_access_tokens.rst +0 -0
  97. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/pipelines_and_jobs.rst +0 -0
  98. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/project_access_tokens.rst +0 -0
  99. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/projects.rst +0 -0
  100. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/protected_branches.rst +0 -0
  101. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/protected_container_repositories.rst +0 -0
  102. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/protected_environments.rst +0 -0
  103. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/protected_packages.rst +0 -0
  104. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/pull_mirror.rst +0 -0
  105. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/releases.rst +0 -0
  106. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/remote_mirrors.rst +0 -0
  107. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/repositories.rst +0 -0
  108. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/repository_tags.rst +0 -0
  109. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/resource_groups.rst +0 -0
  110. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/runners.rst +0 -0
  111. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/search.rst +0 -0
  112. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/secure_files.rst +0 -0
  113. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/settings.rst +0 -0
  114. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/sidekiq.rst +0 -0
  115. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/snippets.rst +0 -0
  116. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/statistics.rst +0 -0
  117. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/status_checks.rst +0 -0
  118. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/system_hooks.rst +0 -0
  119. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/templates.rst +0 -0
  120. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/todos.rst +0 -0
  121. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/topics.rst +0 -0
  122. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/users.rst +0 -0
  123. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/variables.rst +0 -0
  124. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/gl_objects/wikis.rst +0 -0
  125. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/index.rst +0 -0
  126. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/make.bat +0 -0
  127. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/docs/release-notes.rst +0 -0
  128. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/__init__.py +0 -0
  129. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/__main__.py +0 -0
  130. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/_backends/__init__.py +0 -0
  131. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/_backends/graphql.py +0 -0
  132. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/_backends/protocol.py +0 -0
  133. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/_backends/requests_backend.py +0 -0
  134. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/base.py +0 -0
  135. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/config.py +0 -0
  136. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/const.py +0 -0
  137. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/exceptions.py +0 -0
  138. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/mixins.py +0 -0
  139. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/py.typed +0 -0
  140. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/types.py +0 -0
  141. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/__init__.py +0 -0
  142. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/cli.py +0 -0
  143. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/__init__.py +0 -0
  144. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/access_requests.py +0 -0
  145. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/appearance.py +0 -0
  146. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/applications.py +0 -0
  147. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/artifacts.py +0 -0
  148. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/audit_events.py +0 -0
  149. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/award_emojis.py +0 -0
  150. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/badges.py +0 -0
  151. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/boards.py +0 -0
  152. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/branches.py +0 -0
  153. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/broadcast_messages.py +0 -0
  154. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/bulk_imports.py +0 -0
  155. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/ci_lint.py +0 -0
  156. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/cluster_agents.py +0 -0
  157. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/clusters.py +0 -0
  158. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/commits.py +0 -0
  159. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/container_registry.py +0 -0
  160. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/custom_attributes.py +0 -0
  161. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/deploy_keys.py +0 -0
  162. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/deploy_tokens.py +0 -0
  163. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/deployments.py +0 -0
  164. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/discussions.py +0 -0
  165. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/draft_notes.py +0 -0
  166. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/environments.py +0 -0
  167. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/epics.py +0 -0
  168. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/events.py +0 -0
  169. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/export_import.py +0 -0
  170. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/features.py +0 -0
  171. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/geo_nodes.py +0 -0
  172. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/group_access_tokens.py +0 -0
  173. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/groups.py +0 -0
  174. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/hooks.py +0 -0
  175. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/integrations.py +0 -0
  176. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/invitations.py +0 -0
  177. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/issues.py +0 -0
  178. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/iterations.py +0 -0
  179. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/job_token_scope.py +0 -0
  180. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/jobs.py +0 -0
  181. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/keys.py +0 -0
  182. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/labels.py +0 -0
  183. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/ldap.py +0 -0
  184. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/member_roles.py +0 -0
  185. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/members.py +0 -0
  186. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/merge_request_approvals.py +0 -0
  187. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/merge_requests.py +0 -0
  188. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/merge_trains.py +0 -0
  189. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/milestones.py +0 -0
  190. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/namespaces.py +0 -0
  191. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/notes.py +0 -0
  192. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/notification_settings.py +0 -0
  193. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/package_protection_rules.py +0 -0
  194. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/packages.py +0 -0
  195. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/pages.py +0 -0
  196. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/personal_access_tokens.py +0 -0
  197. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/pipelines.py +0 -0
  198. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/project_access_tokens.py +0 -0
  199. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/push_rules.py +0 -0
  200. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/registry_protection_rules.py +0 -0
  201. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/releases.py +0 -0
  202. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/repositories.py +0 -0
  203. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/resource_groups.py +0 -0
  204. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/reviewers.py +0 -0
  205. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/runners.py +0 -0
  206. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/secure_files.py +0 -0
  207. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/service_accounts.py +0 -0
  208. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/settings.py +0 -0
  209. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/sidekiq.py +0 -0
  210. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/snippets.py +0 -0
  211. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/statistics.py +0 -0
  212. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/status_checks.py +0 -0
  213. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/tags.py +0 -0
  214. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/templates.py +0 -0
  215. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/todos.py +0 -0
  216. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/topics.py +0 -0
  217. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/triggers.py +0 -0
  218. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/users.py +0 -0
  219. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/variables.py +0 -0
  220. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/gitlab/v4/objects/wikis.py +0 -0
  221. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/python_gitlab.egg-info/SOURCES.txt +0 -0
  222. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/python_gitlab.egg-info/dependency_links.txt +0 -0
  223. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/python_gitlab.egg-info/entry_points.txt +0 -0
  224. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/python_gitlab.egg-info/top_level.txt +0 -0
  225. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/setup.cfg +0 -0
  226. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/__init__.py +0 -0
  227. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/conftest.py +0 -0
  228. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/__init__.py +0 -0
  229. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/api/__init__.py +0 -0
  230. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/api/test_boards.py +0 -0
  231. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/api/test_branches.py +0 -0
  232. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/api/test_bulk_imports.py +0 -0
  233. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/api/test_current_user.py +0 -0
  234. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/api/test_deploy_keys.py +0 -0
  235. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/api/test_deploy_tokens.py +0 -0
  236. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/api/test_gitlab.py +0 -0
  237. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/api/test_graphql.py +0 -0
  238. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/api/test_groups.py +0 -0
  239. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/api/test_import_export.py +0 -0
  240. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/api/test_issues.py +0 -0
  241. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/api/test_lazy_objects.py +0 -0
  242. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/api/test_member_roles.py +0 -0
  243. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/api/test_merge_requests.py +0 -0
  244. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/api/test_packages.py +0 -0
  245. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/api/test_push_rules.py +0 -0
  246. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/api/test_releases.py +0 -0
  247. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/api/test_repository.py +0 -0
  248. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/api/test_services.py +0 -0
  249. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/api/test_snippets.py +0 -0
  250. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/api/test_statistics.py +0 -0
  251. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/api/test_topics.py +0 -0
  252. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/api/test_users.py +0 -0
  253. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/api/test_variables.py +0 -0
  254. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/api/test_wikis.py +0 -0
  255. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/cli/__init__.py +0 -0
  256. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/cli/conftest.py +0 -0
  257. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/cli/test_cli.py +0 -0
  258. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/cli/test_cli_files.py +0 -0
  259. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/cli/test_cli_packages.py +0 -0
  260. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/cli/test_cli_projects.py +0 -0
  261. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/cli/test_cli_repository.py +0 -0
  262. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/cli/test_cli_resource_access_tokens.py +0 -0
  263. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/cli/test_cli_users.py +0 -0
  264. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/cli/test_cli_v4.py +0 -0
  265. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/cli/test_cli_variables.py +0 -0
  266. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/conftest.py +0 -0
  267. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/ee-test.py +0 -0
  268. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/fixtures/__init__.py +0 -0
  269. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/fixtures/avatar.png +0 -0
  270. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/fixtures/create_license.rb +0 -0
  271. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/fixtures/docker.py +0 -0
  272. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/fixtures/invalid_auth.cfg +0 -0
  273. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/fixtures/invalid_version.cfg +0 -0
  274. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/functional/fixtures/set_token.rb +0 -0
  275. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/install/test_install.py +0 -0
  276. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/smoke/__init__.py +0 -0
  277. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/smoke/test_dists.py +0 -0
  278. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/__init__.py +0 -0
  279. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/_backends/__init__.py +0 -0
  280. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/_backends/test_requests_backend.py +0 -0
  281. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/base/test_rest_manager.py +0 -0
  282. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/base/test_rest_object.py +0 -0
  283. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/conftest.py +0 -0
  284. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/helpers.py +0 -0
  285. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/meta/__init__.py +0 -0
  286. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/meta/test_abstract_attrs.py +0 -0
  287. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/meta/test_imports.py +0 -0
  288. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/meta/test_mro.py +0 -0
  289. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/mixins/__init__.py +0 -0
  290. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/mixins/test_meta_mixins.py +0 -0
  291. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/mixins/test_mixin_methods.py +0 -0
  292. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/mixins/test_object_mixins_attributes.py +0 -0
  293. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/__init__.py +0 -0
  294. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/conftest.py +0 -0
  295. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_appearance.py +0 -0
  296. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_applications.py +0 -0
  297. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_audit_events.py +0 -0
  298. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_badges.py +0 -0
  299. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_bridges.py +0 -0
  300. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_bulk_imports.py +0 -0
  301. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_ci_lint.py +0 -0
  302. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_cluster_agents.py +0 -0
  303. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_commits.py +0 -0
  304. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_deploy_tokens.py +0 -0
  305. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_deployments.py +0 -0
  306. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_draft_notes.py +0 -0
  307. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_environments.py +0 -0
  308. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_group_access_tokens.py +0 -0
  309. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_group_merge_request_approvals.py +0 -0
  310. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_groups.py +0 -0
  311. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_hooks.py +0 -0
  312. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_invitations.py +0 -0
  313. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_issues.py +0 -0
  314. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_iterations.py +0 -0
  315. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_job_artifacts.py +0 -0
  316. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_job_token_scope.py +0 -0
  317. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_jobs.py +0 -0
  318. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_keys.py +0 -0
  319. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_member_roles.py +0 -0
  320. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_members.py +0 -0
  321. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_merge_request_pipelines.py +0 -0
  322. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_merge_requests.py +0 -0
  323. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_merge_trains.py +0 -0
  324. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_package_protection_rules.py +0 -0
  325. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_packages.py +0 -0
  326. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_personal_access_tokens.py +0 -0
  327. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_pipeline_schedules.py +0 -0
  328. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_pipelines.py +0 -0
  329. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_project_access_tokens.py +0 -0
  330. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_project_import_export.py +0 -0
  331. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_project_merge_request_approvals.py +0 -0
  332. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_project_statistics.py +0 -0
  333. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_projects.py +0 -0
  334. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_pull_mirror.py +0 -0
  335. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_registry_repositories.py +0 -0
  336. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_releases.py +0 -0
  337. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_remote_mirrors.py +0 -0
  338. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_repositories.py +0 -0
  339. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_resource_groups.py +0 -0
  340. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_resource_iteration_events.py +0 -0
  341. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_resource_label_events.py +0 -0
  342. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_resource_milestone_events.py +0 -0
  343. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_resource_state_events.py +0 -0
  344. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_runners.py +0 -0
  345. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_secure_files.py +0 -0
  346. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_services.py +0 -0
  347. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_snippets.py +0 -0
  348. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_statistics.py +0 -0
  349. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_status_checks.py +0 -0
  350. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_submodules.py +0 -0
  351. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_templates.py +0 -0
  352. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_todos.py +0 -0
  353. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_topics.py +0 -0
  354. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_users.py +0 -0
  355. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/objects/test_variables.py +0 -0
  356. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/test_cli.py +0 -0
  357. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/test_exceptions.py +0 -0
  358. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/test_gitlab.py +0 -0
  359. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/test_gitlab_auth.py +0 -0
  360. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/test_gitlab_http_methods.py +0 -0
  361. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/test_graphql.py +0 -0
  362. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/test_retry.py +0 -0
  363. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/test_types.py +0 -0
  364. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tests/unit/test_utils.py +0 -0
  365. {python_gitlab-7.0.0 → python_gitlab-8.0.0}/tox.ini +0 -0
@@ -2,6 +2,57 @@
2
2
 
3
3
  All versions below are listed in reverse chronological order.
4
4
 
5
+ ## v8.0.0 (2026-01-28)
6
+
7
+ ### Bug Fixes
8
+
9
+ - Actually define project repr_attr
10
+ ([`4187a69`](https://github.com/python-gitlab/python-gitlab/commit/4187a69420dd7b2e60c2d833ab246aec745d35cb))
11
+
12
+ - File save start_branch as a body attribute
13
+ ([`1001d93`](https://github.com/python-gitlab/python-gitlab/commit/1001d934e8c36cc3b14408b46b41030bf705a294))
14
+
15
+ ### Chores
16
+
17
+ - **black**: Run black v26 on code
18
+ ([`4a8d82b`](https://github.com/python-gitlab/python-gitlab/commit/4a8d82bec8f09fa142e8134589a0f40ef4f9c3be))
19
+
20
+ - **precommit**: Update dependency black to v26
21
+ ([`ad43b76`](https://github.com/python-gitlab/python-gitlab/commit/ad43b763acdcd8d7db832972921fb071ea0a826f))
22
+
23
+ ### Features
24
+
25
+ - **graphql**: Update to gql 4.0.0
26
+ ([`6f0da67`](https://github.com/python-gitlab/python-gitlab/commit/6f0da671b4586b23232ae89d57622254fa8a7945))
27
+
28
+ ### Breaking Changes
29
+
30
+ - **graphql**: GraphQL.execute() no longer accepts graphql.Source
31
+
32
+
33
+ ## v7.1.0 (2025-12-28)
34
+
35
+ ### Bug Fixes
36
+
37
+ - **utils**: Prevent negative sleep time in rate limit retry
38
+ ([`4221195`](https://github.com/python-gitlab/python-gitlab/commit/422119576287de30e1b70411c7ab0bbe39231af7))
39
+
40
+ ### Continuous Integration
41
+
42
+ - **release**: Use the correct token for publish to GitHub
43
+ ([`614a74c`](https://github.com/python-gitlab/python-gitlab/commit/614a74c00f027f70b8e48a6b2a2ddcd3f823bffa))
44
+
45
+ ### Features
46
+
47
+ - **registry-protection**: Add support for registry protection rule deletion
48
+ ([`9dd62c3`](https://github.com/python-gitlab/python-gitlab/commit/9dd62c3f5bcf3e082c2733bd4edc068f993c22ec))
49
+
50
+ ### Testing
51
+
52
+ - **functional**: Update to GitLab 18.6 and resolve issues found
53
+ ([`c7c139b`](https://github.com/python-gitlab/python-gitlab/commit/c7c139b9e7823ec1800a819233aee469355ee8d1))
54
+
55
+
5
56
  ## v7.0.0 (2025-10-29)
6
57
 
7
58
  ### Features
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-gitlab
3
- Version: 7.0.0
3
+ Version: 8.0.0
4
4
  Summary: The python wrapper for the GitLab REST and GraphQL APIs.
5
5
  Author-email: Gauvain Pocentek <gauvain@pocentek.net>
6
6
  Maintainer-email: John Villalovos <john@sodarock.com>, Max Wittig <max.wittig@siemens.com>, Nejc Habjan <nejc.habjan@siemens.com>, Roger Meier <r.meier@siemens.com>
@@ -35,7 +35,7 @@ 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
37
  Provides-Extra: graphql
38
- Requires-Dist: gql[httpx]<4,>=3.5.0; extra == "graphql"
38
+ Requires-Dist: gql[httpx]<5,>=3.5.0; extra == "graphql"
39
39
  Dynamic: license-file
40
40
 
41
41
  python-gitlab
@@ -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__ = "7.0.0"
6
+ __version__ = "8.0.0"
@@ -334,7 +334,7 @@ def main() -> None:
334
334
  # This first parsing step is used to find the gitlab config to use, and
335
335
  # load the propermodule (v3 or v4) accordingly. At that point we don't have
336
336
  # any subparser setup
337
- (options, _) = parser.parse_known_args(sys.argv)
337
+ options, _ = parser.parse_known_args(sys.argv)
338
338
  try:
339
339
  config = gitlab.config.GitlabConfigParser(options.gitlab, options.config_file)
340
340
  except gitlab.config.ConfigError as e:
@@ -18,7 +18,6 @@ from gitlab import _backends, utils
18
18
  try:
19
19
  import gql
20
20
  import gql.transport.exceptions
21
- import graphql
22
21
  import httpx
23
22
 
24
23
  from ._backends.graphql import GitlabAsyncTransport, GitlabTransport
@@ -1350,7 +1349,7 @@ class GraphQL(_BaseGraphQL):
1350
1349
  def __exit__(self, *args: Any) -> None:
1351
1350
  self._http_client.close()
1352
1351
 
1353
- def execute(self, request: str | graphql.Source, *args: Any, **kwargs: Any) -> Any:
1352
+ def execute(self, request: str, *args: Any, **kwargs: Any) -> Any:
1354
1353
  parsed_document = self._gql(request)
1355
1354
  retry = utils.Retry(
1356
1355
  max_retries=self._max_retries,
@@ -1420,9 +1419,7 @@ class AsyncGraphQL(_BaseGraphQL):
1420
1419
  async def __aexit__(self, *args: Any) -> None:
1421
1420
  await self._http_client.aclose()
1422
1421
 
1423
- async def execute(
1424
- self, request: str | graphql.Source, *args: Any, **kwargs: Any
1425
- ) -> Any:
1422
+ async def execute(self, request: str, *args: Any, **kwargs: Any) -> Any:
1426
1423
  parsed_document = self._gql(request)
1427
1424
  retry = utils.Retry(
1428
1425
  max_retries=self._max_retries,
@@ -133,7 +133,7 @@ class Retry:
133
133
  if "Retry-After" in headers:
134
134
  wait_time = int(headers["Retry-After"])
135
135
  elif "RateLimit-Reset" in headers:
136
- wait_time = int(headers["RateLimit-Reset"]) - time.time()
136
+ wait_time = max(0, int(headers["RateLimit-Reset"]) - time.time())
137
137
  self.cur_retries += 1
138
138
  time.sleep(wait_time)
139
139
  return True
@@ -29,6 +29,7 @@ class ProjectFile(SaveMixin, ObjectDeleteMixin, RESTObject):
29
29
  file_path: str
30
30
  manager: ProjectFileManager
31
31
  content: str # since the `decode()` method uses `self.content`
32
+ start_branch: str | None = None
32
33
 
33
34
  def decode(self) -> bytes:
34
35
  """Returns the decoded content of the file.
@@ -41,7 +42,11 @@ class ProjectFile(SaveMixin, ObjectDeleteMixin, RESTObject):
41
42
  # NOTE(jlvillal): Signature doesn't match SaveMixin.save() so ignore
42
43
  # type error
43
44
  def save( # type: ignore[override]
44
- self, branch: str, commit_message: str, **kwargs: Any
45
+ self,
46
+ branch: str,
47
+ commit_message: str,
48
+ start_branch: str | None = None,
49
+ **kwargs: Any,
45
50
  ) -> None:
46
51
  """Save the changes made to the file to the server.
47
52
 
@@ -50,6 +55,7 @@ class ProjectFile(SaveMixin, ObjectDeleteMixin, RESTObject):
50
55
  Args:
51
56
  branch: Branch in which the file will be updated
52
57
  commit_message: Message to send with the commit
58
+ start_branch: Name of the branch to start the new branch from
53
59
  **kwargs: Extra options to send to the server (e.g. sudo)
54
60
 
55
61
  Raises:
@@ -58,6 +64,7 @@ class ProjectFile(SaveMixin, ObjectDeleteMixin, RESTObject):
58
64
  """
59
65
  self.branch = branch
60
66
  self.commit_message = commit_message
67
+ self.start_branch = start_branch
61
68
  self.file_path = utils.EncodedId(self.file_path)
62
69
  super().save(**kwargs)
63
70
 
@@ -178,6 +178,8 @@ class Project(
178
178
  _repr_attr = "path_with_namespace"
179
179
  _upload_path = "/projects/{id}/uploads"
180
180
 
181
+ path_with_namespace: str
182
+
181
183
  access_tokens: ProjectAccessTokenManager
182
184
  accessrequests: ProjectAccessRequestManager
183
185
  additionalstatistics: ProjectAdditionalStatisticsManager
@@ -1,5 +1,12 @@
1
1
  from gitlab.base import RESTObject
2
- from gitlab.mixins import CreateMixin, ListMixin, SaveMixin, UpdateMethod, UpdateMixin
2
+ from gitlab.mixins import (
3
+ CreateMixin,
4
+ DeleteMixin,
5
+ ListMixin,
6
+ SaveMixin,
7
+ UpdateMethod,
8
+ UpdateMixin,
9
+ )
3
10
  from gitlab.types import RequiredOptional
4
11
 
5
12
  __all__ = [
@@ -16,6 +23,7 @@ class ProjectRegistryRepositoryProtectionRuleManager(
16
23
  ListMixin[ProjectRegistryRepositoryProtectionRule],
17
24
  CreateMixin[ProjectRegistryRepositoryProtectionRule],
18
25
  UpdateMixin[ProjectRegistryRepositoryProtectionRule],
26
+ DeleteMixin[ProjectRegistryRepositoryProtectionRule],
19
27
  ):
20
28
  _path = "/projects/{project_id}/registry/protection/repository/rules"
21
29
  _obj_cls = ProjectRegistryRepositoryProtectionRule
@@ -43,7 +43,7 @@ dynamic = ["version"]
43
43
  [project.optional-dependencies]
44
44
  autocompletion = ["argcomplete>=1.10.0,<3"]
45
45
  yaml = ["PyYaml>=6.0.1"]
46
- graphql = ["gql[httpx]>=3.5.0,<4"]
46
+ graphql = ["gql[httpx]>=3.5.0,<5"]
47
47
 
48
48
  [project.scripts]
49
49
  gitlab = "gitlab.cli:main"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-gitlab
3
- Version: 7.0.0
3
+ Version: 8.0.0
4
4
  Summary: The python wrapper for the GitLab REST and GraphQL APIs.
5
5
  Author-email: Gauvain Pocentek <gauvain@pocentek.net>
6
6
  Maintainer-email: John Villalovos <john@sodarock.com>, Max Wittig <max.wittig@siemens.com>, Nejc Habjan <nejc.habjan@siemens.com>, Roger Meier <r.meier@siemens.com>
@@ -35,7 +35,7 @@ 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
37
  Provides-Extra: graphql
38
- Requires-Dist: gql[httpx]<4,>=3.5.0; extra == "graphql"
38
+ Requires-Dist: gql[httpx]<5,>=3.5.0; extra == "graphql"
39
39
  Dynamic: license-file
40
40
 
41
41
  python-gitlab
@@ -5,7 +5,7 @@ requests-toolbelt>=1.0.0
5
5
  argcomplete<3,>=1.10.0
6
6
 
7
7
  [graphql]
8
- gql[httpx]<4,>=3.5.0
8
+ gql[httpx]<5,>=3.5.0
9
9
 
10
10
  [yaml]
11
11
  PyYaml>=6.0.1
@@ -1,3 +1,3 @@
1
1
  -r requirements.txt
2
2
  -r requirements-test.txt
3
- pytest-docker==3.2.3
3
+ pytest-docker==3.2.5
@@ -1,7 +1,7 @@
1
1
  -r requirements.txt
2
- furo==2025.9.25
2
+ furo==2025.12.19
3
3
  jinja2==3.1.6
4
- myst-parser==4.0.1
5
- sphinx==8.2.3
4
+ myst-parser==5.0.0
5
+ sphinx==9.1.0
6
6
  sphinxcontrib-autoprogram==0.1.9
7
7
  sphinx-autobuild==2025.8.25
@@ -0,0 +1,14 @@
1
+ -r requirements.txt
2
+ argcomplete==2.0.0
3
+ black==26.1.0
4
+ commitizen==4.12.1
5
+ flake8==7.3.0
6
+ isort==7.0.0
7
+ mypy==1.19.1
8
+ pylint==4.0.4
9
+ pytest==9.0.2
10
+ responses==0.25.8
11
+ respx==0.22.0
12
+ types-PyYAML==6.0.12.20250915
13
+ types-requests==2.32.4.20260107
14
+ types-setuptools==80.10.0.20260124
@@ -0,0 +1 @@
1
+ pre-commit==4.5.1
@@ -1,13 +1,13 @@
1
1
  -r requirements.txt
2
- anyio==4.11.0
3
- build==1.3.0
4
- coverage==7.11.0
2
+ anyio==4.12.1
3
+ build==1.4.0
4
+ coverage==7.13.2
5
5
  pytest-console-scripts==1.4.1
6
6
  pytest-cov==7.0.0
7
7
  pytest-github-actions-annotate-failures==0.3.0
8
- pytest==8.4.2
8
+ pytest==9.0.2
9
9
  PyYaml==6.0.3
10
10
  responses==0.25.8
11
11
  respx==0.22.0
12
- trio==0.31.0
13
- wheel==0.45.1
12
+ trio==0.32.0
13
+ wheel==0.46.3
@@ -1,4 +1,4 @@
1
- gql==3.5.3
1
+ gql==4.0.0
2
2
  httpx==0.28.1
3
3
  requests==2.32.5
4
4
  requests-toolbelt==1.0.0
@@ -15,18 +15,20 @@ def test_epics(group):
15
15
  assert group.epics.list()
16
16
 
17
17
 
18
- @pytest.mark.xfail(reason="404 on issue.id")
19
18
  def test_epic_issues(epic, issue):
20
19
  assert not epic.issues.list()
21
20
 
21
+ # FYI: Creating an issue causes a note to be created
22
22
  epic_issue = epic.issues.create({"issue_id": issue.id})
23
23
  assert epic.issues.list()
24
24
 
25
+ # FYI: Deleting an issue causes a note to be created
25
26
  epic_issue.delete()
26
27
 
27
28
 
28
29
  def test_epic_notes(epic):
29
- assert not epic.notes.list()
30
+ notes = epic.notes.list(get_all=True)
30
31
 
31
32
  epic.notes.create({"body": "Test note"})
32
- assert epic.notes.list()
33
+ new_notes = epic.notes.list(get_all=True)
34
+ assert len(new_notes) == (len(notes) + 1), f"{new_notes} {notes}"
@@ -38,6 +38,14 @@ def test_keys_deploy(gl, project, DEPLOY_KEY):
38
38
  key_by_fingerprint = gl.keys.get(fingerprint=fingerprint)
39
39
  assert key_by_fingerprint.title == key.title
40
40
  assert key_by_fingerprint.key == key.key
41
- assert len(key_by_fingerprint.deploy_keys_projects) == 1
41
+
42
+ if not any(
43
+ key_project.get("project_id") == project.id
44
+ for key_project in key_by_fingerprint.deploy_keys_projects
45
+ ):
46
+ raise AssertionError(
47
+ f"Project {project} not found in 'deploy_keys_projects' "
48
+ f"{key_by_fingerprint.pformat()}"
49
+ )
42
50
 
43
51
  key.delete()
@@ -1,3 +1,6 @@
1
+ import pytest
2
+
3
+
1
4
  # https://docs.gitlab.com/ee/ci/jobs/ci_job_token.html#allow-any-project-to-access-your-project
2
5
  def test_enable_limit_access_to_this_project(gl, project):
3
6
  scope = project.job_token_scope.get()
@@ -10,6 +13,7 @@ def test_enable_limit_access_to_this_project(gl, project):
10
13
  assert scope.inbound_enabled
11
14
 
12
15
 
16
+ @pytest.mark.xfail(reason="https://gitlab.com/gitlab-org/gitlab/-/issues/582271")
13
17
  def test_disable_limit_access_to_this_project(gl, project):
14
18
  scope = project.job_token_scope.get()
15
19
 
@@ -26,9 +26,9 @@ def test_create_project(gl, user):
26
26
 
27
27
  sudo_project = gl.projects.create({"name": "sudo_project"}, sudo=user.id)
28
28
 
29
- created = gl.projects.list()
29
+ created = gl.projects.list(get_all=True)
30
30
  created_gen = gl.projects.list(iterator=True)
31
- owned = gl.projects.list(owned=True)
31
+ owned = gl.projects.list(owned=True, get_all=True)
32
32
 
33
33
  assert admin_project in created and sudo_project in created
34
34
  assert admin_project in owned and sudo_project not in owned
@@ -26,3 +26,8 @@ def test_project_protected_registry(project: Project):
26
26
  protected_registry.minimum_access_level_for_push = "owner"
27
27
  protected_registry.save()
28
28
  assert protected_registry.minimum_access_level_for_push == "owner"
29
+
30
+ protected_registry.delete()
31
+
32
+ rules = project.registry_protection_repository_rules.list()
33
+ assert rules == []
@@ -7,14 +7,12 @@ from zipfile import is_zipfile
7
7
 
8
8
  import pytest
9
9
 
10
- content = textwrap.dedent(
11
- """\
10
+ content = textwrap.dedent("""\
12
11
  test-artifact:
13
12
  script: echo "test" > artifact.txt
14
13
  artifacts:
15
14
  untracked: true
16
- """
17
- )
15
+ """)
18
16
  data = {
19
17
  "file_path": ".gitlab-ci.yml",
20
18
  "branch": "main",
@@ -1,4 +1,4 @@
1
1
  GITLAB_IMAGE=gitlab/gitlab-ee
2
- GITLAB_TAG=17.8.2-ee.0
2
+ GITLAB_TAG=18.8.2-ee.0
3
3
  GITLAB_RUNNER_IMAGE=gitlab/gitlab-runner
4
4
  GITLAB_RUNNER_TAG=96856197
@@ -34,7 +34,7 @@ services:
34
34
  entrypoint:
35
35
  - /bin/sh
36
36
  - -c
37
- - ruby /create_license.rb && /assets/wrapper
37
+ - ruby /create_license.rb && /assets/init-container
38
38
  volumes:
39
39
  - ${PWD}/tests/functional/fixtures/create_license.rb:/create_license.rb
40
40
  ports:
@@ -9,6 +9,7 @@ import pytest
9
9
  import gitlab
10
10
  import gitlab.base
11
11
  import gitlab.exceptions
12
+ import gitlab.v4.objects
12
13
 
13
14
  SLEEP_INTERVAL = 0.5
14
15
  TIMEOUT = 60 # seconds before timeout will occur
@@ -37,6 +38,11 @@ def safe_delete(object: gitlab.base.RESTObject) -> None:
37
38
  object = manager.get(object.get_id()) # type: ignore[attr-defined]
38
39
  except gitlab.exceptions.GitlabGetError:
39
40
  return
41
+ # If object is already marked for deletion we have succeeded
42
+ if getattr(object, "marked_for_deletion_on", None) is not None:
43
+ # 'Group' and 'Project' objects have a 'marked_for_deletion_on' attribute
44
+ logging.info(f"{object!r} is marked for deletion.")
45
+ return
40
46
 
41
47
  if index:
42
48
  logging.info(f"Attempt {index + 1} to delete {object!r}.")
@@ -52,22 +58,16 @@ def safe_delete(object: gitlab.base.RESTObject) -> None:
52
58
  # we shouldn't cause test to fail if it still exists
53
59
  return
54
60
  elif isinstance(object, gitlab.v4.objects.Project):
55
- # Immediately delete rather than waiting for at least 1day
56
- # https://docs.gitlab.com/ee/api/projects.html#delete-project
57
- object.delete(permanently_remove=True)
58
- pass
61
+ # Starting in GitLab 18, projects can't be immediately deleted.
62
+ # So this will mark it for deletion.
63
+ object.delete()
59
64
  else:
60
65
  # We only attempt to delete parent groups to prevent dangling sub-groups
61
- # However parent groups can only be deleted on a delay in Gl 16
66
+ # However parent groups can only be deleted on a delay in GitLab 16
62
67
  # https://docs.gitlab.com/ee/api/groups.html#remove-group
63
68
  object.delete()
64
69
  except gitlab.exceptions.GitlabDeleteError:
65
- logging.info(f"{object!r} already deleted or scheduled for deletion.")
66
- if isinstance(object, gitlab.v4.objects.Group):
67
- # Parent groups can never be immediately deleted in GL 16,
68
- # so don't cause test to fail if it still exists
69
- return
70
- pass
70
+ logging.exception(f"Error attempting to delete: {object.pformat()}")
71
71
 
72
72
  time.sleep(SLEEP_INTERVAL)
73
73
  pytest.fail(f"{object!r} was not deleted")
@@ -58,6 +58,17 @@ def resp_update_protected_registry():
58
58
  yield rsps
59
59
 
60
60
 
61
+ @pytest.fixture
62
+ def resp_delete_protected_registry():
63
+ with responses.RequestsMock() as rsps:
64
+ rsps.add(
65
+ method=responses.DELETE,
66
+ url="http://localhost/api/v4/projects/1/registry/protection/repository/rules/1",
67
+ status=204,
68
+ )
69
+ yield rsps
70
+
71
+
61
72
  def test_list_project_protected_registries(project, resp_list_protected_registries):
62
73
  protected_registry = project.registry_protection_repository_rules.list()[0]
63
74
  assert isinstance(protected_registry, ProjectRegistryRepositoryProtectionRule)
@@ -80,3 +91,7 @@ def test_update_project_protected_registry(project, resp_update_protected_regist
80
91
  1, {"repository_path_pattern": "abc*"}
81
92
  )
82
93
  assert updated["repository_path_pattern"] == "abc*"
94
+
95
+
96
+ def test_delete_project_protected_registry(project, resp_delete_protected_registry):
97
+ project.registry_protection_repository_rules.delete(1)
@@ -268,28 +268,22 @@ def test_ssl_verify_as_str(m_open, monkeypatch):
268
268
  def test_data_from_helper(m_open, monkeypatch, tmp_path):
269
269
  helper = tmp_path / "helper.sh"
270
270
  helper.write_text(
271
- dedent(
272
- """\
271
+ dedent("""\
273
272
  #!/bin/sh
274
273
  echo "secret"
275
- """
276
- ),
274
+ """),
277
275
  encoding="utf-8",
278
276
  )
279
277
  helper.chmod(0o755)
280
278
 
281
- fd = io.StringIO(
282
- dedent(
283
- f"""\
279
+ fd = io.StringIO(dedent(f"""\
284
280
  [global]
285
281
  default = helper
286
282
 
287
283
  [helper]
288
284
  url = https://helper.url
289
285
  oauth_token = helper: {helper}
290
- """
291
- )
292
- )
286
+ """))
293
287
 
294
288
  fd.close = mock.Mock(return_value=None)
295
289
  m_open.return_value = fd
@@ -306,18 +300,14 @@ def test_data_from_helper(m_open, monkeypatch, tmp_path):
306
300
  @pytest.mark.skipif(sys.platform.startswith("win"), reason="Not supported on Windows")
307
301
  def test_from_helper_subprocess_error_raises_error(m_open, monkeypatch):
308
302
  # using false here to force a non-zero return code
309
- fd = io.StringIO(
310
- dedent(
311
- """\
303
+ fd = io.StringIO(dedent("""\
312
304
  [global]
313
305
  default = helper
314
306
 
315
307
  [helper]
316
308
  url = https://helper.url
317
309
  oauth_token = helper: false
318
- """
319
- )
320
- )
310
+ """))
321
311
 
322
312
  fd.close = mock.Mock(return_value=None)
323
313
  m_open.return_value = fd
@@ -1,14 +0,0 @@
1
- -r requirements.txt
2
- argcomplete==2.0.0
3
- black==25.9.0
4
- commitizen==4.9.1
5
- flake8==7.3.0
6
- isort==7.0.0
7
- mypy==1.18.2
8
- pylint==4.0.1
9
- pytest==8.4.2
10
- responses==0.25.8
11
- respx==0.22.0
12
- types-PyYAML==6.0.12.20250915
13
- types-requests==2.32.4.20250913
14
- types-setuptools==80.9.0.20250822
@@ -1 +0,0 @@
1
- pre-commit==4.3.0
File without changes
File without changes
File without changes
File without changes