Coverage for src/somesy/commands/sync.py: 40%
45 statements
« prev ^ index » next coverage.py v7.3.2, created at 2024-04-30 09:42 +0000
« prev ^ index » next coverage.py v7.3.2, created at 2024-04-30 09:42 +0000
1"""Sync selected metadata files with given input file."""
2import logging
3from pathlib import Path
4from typing import Type
6from rich.pretty import pretty_repr
8from somesy.cff.writer import CFF
9from somesy.codemeta import CodeMeta
10from somesy.core.models import ProjectMetadata, SomesyInput
11from somesy.core.writer import ProjectMetadataWriter
12from somesy.fortran.writer import Fortran
13from somesy.julia.writer import Julia
14from somesy.mkdocs import MkDocs
15from somesy.package_json.writer import PackageJSON
16from somesy.pom_xml.writer import POM
17from somesy.pyproject.writer import Pyproject
18from somesy.rust import Rust
20logger = logging.getLogger("somesy")
23def _sync_file(
24 metadata: ProjectMetadata, file: Path, writer_cls: Type[ProjectMetadataWriter]
25):
26 """Sync metadata to a file using the provided writer."""
27 logger.verbose(f"Loading '{file.name}' ...")
28 writer = writer_cls(file)
29 logger.verbose(f"Syncing '{file.name}' ...")
30 writer.sync(metadata)
31 writer.save(file)
32 logger.verbose(f"Saved synced '{file.name}'.\n")
35def sync(somesy_input: SomesyInput):
36 """Sync selected metadata files with given input file."""
37 conf, metadata = somesy_input.config, somesy_input.project
39 pp_metadata = pretty_repr(metadata.model_dump(exclude_defaults=True))
40 logger.debug(f"Project metadata: {pp_metadata}")
42 # update these only if they exist:
44 if conf.pyproject_file.is_file() and not conf.no_sync_pyproject:
45 _sync_file(metadata, conf.pyproject_file, Pyproject)
47 if conf.package_json_file.is_file() and not conf.no_sync_package_json:
48 _sync_file(metadata, conf.package_json_file, PackageJSON)
50 if conf.julia_file.is_file() and not conf.no_sync_julia:
51 _sync_file(metadata, conf.julia_file, Julia)
53 if conf.fortran_file.is_file() and not conf.no_sync_fortran:
54 _sync_file(metadata, conf.fortran_file, Fortran)
56 if conf.pom_xml_file.is_file() and not conf.no_sync_pom_xml:
57 _sync_file(metadata, conf.pom_xml_file, POM)
59 if conf.mkdocs_file.is_file() and not conf.no_sync_mkdocs:
60 _sync_file(metadata, conf.mkdocs_file, MkDocs)
62 if conf.rust_file.is_file() and not conf.no_sync_rust:
63 _sync_file(metadata, conf.rust_file, Rust)
65 # create these by default if they are missing:
66 if not conf.no_sync_cff:
67 _sync_file(metadata, conf.cff_file, CFF)
69 if not conf.no_sync_codemeta:
70 _sync_file(metadata, conf.codemeta_file, CodeMeta)