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
« 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
5from klipper_utils.klipper_utils import ConfigWrapper, KlipperConfigDict, KlipperUtils
8def load_fixed_offsets(config: ConfigWrapper) -> dict[str, float]:
9 """Load and parse fixes profiles from a configuration file.
11 Configuration has syntax::
13 fixed_offsets = name=<profile name>, z_offset=<offset>...
15 Example::
17 fixed_offsets =
18 name=pla, z_offset=0.01
19 name=pei_tpu, z_offset=-0.02
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}
29@dataclass(kw_only=True, frozen=True)
30class FixedOffset(KlipperConfigDict):
31 """Single fixed profile value.
33 :param name: Name of the fixed offset profile.
34 :param z_offset: Z offset value [mm].
35 """
37 name: str
38 z_offset: float
40 @staticmethod
41 @override
42 def get_title() -> list[str]:
43 return ['name', 'z_offset']
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))