Source code for fastpyxl.chart.line_chart

# 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())