Coverage for src/lektor_ng/types/formats.py: 96%

23 statements  

« prev     ^ index     » next       coverage.py v7.15.2, created at 2026-08-03 21:08 +0000

1from warnings import warn 

2 

3from lektor_ng.markdown import Markdown 

4from lektor_ng.types.base import Type 

5 

6 

7class MarkdownDescriptor: 

8 def __init__(self, source, options): 

9 self.source = source 

10 self.options = options 

11 

12 def __get__(self, obj, type=None): 

13 if obj is None: 

14 return self 

15 return Markdown(self.source, record=obj, field_options=self.options) 

16 

17 

18class MarkdownType(Type): 

19 widget = "multiline-text" 

20 

21 def __init__(self, env, options): 

22 super().__init__(env, options) 

23 _check_option(options, "resolve_links", ("always", "never", "when-possible")) 

24 

25 def value_from_raw(self, raw): 

26 return MarkdownDescriptor(raw.value or "", self.options) 

27 

28 

29def _check_option(options, name, choices): 

30 value = options.get(name) 

31 if value is not None and value not in choices: 

32 message = ( 

33 f"Unrecognized value {value!r} for the {name!r} markdown field option. " 

34 f"Valid values are: {', '.join(repr(_) for _ in choices)}." 

35 ) 

36 warn(message, stacklevel=3)