File: formats.py

package info (click to toggle)
python-graphviz 0.20.2-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,188 kB
  • sloc: python: 4,098; makefile: 13
file content (90 lines) | stat: -rw-r--r-- 2,433 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
"""Rendering format parameter handling."""

import typing

from . import base

__all__ = ['FORMATS', 'verify_format', 'Format']

FORMATS = {'bmp',  # https://graphviz.org/docs/outputs/
           'canon', 'dot', 'gv', 'xdot', 'xdot1.2', 'xdot1.4',
           'cgimage',
           'cmap',
           'eps',
           'exr',
           'fig',
           'gd', 'gd2',
           'gif',
           'gtk',
           'ico',
           'imap', 'cmapx',
           'imap_np', 'cmapx_np',
           'ismap',
           'jp2',
           'jpg', 'jpeg', 'jpe',
           'json', 'json0', 'dot_json', 'xdot_json',  # Graphviz 2.40
           'pct', 'pict',
           'pdf',
           'pic',
           'plain', 'plain-ext',
           'png',
           'pov',
           'ps',
           'ps2',
           'psd',
           'sgi',
           'svg', 'svgz',
           'tga',
           'tif', 'tiff',
           'tk',
           'vml', 'vmlz',
           'vrml',
           'wbmp',
           'webp',
           'xlib', 'x11'}

DEFAULT_FORMAT = 'pdf'

REQUIRED = True


def verify_format(format: str, *, required: bool = REQUIRED) -> None:
    if format is None:
        if required:
            raise ValueError('missing format')
    elif format.lower() not in FORMATS:
        raise ValueError(f'unknown format: {format!r}'
                         f' (must be one of {sorted(FORMATS)})')


class Format(base.ParameterBase):
    """Rendering format parameter with ``'pdf'`` default."""

    _format = DEFAULT_FORMAT

    _verify_format = staticmethod(verify_format)

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

        if format is not None:
            self.format = format

    def _copy_kwargs(self, **kwargs):
        """Return the kwargs to create a copy of the instance."""
        format = self._getattr_from_dict('_format')
        if format is not None:
            kwargs['format'] = format
        return super()._copy_kwargs(**kwargs)

    @property
    def format(self) -> str:
        """The output format used for rendering
            (``'pdf'``, ``'png'``, ...)."""
        return self._format

    @format.setter
    def format(self, format: str) -> None:
        format = format.lower()
        self._verify_format(format)
        self._format = format