Spaces:
Sleeping
Sleeping
| from pathlib import Path | |
| from git import Repo | |
| from app.models.metadata import ( | |
| RepositoryMetadata, | |
| RepositoryInfo, | |
| StructureInfo, | |
| ConfigurationInfo, | |
| ) | |
| class MetadataService: | |
| def extract(self, repo_path: Path): | |
| repo = Repo(repo_path) | |
| branch = repo.active_branch.name | |
| latest_commit = repo.head.commit.hexsha | |
| total_files = 0 | |
| python_files = 0 | |
| directories = 0 | |
| size = 0 | |
| has_readme = False | |
| has_license = False | |
| has_dockerfile = False | |
| has_docker_compose = False | |
| requirements = [] | |
| for path in repo_path.rglob("*"): | |
| if path.is_dir(): | |
| directories += 1 | |
| continue | |
| total_files += 1 | |
| size += path.stat().st_size | |
| if path.suffix == ".py": | |
| python_files += 1 | |
| filename = path.name.lower() | |
| if filename.startswith("readme"): | |
| has_readme = True | |
| elif filename.startswith("license"): | |
| has_license = True | |
| elif filename == "dockerfile": | |
| has_dockerfile = True | |
| elif filename == "docker-compose.yml": | |
| has_docker_compose = True | |
| elif filename == "requirements.txt": | |
| with open(path) as f: | |
| for line in f: | |
| line = line.strip() | |
| if line and not line.startswith("#"): | |
| requirements.append(line) | |
| return RepositoryMetadata( | |
| repository=RepositoryInfo( | |
| name=repo_path.name, | |
| path=str(repo_path), | |
| branch=branch, | |
| latest_commit=latest_commit, | |
| size_mb=round(size / 1024 / 1024, 2), | |
| ), | |
| structure=StructureInfo( | |
| total_files=total_files, | |
| python_files=python_files, | |
| directories=directories, | |
| ), | |
| configuration=ConfigurationInfo( | |
| has_readme=has_readme, | |
| has_license=has_license, | |
| has_dockerfile=has_dockerfile, | |
| has_docker_compose=has_docker_compose, | |
| requirements=requirements, | |
| ), | |
| ) |