Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 16dd6a3

Browse files
Merge pull request #4612 from plotly/handle-extras-integer-validator
Handle `extras` option in `IntegerValidator`
2 parents 97def55 + 751092e commit 16dd6a3

File tree

2 files changed

+31
-3
lines changed

2 files changed

+31
-3
lines changed

‎CHANGELOG.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ This project adheres to [Semantic Versioning](http://semver.org/).
66

77
### Updated
88
- Specify Python version 3.8-3.11 for development virtual environments and pin `pytest` at version 8.1.1 to match.
9+
- Update `IntegerValidator` to handle `extras` option to allow supporting additional keyword values. For example, 'bold' and 'normal' as well as integers as used in font weights [#4612].
910

1011
## [5.22.0] - 2024年05月01日
1112

‎packages/python/plotly/_plotly_utils/basevalidators.py‎

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -824,13 +824,21 @@ class IntegerValidator(BaseValidator):
824824
"dflt",
825825
"min",
826826
"max",
827+
"extras",
827828
"arrayOk"
828829
]
829830
},
830831
"""
831832

832833
def __init__(
833-
self, plotly_name, parent_name, min=None, max=None, array_ok=False, **kwargs
834+
self,
835+
plotly_name,
836+
parent_name,
837+
min=None,
838+
max=None,
839+
extras=None,
840+
array_ok=False,
841+
**kwargs,
834842
):
835843
super(IntegerValidator, self).__init__(
836844
plotly_name=plotly_name, parent_name=parent_name, **kwargs
@@ -855,6 +863,7 @@ def __init__(
855863
else:
856864
self.has_min_max = False
857865

866+
self.extras = extras if extras is not None else []
858867
self.array_ok = array_ok
859868

860869
def description(self):
@@ -878,6 +887,16 @@ def description(self):
878887
)
879888
)
880889

890+
# Extras
891+
if self.extras:
892+
desc = (
893+
desc
894+
+ (
895+
"""
896+
OR exactly one of {extras} (e.g. '{eg_extra}')"""
897+
).format(extras=self.extras, eg_extra=self.extras[-1])
898+
)
899+
881900
if self.array_ok:
882901
desc = (
883902
desc
@@ -891,6 +910,8 @@ def validate_coerce(self, v):
891910
if v is None:
892911
# Pass None through
893912
pass
913+
elif v in self.extras:
914+
return v
894915
elif self.array_ok and is_homogeneous_array(v):
895916
np = get_module("numpy")
896917
v_array = copy_to_readonly_numpy_array(
@@ -917,14 +938,20 @@ def validate_coerce(self, v):
917938
v = v_array
918939
elif self.array_ok and is_simple_array(v):
919940
# Check integer type
920-
invalid_els = [e for e in v if not isinstance(e, int)]
941+
invalid_els = [
942+
e for e in v if not isinstance(e, int) and e not in self.extras
943+
]
921944

922945
if invalid_els:
923946
self.raise_invalid_elements(invalid_els[:10])
924947

925948
# Check min/max
926949
if self.has_min_max:
927-
invalid_els = [e for e in v if not (self.min_val <= e <= self.max_val)]
950+
invalid_els = [
951+
e
952+
for e in v
953+
if not (self.min_val <= e <= self.max_val) and e not in self.extras
954+
]
928955

929956
if invalid_els:
930957
self.raise_invalid_elements(invalid_els[:10])

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /