Source code for fastpyxl.chart.legend

# Copyright (c) 2010-2024 fastpyxl

from __future__ import annotations

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

from fastpyxl.descriptors.excel import ExtensionList

from .layout import Layout
from .shapes import GraphicalProperties
from .text import RichText


[docs] class LegendEntry(Serialisable): tagname = "legendEntry" idx: int | None = Field.nested_value(expected_type=int, allow_none=True, default=None) delete: bool | None = Field.nested_bool(default=False) txPr: RichText | None = Field.element(expected_type=RichText, allow_none=True, default=None) extLst: ExtensionList | None = Field.element( expected_type=ExtensionList, allow_none=True, serialize=False, default=None ) xml_order = ("idx", "delete", "txPr") def __init__(self, idx=0, delete=False, txPr=None, extLst=None): self.idx = idx self.delete = delete self.txPr = txPr self.extLst = extLst
[docs] class Legend(Serialisable): tagname = "legend" legendPos: str | None = Field.nested_value( expected_type=str, allow_none=True, converter=lambda v: _legend_pos(v), default=None, ) position = AliasField("legendPos", default=None) legendEntry: list[LegendEntry] | None = Field.sequence( expected_type=LegendEntry, allow_none=True, default=list ) layout: Layout | None = Field.element(expected_type=Layout, allow_none=True, default=None) overlay: bool | None = Field.nested_bool(allow_none=True, default=None) spPr: GraphicalProperties | None = Field.element( expected_type=GraphicalProperties, allow_none=True, default=None ) graphicalProperties = AliasField("spPr", default=None) txPr: RichText | None = Field.element(expected_type=RichText, allow_none=True, default=None) textProperties = AliasField("txPr", default=None) extLst: ExtensionList | None = Field.element( expected_type=ExtensionList, allow_none=True, serialize=False, default=None ) xml_order = ("legendPos", "legendEntry", "layout", "overlay", "spPr", "txPr") def __init__( self, legendPos="r", legendEntry=(), layout=None, overlay=None, spPr=None, txPr=None, extLst=None, ): self.legendPos = legendPos self.legendEntry = list(legendEntry) if legendEntry is not None else [] self.layout = layout self.overlay = overlay self.spPr = spPr self.txPr = txPr self.extLst = extLst
def _legend_pos(v): from fastpyxl.typed_serialisable.errors import FieldValidationError if v is None: return None allowed = frozenset({"b", "tr", "l", "r", "t"}) if v not in allowed: raise FieldValidationError(f"legendPos rejected value {v!r}") return v