Source code for fastpyxl.styles.differential

# Copyright (c) 2010-2024 fastpyxl

from fastpyxl.compat import safe_string
from fastpyxl.typed_serialisable.base import Serialisable
from fastpyxl.typed_serialisable.fields import AliasField, Field
from fastpyxl.styles import (
    Font,
    Fill,
    Border,
    Alignment,
    Protection,
    )
from .numbers import NumberFormat


[docs] class DifferentialStyle(Serialisable): tagname = "dxf" xml_order = ("font", "numFmt", "fill", "alignment", "border", "protection") font: Font | None = Field.element(expected_type=Font, allow_none=True, default=None) numFmt: NumberFormat | None = Field.element(expected_type=NumberFormat, allow_none=True, default=None) fill: Fill | None = Field.element(expected_type=Fill, allow_none=True, default=None) alignment: Alignment | None = Field.element(expected_type=Alignment, allow_none=True, default=None) border: Border | None = Field.element(expected_type=Border, allow_none=True, default=None) protection: Protection | None = Field.element(expected_type=Protection, allow_none=True, default=None) def __init__(self, font=None, numFmt=None, fill=None, alignment=None, border=None, protection=None, extLst=None, ): self.font = font self.numFmt = numFmt self.fill = fill self.alignment = alignment self.border = border self.protection = protection self.extLst = extLst
[docs] class DifferentialStyleList(Serialisable): """ Dedupable container for differential styles. """ tagname = "dxfs" dxf: list[DifferentialStyle] = Field.sequence(expected_type=DifferentialStyle, default=list) styles: list[DifferentialStyle] = AliasField("dxf", default=None) def __init__(self, dxf=(), count=None): self.dxf = list(dxf)
[docs] def append(self, dxf): """ Check to see whether style already exists and append it if does not. """ if not isinstance(dxf, DifferentialStyle): raise TypeError('expected ' + str(DifferentialStyle)) if dxf in self.styles: return self.styles.append(dxf)
[docs] def add(self, dxf): """ Add a differential style and return its index """ self.append(dxf) return self.styles.index(dxf)
def __bool__(self): return bool(self.styles) def __getitem__(self, idx): return self.styles[idx] @property def count(self): return len(self.dxf) def __iter__(self): yield "count", safe_string(self.count)