Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.11/site-packages/graphviz/parameters/formatters.py: 70%

Shortcuts on this page

r m x   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

33 statements  

1"""Rendering formatter parameter handling.""" 

2 

3import typing 

4 

5from . import base 

6 

7__all__ = ['FORMATTERS', 'verify_formatter', 'Formatter'] 

8 

9FORMATTERS = {'cairo', 

10 'core', 

11 'gd', 

12 'gdiplus', 

13 'gdwbmp', 

14 'xlib'} 

15 

16REQUIRED = False 

17 

18 

19def verify_formatter(formatter: typing.Optional[str], *, 

20 required: bool = REQUIRED) -> None: 

21 if formatter is None: 

22 if required: 

23 raise ValueError('missing formatter') 

24 elif formatter.lower() not in FORMATTERS: 

25 raise ValueError(f'unknown formatter: {formatter!r}' 

26 f' (must be None or one of {sorted(FORMATTERS)})') 

27 

28 

29class Formatter(base.ParameterBase): 

30 """Rendering engine parameter (no default).""" 

31 

32 _formatter = None 

33 

34 _verify_formatter = staticmethod(verify_formatter) 

35 

36 def __init__(self, *, formatter: typing.Optional[str] = None, **kwargs) -> None: 

37 super().__init__(**kwargs) 

38 

39 self.formatter = formatter 

40 

41 def _copy_kwargs(self, **kwargs): 

42 """Return the kwargs to create a copy of the instance.""" 

43 formatter = self._getattr_from_dict('_formatter') 

44 if formatter is not None: 

45 kwargs['formatter'] = formatter 

46 return super()._copy_kwargs(**kwargs) 

47 

48 @property 

49 def formatter(self) -> typing.Optional[str]: 

50 """The output formatter used for rendering 

51 (``'cairo'``, ``'gd'``, ...).""" 

52 return self._formatter 

53 

54 @formatter.setter 

55 def formatter(self, formatter: typing.Optional[str]) -> None: 

56 if formatter is None: 

57 self.__dict__.pop('_formatter', None) 

58 else: 

59 formatter = formatter.lower() 

60 self._verify_formatter(formatter) 

61 self._formatter = formatter