Coverage for src/somesy/harvest.py: 92%
25 statements
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-04 11:35 +0000
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-04 11:35 +0000
1"""Harvest metadata from supported project files."""
3from __future__ import annotations
5import logging
6from pathlib import Path
7from typing import Any
9from somesy.fortran.writer import Fortran
10from somesy.julia.writer import Julia
11from somesy.mkdocs.writer import MkDocs
12from somesy.package_json.writer import PackageJSON
13from somesy.pom_xml.writer import POM
14from somesy.pyproject.writer import Pyproject
15from somesy.rust.writer import Rust
17logger = logging.getLogger("somesy")
19_SOURCES = (
20 ("pyproject.toml", Pyproject),
21 ("package.json", PackageJSON),
22 ("Project.toml", Julia),
23 ("fpm.toml", Fortran),
24 ("Cargo.toml", Rust),
25 ("pom.xml", POM),
26 ("mkdocs.yml", MkDocs),
27)
30def harvest_sources(root: Path) -> list[tuple[Path, dict[str, Any]]]:
31 """Read all supported non-generated metadata files under ``root``."""
32 sources = []
33 for filename, writer_cls in _SOURCES:
34 path = root / filename
35 if not path.is_file():
36 continue
37 try:
38 writer = writer_cls(path, pass_validation=True)
39 sources.append((path, writer.harvest_metadata()))
40 except (FileNotFoundError, KeyError, TypeError, ValueError) as error:
41 logger.warning("Cannot harvest metadata from %s: %s", path, error)
42 return sources