import abc
import uuid
from .abstract_chart_notation import *
from visual_viper.dataset_builders import Key
[docs]
class AbstractChartNotationBuilder:
"""
Documentation TBD
"""
OPTS = dict()
DEFAULT_FILE_NAME = "filename.svg"
def __init__(self, title=None, subtitle=None, chart_height=None, chart_width=None, filename=None, bindings=None, id=None, opts=None):
self._bindings = bindings or []
self.opts = {**self.OPTS, **(opts or {})}
self.id = id or uuid.uuid4()
self.keys = []
if title and (
isinstance(title, str) or
(isinstance(title, list) and all(isinstance(item, str) for item in title))
):
self.title = title
else:
self.title = None
if subtitle and (
isinstance(subtitle, str) or
(isinstance(subtitle, list) and all(isinstance(item, str) for item in subtitle))
):
self.subtitle = subtitle
else:
self.subtitle = None
if chart_height:
self.chart_height = chart_height
else:
self.chart_height = None
if chart_width:
self.chart_width = chart_width
else:
self.chart_width = None
if filename:
self.filename = filename
else:
self.filename = self.DEFAULT_FILE_NAME
@property
def bindings(self):
raise NotImplementedError()
[docs]
def collect_keys(self, dataset):
for binding in self._bindings:
binding.register_dataset(dataset)
for _, val in binding.items():
if isinstance(val, Key):
if val.src:
self.keys.append((val.key, val.src))
else:
self.keys.append(val.key)
return self.keys
[docs]
@abc.abstractmethod
def build(self, params=None) -> dict:
"""
Documentation TBD
"""
raise NotImplementedError()
def __repr__(self):
return str(self.bindings)