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

1"""Sync selected metadata files with given input file.""" 

2import logging 

3from pathlib import Path 

4from typing import Type 

5 

6from rich.pretty import pretty_repr 

7 

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 

19 

20logger = logging.getLogger("somesy") 

21 

22 

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") 

33 

34 

35def sync(somesy_input: SomesyInput): 

36 """Sync selected metadata files with given input file.""" 

37 conf, metadata = somesy_input.config, somesy_input.project 

38 

39 pp_metadata = pretty_repr(metadata.model_dump(exclude_defaults=True)) 

40 logger.debug(f"Project metadata: {pp_metadata}") 

41 

42 # update these only if they exist: 

43 

44 if conf.pyproject_file.is_file() and not conf.no_sync_pyproject: 

45 _sync_file(metadata, conf.pyproject_file, Pyproject) 

46 

47 if conf.package_json_file.is_file() and not conf.no_sync_package_json: 

48 _sync_file(metadata, conf.package_json_file, PackageJSON) 

49 

50 if conf.julia_file.is_file() and not conf.no_sync_julia: 

51 _sync_file(metadata, conf.julia_file, Julia) 

52 

53 if conf.fortran_file.is_file() and not conf.no_sync_fortran: 

54 _sync_file(metadata, conf.fortran_file, Fortran) 

55 

56 if conf.pom_xml_file.is_file() and not conf.no_sync_pom_xml: 

57 _sync_file(metadata, conf.pom_xml_file, POM) 

58 

59 if conf.mkdocs_file.is_file() and not conf.no_sync_mkdocs: 

60 _sync_file(metadata, conf.mkdocs_file, MkDocs) 

61 

62 if conf.rust_file.is_file() and not conf.no_sync_rust: 

63 _sync_file(metadata, conf.rust_file, Rust) 

64 

65 # create these by default if they are missing: 

66 if not conf.no_sync_cff: 

67 _sync_file(metadata, conf.cff_file, CFF) 

68 

69 if not conf.no_sync_codemeta: 

70 _sync_file(metadata, conf.codemeta_file, CodeMeta)