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

1"""Rust-owned timeline metadata; Qt images remain on Layer.""" 

2from . import native 

3 

4 

5METADATA_FIELDS = ( 

6 "has_content", "is_blank_key", "exposure", "sequence_number", "sequence_only", "cell_name", 

7) 

8 

9 

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 

16 

17 

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) 

23 

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) 

28 

29 return property(get, set_value) 

30 

31 for name in METADATA_FIELDS: 

32 setattr(cls, name, metadata_property(name)) 

33 return cls