gitlab-api 27.3.3__tar.gz → 27.3.4__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 (92) hide show
  1. {gitlab_api-27.3.3/gitlab_api.egg-info → gitlab_api-27.3.4}/PKG-INFO +3 -8
  2. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/README.md +1 -1
  3. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api/gitlab_gql.py +8 -18
  4. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api/mcp_server.py +1 -1
  5. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api/ontology/ingest_sources.json +1 -1
  6. {gitlab_api-27.3.3 → gitlab_api-27.3.4/gitlab_api.egg-info}/PKG-INFO +3 -8
  7. gitlab_api-27.3.4/gitlab_api.egg-info/requires.txt +12 -0
  8. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/pyproject.toml +4 -5
  9. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/tests/test_gitlab_gql.py +42 -10
  10. gitlab_api-27.3.3/gitlab_api.egg-info/requires.txt +0 -18
  11. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/LICENSE +0 -0
  12. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/MANIFEST.in +0 -0
  13. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api/__init__.py +0 -0
  14. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api/__main__.py +0 -0
  15. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api/api/__init__.py +0 -0
  16. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api/api/api_client_base.py +0 -0
  17. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api/api/api_client_environments.py +0 -0
  18. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api/api/api_client_issues.py +0 -0
  19. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api/api/api_client_merge_requests.py +0 -0
  20. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api/api/api_client_other.py +0 -0
  21. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api/api/api_client_pipelines.py +0 -0
  22. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api/api/api_client_projects.py +0 -0
  23. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api/api/api_client_repositories.py +0 -0
  24. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api/api/api_client_system.py +0 -0
  25. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api/api/api_client_users_groups.py +0 -0
  26. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api/api/api_client_vulnerabilities.py +0 -0
  27. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api/api_client.py +0 -0
  28. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api/auth.py +0 -0
  29. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api/connector_manifest.yml +0 -0
  30. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api/connector_prep.py +0 -0
  31. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api/connectors/__init__.py +0 -0
  32. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api/connectors/mcp_source_presets.json +0 -0
  33. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api/connectors/tool_schema_fingerprints.json +0 -0
  34. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api/gitlab_input_models.py +0 -0
  35. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api/gitlab_response_models.py +0 -0
  36. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api/instances.py +0 -0
  37. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api/kg_ingest.py +0 -0
  38. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api/mcp_config.json +0 -0
  39. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api/ontology/__init__.py +0 -0
  40. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api/ontology/certification.json +0 -0
  41. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api/ontology/fixtures/records.json +0 -0
  42. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api/ontology/gitlab.ttl +0 -0
  43. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api/ontology/mappings/source.yaml +0 -0
  44. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api/ontology/migrations/manifest.json +0 -0
  45. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api/ontology/shapes/connector.shacl.ttl +0 -0
  46. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api/prompts/__init__.py +0 -0
  47. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api/prompts/devops_specialist.json +0 -0
  48. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api/skills/__init__.py +0 -0
  49. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api/skills/gitlab-api-operations/SKILL.md +0 -0
  50. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api/skills/gitlab-api-operations/agents/openai.yaml +0 -0
  51. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api/skills/gitlab-api-operations/references/catalog.md +0 -0
  52. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api/skills/gitlab-issues/SKILL.md +0 -0
  53. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api/skills/gitlab-issues/WORKFLOW.md +0 -0
  54. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api/skills/gitlab-merge-request-create/SKILL.md +0 -0
  55. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api/skills/gitlab-merge-request-create/WORKFLOW.md +0 -0
  56. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api/skills/gitlab-merge-request-review/SKILL.md +0 -0
  57. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api/skills/gitlab-merge-request-review/WORKFLOW.md +0 -0
  58. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api/skills/gitlab-pipelines/SKILL.md +0 -0
  59. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api/skills/gitlab-pipelines/WORKFLOW.md +0 -0
  60. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api/skills/gitlab-vulnerabilities/SKILL.md +0 -0
  61. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api/skills/gitlab-vulnerabilities/WORKFLOW.md +0 -0
  62. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api.egg-info/SOURCES.txt +0 -0
  63. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api.egg-info/dependency_links.txt +0 -0
  64. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api.egg-info/entry_points.txt +0 -0
  65. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/gitlab_api.egg-info/top_level.txt +0 -0
  66. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/requirements.txt +0 -0
  67. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/scripts/check_import_safety.py +0 -0
  68. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/scripts/security_contract.py +0 -0
  69. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/scripts/security_sanitizer.py +0 -0
  70. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/scripts/verify_api_integration.py +0 -0
  71. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/setup.cfg +0 -0
  72. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/tests/__init__.py +0 -0
  73. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/tests/conftest.py +0 -0
  74. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/tests/test_api_wrapper.py +0 -0
  75. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/tests/test_auth.py +0 -0
  76. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/tests/test_connector_prep.py +0 -0
  77. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/tests/test_fleet_name.py +0 -0
  78. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/tests/test_gitlab_a2a_validation.py +0 -0
  79. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/tests/test_gitlab_api_brute_force_coverage.py +0 -0
  80. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/tests/test_gitlab_mcp_validation.py +0 -0
  81. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/tests/test_gitlab_models.py +0 -0
  82. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/tests/test_identity_context_scoping.py +0 -0
  83. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/tests/test_ingest_sources.py +0 -0
  84. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/tests/test_init_dynamics.py +0 -0
  85. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/tests/test_instances.py +0 -0
  86. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/tests/test_kg_ingest.py +0 -0
  87. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/tests/test_mock_coverage.py +0 -0
  88. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/tests/test_security_sanitizer.py +0 -0
  89. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/tests/test_startup.py +0 -0
  90. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/tests/test_tool_modes.py +0 -0
  91. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/tests/test_verify_agent.py +0 -0
  92. {gitlab_api-27.3.3 → gitlab_api-27.3.4}/tests/verify_a2a_queries.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gitlab-api
