Publish curated ITWorx_MCP_Hub source from 8aef76ab42f1ff10ee5a1b3ad94a184120687e47

This commit is contained in:
Public Source Publisher committed 2026-10-02 11:47:37 +00:00
1 parent 3a3b01facd
commit 49627c7a7c
4 files changed
+107 -13

No files matched your search

+1 -1
View File
@@ -1,3 +1,3 @@
# Public source export # Public source export
This source snapshot was generated from the private canonical repository at revision `aa72a053975f020a793c88ba18c8d6b93bc9f937`. It contains no private Git history or operational evidence. Changes are published from the canonical repository. This source snapshot was generated from the private canonical repository at revision `8aef76ab42f1ff10ee5a1b3ad94a184120687e47`. It contains no private Git history or operational evidence. Changes are published from the canonical repository.
+5 -5
View File
@@ -1,6 +1,6 @@
{ {
"schemaVersion": 1, "schemaVersion": 1,
"sourceRevision": "aa72a053975f020a793c88ba18c8d6b93bc9f937", "sourceRevision": "8aef76ab42f1ff10ee5a1b3ad94a184120687e47",
"files": [ "files": [
{ {
"path": ".dockerignore", "path": ".dockerignore",
@@ -1759,8 +1759,8 @@
}, },
{ {
"path": "connectors/gitea/server.py", "path": "connectors/gitea/server.py",
"sha256": "f9358c5d53036ad96d0231c0c2f3ba10f99913fb9a77c21b73c2cf799f97efa1", "sha256": "4a07c6171893742d7a25e5cbdaa29eef438fc2d381ae93249a4bb6c1be493421",
"bytes": 228338 "bytes": 228331
}, },
{ {
"path": "connectors/knowledge/__init__.py", "path": "connectors/knowledge/__init__.py",
@@ -3189,8 +3189,8 @@
}, },
{ {
"path": "tests/test_gitea_connector.py", "path": "tests/test_gitea_connector.py",
"sha256": "a6ad1f1eceb51107d9b56ceac65185017c4548ffa5d52ddc1808c5f305dfbcdb", "sha256": "4fcd0e2a2aa822ca24958d3dcae2eb11f0c2c223da3fbdcc763631a57734b29f",
"bytes": 130782 "bytes": 135127
}, },
{ {
"path": "tests/test_gitea_merge_eligibility.py", "path": "tests/test_gitea_merge_eligibility.py",
+1 -1
View File
@@ -540,7 +540,7 @@ class GiteaConnector:
"GITEA_DISCOVERY_LIMIT", "GITEA_DISCOVERY_LIMIT",
"repository discovery exceeded 10000 items", "repository discovery exceeded 10000 items",
) )
if len(items) < 100: if not items:
break break
else: else:
raise GiteaError( raise GiteaError(
+100 -6
View File
@@ -12,6 +12,7 @@ import unittest
from datetime import UTC, datetime from datetime import UTC, datetime
from pathlib import Path from pathlib import Path
from unittest.mock import patch from unittest.mock import patch
from urllib.parse import parse_qs
from uuid import UUID, uuid4 from uuid import UUID, uuid4
import httpx import httpx
@@ -142,6 +143,40 @@ class FakeChangesetWorkspace:
} }
class ClampedDiscoveryServer(FakeGiteaServer):
"""Model a Gitea deployment that caps requested discovery pages at fifty."""
def __init__(self, *, deny_user_repositories: bool = False) -> None:
super().__init__(deny_user_repositories=deny_user_repositories)
self.discovery_page_requests: list[tuple[str, int, int, int]] = []
def _handle(self, request: httpx.Request) -> httpx.Response:
if request.url.path == "/api/v1/repos/search":
query = parse_qs(request.url.query.decode("ascii"))
if "q" not in query:
self.recorded_methods.append(request.method)
self.recorded_authorizations.append(request.headers.get("authorization", ""))
self.recorded_paths.append(request.url.path)
repositories = list(self._repos.values())
if query.get("private") == ["true"]:
repositories = [item for item in repositories if item.get("private") is True]
return self._paged(repositories, query, request)
return super()._handle(request)
def _paged(
self, items: list[dict[str, object]], query: dict[str, list[str]], request: httpx.Request
) -> httpx.Response:
page = max(int(query.get("page", ["1"])[0]), 1)
requested_limit = max(int(query.get("limit", ["100"])[0]), 1)
effective_limit = min(requested_limit, 50)
start = (page - 1) * effective_limit
selected = items[start : start + effective_limit]
self.discovery_page_requests.append(
(request.url.path, page, requested_limit, len(selected))
)
return self._json(200, selected, request)
class GiteaConnectorTests(unittest.TestCase): class GiteaConnectorTests(unittest.TestCase):
def test_registry_resolves_an_exact_qualified_name_within_project_scope(self) -> None: def test_registry_resolves_an_exact_qualified_name_within_project_scope(self) -> None:
instance, _ = connector() instance, _ = connector()
@@ -227,9 +262,7 @@ class GiteaConnectorTests(unittest.TestCase):
"--cgroup-parent=docker", "--cgroup-parent=untrusted" "--cgroup-parent=docker", "--cgroup-parent=untrusted"
), ),
PROJECTBRAIN_BROWSER_VALIDATION_WORKFLOW.replace("--cpus=0.5", "--cpus=0.6"), PROJECTBRAIN_BROWSER_VALIDATION_WORKFLOW.replace("--cpus=0.5", "--cpus=0.6"),
PROJECTBRAIN_BROWSER_VALIDATION_WORKFLOW.replace( PROJECTBRAIN_BROWSER_VALIDATION_WORKFLOW.replace("--memory=512m", "--memory=513m"),
"--memory=512m", "--memory=513m"
),
PROJECTBRAIN_BROWSER_VALIDATION_WORKFLOW.replace( PROJECTBRAIN_BROWSER_VALIDATION_WORKFLOW.replace(
"--pids-limit=128", "--pids-limit=129" "--pids-limit=128", "--pids-limit=129"
), ),
@@ -1330,7 +1363,7 @@ class GiteaConnectorTests(unittest.TestCase):
connector_instance.client.close() connector_instance.client.close()
def test_repository_create_is_idempotent_and_immediately_registered(self) -> None: def test_repository_create_is_idempotent_and_immediately_registered(self) -> None:
connector_instance, fixture = connector() connector_instance, fixture = connector(ClampedDiscoveryServer())
try: try:
created = connector_instance.repository_create( created = connector_instance.repository_create(
context(), context(),
@@ -2314,7 +2347,7 @@ class GiteaConnectorTests(unittest.TestCase):
def test_account_discovery_adds_future_repositories_without_changing_existing_refs( def test_account_discovery_adds_future_repositories_without_changing_existing_refs(
self, self,
) -> None: ) -> None:
fixture = FakeGiteaServer() fixture = ClampedDiscoveryServer()
fixture._repos["acme/future"] = { fixture._repos["acme/future"] = {
"owner": {"login": "acme"}, "owner": {"login": "acme"},
"name": "future", "name": "future",
@@ -2338,8 +2371,69 @@ class GiteaConnectorTests(unittest.TestCase):
finally: finally:
connector_instance.client.close() connector_instance.client.close()
def test_account_discovery_continues_after_provider_clamps_page_limit(self) -> None:
fixture = ClampedDiscoveryServer()
for index in range(85):
name = f"batch-{index:03}"
fixture._repos[f"acme/{name}"] = {
"owner": {"login": "acme"},
"name": name,
"full_name": f"acme/{name}",
"private": True,
"default_branch": "main",
}
fixture._repos["acme/workmesh"] = {
"owner": {"login": "acme"},
"name": "workmesh",
"full_name": "acme/workmesh",
"private": True,
"default_branch": "main",
}
connector_instance, _ = connector(fixture)
connector_instance.discovery_projects = {PROJECT_ID: "hub"}
try:
items = connector_instance.repository_list(context(), page=PageRequest(limit=100))[
"data"
]["items"]
self.assertIn("all-workmesh", {item["repositoryRef"] for item in items})
self.assertEqual(
fixture.discovery_page_requests,
[
("/api/v1/repos/search", 1, 100, 50),
("/api/v1/repos/search", 2, 100, 37),
("/api/v1/repos/search", 3, 100, 0),
("/api/v1/user/repos", 1, 100, 50),
("/api/v1/user/repos", 2, 100, 37),
("/api/v1/user/repos", 3, 100, 0),
],
)
finally:
connector_instance.client.close()
def test_account_discovery_still_fails_closed_after_one_hundred_full_pages(self) -> None:
fixture = ClampedDiscoveryServer()
for index in range(5_000):
name = f"bounded-{index:04}"
fixture._repos[f"acme/{name}"] = {
"owner": {"login": "acme"},
"name": name,
"full_name": f"acme/{name}",
"private": True,
"default_branch": "main",
}
connector_instance, _ = connector(fixture)
connector_instance.discovery_projects = {PROJECT_ID: "hub"}
try:
with self.assertRaises(GiteaError) as raised:
connector_instance._refresh_discovered(PROJECT_ID)
self.assertEqual(raised.exception.code, "GITEA_DISCOVERY_LIMIT")
self.assertEqual(len(fixture.discovery_page_requests), 100)
self.assertEqual(fixture.discovery_page_requests[-1][1:], (100, 100, 50))
finally:
connector_instance.client.close()
def test_account_discovery_keeps_private_results_when_user_repo_list_is_denied(self) -> None: def test_account_discovery_keeps_private_results_when_user_repo_list_is_denied(self) -> None:
fixture = FakeGiteaServer(deny_user_repositories=True) fixture = ClampedDiscoveryServer(deny_user_repositories=True)
connector_instance, _ = connector(fixture) connector_instance, _ = connector(fixture)
connector_instance.discovery_projects = {PROJECT_ID: "hub"} connector_instance.discovery_projects = {PROJECT_ID: "hub"}
try: try: