Source code for fastpyxl.chart.error_bar

# Copyright (c) 2010-2024 fastpyxl

from __future__ import annotations

from fastpyxl.typed_serialisable.base import Serialisable
from fastpyxl.typed_serialisable.errors import FieldValidationError
from fastpyxl.typed_serialisable.fields import AliasField, Field

from fastpyxl.descriptors.excel import ExtensionList

from .data_source import NumDataSource
from .shapes import GraphicalProperties


def _none_set(allowed: frozenset, field_name: str):
    def _c(v):
        if v is None or v == "none":
            return None
        if v not in allowed:
            raise FieldValidationError(f"{field_name} rejected value {v!r}")
        return v

    return _c


def _req_set(allowed: frozenset, field_name: str):
    def _c(v):
        if v is None:
            return None
        if v not in allowed:
            raise FieldValidationError(f"{field_name} rejected value {v!r}")
        return v

    return _c


[docs] class ErrorBars(Serialisable): tagname = "errBars" errDir: str | None = Field.nested_value( expected_type=str, allow_none=True, converter=_none_set(frozenset({"x", "y"}), "errDir"), default=None, ) direction = AliasField("errDir", default=None) errBarType: str | None = Field.nested_value( expected_type=str, allow_none=True, converter=_req_set(frozenset({"both", "minus", "plus"}), "errBarType"), default=None, ) style = AliasField("errBarType", default=None) errValType: str | None = Field.nested_value( expected_type=str, allow_none=True, converter=_req_set( frozenset({"cust", "fixedVal", "percentage", "stdDev", "stdErr"}), "errValType", ), default=None, ) size = AliasField("errValType", default=None) noEndCap: bool | None = Field.nested_bool(allow_none=True, default=None) plus: NumDataSource | None = Field.element(expected_type=NumDataSource, allow_none=True, default=None) minus: NumDataSource | None = Field.element(expected_type=NumDataSource, allow_none=True, default=None) val: float | None = Field.nested_value(expected_type=float, allow_none=True, default=None) spPr: GraphicalProperties | None = Field.element( expected_type=GraphicalProperties, allow_none=True, default=None ) graphicalProperties = AliasField("spPr", default=None) extLst: ExtensionList | None = Field.element( expected_type=ExtensionList, allow_none=True, serialize=False, default=None ) xml_order = ( "errDir", "errBarType", "errValType", "noEndCap", "minus", "plus", "val", "spPr", ) def __init__( self, errDir=None, errBarType="both", errValType="fixedVal", noEndCap=None, plus=None, minus=None, val=None, spPr=None, extLst=None, ): self.errDir = errDir self.errBarType = errBarType self.errValType = errValType self.noEndCap = noEndCap self.plus = plus self.minus = minus self.val = val self.spPr = spPr self.extLst = extLst