56 lines
2.2 KiB
Python
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,))
|