Source code for fastpyxl.chart.descriptors
# Copyright (c) 2010-2024 fastpyxl
from __future__ import annotations
from fastpyxl.typed_serialisable.errors import FieldValidationError
from fastpyxl.typed_serialisable.fields import Field
from .data_source import NumFmt
def _bounded_float(value, *, lo: float, hi: float, field_name: str):
if value is None:
return None
try:
numeric = float(value)
except (TypeError, ValueError) as exc:
raise FieldValidationError(f"{field_name} rejected value {value!r}") from exc
if numeric < lo or numeric > hi:
raise FieldValidationError(f"{field_name} rejected value {value!r}")
return numeric
def _gap_amount(v):
return _bounded_float(v, lo=0, hi=500, field_name="gapWidth")
def _overlap(v):
return _bounded_float(v, lo=-100, hi=100, field_name="overlap")
NestedGapAmount = Field.nested_value(
expected_type=float,
allow_none=True,
converter=_gap_amount, default=None,
)
NestedOverlap = Field.nested_value(
expected_type=float,
allow_none=True,
converter=_overlap, default=None,
)
[docs]
def num_fmt_from_value(value):
if value is None:
return None
if isinstance(value, str):
return NumFmt(formatCode=value)
return value