|
| 1 | +import glob |
1 | 2 | import re |
2 | 3 | from pathlib import Path |
3 | 4 |
|
@@ -91,10 +92,14 @@ def to_spec(figure, layout_opts): |
91 | 92 |
|
92 | 93 | def _next_filename(path, prefix, ext): |
93 | 94 | default = 1 if (path / f"{prefix}.{ext}").exists() else 0 |
94 | | - re_number = re.compile(r"^" + prefix + r"-(\d+)\." + ext + r"$") |
| 95 | + re_number = re.compile( |
| 96 | + r"^" + re.escape(prefix) + r"\-(\d+)\." + re.escape(ext) + r"$", |
| 97 | + ) |
| 98 | + escaped_prefix = glob.escape(prefix) |
| 99 | + escaped_ext = glob.escape(ext) |
95 | 100 | numbers = [ |
96 | 101 | int(match.group(1)) |
97 | | - for name in path.glob(f"{prefix}-*.{ext}") |
| 102 | + for name in path.glob(f"{escaped_prefix}-*.{escaped_ext}") |
98 | 103 | if (match := re_number.match(Path(name).name)) |
99 | 104 | ] |
100 | 105 | n = max(numbers, default=default) + 1 |
@@ -137,9 +142,10 @@ def build_fig_spec(fig, path, opts): # noqa: C901 |
137 | 142 | ) |
138 | 143 | if not full_path: |
139 | 144 | _logger.debug("Looking for title") |
140 | | - prefix = ( |
141 | | - fig.get("layout", {}).get("title", {}).get("text", "fig").replace(" ", "_") |
142 | | - ) |
| 145 | + prefix = fig.get("layout", {}).get("title", {}).get("text", "fig") |
| 146 | + prefix = re.sub(r"[ \-]", "_", prefix) |
| 147 | + prefix = re.sub(r"[^a-zA-Z0-9_]", "", prefix) |
| 148 | + prefix = prefix or "fig" |
143 | 149 | _logger.debug(f"Found: {prefix}") |
144 | 150 | name = _next_filename(directory, prefix, ext) |
145 | 151 | full_path = directory / name |
|
0 commit comments