Source code for bridge.builders.github.github_transformer

"""
Transformer converting raw GitHub repo JSON into the generated FullRepository model.
"""

import logging

from bridge.builders.protocols import Transformer
from bridge.core import GitHubRepoModel
from bridge.core.github_languages import Language
from bridge.core.github_latest_release import Release
from bridge.core.github_pages import GitHubPages
from bridge.core.github_repo import FullRepository
from bridge.services.github import GitHubIngestor

logger = logging.getLogger(__name__)


[docs] class GitHubRepoTransformer(Transformer): """ Transform raw data from GitHubIngestor into a FullRepository. """ def __init__(self, ingestor: GitHubIngestor): self.ingestor = ingestor
[docs] async def transform(self) -> GitHubRepoModel: """ Transform raw data into a GitHubRepoModel model. Returns ------- GitHubRepoModel The transformed GitHub repository model. """ logger.info(f"Transforming data for repository {self.ingestor.owner}/{self.ingestor.repo}") raw_data = await self.ingestor.fetch() repo_raw_data = raw_data.get("repo", {}) latest_release_raw_data = raw_data.get("latest_release") github_pages_raw_data = raw_data.get("github_pages") languages_raw_data = raw_data.get("languages") if not repo_raw_data["homepage"]: repo_raw_data["homepage"] = None latest_release_raw_data = raw_data.get("latest_release") result = GitHubRepoModel( repo=FullRepository(**repo_raw_data), latest_release=Release(**latest_release_raw_data) if latest_release_raw_data else None, github_pages=GitHubPages(**github_pages_raw_data) if github_pages_raw_data else None, readme=raw_data.get("readme"), languages=Language(**languages_raw_data) if languages_raw_data else None, ) return result