[IPython-dev] Embedded shell setup
Matthias Bussonnier
bussonniermatthias at gmail.com
Tue Dec 1 06:28:40 EST 2015
Hi Frederic.
I haven’t used IPython 0.7.2 but I can try to give you some feedback.
> On Dec 1, 2015, at 08:29, Frédéric Mantegazza <mantegazza at ill.fr> wrote:
>
> Hi!
>
> In 2003, we started to develop an application to drive a big instrument
> (a neutron spectrometer), in a french research institute. Since 2004, this
> application runs 24h a day, almost all days.
>
> It is entirely written in python, and is heavily based on Pyro for
> clients/servers communication, and, of course IPython, for user
> interaction.
>
> With these 2 great pieces of code, we have build a very strong tool.
> Fernando helped us a lot to customize IPython, and integrate it in our
> code. Thanks again for all your help, Fernando!
>
> Even if our app. evolved during all these years, it is still based on
> softwares versions of the early 2k (debian lenny, IPython 0.7.2, Pyro
> 3.7) :o/
>
> It is time to do a major upgrade! That's why we need some help...
>
> Here is what we are doing when we instanciate what we call the
> 'console' (client part of our app.); we already adapted it to IPython 2.3,
> but there are still things which does not work (loading 'pymad' profile),
> and surely thing which could be better (hooks, custom completer...).
>
> We would really appreciate feedback!
>
> Thanks,
>
> ----------------------------------------------------------------
>
> config = IPython.config.loader.Config()
> promptManager = config.PromptManager
I’m not sure this assignment will work, because of what the config object works.
In doubt I would explicitly use config.PromptManager.in/out_template if you have issues.
I would have to try and check that.
> promptManager.in_template = "{color.LightRed}PyMAD>>> "
> promptManager.out_template = ‘ '
> # profile is not loaded does not work!
> config.profile = “pymad"
I’m not sure what yo are trying to do.
I guess you might want to load a subconfia from another profile ?
https://ipython.org/ipython-doc/2/development/config.html?highlight=load_subconfig#configuration-files-inheritance <https://ipython.org/ipython-doc/2/development/config.html?highlight=load_subconfig#configuration-files-inheritance>
InteractiveShellEmbed is not a subclass of BaseIPythonApplication, so it does not seem have a `profile` configuration.
The way it works in IPython is TerminalIPythonApp in init_shell call the following:
def init_shell(self):
...
self.shell = TerminalInteractiveShell.instance(parent=self,
..., profile_dir=self.profile_dir,
ipython_dir=self.ipython_dir, ...)
> startMsg = "\nWelcome to PyMAD"
> startMsg += "\n\nAvailable objects: %s " % sortedProxies
> startMsg += "\n\nAvailable helpers: %s\n" % helpers.keys()
> exitMsg = "\nBye!\n"
>
> # Instanciate embedded ipython instance
> ipshell = InteractiveShellEmbed(config,
> banner1=startMsg,
> exit_msg=exitMsg)
>
> ipshell.set_custom_exc((Exception, ), pymadHandler)
> ipshell.set_custom_completer(proxy_matches)
> ipshell.set_custom_completer(python_function_parameters)
>
I’m not familiar enough with completion, I know that holoview register its own completer:
https://github.com/ioam/holoviews/blob/master/holoviews/ipython/magics.py#L697-L717 <https://github.com/ioam/holoviews/blob/master/holoviews/ipython/magics.py#L697-L717>
it might be of help.
> # Is there a better way to customize Completer?
> ipshell.Completer._default_arguments = \
> new.instancemethod(_default_arguments,
> ipshell.Completer,
> ipshell.Completer.__class__)
> ipshell.Completer.merge_completions = False
>
I’ll leave this one up to someone else also,
likely Thomas maybe ?
> # Is there a better way to customize prefilter?
> ipshell.prefilter = new.instancemethod(_prefilter_del,
> ipshell,
> ipshell.__class__)
>
> ipshell.set_hook("pre_run_code_hook", _pre_run_code_hook)
> ipshell.set_hook("pre_prompt_hook", _pre_prompt_hook)
> #ipshell.set_hook("shutdown_hook", _shutdown_hook) # use atexit module
>
Thanks,
--
M
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/ipython-dev/attachments/20151201/4c75b07a/attachment.html>
More information about the IPython-dev
mailing list