def ensure_shell(shell): """Ensures that a mapping follows the shell specification.""" if not isinstance(shell, MutableMapping): shell = dict(shell) shell_keys = set(shell.keys()) if not (shell_keys <= VALID_SHELL_PARAMS): msg = 'unknown shell keys: {0}' raise KeyError(msg.format(shell_keys - VALID_SHELL_PARAMS)) shell['shell'] = ensure_string(shell['shell']) if 'interactive' in shell_keys: shell['interactive'] = to_bool(shell['interactive']) if 'login' in shell_keys: shell['login'] = to_bool(shell['login']) if 'envcmd' in shell_keys: shell['envcmd'] = eunsure_string(shell['envcmd']) if 'aliascmd' in shell_keys: shell['aliascmd'] = eunsure_string(shell['aliascmd']) if 'extra_args' in shell_keys and not isinstance(shell['extra_args'], tuple): shell['extra_args'] = tuple(map(ensure_string, shell['extra_args'])) if 'currenv' in shell_keys and not isinstance(shell['currenv'], tuple): ce = shell['currenv'] if isinstance(ce, Mapping): ce = tuple([(ensure_string(k), v) for k, v in ce.items()]) elif isinstance(ce, Sequence): ce = tuple([(ensure_string(k), v) for k, v in ce]) else: raise RuntimeError('unrecognized type for currenv') shell['currenv'] = ce if 'safe' in shell_keys: shell['safe'] = to_bool(shell['safe']) return shell
def test_ensure_string(): cases = [ (42, '42'), ('42', '42'), ] for inp, exp in cases: obs = ensure_string(inp) yield assert_equal, exp, obs
def test_ensure_string(): cases = [ (42, '42'), ('42', '42'), ] for inp, exp in cases: obs = ensure_string(inp) assert exp == obs
def ensure_shell(shell): """Ensures that a mapping follows the shell specification.""" if not isinstance(shell, MutableMapping): shell = dict(shell) shell_keys = set(shell.keys()) if not (shell_keys <= VALID_SHELL_PARAMS): msg = "unknown shell keys: {0}" raise KeyError(msg.format(shell_keys - VALID_SHELL_PARAMS)) shell["shell"] = ensure_string(shell["shell"]) if "interactive" in shell_keys: shell["interactive"] = to_bool(shell["interactive"]) if "login" in shell_keys: shell["login"] = to_bool(shell["login"]) if "envcmd" in shell_keys: shell["envcmd"] = ensure_string(shell["envcmd"]) if "aliascmd" in shell_keys: shell["aliascmd"] = ensure_string(shell["aliascmd"]) if "extra_args" in shell_keys and not isinstance(shell["extra_args"], tuple): shell["extra_args"] = tuple(map(ensure_string, shell["extra_args"])) if "currenv" in shell_keys and not isinstance(shell["currenv"], tuple): ce = shell["currenv"] if isinstance(ce, Mapping): ce = tuple([(ensure_string(k), v) for k, v in ce.items()]) elif isinstance(ce, Sequence): ce = tuple([(ensure_string(k), v) for k, v in ce]) else: raise RuntimeError("unrecognized type for currenv") shell["currenv"] = ce if "safe" in shell_keys: shell["safe"] = to_bool(shell["safe"]) if "prevcmd" in shell_keys: shell["prevcmd"] = ensure_string(shell["prevcmd"]) if "postcmd" in shell_keys: shell["postcmd"] = ensure_string(shell["postcmd"]) if "funcscmd" in shell_keys: shell["funcscmd"] = None if shell["funcscmd"] is None else ensure_string(shell["funcscmd"]) if "sourcer" in shell_keys: shell["sourcer"] = None if shell["sourcer"] is None else ensure_string(shell["sourcer"]) return shell
def test_ensure_string(inp, exp): obs = ensure_string(inp) assert exp == obs
def ensure_shell(shell): """Ensures that a mapping follows the shell specification.""" if not isinstance(shell, cabc.MutableMapping): shell = dict(shell) shell_keys = set(shell.keys()) if not (shell_keys <= VALID_SHELL_PARAMS): msg = "unknown shell keys: {0}" raise KeyError(msg.format(shell_keys - VALID_SHELL_PARAMS)) shell["shell"] = ensure_string(shell["shell"]).lower() if "interactive" in shell_keys: shell["interactive"] = to_bool(shell["interactive"]) if "login" in shell_keys: shell["login"] = to_bool(shell["login"]) if "envcmd" in shell_keys: shell["envcmd"] = (None if shell["envcmd"] is None else ensure_string( shell["envcmd"])) if "aliascmd" in shell_keys: shell["aliascmd"] = (None if shell["aliascmd"] is None else ensure_string(shell["aliascmd"])) if "extra_args" in shell_keys and not isinstance(shell["extra_args"], tuple): shell["extra_args"] = tuple(map(ensure_string, shell["extra_args"])) if "currenv" in shell_keys and not isinstance(shell["currenv"], tuple): ce = shell["currenv"] if isinstance(ce, cabc.Mapping): ce = tuple([(ensure_string(k), v) for k, v in ce.items()]) elif isinstance(ce, cabc.Sequence): ce = tuple([(ensure_string(k), v) for k, v in ce]) else: raise RuntimeError("unrecognized type for currenv") shell["currenv"] = ce if "safe" in shell_keys: shell["safe"] = to_bool(shell["safe"]) if "prevcmd" in shell_keys: shell["prevcmd"] = ensure_string(shell["prevcmd"]) if "postcmd" in shell_keys: shell["postcmd"] = ensure_string(shell["postcmd"]) if "funcscmd" in shell_keys: shell["funcscmd"] = (None if shell["funcscmd"] is None else ensure_string(shell["funcscmd"])) if "sourcer" in shell_keys: shell["sourcer"] = (None if shell["sourcer"] is None else ensure_string(shell["sourcer"])) if "seterrprevcmd" in shell_keys: shell["seterrprevcmd"] = (None if shell["seterrprevcmd"] is None else ensure_string(shell["seterrprevcmd"])) if "seterrpostcmd" in shell_keys: shell["seterrpostcmd"] = (None if shell["seterrpostcmd"] is None else ensure_string(shell["seterrpostcmd"])) return shell