def __init__(self, execer, ctx=None, shell_type=None, **kwargs): """ Parameters ---------- execer : Execer An execer instance capable of running xonsh code. ctx : Mapping, optional The execution context for the shell (e.g. the globals namespace). If none, this is computed by loading the rc files. If not None, this no additional context is computed and this is used directly. shell_type : str, optional The shell type to start, such as 'readline', 'prompt_toolkit1', or 'random'. """ self.execer = execer self.ctx = {} if ctx is None else ctx env = XSH.env # build history backend before creating shell if env.get("XONSH_INTERACTIVE"): XSH.history = hist = xhm.construct_history( env=env.detype(), ts=[time.time(), None], locked=True, filename=env.get("XONSH_HISTORY_FILE", None), ) env["XONSH_HISTORY_FILE"] = hist.filename else: XSH.history = hist = DummyHistory() env["XONSH_HISTORY_FILE"] = None shell_type = self.choose_shell_type(shell_type, env) self.shell_type = env["SHELL_TYPE"] = shell_type # actually make the shell if shell_type == "none": from xonsh.base_shell import BaseShell as shell_class elif shell_type == "prompt_toolkit": from xonsh.ptk_shell.shell import PromptToolkitShell as shell_class elif shell_type == "readline": from xonsh.readline_shell import ReadlineShell as shell_class elif shell_type == "jupyter": from xonsh.jupyter_shell import JupyterShell as shell_class elif shell_type == "dumb": from xonsh.dumb_shell import DumbShell as shell_class else: raise XonshError( "{} is not recognized as a shell type".format(shell_type)) self.shell = shell_class(execer=self.execer, ctx=self.ctx, **kwargs) # allows history garbage collector to start running if hist.gc is not None: hist.gc.wait_for_shell = False
def test_construct_history_instance(xonsh_builtins): xonsh_builtins.__xonsh__.env["XONSH_HISTORY_BACKEND"] = DummyHistory() assert isinstance(construct_history(), DummyHistory)
def test_construct_history_instance(xession): xession.env["XONSH_HISTORY_BACKEND"] = DummyHistory() assert isinstance(construct_history(), DummyHistory)
"""Tests the dummy history backend.""" import pytest from xonsh.history.dummy import DummyHistory from xonsh.history.main import construct_history @pytest.mark.parametrize("backend", ["dummy", DummyHistory, DummyHistory()]) def test_construct_history_str(xession, backend): xession.env["XONSH_HISTORY_BACKEND"] = backend assert isinstance(construct_history(), DummyHistory)