Coverage for src / mafw / devtools / cli / dependencies / freeze.py: 100%

25 statements  

« prev     ^ index     » next       coverage.py v7.14.0, created at 2026-06-28 13:34 +0000

1# Copyright 2026 European Union 

2# Author: Bulgheroni Antonio (antonio.bulgheroni@ec.europa.eu) 

3# SPDX-License-Identifier: EUPL-1.2 

4"""Freeze and unfreeze dependency upper bounds in pyproject.toml.""" 

5 

6from __future__ import annotations 

7 

8import click 

9 

10from mafw.devtools.dependencies.compile import ( 

11 collect_compiled_dependency_versions, 

12 load_pyproject_doc, 

13 project_python_versions_from_doc, 

14) 

15from mafw.devtools.dependencies.freeze import ( 

16 freeze_pyproject_toml, 

17 unfreeze_pyproject_toml, 

18) 

19from mafw.devtools.git import PYPROJECT_FILE 

20from mafw.tools.shell_tools import CONSOLE 

21 

22 

23@click.command( 

24 context_settings={'help_option_names': ['-h', '--help']}, 

25 help='Freeze dependency upper bounds in pyproject.toml.', 

26) 

27def freeze() -> None: 

28 """Freeze dependency upper bounds in the project TOML.""" 

29 before = PYPROJECT_FILE.read_text(encoding='utf-8') 

30 doc = load_pyproject_doc(before) 

31 supported_python_versions = project_python_versions_from_doc(doc) 

32 resolved_versions = collect_compiled_dependency_versions(supported_python_versions) 

33 after, warnings = freeze_pyproject_toml(before, resolved_versions=resolved_versions, doc=doc) 

34 for warning in warnings: 

35 CONSOLE.print(f'WARNING: {warning}') 

36 if before != after: 

37 PYPROJECT_FILE.write_text(after, encoding='utf-8') 

38 

39 

40@click.command( 

41 context_settings={'help_option_names': ['-h', '--help']}, 

42 help='Remove frozen dependency upper bounds from pyproject.toml.', 

43) 

44def unfreeze() -> None: 

45 """Unfreeze dependency upper bounds in the project TOML.""" 

46 before = PYPROJECT_FILE.read_text(encoding='utf-8') 

47 after, warnings = unfreeze_pyproject_toml(before) 

48 for warning in warnings: 

49 CONSOLE.print(f'WARNING: {warning}') 

50 if before != after: 

51 PYPROJECT_FILE.write_text(after, encoding='utf-8')