diff --git a/data/actionsmap/yunohost.yml b/data/actionsmap/yunohost.yml index df13e3bc9..24136a1ce 100644 --- a/data/actionsmap/yunohost.yml +++ b/data/actionsmap/yunohost.yml @@ -1467,6 +1467,16 @@ tools: extra: pattern: *pattern_port + ### tools_shell() + shell: + configuration: + authenticate: all + action_help: Launch a development shell + arguments: + -c: + help: python command to execute + full: --command + ### tools_shutdown() shutdown: action_help: Shutdown the server diff --git a/src/yunohost/tools.py b/src/yunohost/tools.py index 70c867525..ec73b87e9 100644 --- a/src/yunohost/tools.py +++ b/src/yunohost/tools.py @@ -817,6 +817,34 @@ def tools_migrations_state(): return read_json(MIGRATIONS_STATE_PATH) +def tools_shell(auth, command=None): + """ + Launch an (i)python shell in the YunoHost context. + + This is entirely aim for development. + """ + + if command: + exec(command) + return + + logger.warn("The \033[1;34mauth\033[0m is available in this context") + try: + from IPython import embed + embed() + except ImportError: + logger.warn("You don't have IPython installed, consider installing it as it is way better than the standard shell.") + logger.warn("Falling back on the standard shell.") + + import readline # will allow Up/Down/History in the console + readline # to please pyflakes + import code + vars = globals().copy() + vars.update(locals()) + shell = code.InteractiveConsole(vars) + shell.interact() + + def _get_migrations_list(): migrations = []