Coverage for paintmaskanimator/timeline_metadata.py: 100%
18 statements
« prev ^ index » next coverage.py v7.17.0, created at 2026-11-02 04:50 +0000
« prev ^ index » next coverage.py v7.17.0, created at 2026-11-02 04:50 +0000
1"""Rust-owned timeline metadata; Qt images remain on Layer."""
2from . import native
5METADATA_FIELDS = (
6 "has_content", "is_blank_key", "exposure", "sequence_number", "sequence_only", "cell_name",
7)
10def metadata_for(layer):
11 data = layer.__dict__.get("_timeline_metadata")
12 if data is None:
13 data = native._native.TimelineCell()
14 layer.__dict__["_timeline_metadata"] = data
15 return data
18def timeline_metadata(cls):
19 """Install properties after @dataclass has captured its public defaults."""
20 def metadata_property(name):
21 def get(layer):
22 return getattr(metadata_for(layer), name)
24 def set_value(layer, value):
25 # Out-of-range integers are invalid metadata, never a reason to
26 # switch to a second runtime implementation.
27 setattr(metadata_for(layer), name, value)
29 return property(get, set_value)
31 for name in METADATA_FIELDS:
32 setattr(cls, name, metadata_property(name))
33 return cls