Skip to content

Commit d600180

Browse files
rootclaude
andcommitted
style: apply additional pre-commit fixes
🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 9414238 commit d600180

File tree

4 files changed

+49
-47
lines changed

4 files changed

+49
-47
lines changed

diff.diff

Lines changed: 37 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ index 1b776e8..b486fa1 100644
1313
@@ -87,7 +86,12 @@ async def clone_repo(config: CloneConfig, *, token: str | None = None) -> None:
1414
commit = await resolve_commit(config, token=token)
1515
logger.debug("Resolved commit", extra={"commit": commit})
16-
16+
1717
- # Clone the repository using GitPython with proper authentication
1818
+ # Prepare URL with authentication if needed
1919
+ clone_url = url
@@ -27,7 +27,7 @@ index 1b776e8..b486fa1 100644
2727
@@ -96,20 +100,18 @@ async def clone_repo(config: CloneConfig, *, token: str | None = None) -> None:
2828
"depth": 1,
2929
}
30-
30+
3131
- with git_auth_context(url, token) as (git_cmd, auth_url):
3232
+ if partial_clone:
3333
+ # GitPython doesn't directly support --filter and --sparse in clone
@@ -68,17 +68,17 @@ index 1c1a986..b7f293a 100644
6868
-from typing import TYPE_CHECKING, Final, Generator, Iterable
6969
+from typing import TYPE_CHECKING, Final, Iterable
7070
from urllib.parse import urlparse, urlunparse
71-
71+
7272
import git
7373
+import httpx
7474
+from starlette.status import HTTP_200_OK, HTTP_401_UNAUTHORIZED, HTTP_403_FORBIDDEN, HTTP_404_NOT_FOUND
75-
75+
7676
from gitingest.utils.compat_func import removesuffix
7777
from gitingest.utils.exceptions import InvalidGitHubTokenError
7878
@@ -135,15 +136,35 @@ async def check_repo_exists(url: str, token: str | None = None) -> bool:
7979
bool
8080
``True`` if the repository exists, ``False`` otherwise.
81-
81+
8282
+ Raises
8383
+ ------
8484
+ RuntimeError
@@ -99,7 +99,7 @@ index 1c1a986..b7f293a 100644
9999
+ base_api = "https://api.github.com" if host == "github.com" else f"https://{host}/api/v3"
100100
+ url = f"{base_api}/repos/{owner}/{repo}"
101101
+ headers["Authorization"] = f"Bearer {token}"
102-
102+
103103
- return True
104104
+ async with httpx.AsyncClient(follow_redirects=True) as client:
105105
+ try:
@@ -115,11 +115,11 @@ index 1c1a986..b7f293a 100644
115115
+ return False
116116
+ msg = f"Unexpected HTTP status {status_code} for {url}"
117117
+ raise RuntimeError(msg)
118-
119-
118+
119+
120120
def _parse_github_url(url: str) -> tuple[str, str, str]:
121121
@@ -217,6 +238,13 @@ async def fetch_remote_branches_or_tags(url: str, *, ref_type: str, token: str |
122-
122+
123123
# Use GitPython to get remote references
124124
try:
125125
+ git_cmd = git.Git()
@@ -131,25 +131,25 @@ index 1c1a986..b7f293a 100644
131131
+
132132
fetch_tags = ref_type == "tags"
133133
to_fetch = "tags" if fetch_tags else "heads"
134-
134+
135135
@@ -226,11 +254,8 @@ async def fetch_remote_branches_or_tags(url: str, *, ref_type: str, token: str |
136136
cmd_args.append("--refs") # Filter out peeled tag objects
137137
cmd_args.append(url)
138-
138+
139139
- # Run the command with proper authentication
140140
- with git_auth_context(url, token) as (git_cmd, auth_url):
141141
- # Replace the URL in cmd_args with the authenticated URL
142142
- cmd_args[-1] = auth_url # URL is the last argument
143143
- output = git_cmd.ls_remote(*cmd_args)
144144
+ # Run the command using git_cmd.ls_remote() method
145145
+ output = git_cmd.ls_remote(*cmd_args)
146-
146+
147147
# Parse output
148148
return [
149149
@@ -314,70 +339,6 @@ def create_git_auth_header(token: str, url: str = "https://github.com") -> str:
150150
return f"http.https://{hostname}/.extraheader=Authorization: Basic {basic}"
151-
152-
151+
152+
153153
-def create_authenticated_url(url: str, token: str | None = None) -> str:
154154
- """Create an authenticated URL for Git operations.
155155
-
@@ -216,9 +216,9 @@ index 1c1a986..b7f293a 100644
216216
-
217217
def validate_github_token(token: str) -> None:
218218
"""Validate the format of a GitHub Personal Access Token.
219-
219+
220220
@@ -479,9 +440,15 @@ async def _resolve_ref_to_sha(url: str, pattern: str, token: str | None = None)
221-
221+
222222
"""
223223
try:
224224
- # Execute ls-remote command with proper authentication
@@ -234,20 +234,20 @@ index 1c1a986..b7f293a 100644
234234
+ # Execute ls-remote command
235235
+ output = git_cmd.ls_remote(auth_url, pattern)
236236
lines = output.splitlines()
237-
237+
238238
sha = _pick_commit_sha(lines)
239239
@@ -490,7 +457,7 @@ async def _resolve_ref_to_sha(url: str, pattern: str, token: str | None = None)
240240
raise ValueError(msg)
241-
241+
242242
except git.GitCommandError as exc:
243243
- msg = f"Failed to resolve {pattern} in {url}:\n{exc}"
244244
+ msg = f"Failed to resolve {pattern} in {url}: {exc}"
245245
raise ValueError(msg) from exc
246-
246+
247247
return sha
248248
@@ -547,8 +514,6 @@ def _add_token_to_url(url: str, token: str) -> str:
249249
The URL with embedded authentication.
250-
250+
251251
"""
252252
- from urllib.parse import urlparse, urlunparse
253253
-
@@ -264,35 +264,35 @@ index f2f2ae9..03f52f1 100644
264264
_cleanup_repository(clone_config)
265265
- return IngestErrorResponse(error=f"{exc!s}")
266266
+ return IngestErrorResponse(error=str(exc))
267-
267+
268268
if len(content) > MAX_DISPLAY_SIZE:
269269
content = (
270270
diff --git a/tests/test_clone.py b/tests/test_clone.py
271271
index 6abbd87..8c44523 100644
272272
--- a/tests/test_clone.py
273273
+++ b/tests/test_clone.py
274274
@@ -8,8 +8,11 @@ from __future__ import annotations
275-
275+
276276
import sys
277277
from typing import TYPE_CHECKING
278278
+from unittest.mock import AsyncMock
279-
279+
280280
+import httpx
281281
import pytest
282282
+from starlette.status import HTTP_200_OK, HTTP_401_UNAUTHORIZED, HTTP_403_FORBIDDEN, HTTP_404_NOT_FOUND
283-
283+
284284
from gitingest.clone import clone_repo
285285
from gitingest.schemas import CloneConfig
286286
@@ -18,7 +21,6 @@ from tests.conftest import DEMO_URL, LOCAL_REPO_PATH
287-
287+
288288
if TYPE_CHECKING:
289289
from pathlib import Path
290290
- from unittest.mock import AsyncMock
291-
291+
292292
from pytest_mock import MockerFixture
293-
293+
294294
@@ -91,30 +93,24 @@ async def test_clone_nonexistent_repository(repo_exists_true: AsyncMock) -> None
295-
295+
296296
@pytest.mark.asyncio
297297
@pytest.mark.parametrize(
298298
- ("git_command_succeeds", "expected"),
@@ -325,23 +325,23 @@ index 6abbd87..8c44523 100644
325325
+ mock_client.__aenter__.return_value = mock_client # context-manager protocol
326326
+ mock_client.head.return_value = httpx.Response(status_code=status_code)
327327
+ mocker.patch("httpx.AsyncClient", return_value=mock_client)
328-
328+
329329
result = await check_repo_exists(DEMO_URL)
330-
330+
331331
assert result is expected
332332
- mock_resolve.assert_called_once_with(DEMO_URL, "HEAD", token=None)
333-
334-
333+
334+
335335
@pytest.mark.asyncio
336336
@@ -206,18 +202,19 @@ async def test_clone_with_include_submodules(gitpython_mocks: dict) -> None:
337-
338-
337+
338+
339339
@pytest.mark.asyncio
340340
-async def test_check_repo_exists_with_auth_token(mocker: MockerFixture) -> None:
341341
- """Test ``check_repo_exists`` with authentication token.
342342
+async def test_check_repo_exists_with_redirect(mocker: MockerFixture) -> None:
343343
+ """Test ``check_repo_exists`` when a redirect (302) is returned.
344-
344+
345345
- Given a GitHub URL and a token:
346346
+ Given a URL that responds with "302 Found":
347347
When ``check_repo_exists`` is called,
@@ -355,11 +355,11 @@ index 6abbd87..8c44523 100644
355355
+ mock_process.communicate.return_value = (b"302\n", b"")
356356
+ mock_process.returncode = 0 # Simulate successful request
357357
+ mock_exec.return_value = mock_process
358-
358+
359359
- test_token = "token123" # noqa: S105
360360
- result = await check_repo_exists("https://github.com/test/repo", token=test_token)
361361
+ repo_exists = await check_repo_exists(DEMO_URL)
362-
362+
363363
- assert result is True
364364
- mock_resolve.assert_called_once_with("https://github.com/test/repo", "HEAD", token=test_token)
365365
+ assert repo_exists is False

examples/mcp_client_example.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ async def main():
2020
# Call the ingest_repository tool
2121
print("\n📞 Appel de l'outil ingest_repository...")
2222
result = await session.call_tool(
23-
"ingest_repository", {"source": "https://github.com/coderamp-labs/gitingest"}
23+
"ingest_repository",
24+
{"source": "https://github.com/coderamp-labs/gitingest"},
2425
)
2526
print(result)
2627

src/mcp_server/main.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ async def handle_message(message: dict):
130130
"version": "1.0.0",
131131
},
132132
},
133-
}
133+
},
134134
)
135135

