##// END OF EJS Templates
Merge pull request #923 from minrk/configmagic...
Merge pull request #923 from minrk/configmagic New %config magic to interactively manipulate all configurables. This allows users to type `%config Foo.bar = 5` to control any IPython configurable. The Magic class keeps a list of configurables which will be updated by the change, so any objects that should be accessible to this magic should be appended to `shell.configurables`. I started with everything I saw as configurable in InteractiveShell. ## Usage Use just `%config` to see what classes are available, and `%config Class` to get the trait info for that class. When setting values via` %config Class.trait = value` It is evaluated with user_ns in globals, so you can do arbitrary things like: ```python In [4]: default = 'png' In [5]: %config InlineBackendConfig.figure_format = raw_input('what figure format should we use? ') or default ``` ## Note This magic reveals just how much we *don't* use traits/config properly. Almost everything is attached to the InteractiveShell object, and has an effect exactly once during an `init_foo()` method, rather than allowing config propagation via `_trait_changed()` methods. For instance, IPCompleter has an `omit__names` attribute, but the configurable is `InteractiveShell.readline_omit__names`, which is clearly wrong. We've done a good job with config in *new* code, but I think existing code needs a pretty hefty pass to get configurables attached to the right objects, and getting logic like `%colors` into `shell._colors_changed`. Closes #903

File last commit:

r4018:9950e71b
r5237:b7253627 merge
Show More
factory.py
77 lines | 2.8 KiB | text/x-python | PythonLexer
MinRK
update recently changed modules with Authors in docstring
r4018 """Base config factories.
Authors:
* Min RK
"""
MinRK
Refactor newparallel to use Config system...
r3604
#-----------------------------------------------------------------------------
MinRK
reorganize Factory classes to follow relocation of Session object
r4007 # Copyright (C) 2010-2011 The IPython Development Team
MinRK
Refactor newparallel to use Config system...
r3604 #
# Distributed under the terms of the BSD License. The full license is in
# the file COPYING, distributed as part of this software.
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
# Imports
#-----------------------------------------------------------------------------
import logging
MinRK
resort imports in a cleaner order
r3631 import os
MinRK
Refactor newparallel to use Config system...
r3604
MinRK
use Context.instance() for default in SessionFactory
r3998 import zmq
MinRK
Refactor newparallel to use Config system...
r3604 from zmq.eventloop.ioloop import IOLoop
from IPython.config.configurable import Configurable
MinRK
cleanup parallel traits...
r3988 from IPython.utils.traitlets import Int, Instance, Unicode
MinRK
Refactor newparallel to use Config system...
r3604
MinRK
organize IPython.parallel into subpackages
r3673 from IPython.parallel.util import select_random_ports
MinRK
reorganize Factory classes to follow relocation of Session object
r4007 from IPython.zmq.session import Session, SessionFactory
MinRK
Refactor newparallel to use Config system...
r3604
#-----------------------------------------------------------------------------
# Classes
#-----------------------------------------------------------------------------
class RegistrationFactory(SessionFactory):
"""The Base Configurable for objects that involve registration."""
MinRK
cleanup parallel traits...
r3988 url = Unicode('', config=True,
MinRK
all ipcluster scripts in some degree of working order with new config
r3985 help="""The 0MQ url used for registration. This sets transport, ip, and port
in one variable. For example: url='tcp://127.0.0.1:12345' or
url='epgm://*:90210'""") # url takes precedence over ip,regport,transport
MinRK
cleanup parallel traits...
r3988 transport = Unicode('tcp', config=True,
MinRK
all ipcluster scripts in some degree of working order with new config
r3985 help="""The 0MQ transport for communications. This will likely be
the default of 'tcp', but other values include 'ipc', 'epgm', 'inproc'.""")
MinRK
cleanup parallel traits...
r3988 ip = Unicode('127.0.0.1', config=True,
MinRK
all ipcluster scripts in some degree of working order with new config
r3985 help="""The IP address for registration. This is generally either
'127.0.0.1' for loopback only or '*' for all interfaces.
[default: '127.0.0.1']""")
regport = Int(config=True,
help="""The port on which the Hub listens for registration.""")
MinRK
Refactor newparallel to use Config system...
r3604 def _regport_default(self):
MinRK
persist connection data to disk as json
r3614 return select_random_ports(1)[0]
MinRK
Refactor newparallel to use Config system...
r3604
def __init__(self, **kwargs):
super(RegistrationFactory, self).__init__(**kwargs)
self._propagate_url()
self._rebuild_url()
self.on_trait_change(self._propagate_url, 'url')
self.on_trait_change(self._rebuild_url, 'ip')
self.on_trait_change(self._rebuild_url, 'transport')
self.on_trait_change(self._rebuild_url, 'regport')
def _rebuild_url(self):
self.url = "%s://%s:%i"%(self.transport, self.ip, self.regport)
def _propagate_url(self):
"""Ensure self.url contains full transport://interface:port"""
if self.url:
iface = self.url.split('://',1)
if len(iface) == 2:
self.transport,iface = iface
iface = iface.split(':')
self.ip = iface[0]
if iface[1]:
self.regport = int(iface[1])