3
- Version: 27.3.3
3
+ Version: 27.3.4
4
4
  Summary: GitLab API + MCP Server
5
5
  Author-email: Project Maintainers <maintainers@users.noreply.github.com>
6
6
  License: MIT
@@ -12,15 +12,10 @@ Classifier: Programming Language :: Python :: 3
12
12
  Requires-Python: >=3.12
13
13
  Description-Content-Type: text/markdown
14
14
  License-File: LICENSE
15
- Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.3.11
15
+ Requires-Dist: agent-connector-sdk[graphql,mcp]<1.0.0,>=0.3.13
16
16
  Requires-Dist: python-dotenv>=1.2.4
17
- Requires-Dist: gql[requests]>=4.4.0
18
17
  Provides-Extra: mcp
19
- Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.3.11; extra == "mcp"
20
- Provides-Extra: gql
21
- Requires-Dist: gql[requests]>=4.4.0; extra == "gql"
22
18
  Provides-Extra: all
23
- Requires-Dist: gitlab-api[gql,mcp]>=27.2.0; extra == "all"
24
19
  Provides-Extra: test
25
20
  Requires-Dist: pytest-xdist>=3.8.0; extra == "test"
26
21
  Requires-Dist: pytest>=9.1.1; extra == "test"
@@ -50,7 +45,7 @@ Dynamic: license-file
50
45
  ![PyPI - Wheel](https://img.shields.io/pypi/wheel/gitlab-api)
51
46
  ![PyPI - Implementation](https://img.shields.io/pypi/implementation/gitlab-api)
52
47
 
53
- *Version: 27.3.3*
48
+ *Version: 27.3.4*
54
49
 
55
50
  > **Documentation** — Installation, deployment, usage across the API, CLI, and MCP
56
51
  > backing GitLab instance are maintained in the
@@ -20,7 +20,7 @@
20
20
  ![PyPI - Wheel](https://img.shields.io/pypi/wheel/gitlab-api)
21
21
  ![PyPI - Implementation](https://img.shields.io/pypi/implementation/gitlab-api)
22
22
 
23
- *Version: 27.3.3*
23
+ *Version: 27.3.4*
24
24
 
25
25
  > **Documentation** — Installation, deployment, usage across the API, CLI, and MCP
26
26
  > backing GitLab instance are maintained in the
@@ -12,8 +12,7 @@ from agent_connector_sdk.exceptions import (
12
12
  )
13
13
  from agent_connector_sdk.tls.profile import ResolvedTLSProfile
14
14
  from agent_connector_sdk.tls.resolve import resolve_tls_profile
15
- from gql import Client, gql
16
- from gql.transport.requests import RequestsHTTPTransport
15
+ from agent_connector_sdk.transports.graphql import GraphQLAuth, GraphQLClient
17
16
 
18
17
  from gitlab_api.gitlab_input_models import (
19
18
  BranchModel,
@@ -120,12 +119,13 @@ class GraphQL:
120
119
 
121
120
  headers = {"Authorization": f"Bearer {token}"}
122
121
  self.headers = headers
123
- self.transport = RequestsHTTPTransport(
124
- url=self.url,
125
- headers=headers,
126
- **self.tls_profile.requests_kwargs(),
122
+ self.client = GraphQLClient(
123
+ self.url,
124
+ auth=GraphQLAuth.bearer(token),
125
+ tls_profile=self.tls_profile,
126
+ tls_service="gitlab",
127
+ fetch_schema=True,
127
128
  )
128
- self.client = Client(transport=self.transport, fetch_schema_from_transport=True)
129
129
 
130
130
  @require_auth
131
131
  def execute_gql(
@@ -148,17 +148,7 @@ class GraphQL:
148
148
  Raises:
149
149
  ParameterError: If the query execution fails or returns errors.
150
150
  """
151
- try:
152
- query = gql(query_str)
153
- result = self.client.execute(
154
- query, variable_values=variables, operation_name=operation_name
155
- )
156
- if "errors" in result:
157
- raise ParameterError(f"GraphQL errors: {result['errors']}")
158
- return result
159
- except Exception as e:
160
- logging.error("GraphQL execution failed: error_type=%s", type(e).__name__)
161
- raise ParameterError(f"Query execution failed: {type(e).__name__}") from e
151
+ return self.client.execute(query_str, variables, operation_name)
162
152
 
163
153
  @require_auth
164
154
  def get_branches(
@@ -35,7 +35,7 @@ from agent_connector_sdk.mcp.tool_surface import register_tool_surface
35
35
  from gitlab_api.api_client import Api
36
36
  from gitlab_api.auth import get_client
37
37
 
38
- __version__ = "27.3.3"
38
+ __version__ = "27.3.4"
39
39
  print(f"Gitlab MCP v{__version__}", file=sys.stderr)
40
40
 
41
41
  logger = get_logger(name="mcp_server")
@@ -1,5 +1,5 @@
1
1
  {
2
- "connector": "gitlab-api",
2
+ "connector": "gitlab-mcp",
3
3
  "sources": [
4
4
  {
5
5
  "source_id": "projects",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gitlab-api
3
- Version: 27.3.3
3
+ Version: 27.3.4
4
4
  Summary: GitLab API + MCP Server
5
5
  Author-email: Project Maintainers <maintainers@users.noreply.github.com>
6
6
  License: MIT
@@ -12,15 +12,10 @@ Classifier: Programming Language :: Python :: 3
12
12
  Requires-Python: >=3.12
13
13
  Description-Content-Type: text/markdown
14
14
  License-File: LICENSE
15
- Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.3.11
15
+ Requires-Dist: agent-connector-sdk[graphql,mcp]<1.0.0,>=0.3.13
16
16
  Requires-Dist: python-dotenv>=1.2.4
17
- Requires-Dist: gql[requests]>=4.4.0
18
17
  Provides-Extra: mcp
19
- Requires-Dist: agent-connector-sdk[mcp]<1.0.0,>=0.3.11; extra == "mcp"
20
- Provides-Extra: gql
21
- Requires-Dist: gql[requests]>=4.4.0; extra == "gql"
22
18
  Provides-Extra: all
23
- Requires-Dist: gitlab-api[gql,mcp]>=27.2.0; extra == "all"
24
19
  Provides-Extra: test
25
20
  Requires-Dist: pytest-xdist>=3.8.0; extra == "test"
26
21
  Requires-Dist: pytest>=9.1.1; extra == "test"
@@ -50,7 +45,7 @@ Dynamic: license-file
50
45
  ![PyPI - Wheel](https://img.shields.io/pypi/wheel/gitlab-api)
51
46
  ![PyPI - Implementation](https://img.shields.io/pypi/implementation/gitlab-api)
52
47
 
53
- *Version: 27.3.3*
48
+ *Version: 27.3.4*
54
49
 
55
50
  > **Documentation** — Installation, deployment, usage across the API, CLI, and MCP
56
51
  > backing GitLab instance are maintained in the
@@ -0,0 +1,12 @@
1
+ agent-connector-sdk[graphql,mcp]<1.0.0,>=0.3.13
2
+ python-dotenv>=1.2.4
3
+
4
+ [all]
5
+
6
+ [mcp]
7
+
8
+ [test]
9
+ pytest-xdist>=3.8.0
10
+ pytest>=9.1.1
11
+ pytest-asyncio>=1.4.0
12
+ pytest-cov>=7.1.0
@@ -4,12 +4,12 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "gitlab-api"
7
- version = "27.3.3"
7
+ version = "27.3.4"
8
8
  description = "GitLab API + MCP Server"
9
9
  readme = "README.md"
10
10
  classifiers = [ "Development Status :: 5 - Production/Stable", "License :: OSI Approved :: MIT License", "Environment :: Console", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 3",]
11
11
  requires-python = ">=3.12"
12
- dependencies = [ "agent-connector-sdk[mcp]>=0.3.11,<1.0.0", "python-dotenv>=1.2.4", "gql[requests]>=4.4.0",]
12
+ dependencies = [ "agent-connector-sdk[mcp,graphql]>=0.3.13,<1.0.0", "python-dotenv>=1.2.4",]
13
13
  [[project.authors]]
14
14
  name = "Project Maintainers"
15
15
  email = "maintainers@users.noreply.github.com"
@@ -18,9 +18,8 @@ email = "maintainers@users.noreply.github.com"
18
18
  text = "MIT"
19
19
 
20
20
  [project.optional-dependencies]
21
- mcp = [ "agent-connector-sdk[mcp]>=0.3.11,<1.0.0",]
22
- gql = [ "gql[requests]>=4.4.0",]
23
- all = [ "gitlab-api[mcp,gql]>=27.2.0",]
21
+ mcp = []
22
+ all = []
24
23
  test = [
25
24
  "pytest-xdist>=3.8.0", "pytest>=9.1.1", "pytest-asyncio>=1.4.0", "pytest-cov>=7.1.0",]
26
25
 
@@ -5,14 +5,18 @@ from unittest.mock import MagicMock, patch
5
5
 
6
6
  import pytest
7
7
  from agent_connector_sdk.exceptions import MissingParameterError, ParameterError
8
+ from agent_connector_sdk.transports.graphql import GraphQLExecutionError
8
9
 
9
10
  from gitlab_api.gitlab_gql import GraphQL
10
11
 
11
12
 
12
13
  @pytest.fixture
13
14
  def mock_gql_client():
14
- with patch("gitlab_api.gitlab_gql.Client") as mock_client_cls:
15
- mock_client = mock_client_cls.return_value
15
+ with patch(
16
+ "agent_connector_sdk.transports.graphql.GraphQLClient.execute"
17
+ ) as mock_execute:
18
+ mock_client = MagicMock()
19
+ mock_client.execute = mock_execute
16
20
  # Mock the execute method to return a standard structure
17
21
  mock_client.execute.return_value = {
18
22
  "project": {
@@ -208,17 +212,43 @@ def test_graphql_init_exceptions():
208
212
  def test_graphql_execute_exceptions(mock_gql_client):
209
213
  gql_client = GraphQL(url="http://test", token="test")
210
214
 
211
- # Test error returned in execute response
212
- mock_gql_client.execute.return_value = {"errors": ["some error"]}
213
- with pytest.raises(ParameterError, match="Query execution failed: ParameterError"):
214
- gql_client.execute_gql("query { test }")
215
-
216
- # Test exception raised by client execute
217
- mock_gql_client.execute.side_effect = Exception("network error")
215
+ mock_gql_client.execute.side_effect = GraphQLExecutionError(Exception("x"))
218
216
  with pytest.raises(ParameterError, match="Query execution failed: Exception"):
219
217
  gql_client.execute_gql("query { test }")
220
218
 
221
219
 
220
+ @pytest.mark.spec("CONN-GITLAB-API-R003")
221
+ def test_wrapper_delegates_to_shared_graphql_client():
222
+ tls = MagicMock()
223
+ with patch("gitlab_api.gitlab_gql.GraphQLClient") as cls:
224
+ cls.return_value.execute.return_value = {"ok": 1}
225
+ g = GraphQL(url="https://gl.example/", token="tok", tls_profile=tls)
226
+ assert g.execute_gql("query { x }", {"a": 1}, "X") == {"ok": 1}
227
+ args, kwargs = cls.call_args
228
+ assert args == ("https://gl.example/api/graphql",)
229
+ assert kwargs["auth"].headers() == {"Authorization": "Bearer tok"}
230
+ assert kwargs["tls_profile"] is tls
231
+ assert kwargs["tls_service"] == "gitlab"
232
+ assert kwargs["fetch_schema"] is True
233
+ assert g.headers == {"Authorization": "Bearer tok"}
234
+ cls.return_value.execute.assert_called_once_with("query { x }", {"a": 1}, "X")
235
+
236
+
237
+ @pytest.mark.spec("CONN-GITLAB-API-R003")
238
+ def test_graphql_declared_only_via_sdk_extra():
239
+ import tomllib
240
+ from pathlib import Path
241
+
242
+ data = tomllib.loads(
243
+ (Path(__file__).resolve().parents[1] / "pyproject.toml").read_text()
244
+ )
245
+ blob = str(data["project"]["dependencies"]) + str(
246
+ data["project"]["optional-dependencies"]
247
+ )
248
+ assert "graphql]" in blob or "graphql," in blob
249
+ assert "gql" not in blob.replace("graphql", "")
250
+
251
+
222
252
  def test_graphql_parameter_errors(mock_gql_client):
223
253
  gql_client = GraphQL(url="http://test", token="test")
224
254
  with pytest.raises(ParameterError, match="Cannot provide more than 50 full paths"):
@@ -289,7 +319,9 @@ def _build_graphql_brute_force_kwargs() -> dict[str, Any]:
289
319
  }
290
320
 
291
321
 
292
- def _kwargs_for_graphql_method(method: Any, common_kwargs: dict[str, Any]) -> dict[str, Any]:
322
+ def _kwargs_for_graphql_method(
323
+ method: Any, common_kwargs: dict[str, Any]
324
+ ) -> dict[str, Any]:
293
325
  if sys.version_info >= (3, 14):
294
326
  # Annotations are lazy on 3.14; the module-level ProjectModel patch above
295
327
  # would otherwise be evaluated inside `X | None`.
@@ -1,18 +0,0 @@
1
- agent-connector-sdk[mcp]<1.0.0,>=0.3.11
2
- python-dotenv>=1.2.4
3
- gql[requests]>=4.4.0
4
-
5
- [all]
6
- gitlab-api[gql,mcp]>=27.2.0
7
-
8
- [gql]
9
- gql[requests]>=4.4.0
10
-
11
- [mcp]
12
- agent-connector-sdk[mcp]<1.0.0,>=0.3.11
13
-
14
- [test]
15
- pytest-xdist>=3.8.0
16
- pytest>=9.1.1
17
- pytest-asyncio>=1.4.0
18
- pytest-cov>=7.1.0
File without changes
File without changes
File without changes