136136
if message.get("method") == "tools/list":
@@ -158,10 +158,10 @@ async def handle_message(message: dict):
158158
},
159159
"required": ["source"],
160160
},
161-
}
161+
},
162162
],
163163
},
164-
}
164+
},
165165
)
166166

167167
if message.get("method") == "tools/call":
@@ -178,7 +178,7 @@ async def handle_message(message: dict):
178178
"result": {
179179
"content": [{"type": "text", "text": result}],
180180
},
181-
}
181+
},
182182
)
183183
except Exception as e:
184184
return JSONResponse(
@@ -189,7 +189,7 @@ async def handle_message(message: dict):
189189
"code": -32603,
190190
"message": f"Tool execution failed: {e!s}",
191191
},
192-
}
192+
},
193193
)
194194

195195
else:
@@ -201,7 +201,7 @@ async def handle_message(message: dict):
201201
"code": -32601,
202202
"message": f"Unknown tool: {tool_name}",
203203
},
204-
}
204+
},
205205
)
206206

207207
else:
@@ -213,7 +213,7 @@ async def handle_message(message: dict):
213213
"code": -32601,
214214
"message": f"Unknown method: {message.get('method')}",
215215
},
216-
}
216+
},
217217
)
218218

219219
except Exception as e:
@@ -226,7 +226,7 @@ async def handle_message(message: dict):
226226
"code": -32603,
227227
"message": f"Internal error: {e!s}",
228228
},
229-
}
229+
},
230230
)
231231

232232
# Start the HTTP server

tests/test_mcp_server.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,8 @@ async def test_handle_ingest_repository_logs_info(self):
286286
# Check that info message was logged for start
287287
assert mock_logger.info.call_count == 1
288288
mock_logger.info.assert_called_with(
289-
"Starting MCP ingestion", extra={"source": "https://github.com/test/repo"}
289+
"Starting MCP ingestion",
290+
extra={"source": "https://github.com/test/repo"},
290291
)
291292

292293
@pytest.mark.asyncio

0 commit comments

Comments
 (0)