# Autogenerated schema
from __future__ import annotations
from fastpyxl.typed_serialisable.errors import FieldValidationError
from fastpyxl.typed_serialisable.fields import AliasField, Field
from fastpyxl.descriptors.excel import ExtensionList
from ._chart import ChartBase
from .updown_bars import UpDownBars
from .descriptors import NestedGapAmount
from .axis import TextAxis, NumericAxis, SeriesAxis, ChartLines
from .label import DataLabelList
from .series import Series
from ._3d import (
FIELD_BACK_WALL_ON_CHART,
FIELD_FLOOR_ON_CHART,
FIELD_SIDE_WALL_ON_CHART,
FIELD_VIEW3D_ON_CHART,
_3DBase,
)
def _line_grouping(v):
if v is None:
return None
allowed = frozenset({"percentStacked", "standard", "stacked"})
if v not in allowed:
raise FieldValidationError(f"grouping rejected value {v!r}")
return v
class _LineChartBase(ChartBase):
grouping: str | None = Field.nested_value(
expected_type=str,
allow_none=True,
converter=_line_grouping, default=None,
)
varyColors: bool | None = Field.nested_bool(allow_none=True, default=None)
ser: list[Series] | None = Field.sequence(expected_type=Series, allow_none=True, default=list)
dLbls: DataLabelList | None = Field.element(
expected_type=DataLabelList, allow_none=True, default=None
)
dataLabels = AliasField("dLbls", default=None)
dropLines: ChartLines | None = Field.element(expected_type=ChartLines, allow_none=True, default=None)
xml_order = ("grouping", "varyColors", "ser", "dLbls", "dropLines")
_series_type = "line"
def __init__(
self,
grouping="standard",
varyColors=None,
ser=(),
dLbls=None,
dropLines=None,
**kw,
):
self.grouping = grouping
self.varyColors = varyColors
self.ser = list(ser) if ser is not None else []
self.dLbls = dLbls
self.dropLines = dropLines
super().__init__(**kw)
[docs]
class LineChart(_LineChartBase):
tagname = "lineChart"
hiLowLines: ChartLines | None = Field.element(expected_type=ChartLines, allow_none=True, default=None)
upDownBars: UpDownBars | None = Field.element(expected_type=UpDownBars, allow_none=True, default=None)
marker: bool | None = Field.nested_bool(allow_none=True, default=None)
smooth: bool | None = Field.nested_bool(allow_none=True, default=None)
extLst: ExtensionList | None = Field.element(
expected_type=ExtensionList, allow_none=True, serialize=False, default=None
)
xml_order = _LineChartBase.xml_order + (
"hiLowLines",
"upDownBars",
"marker",
"smooth",
"axId",
)
def __init__(
self,
hiLowLines=None,
upDownBars=None,
marker=None,
smooth=None,
extLst=None,
**kw,
):
self.hiLowLines = hiLowLines
self.upDownBars = upDownBars
self.marker = marker
self.smooth = smooth
self.extLst = extLst
self.x_axis = TextAxis()
self.y_axis = NumericAxis()
super().__init__(**kw)
if not self.axId:
self.axId = list(self._axes.keys())
[docs]
class LineChart3D(_LineChartBase, _3DBase):
tagname = "line3DChart"
view3D = FIELD_VIEW3D_ON_CHART
floor = FIELD_FLOOR_ON_CHART
sideWall = FIELD_SIDE_WALL_ON_CHART
backWall = FIELD_BACK_WALL_ON_CHART
gapDepth = NestedGapAmount
hiLowLines: ChartLines | None = Field.element(expected_type=ChartLines, allow_none=True, default=None)
upDownBars: UpDownBars | None = Field.element(expected_type=UpDownBars, allow_none=True, default=None)
marker: bool | None = Field.nested_bool(allow_none=True, default=None)
smooth: bool | None = Field.nested_bool(allow_none=True, default=None)
extLst: ExtensionList | None = Field.element(
expected_type=ExtensionList, allow_none=True, serialize=False, default=None
)
xml_order = _LineChartBase.xml_order + (
"gapDepth",
"hiLowLines",
"upDownBars",
"marker",
"smooth",
"axId",
)
def __init__(
self,
gapDepth=None,
hiLowLines=None,
upDownBars=None,
marker=None,
smooth=None,
extLst=None,
**kw,
):
self.gapDepth = gapDepth
self.hiLowLines = hiLowLines
self.upDownBars = upDownBars
self.marker = marker
self.smooth = smooth
self.extLst = extLst
self.x_axis = TextAxis()
self.y_axis = NumericAxis()
self.z_axis = SeriesAxis()
_LineChartBase.__init__(self, **kw)
_3DBase.__init__(self)
if not self.axId:
self.axId = list(self._axes.keys())