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