python-gitlab 8.2.0__tar.gz → 8.3.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 (378) hide show
  1. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/CHANGELOG.md +16 -0
  2. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/PKG-INFO +1 -1
  3. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/api-objects.rst +1 -0
  4. python_gitlab-8.3.0/docs/gl_objects/service_accounts.rst +153 -0
  5. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/_version.py +1 -1
  6. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/client.py +2 -0
  7. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/mixins.py +9 -1
  8. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/projects.py +2 -0
  9. python_gitlab-8.3.0/gitlab/v4/objects/service_accounts.py +155 -0
  10. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/variables.py +50 -7
  11. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/python_gitlab.egg-info/PKG-INFO +1 -1
  12. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/python_gitlab.egg-info/SOURCES.txt +2 -0
  13. python_gitlab-8.3.0/requirements-lint.txt +14 -0
  14. python_gitlab-8.3.0/requirements-precommit.txt +1 -0
  15. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/requirements-test.txt +5 -5
  16. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/requirements.txt +1 -1
  17. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/api/test_variables.py +36 -0
  18. python_gitlab-8.3.0/tests/unit/objects/test_service_accounts.py +592 -0
  19. python_gitlab-8.2.0/gitlab/v4/objects/service_accounts.py +0 -20
  20. python_gitlab-8.2.0/requirements-lint.txt +0 -14
  21. python_gitlab-8.2.0/requirements-precommit.txt +0 -1
  22. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/AUTHORS +0 -0
  23. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/COPYING +0 -0
  24. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/MANIFEST.in +0 -0
  25. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/README.rst +0 -0
  26. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/Makefile +0 -0
  27. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/__init__.py +0 -0
  28. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/_static/js/gitter.js +0 -0
  29. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/api/gitlab.rst +0 -0
  30. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/api/gitlab.v4.rst +0 -0
  31. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/api-levels.rst +0 -0
  32. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/api-usage-advanced.rst +0 -0
  33. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/api-usage-graphql.rst +0 -0
  34. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/api-usage.rst +0 -0
  35. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/changelog.md +0 -0
  36. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/cli-examples.rst +0 -0
  37. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/cli-objects.rst +0 -0
  38. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/cli-usage.rst +0 -0
  39. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/conf.py +0 -0
  40. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/ext/__init__.py +0 -0
  41. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/ext/docstrings.py +0 -0
  42. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/ext/manager_tmpl.j2 +0 -0
  43. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/faq.rst +0 -0
  44. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/access_requests.rst +0 -0
  45. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/appearance.rst +0 -0
  46. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/applications.rst +0 -0
  47. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/badges.rst +0 -0
  48. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/boards.rst +0 -0
  49. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/branches.rst +0 -0
  50. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/bulk_imports.rst +0 -0
  51. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/ci_lint.rst +0 -0
  52. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/cluster_agents.rst +0 -0
  53. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/clusters.rst +0 -0
  54. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/commits.rst +0 -0
  55. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/deploy_keys.rst +0 -0
  56. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/deploy_tokens.rst +0 -0
  57. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/deployments.rst +0 -0
  58. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/discussions.rst +0 -0
  59. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/draft_notes.rst +0 -0
  60. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/emojis.rst +0 -0
  61. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/environments.rst +0 -0
  62. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/epics.rst +0 -0
  63. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/events.rst +0 -0
  64. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/geo_nodes.rst +0 -0
  65. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/gitlab_features.rst +0 -0
  66. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/group_access_tokens.rst +0 -0
  67. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/groups.rst +0 -0
  68. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/invitations.rst +0 -0
  69. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/issues.rst +0 -0
  70. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/iterations.rst +0 -0
  71. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/job_token_scope.rst +0 -0
  72. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/keys.rst +0 -0
  73. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/labels.rst +0 -0
  74. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/member_roles.rst +0 -0
  75. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/merge_request_approvals.rst +0 -0
  76. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/merge_requests.rst +0 -0
  77. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/merge_trains.rst +0 -0
  78. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/messages.rst +0 -0
  79. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/milestones.rst +0 -0
  80. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/namespaces.rst +0 -0
  81. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/notes.rst +0 -0
  82. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/notifications.rst +0 -0
  83. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/packages.rst +0 -0
  84. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/pagesdomains.rst +0 -0
  85. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/personal_access_tokens.rst +0 -0
  86. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/pipelines_and_jobs.rst +0 -0
  87. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/project_access_tokens.rst +0 -0
  88. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/project_feature_flag_user_lists.rst +0 -0
  89. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/project_feature_flags.rst +0 -0
  90. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/projects.rst +0 -0
  91. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/protected_branches.rst +0 -0
  92. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/protected_container_repositories.rst +0 -0
  93. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/protected_environments.rst +0 -0
  94. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/protected_packages.rst +0 -0
  95. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/pull_mirror.rst +0 -0
  96. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/releases.rst +0 -0
  97. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/remote_mirrors.rst +0 -0
  98. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/repositories.rst +0 -0
  99. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/repository_tags.rst +0 -0
  100. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/resource_groups.rst +0 -0
  101. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/runners.rst +0 -0
  102. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/search.rst +0 -0
  103. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/secure_files.rst +0 -0
  104. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/settings.rst +0 -0
  105. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/sidekiq.rst +0 -0
  106. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/snippets.rst +0 -0
  107. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/statistics.rst +0 -0
  108. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/status_checks.rst +0 -0
  109. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/system_hooks.rst +0 -0
  110. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/templates.rst +0 -0
  111. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/todos.rst +0 -0
  112. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/topics.rst +0 -0
  113. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/users.rst +0 -0
  114. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/variables.rst +0 -0
  115. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/gl_objects/wikis.rst +0 -0
  116. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/index.rst +0 -0
  117. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/make.bat +0 -0
  118. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/docs/release-notes.rst +0 -0
  119. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/__init__.py +0 -0
  120. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/__main__.py +0 -0
  121. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/_backends/__init__.py +0 -0
  122. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/_backends/graphql.py +0 -0
  123. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/_backends/protocol.py +0 -0
  124. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/_backends/requests_backend.py +0 -0
  125. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/base.py +0 -0
  126. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/cli.py +0 -0
  127. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/config.py +0 -0
  128. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/const.py +0 -0
  129. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/exceptions.py +0 -0
  130. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/py.typed +0 -0
  131. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/types.py +0 -0
  132. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/utils.py +0 -0
  133. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/__init__.py +0 -0
  134. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/cli.py +0 -0
  135. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/__init__.py +0 -0
  136. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/access_requests.py +0 -0
  137. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/appearance.py +0 -0
  138. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/applications.py +0 -0
  139. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/artifacts.py +0 -0
  140. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/audit_events.py +0 -0
  141. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/award_emojis.py +0 -0
  142. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/badges.py +0 -0
  143. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/boards.py +0 -0
  144. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/branches.py +0 -0
  145. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/broadcast_messages.py +0 -0
  146. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/bulk_imports.py +0 -0
  147. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/ci_lint.py +0 -0
  148. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/cluster_agents.py +0 -0
  149. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/clusters.py +0 -0
  150. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/commits.py +0 -0
  151. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/container_registry.py +0 -0
  152. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/custom_attributes.py +0 -0
  153. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/deploy_keys.py +0 -0
  154. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/deploy_tokens.py +0 -0
  155. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/deployments.py +0 -0
  156. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/discussions.py +0 -0
  157. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/draft_notes.py +0 -0
  158. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/environments.py +0 -0
  159. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/epics.py +0 -0
  160. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/events.py +0 -0
  161. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/export_import.py +0 -0
  162. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/feature_flag_user_lists.py +0 -0
  163. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/feature_flags.py +0 -0
  164. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/features.py +0 -0
  165. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/files.py +0 -0
  166. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/geo_nodes.py +0 -0
  167. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/group_access_tokens.py +0 -0
  168. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/groups.py +0 -0
  169. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/hooks.py +0 -0
  170. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/integrations.py +0 -0
  171. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/invitations.py +0 -0
  172. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/issues.py +0 -0
  173. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/iterations.py +0 -0
  174. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/job_token_scope.py +0 -0
  175. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/jobs.py +0 -0
  176. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/keys.py +0 -0
  177. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/labels.py +0 -0
  178. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/ldap.py +0 -0
  179. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/member_roles.py +0 -0
  180. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/members.py +0 -0
  181. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/merge_request_approvals.py +0 -0
  182. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/merge_requests.py +0 -0
  183. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/merge_trains.py +0 -0
  184. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/milestones.py +0 -0
  185. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/namespaces.py +0 -0
  186. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/notes.py +0 -0
  187. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/notification_settings.py +0 -0
  188. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/package_protection_rules.py +0 -0
  189. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/packages.py +0 -0
  190. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/pages.py +0 -0
  191. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/personal_access_tokens.py +0 -0
  192. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/pipelines.py +0 -0
  193. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/project_access_tokens.py +0 -0
  194. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/push_rules.py +0 -0
  195. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/registry_protection_repository_rules.py +0 -0
  196. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/registry_protection_rules.py +0 -0
  197. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/releases.py +0 -0
  198. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/repositories.py +0 -0
  199. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/resource_groups.py +0 -0
  200. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/reviewers.py +0 -0
  201. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/runners.py +0 -0
  202. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/secure_files.py +0 -0
  203. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/settings.py +0 -0
  204. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/sidekiq.py +0 -0
  205. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/snippets.py +0 -0
  206. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/statistics.py +0 -0
  207. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/status_checks.py +0 -0
  208. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/tags.py +0 -0
  209. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/templates.py +0 -0
  210. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/todos.py +0 -0
  211. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/topics.py +0 -0
  212. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/triggers.py +0 -0
  213. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/users.py +0 -0
  214. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/gitlab/v4/objects/wikis.py +0 -0
  215. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/pyproject.toml +0 -0
  216. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/python_gitlab.egg-info/dependency_links.txt +0 -0
  217. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/python_gitlab.egg-info/entry_points.txt +0 -0
  218. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/python_gitlab.egg-info/requires.txt +0 -0
  219. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/python_gitlab.egg-info/top_level.txt +0 -0
  220. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/requirements-docker.txt +0 -0
  221. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/requirements-docs.txt +0 -0
  222. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/setup.cfg +0 -0
  223. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/__init__.py +0 -0
  224. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/conftest.py +0 -0
  225. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/__init__.py +0 -0
  226. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/api/__init__.py +0 -0
  227. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/api/test_boards.py +0 -0
  228. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/api/test_branches.py +0 -0
  229. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/api/test_bulk_imports.py +0 -0
  230. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/api/test_current_user.py +0 -0
  231. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/api/test_deploy_keys.py +0 -0
  232. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/api/test_deploy_tokens.py +0 -0
  233. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/api/test_epics.py +0 -0
  234. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/api/test_gitlab.py +0 -0
  235. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/api/test_graphql.py +0 -0
  236. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/api/test_groups.py +0 -0
  237. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/api/test_import_export.py +0 -0
  238. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/api/test_issues.py +0 -0
  239. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/api/test_keys.py +0 -0
  240. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/api/test_lazy_objects.py +0 -0
  241. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/api/test_member_roles.py +0 -0
  242. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/api/test_merge_requests.py +0 -0
  243. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/api/test_packages.py +0 -0
  244. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/api/test_project_feature_flag_user_lists.py +0 -0
  245. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/api/test_project_feature_flags.py +0 -0
  246. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/api/test_project_job_token_scope.py +0 -0
  247. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/api/test_projects.py +0 -0
  248. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/api/test_push_rules.py +0 -0
  249. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/api/test_registry.py +0 -0
  250. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/api/test_releases.py +0 -0
  251. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/api/test_repository.py +0 -0
  252. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/api/test_services.py +0 -0
  253. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/api/test_snippets.py +0 -0
  254. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/api/test_statistics.py +0 -0
  255. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/api/test_topics.py +0 -0
  256. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/api/test_users.py +0 -0
  257. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/api/test_wikis.py +0 -0
  258. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/cli/__init__.py +0 -0
  259. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/cli/conftest.py +0 -0
  260. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/cli/test_cli.py +0 -0
  261. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/cli/test_cli_artifacts.py +0 -0
  262. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/cli/test_cli_files.py +0 -0
  263. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/cli/test_cli_packages.py +0 -0
  264. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/cli/test_cli_project_feature_flag_user_lists.py +0 -0
  265. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/cli/test_cli_project_feature_flags.py +0 -0
  266. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/cli/test_cli_projects.py +0 -0
  267. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/cli/test_cli_repository.py +0 -0
  268. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/cli/test_cli_resource_access_tokens.py +0 -0
  269. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/cli/test_cli_users.py +0 -0
  270. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/cli/test_cli_v4.py +0 -0
  271. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/cli/test_cli_variables.py +0 -0
  272. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/conftest.py +0 -0
  273. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/ee-test.py +0 -0
  274. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/fixtures/.env +0 -0
  275. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/fixtures/__init__.py +0 -0
  276. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/fixtures/avatar.png +0 -0
  277. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/fixtures/create_license.rb +0 -0
  278. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/fixtures/docker-compose.yml +0 -0
  279. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/fixtures/docker.py +0 -0
  280. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/fixtures/invalid_auth.cfg +0 -0
  281. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/fixtures/invalid_version.cfg +0 -0
  282. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/fixtures/set_token.rb +0 -0
  283. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/functional/helpers.py +0 -0
  284. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/install/test_install.py +0 -0
  285. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/smoke/__init__.py +0 -0
  286. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/smoke/test_dists.py +0 -0
  287. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/__init__.py +0 -0
  288. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/_backends/__init__.py +0 -0
  289. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/_backends/test_requests_backend.py +0 -0
  290. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/base/test_rest_manager.py +0 -0
  291. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/base/test_rest_object.py +0 -0
  292. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/conftest.py +0 -0
  293. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/helpers.py +0 -0
  294. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/meta/__init__.py +0 -0
  295. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/meta/test_abstract_attrs.py +0 -0
  296. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/meta/test_imports.py +0 -0
  297. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/meta/test_mro.py +0 -0
  298. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/mixins/__init__.py +0 -0
  299. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/mixins/test_meta_mixins.py +0 -0
  300. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/mixins/test_mixin_methods.py +0 -0
  301. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/mixins/test_object_mixins_attributes.py +0 -0
  302. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/__init__.py +0 -0
  303. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/conftest.py +0 -0
  304. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_appearance.py +0 -0
  305. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_applications.py +0 -0
  306. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_audit_events.py +0 -0
  307. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_badges.py +0 -0
  308. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_bridges.py +0 -0
  309. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_bulk_imports.py +0 -0
  310. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_ci_lint.py +0 -0
  311. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_cluster_agents.py +0 -0
  312. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_commits.py +0 -0
  313. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_deploy_tokens.py +0 -0
  314. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_deployments.py +0 -0
  315. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_draft_notes.py +0 -0
  316. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_environments.py +0 -0
  317. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_group_access_tokens.py +0 -0
  318. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_group_merge_request_approvals.py +0 -0
  319. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_groups.py +0 -0
  320. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_hooks.py +0 -0
  321. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_invitations.py +0 -0
  322. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_issues.py +0 -0
  323. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_iterations.py +0 -0
  324. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_job_artifacts.py +0 -0
  325. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_job_token_scope.py +0 -0
  326. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_jobs.py +0 -0
  327. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_keys.py +0 -0
  328. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_member_roles.py +0 -0
  329. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_members.py +0 -0
  330. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_merge_request_pipelines.py +0 -0
  331. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_merge_requests.py +0 -0
  332. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_merge_trains.py +0 -0
  333. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_package_protection_rules.py +0 -0
  334. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_packages.py +0 -0
  335. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_personal_access_tokens.py +0 -0
  336. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_pipeline_schedules.py +0 -0
  337. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_pipelines.py +0 -0
  338. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_project_access_tokens.py +0 -0
  339. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_project_feature_flag_user_lists.py +0 -0
  340. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_project_feature_flags.py +0 -0
  341. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_project_import_export.py +0 -0
  342. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_project_merge_request_approvals.py +0 -0
  343. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_project_statistics.py +0 -0
  344. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_projects.py +0 -0
  345. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_pull_mirror.py +0 -0
  346. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_registry_protection_rules.py +0 -0
  347. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_registry_repositories.py +0 -0
  348. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_releases.py +0 -0
  349. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_remote_mirrors.py +0 -0
  350. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_repositories.py +0 -0
  351. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_resource_groups.py +0 -0
  352. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_resource_iteration_events.py +0 -0
  353. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_resource_label_events.py +0 -0
  354. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_resource_milestone_events.py +0 -0
  355. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_resource_state_events.py +0 -0
  356. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_runners.py +0 -0
  357. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_secure_files.py +0 -0
  358. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_services.py +0 -0
  359. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_snippets.py +0 -0
  360. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_statistics.py +0 -0
  361. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_status_checks.py +0 -0
  362. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_submodules.py +0 -0
  363. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_templates.py +0 -0
  364. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_todos.py +0 -0
  365. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_topics.py +0 -0
  366. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_users.py +0 -0
  367. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/objects/test_variables.py +0 -0
  368. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/test_cli.py +0 -0
  369. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/test_config.py +0 -0
  370. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/test_exceptions.py +0 -0
  371. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/test_gitlab.py +0 -0
  372. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/test_gitlab_auth.py +0 -0
  373. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/test_gitlab_http_methods.py +0 -0
  374. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/test_graphql.py +0 -0
  375. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/test_retry.py +0 -0
  376. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/test_types.py +0 -0
  377. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tests/unit/test_utils.py +0 -0
  378. {python_gitlab-8.2.0 → python_gitlab-8.3.0}/tox.ini +0 -0
