githubexplorer / app /controllers /repository_controller.py
Kareman's picture
initial commit: full implemntation of git explorer project
acc643d
Raw
History Blame Contribute Delete
2.43 kB
from app.core.config import REPOSITORIES_DIR
from app.services.github_service import GithubService
from app.services.metadata_service import MetadataService
from app.services.parser_service import ParserService
from app.services.index_service import IndexService
from app.services.graph_service import GraphService
from app.services.resolver_service import ResolverService
from app.services.embedding_service import EmbeddingService
from app.utils.file_utils import get_python_files
from app.core.constants import (
METADATA_FILE,
CODE_INDEX_FILE,
RESOLVED_CODE_FILE,
)
class RepositoryController:
def __init__(self):
self.github = GithubService()
self.metadata = MetadataService()
self.parser = ParserService()
self.index = IndexService()
self.resolver = ResolverService()
self.graph_service = GraphService()
self.embedding_service = EmbeddingService()
def clone(
self,
url: str,
):
clone_result = self.github.clone(
url,
REPOSITORIES_DIR,
)
repository_id = clone_result["repository_id"]
repo_path = clone_result["repo_path"]
metadata = self.metadata.extract(
repo_path,
)
self.index.save(
repo_path,
METADATA_FILE,
metadata,
)
parsed_files = []
for file in get_python_files(repo_path):
parsed_files.append(
self.parser.parse_file(
file,
)
)
self.index.save(
repo_path,
CODE_INDEX_FILE,
parsed_files,
)
code_index = [
item.model_dump()
for item in parsed_files
]
resolved = self.resolver.resolve(
code_index,
)
self.index.save(
repo_path,
RESOLVED_CODE_FILE,
resolved,
)
print("Building graph...")
self.graph_service.build(
repository_id=repository_id,
resolved=resolved,
)
print("Building embeddings...")
self.embedding_service.build(
repository_id=repository_id,
resolved=resolved,
)
print("Repository indexed successfully.")
metadata.repository_id = repository_id
return metadata