Coverage for src / zooc / data / fixed_offset.py: 0%

16 statements  

« prev     ^ index     » next       coverage.py v7.13.0, created at 2025-12-11 21:45 +0000

1"""Fixed offset profile is a user defined offset with a name and z-offset.""" 

2from dataclasses import dataclass 

3from typing import override 

4 

5from klipper_utils.klipper_utils import ConfigWrapper, KlipperConfigDict, KlipperUtils 

6 

7 

8def load_fixed_offsets(config: ConfigWrapper) -> dict[str, float]: 

9 """Load and parse fixes profiles from a configuration file. 

10 

11 Configuration has syntax:: 

12 

13 fixed_offsets = name=<profile name>, z_offset=<offset>... 

14 

15 Example:: 

16 

17 fixed_offsets = 

18 name=pla, z_offset=0.01 

19 name=pei_tpu, z_offset=-0.02 

20 

21 :param config: Klipper configuration object to load the data from. 

22 :return: Profile data or an empty dict when not found. 

23 """ 

24 entries = config.getlists("fixed_offsets", seps='\n', default=[]) 

25 fixed_offsets: list[FixedOffset] = KlipperUtils.klipper_map_from_config(class_entry=FixedOffset, entries=entries) 

26 return {e.name: e.z_offset for e in fixed_offsets} 

27 

28 

29@dataclass(kw_only=True, frozen=True) 

30class FixedOffset(KlipperConfigDict): 

31 """Single fixed profile value. 

32 

33 :param name: Name of the fixed offset profile. 

34 :param z_offset: Z offset value [mm]. 

35 """ 

36 

37 name: str 

38 z_offset: float 

39 

40 @staticmethod 

41 @override 

42 def get_title() -> list[str]: 

43 return ['name', 'z_offset'] 

44 

45 def __post_init__(self) -> None: 

46 """Consolidate the variable data.""" 

47 object.__setattr__(self, 'name', self.name.lower()) 

48 object.__setattr__(self, 'z_offset', float(self.z_offset))