msd: allow any printable characters in image name

This commit is contained in:
Devaev Maxim
2019-10-15 08:21:04 +03:00
parent e58ad66da9
commit 7b4818ed15
4 changed files with 70 additions and 38 deletions

View File

@@ -20,17 +20,16 @@
# ========================================================================== #
import re
from typing import Any
from .. import keymap
from . import check_not_none_string
from . import check_string_in_list
from .basic import valid_number
from .os import valid_printable_filename
# =====
def valid_atx_power_action(arg: Any) -> str:
@@ -42,15 +41,7 @@ def valid_atx_button(arg: Any) -> str:
def valid_msd_image_name(arg: Any) -> str:
if len(str(arg).strip()) == 0:
arg = None
arg = check_not_none_string(arg, "MSD image name", strip=True)
arg = re.sub(r"[^\w\.+@()\[\]-]", "_", arg)
if arg == ".":
arg = "_"
if arg == "..":
arg = "__"
return arg[:255]
return valid_printable_filename(arg, name="MSD image name") # pragma: nocover
def valid_log_seek(arg: Any) -> int:

View File

@@ -51,6 +51,25 @@ def valid_abs_path_exists(arg: Any, name: str="") -> str:
return valid_abs_path(arg, exists=True, name=name)
def valid_printable_filename(arg: Any, name: str="") -> str:
if not name:
name = "printable filename"
if len(str(arg).strip()) == 0:
arg = None
arg = check_not_none_string(arg, name)
if "/" in arg or "\0" in arg or arg in [".", ".."]:
raise_error(arg, name)
arg = "".join(
(ch if ch.isprintable() else "_")
for ch in arg[:255]
)
return arg
# =====
def valid_unix_mode(arg: Any) -> int:
return int(valid_number(arg, min=0, name="UNIX mode"))