structure saas with tools
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
"""Rendering engine parameter handling."""
|
||||
|
||||
import typing
|
||||
|
||||
from . import base
|
||||
|
||||
__all__ = ['ENGINES', 'verify_engine', 'Engine']
|
||||
|
||||
ENGINES = {'dot', # https://www.graphviz.org/pdf/dot.1.pdf
|
||||
'neato',
|
||||
'twopi',
|
||||
'circo',
|
||||
'fdp',
|
||||
'sfdp',
|
||||
'patchwork',
|
||||
'osage'}
|
||||
|
||||
DEFAULT_ENGINE = 'dot'
|
||||
|
||||
REQUIRED = True
|
||||
|
||||
|
||||
def verify_engine(engine: str, *, required: bool = REQUIRED) -> None:
|
||||
if engine is None:
|
||||
if required:
|
||||
raise ValueError('missing engine')
|
||||
elif engine.lower() not in ENGINES:
|
||||
raise ValueError(f'unknown engine: {engine!r}'
|
||||
f' (must be one of {sorted(ENGINES)})')
|
||||
|
||||
|
||||
class Engine(base.ParameterBase):
|
||||
"""Rendering engine parameter with ``'dot''`` default."""
|
||||
|
||||
_engine = DEFAULT_ENGINE
|
||||
|
||||
_verify_engine = staticmethod(verify_engine)
|
||||
|
||||
def __init__(self, *, engine: typing.Optional[str] = None, **kwargs) -> None:
|
||||
super().__init__(**kwargs)
|
||||
|
||||
if engine is not None:
|
||||
self.engine = engine
|
||||
|
||||
def _copy_kwargs(self, **kwargs):
|
||||
"""Return the kwargs to create a copy of the instance."""
|
||||
engine = self._getattr_from_dict('_engine')
|
||||
if engine is not None:
|
||||
kwargs['engine'] = engine
|
||||
return super()._copy_kwargs(**kwargs)
|
||||
|
||||
@property
|
||||
def engine(self) -> str:
|
||||
"""The layout engine used for rendering
|
||||
(``'dot'``, ``'neato'``, ...)."""
|
||||
return self._engine
|
||||
|
||||
@engine.setter
|
||||
def engine(self, engine: str) -> None:
|
||||
engine = engine.lower()
|
||||
self._verify_engine(engine)
|
||||
self._engine = engine
|
||||
Reference in New Issue
Block a user