|
5 | 5 | import csv |
6 | 6 | import os.path |
7 | 7 | from io import StringIO |
| 8 | +from collections.abc import Iterable |
| 9 | +from typing import Any |
| 10 | + |
8 | 11 | from PIL import Image |
9 | 12 | import numpy as np |
10 | 13 |
|
@@ -612,19 +615,26 @@ def process_axis(opt, vals, vals_dropdown): |
612 | 615 |
|
613 | 616 | return valslist |
614 | 617 |
|
| 618 | + def _handle_opt_values(opt, values: str, values_dropdown: Iterable[Any]): |
| 619 | + if opt.choices is not None: |
| 620 | + if not csv_mode: |
| 621 | + values = list_to_csv_string(values_dropdown) |
| 622 | + elif isinstance(values, str): |
| 623 | + values = re.sub(r'\s*[\r\n]+\s*', '\n', values) |
| 624 | + values = re.sub(r'^[\n\s]+|[\n\s]+$', '', values) |
| 625 | + values = re.sub(r',?\s*\n+\s*,?', ',', values) |
| 626 | + return values |
| 627 | + |
615 | 628 | x_opt = self.current_axis_options[x_type] |
616 | | - if x_opt.choices is not None and not csv_mode: |
617 | | - x_values = list_to_csv_string(x_values_dropdown) |
| 629 | + _handle_opt_values(x_opt, x_values, x_values_dropdown) |
618 | 630 | xs = process_axis(x_opt, x_values, x_values_dropdown) |
619 | 631 |
|
620 | 632 | y_opt = self.current_axis_options[y_type] |
621 | | - if y_opt.choices is not None and not csv_mode: |
622 | | - y_values = list_to_csv_string(y_values_dropdown) |
| 633 | + _handle_opt_values(y_opt, y_values, y_values_dropdown) |
623 | 634 | ys = process_axis(y_opt, y_values, y_values_dropdown) |
624 | 635 |
|
625 | 636 | z_opt = self.current_axis_options[z_type] |
626 | | - if z_opt.choices is not None and not csv_mode: |
627 | | - z_values = list_to_csv_string(z_values_dropdown) |
| 637 | + _handle_opt_values(z_opt, z_values, z_values_dropdown) |
628 | 638 | zs = process_axis(z_opt, z_values, z_values_dropdown) |
629 | 639 |
|
630 | 640 | # this could be moved to common code, but unlikely to be ever triggered anywhere else |
|
0 commit comments