@@ -2,6 +2,22 @@
2
2
 
3
3
  All versions below are listed in reverse chronological order.
4
4
 
5
+ ## v8.3.0 (2026-04-28)
6
+
7
+ ### Bug Fixes
8
+
9
+ - **api**: Update CI/CD variable create and update attributes
10
+ ([`849301b`](https://github.com/python-gitlab/python-gitlab/commit/849301b830b0d4f76ab85ffa3f39b22a6e628df9))
11
+
12
+ - **mixins**: Register service account token classes in RotateMixin CLI actions
13
+ ([`2cf430b`](https://github.com/python-gitlab/python-gitlab/commit/2cf430b9c55c88f1d43fd31122a022dda0a88700))
14
+
15
+ ### Features
16
+
17
+ - **api**: Add full service account support at instance, group, and project level
18
+ ([`feb6ced`](https://github.com/python-gitlab/python-gitlab/commit/feb6cedeffa75ef386ef13a3226bc07bcb396f61))
19
+
20
+
5
21
  ## v8.2.0 (2026-03-28)
6
22
 
7
23
  ### Documentation
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-gitlab
3
- Version: 8.2.0
3
+ Version: 8.3.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>
@@ -64,6 +64,7 @@ API examples
64
64
  gl_objects/resource_groups
65
65
  gl_objects/search
66
66
  gl_objects/secure_files
67
+ gl_objects/service_accounts
67
68
  gl_objects/settings
68
69
  gl_objects/snippets
69
70
  gl_objects/statistics
@@ -0,0 +1,153 @@
1
+ ################
2
+ Service Accounts
3
+ ################
4
+
5
+ References
6
+ ----------
7
+
8
+ * v4 API:
9
+
10
+ + :class:`gitlab.v4.objects.ServiceAccount`
11
+ + :class:`gitlab.v4.objects.ServiceAccountManager`
12
+ + :class:`gitlab.v4.objects.GroupServiceAccount`
13
+ + :class:`gitlab.v4.objects.GroupServiceAccountManager`
14
+ + :class:`gitlab.v4.objects.GroupServiceAccountAccessToken`
15
+ + :class:`gitlab.v4.objects.GroupServiceAccountAccessTokenManager`
16
+ + :class:`gitlab.v4.objects.ProjectServiceAccount`
17
+ + :class:`gitlab.v4.objects.ProjectServiceAccountManager`
18
+ + :class:`gitlab.v4.objects.ProjectServiceAccountAccessToken`
19
+ + :class:`gitlab.v4.objects.ProjectServiceAccountAccessTokenManager`
20
+
21
+ * GitLab API: https://docs.gitlab.com/api/service_accounts/
22
+
23
+ Instance service accounts
24
+ -------------------------
25
+
26
+ List instance service accounts::
27
+
28
+ accounts = gl.service_accounts.list()
29
+
30
+ Create an instance service account::
31
+
32
+ sa = gl.service_accounts.create({})
33
+ # with optional attributes
34
+ sa = gl.service_accounts.create({"name": "my-bot", "username": "my-bot", "email": "my-bot@example.com"})
35
+
36
+ Update an instance service account::
37
+
38
+ gl.service_accounts.update(sa.id, {"name": "renamed-bot"})
39
+ # or via the object
40
+ sa.name = "renamed-bot"
41
+ sa.save()
42
+
43
+ Group service accounts
44
+ ----------------------
45
+
46
+ List group service accounts::
47
+
48
+ accounts = group.service_accounts.list()
49
+
50
+ Create a group service account::
51
+
52
+ sa = group.service_accounts.create({})
53
+ # with optional attributes
54
+ sa = group.service_accounts.create({"name": "ci-bot", "username": "ci-bot"})
55
+
56
+ Update a group service account::
57
+
58
+ group.service_accounts.update(sa.id, {"name": "renamed-bot"})
59
+ # or via the object
60
+ sa.name = "renamed-bot"
61
+ sa.save()
62
+
63
+ Delete a group service account::
64
+
65
+ group.service_accounts.delete(sa.id)
66
+ # or via the object
67
+ sa.delete()
68
+
69
+ Group service account personal access tokens
70
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
71
+
72
+ List tokens for a group service account::
73
+
74
+ tokens = sa.access_tokens.list()
75
+
76
+ Create a token for a group service account::
77
+
78
+ token = sa.access_tokens.create({
79
+ "name": "ci-token",
80
+ "scopes": ["api"],
81
+ "expires_at": "2026-01-01",
82
+ })
83
+ print(token.token)
84
+
85
+ Rotate a token::
86
+
87
+ token.rotate()
88
+ print(token.token)
89
+ # or directly using a token ID
90
+ new_token = sa.access_tokens.rotate(token.id)
91
+ print(new_token["token"])
92
+
93
+ Revoke a token::
94
+
95
+ sa.access_tokens.delete(token.id)
96
+ # or via the object
97
+ token.delete()
98
+
99
+ Project service accounts
100
+ ------------------------
101
+
102
+ List project service accounts::
103
+
104
+ accounts = project.service_accounts.list()
105
+
106
+ Create a project service account::
107
+
108
+ sa = project.service_accounts.create({})
109
+ # with optional attributes
110
+ sa = project.service_accounts.create({"name": "ci-bot", "username": "ci-bot"})
111
+
112
+ Update a project service account::
113
+
114
+ project.service_accounts.update(sa.id, {"name": "renamed-bot"})
115
+ # or via the object
116
+ sa.name = "renamed-bot"
117
+ sa.save()
118
+
119
+ Delete a project service account::
120
+
121
+ project.service_accounts.delete(sa.id)
122
+ # or via the object
123
+ sa.delete()
124
+
125
+ Project service account personal access tokens
126
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
127
+
128
+ List tokens for a project service account::
129
+
130
+ tokens = sa.access_tokens.list()
131
+
132
+ Create a token for a project service account::
133
+
134
+ token = sa.access_tokens.create({
135
+ "name": "ci-token",
136
+ "scopes": ["read_repository"],
137
+ "expires_at": "2026-01-01",
138
+ })
139
+ print(token.token)
140
+
141
+ Rotate a token::
142
+
143
+ token.rotate()
144
+ print(token.token)
145
+ # or directly using a token ID
146
+ new_token = sa.access_tokens.rotate(token.id)
147
+ print(new_token["token"])
148
+
149
+ Revoke a token::
150
+
151
+ sa.access_tokens.delete(token.id)
152
+ # or via the object
153
+ token.delete()
@@ -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__ = "8.2.0"
6
+ __version__ = "8.3.0"
@@ -211,6 +211,8 @@ class Gitlab:
211
211
  """See :class:`~gitlab.v4.objects.PersonalAccessTokenManager`"""
212
212
  self.topics = objects.TopicManager(self)
213
213
  """See :class:`~gitlab.v4.objects.TopicManager`"""
214
+ self.service_accounts = objects.ServiceAccountManager(self)
215
+ """See :class:`~gitlab.v4.objects.ServiceAccountManager`"""
214
216
  self.statistics = objects.ApplicationStatisticsManager(self)
215
217
  """See :class:`~gitlab.v4.objects.ApplicationStatisticsManager`"""
216
218
 
@@ -619,6 +619,8 @@ class RotateMixin(base.RESTManager[base.TObjCls]):
619
619
  "PersonalAccessTokenManager",
620
620
  "GroupAccessTokenManager",
621
621
  "ProjectAccessTokenManager",
622
+ "GroupServiceAccountAccessTokenManager",
623
+ "ProjectServiceAccountAccessTokenManager",
622
624
  ),
623
625
  optional=("expires_at",),
624
626
  )
@@ -656,7 +658,13 @@ class ObjectRotateMixin(_RestObjectBase):
656
658
  manager: base.RESTManager[Any]
657
659
 
658
660
  @cli.register_custom_action(
659
- cls_names=("PersonalAccessToken", "GroupAccessToken", "ProjectAccessToken"),
661
+ cls_names=(
662
+ "PersonalAccessToken",
663
+ "GroupAccessToken",
664
+ "ProjectAccessToken",
665
+ "GroupServiceAccountAccessToken",
666
+ "ProjectServiceAccountAccessToken",
667
+ ),
660
668
  optional=("expires_at",),
661
669
  )
662
670
  @exc.on_http_error(exc.GitlabRotateError)
@@ -91,6 +91,7 @@ from .repositories import RepositoryMixin
91
91
  from .resource_groups import ProjectResourceGroupManager
92
92
  from .runners import ProjectRunnerManager # noqa: F401
93
93
  from .secure_files import ProjectSecureFileManager # noqa: F401
94
+ from .service_accounts import ProjectServiceAccountManager # noqa: F401
94
95
  from .snippets import ProjectSnippetManager # noqa: F401
95
96
  from .statistics import ( # noqa: F401
96
97
  ProjectAdditionalStatisticsManager,
@@ -251,6 +252,7 @@ class Project(
251
252
  repositories: ProjectRegistryRepositoryManager
252
253
  runners: ProjectRunnerManager
253
254
  secure_files: ProjectSecureFileManager
255
+ service_accounts: ProjectServiceAccountManager
254
256
  services: ProjectServiceManager
255
257
  snippets: ProjectSnippetManager
256
258
  external_status_checks: ProjectExternalStatusCheckManager
@@ -0,0 +1,155 @@
1
+ """
2
+ GitLab API: https://docs.gitlab.com/api/service_accounts/
3
+ """
4
+
5
+ from gitlab.base import RESTObject
6
+ from gitlab.mixins import (
7
+ CreateMixin,
8
+ DeleteMixin,
9
+ ListMixin,
10
+ ObjectDeleteMixin,
11
+ ObjectRotateMixin,
12
+ RotateMixin,
13
+ SaveMixin,
14
+ UpdateMethod,
15
+ UpdateMixin,
16
+ )
17
+ from gitlab.types import ArrayAttribute, RequiredOptional
18
+
19
+ __all__ = [
20
+ "ServiceAccount",
21
+ "ServiceAccountManager",
22
+ "GroupServiceAccount",
23
+ "GroupServiceAccountManager",
24
+ "GroupServiceAccountAccessToken",
25
+ "GroupServiceAccountAccessTokenManager",
26
+ "ProjectServiceAccount",
27
+ "ProjectServiceAccountManager",
28
+ "ProjectServiceAccountAccessToken",
29
+ "ProjectServiceAccountAccessTokenManager",
30
+ ]
31
+
32
+ _SA_ACCOUNT_ATTRS = RequiredOptional(optional=("name", "username", "email"))
33
+
34
+ _SA_TOKEN_CREATE_ATTRS = RequiredOptional(
35
+ required=("name", "scopes"), optional=("description", "expires_at")
36
+ )
37
+
38
+ _SA_TOKEN_LIST_FILTERS = (
39
+ "created_after",
40
+ "created_before",
41
+ "expires_after",
42
+ "expires_before",
43
+ "last_used_after",
44
+ "last_used_before",
45
+ "revoked",
46
+ "search",
47
+ "sort",
48
+ "state",
49
+ )
50
+
51
+
52
+ # ---------------------------------------------------------------------------
53
+ # Instance-level service accounts
54
+ # ---------------------------------------------------------------------------
55
+
56
+
57
+ class ServiceAccount(SaveMixin, RESTObject):
58
+ pass
59
+
60
+
61
+ class ServiceAccountManager(
62
+ CreateMixin[ServiceAccount], ListMixin[ServiceAccount], UpdateMixin[ServiceAccount]
63
+ ):
64
+ _path = "/service_accounts"
65
+ _obj_cls = ServiceAccount
66
+ _create_attrs = _SA_ACCOUNT_ATTRS
67
+ _update_attrs = _SA_ACCOUNT_ATTRS
68
+ _update_method = UpdateMethod.PATCH
69
+ _list_filters = ("order_by", "sort")
70
+
71
+
72
+ # ---------------------------------------------------------------------------
73
+ # Group-level service accounts
74
+ # ---------------------------------------------------------------------------
75
+
76
+
77
+ class GroupServiceAccountAccessToken(ObjectDeleteMixin, ObjectRotateMixin, RESTObject):
78
+ pass
79
+
80
+
81
+ class GroupServiceAccountAccessTokenManager(
82
+ CreateMixin[GroupServiceAccountAccessToken],
83
+ DeleteMixin[GroupServiceAccountAccessToken],
84
+ ListMixin[GroupServiceAccountAccessToken],
85
+ RotateMixin[GroupServiceAccountAccessToken],
86
+ ):
87
+ _path = "/groups/{group_id}/service_accounts/{user_id}/personal_access_tokens"
88
+ _obj_cls = GroupServiceAccountAccessToken
89
+ _from_parent_attrs = {"group_id": "group_id", "user_id": "id"}
90
+ _create_attrs = _SA_TOKEN_CREATE_ATTRS
91
+ _types = {"scopes": ArrayAttribute}
92
+ _list_filters = _SA_TOKEN_LIST_FILTERS
93
+
94
+
95
+ class GroupServiceAccount(SaveMixin, ObjectDeleteMixin, RESTObject):
96
+ access_tokens: GroupServiceAccountAccessTokenManager
97
+
98
+
99
+ class GroupServiceAccountManager(
100
+ CreateMixin[GroupServiceAccount],
101
+ DeleteMixin[GroupServiceAccount],
102
+ ListMixin[GroupServiceAccount],
103
+ UpdateMixin[GroupServiceAccount],
104
+ ):
105
+ _path = "/groups/{group_id}/service_accounts"
106
+ _obj_cls = GroupServiceAccount
107
+ _from_parent_attrs = {"group_id": "id"}
108
+ _create_attrs = _SA_ACCOUNT_ATTRS
109
+ _update_attrs = _SA_ACCOUNT_ATTRS
110
+ _update_method = UpdateMethod.PATCH
111
+ _list_filters = ("order_by", "sort")
112
+
113
+
114
+ # ---------------------------------------------------------------------------
115
+ # Project-level service accounts
116
+ # ---------------------------------------------------------------------------
117
+
118
+
119
+ class ProjectServiceAccountAccessToken(
120
+ ObjectDeleteMixin, ObjectRotateMixin, RESTObject
121
+ ):
122
+ pass
123
+
124
+
125
+ class ProjectServiceAccountAccessTokenManager(
126
+ CreateMixin[ProjectServiceAccountAccessToken],
127
+ DeleteMixin[ProjectServiceAccountAccessToken],
128
+ ListMixin[ProjectServiceAccountAccessToken],
129
+ RotateMixin[ProjectServiceAccountAccessToken],
130
+ ):
131
+ _path = "/projects/{project_id}/service_accounts/{user_id}/personal_access_tokens"
132
+ _obj_cls = ProjectServiceAccountAccessToken
133
+ _from_parent_attrs = {"project_id": "project_id", "user_id": "id"}
134
+ _create_attrs = _SA_TOKEN_CREATE_ATTRS
135
+ _types = {"scopes": ArrayAttribute}
136
+ _list_filters = _SA_TOKEN_LIST_FILTERS
137
+
138
+
139
+ class ProjectServiceAccount(SaveMixin, ObjectDeleteMixin, RESTObject):
140
+ access_tokens: ProjectServiceAccountAccessTokenManager
141
+
142
+
143
+ class ProjectServiceAccountManager(
144
+ CreateMixin[ProjectServiceAccount],
145
+ DeleteMixin[ProjectServiceAccount],
146
+ ListMixin[ProjectServiceAccount],
147
+ UpdateMixin[ProjectServiceAccount],
148
+ ):
149
+ _path = "/projects/{project_id}/service_accounts"
150
+ _obj_cls = ProjectServiceAccount
151
+ _from_parent_attrs = {"project_id": "id"}
152
+ _create_attrs = _SA_ACCOUNT_ATTRS
153
+ _update_attrs = _SA_ACCOUNT_ATTRS
154
+ _update_method = UpdateMethod.PATCH
155
+ _list_filters = ("order_by", "sort")
@@ -27,10 +27,19 @@ class VariableManager(CRUDMixin[Variable]):
27
27
  _path = "/admin/ci/variables"
28
28
  _obj_cls = Variable
29
29
  _create_attrs = RequiredOptional(
30
- required=("key", "value"), optional=("protected", "variable_type", "masked")
30
+ required=("key", "value"),
31
+ optional=("description", "masked", "protected", "raw", "variable_type"),
31
32
  )
32
33
  _update_attrs = RequiredOptional(
33
- required=("key", "value"), optional=("protected", "variable_type", "masked")
34
+ required=("key",),
35
+ optional=(
36
+ "description",
37
+ "masked",
38
+ "protected",
39
+ "raw",
40
+ "value",
41
+ "variable_type",
42
+ ),
34
43
  )
35
44
 
36
45
 
@@ -43,10 +52,28 @@ class GroupVariableManager(CRUDMixin[GroupVariable]):
43
52
  _obj_cls = GroupVariable
44
53
  _from_parent_attrs = {"group_id": "id"}
45
54
  _create_attrs = RequiredOptional(
46
- required=("key", "value"), optional=("protected", "variable_type", "masked")
55
+ required=("key", "value"),
56
+ optional=(
57
+ "description",
58
+ "environment_scope",
59
+ "masked",
60
+ "masked_and_hidden",
61
+ "protected",
62
+ "raw",
63
+ "variable_type",
64
+ ),
47
65
  )
48
66
  _update_attrs = RequiredOptional(
49
- required=("key", "value"), optional=("protected", "variable_type", "masked")
67
+ required=("key",),
68
+ optional=(
69
+ "description",
70
+ "environment_scope",
71
+ "masked",
72
+ "protected",
73
+ "raw",
74
+ "value",
75
+ "variable_type",
76
+ ),
50
77
  )
51
78
 
52
79
 
@@ -60,9 +87,25 @@ class ProjectVariableManager(CRUDMixin[ProjectVariable]):
60
87
  _from_parent_attrs = {"project_id": "id"}
61
88
  _create_attrs = RequiredOptional(
62
89
  required=("key", "value"),
63
- optional=("protected", "variable_type", "masked", "environment_scope"),
90
+ optional=(
91
+ "description",
92
+ "environment_scope",
93
+ "masked",
94
+ "masked_and_hidden",
95
+ "protected",
96
+ "raw",
97
+ "variable_type",
98
+ ),
64
99
  )
65
100
  _update_attrs = RequiredOptional(
66
- required=("key", "value"),
67
- optional=("protected", "variable_type", "masked", "environment_scope"),
101
+ required=("key",),
102
+ optional=(
103
+ "description",
104
+ "environment_scope",
105
+ "masked",
106
+ "protected",
107
+ "raw",
108
+ "value",
109
+ "variable_type",
110
+ ),
68
111
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-gitlab
3
- Version: 8.2.0
3
+ Version: 8.3.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>
@@ -93,6 +93,7 @@ docs/gl_objects/resource_groups.rst
93
93
  docs/gl_objects/runners.rst
94
94
  docs/gl_objects/search.rst
95
95
  docs/gl_objects/secure_files.rst
96
+ docs/gl_objects/service_accounts.rst
96
97
  docs/gl_objects/settings.rst
97
98
  docs/gl_objects/sidekiq.rst
98
99
  docs/gl_objects/snippets.rst
@@ -359,6 +360,7 @@ tests/unit/objects/test_resource_milestone_events.py
359
360
  tests/unit/objects/test_resource_state_events.py
360
361
  tests/unit/objects/test_runners.py
361
362
  tests/unit/objects/test_secure_files.py
363
+ tests/unit/objects/test_service_accounts.py
362
364
  tests/unit/objects/test_services.py
363
365
  tests/unit/objects/test_snippets.py
364
366
  tests/unit/objects/test_statistics.py
@@ -0,0 +1,14 @@
1
+ -r requirements.txt
2
+ argcomplete==2.0.0
3
+ black==26.3.1
4
+ commitizen==4.13.10
5
+ flake8==7.3.0
6
+ isort==8.0.1
7
+ mypy==1.20.2
8
+ pylint==4.0.5
9
+ pytest==9.0.3
10
+ responses==0.26.0
11
+ respx==0.23.1
12
+ types-PyYAML==6.0.12.20260408
13
+ types-requests==2.33.0.20260408
14
+ types-setuptools==82.0.0.20260408
@@ -0,0 +1 @@
1
+ pre-commit==4.6.0
@@ -1,13 +1,13 @@
1
1
  -r requirements.txt
2
- anyio==4.12.1
3
- build==1.4.0
2
+ anyio==4.13.0
3
+ build==1.4.4
4
4
  coverage==7.13.5
5
5
  pytest-console-scripts==1.4.1
6
6
  pytest-cov==7.1.0
7
7
  pytest-github-actions-annotate-failures==0.4.0
8
- pytest==9.0.2
8
+ pytest==9.0.3
9
9
  PyYaml==6.0.3
10
10
  responses==0.26.0
11
- respx==0.22.0
11
+ respx==0.23.1
12
12
  trio==0.33.0
13
- wheel==0.46.3
13
+ wheel==0.47.0
@@ -1,4 +1,4 @@
1
1
  gql==4.0.0
2
2
  httpx==0.28.1
3
- requests==2.33.0
3
+ requests==2.33.1
4
4
  requests-toolbelt==1.0.0
@@ -43,3 +43,39 @@ def test_project_variables(project):
43
43
  assert variable.value == "new_value1"
44
44
 
45
45
  variable.delete()
46
+
47
+
48
+ def test_hidden_group_variables(group):
49
+ variable = group.variables.create(
50
+ {"key": "key1", "value": "secret_value", "masked_and_hidden": True}
51
+ )
52
+
53
+ variable = group.variables.get(variable.key)
54
+ assert variable.value is None
55
+ assert variable.description is None
56
+ assert variable in group.variables.list()
57
+
58
+ variable.description = "new_description"
59
+ variable.save()
60
+ variable = group.variables.get(variable.key)
61
+ assert variable.description == "new_description"
62
+
63
+ variable.delete()
64
+
65
+
66
+ def test_hidden_project_variables(project):
67
+ variable = project.variables.create(
68
+ {"key": "key1", "value": "secret_value", "masked_and_hidden": True}
69
+ )
70
+
71
+ variable = project.variables.get(variable.key)
72
+ assert variable.value is None
73
+ assert variable.description is None
74
+ assert variable in project.variables.list()
75
+
76
+ variable.description = "new_description"
77
+ variable.save()
78
+ variable = project.variables.get(variable.key)
79
+ assert variable.description == "new_description"
80
+
81
+ variable.delete()