Files
ITWorx_MCP_Hub-Public/services/control_api/gitea/registry.py
T

56 lines
2.2 KiB
Python

"""Build a Gitea connector projection from scoped Hub configuration."""
from __future__ import annotations
from packages.connector_kit import GiteaError, GiteaSettings, RegisteredRepository
from packages.hub_core.domain import Connector, Project
class GiteaRegistration:
"""Immutable connector settings plus the exact project repository allowlist."""
def __init__(
self, settings: GiteaSettings, repositories: tuple[RegisteredRepository, ...]
) -> None:
self.settings = settings
self.repositories = repositories
def registration_from_project(project: Project, connector: Connector) -> GiteaRegistration:
if connector.type != "gitea" or not connector.enabled:
raise GiteaError(
"GITEA_CONNECTOR_NOT_ENABLED", "Gitea connector is not enabled for this project"
)
if connector.project_id != project.id or project.repository_provider != "gitea":
raise GiteaError(
"GITEA_REPOSITORY_NOT_REGISTERED", "project repository is not configured for Gitea"
)
if not connector.endpoint or not connector.credential_reference:
raise GiteaError(
"GITEA_CONNECTOR_MISCONFIGURED", "Gitea endpoint or secret reference is missing"
)
settings_values = {
"timeout_seconds": connector.configuration.get(
"timeout_seconds", connector.configuration.get("requestTimeoutSeconds", 15)
),
"max_page_size": connector.configuration.get(
"max_page_size", connector.configuration.get("maxPageSize", 100)
),
}
settings = GiteaSettings(
base_url=connector.endpoint,
token_reference=connector.credential_reference,
**settings_values,
)
if not project.repository_owner or not project.repository_name:
raise GiteaError("GITEA_REPOSITORY_NOT_REGISTERED", "project has no registered repository")
repository = RegisteredRepository(
repository_ref=f"{project.slug}-repository",
project_id=project.id,
owner=project.repository_owner,
name=project.repository_name,
source_uri=f"itworx-git://{project.slug}/{project.slug}-repository",
private=project.classification != "public",
)
return GiteaRegistration(settings, (repository,))