##// END OF EJS Templates
Merge pull request #3068 from takluyver/dont-load-doctest...
Merge pull request #3068 from takluyver/dont-load-doctest Don't monkeypatch doctest during IPython startup. This is no longer required since Python issue 8048 was fixed in 2.6.6, 2.7.1 and 3.2. It should buy us another small improvement in startup time, because we no longer need to load doctest on startup. That saves 29 modules on 2.7, and 8 on 3.2. Cold start time appears to drop by something like 10%, although there's quite a bit of noise in the measurements. I've left the module IPython.utils.doctestreload around for now, in case anyone is working with earlier versions of Python and needs to use it.

File last commit:

r9372:37f32253
r10138:09b43117 merge
Show More
factory.py
79 lines | 2.9 KiB | text/x-python | PythonLexer
"""Base config factories.
Authors:
* Min RK
"""
#-----------------------------------------------------------------------------
# Copyright (C) 2010-2011 The IPython Development Team
#
# 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
import os
import zmq
from zmq.eventloop.ioloop import IOLoop
from IPython.config.configurable import Configurable
from IPython.utils.localinterfaces import LOCALHOST
from IPython.utils.traitlets import Integer, Instance, Unicode
from IPython.parallel.util import select_random_ports
from IPython.kernel.zmq.session import Session, SessionFactory
#-----------------------------------------------------------------------------
# Classes
#-----------------------------------------------------------------------------
class RegistrationFactory(SessionFactory):
"""The Base Configurable for objects that involve registration."""
url = Unicode('', config=True,
help="""The 0MQ url used for registration. This sets transport, ip, and port
in one variable. For example: url='tcp://%s:12345' or
url='epgm://*:90210'"""
% LOCALHOST) # url takes precedence over ip,regport,transport
transport = Unicode('tcp', config=True,
help="""The 0MQ transport for communications. This will likely be
the default of 'tcp', but other values include 'ipc', 'epgm', 'inproc'.""")
ip = Unicode(LOCALHOST, config=True,
help="""The IP address for registration. This is generally either
'127.0.0.1' for loopback only or '*' for all interfaces.
[default: '%s']""" % LOCALHOST)
regport = Integer(config=True,
help="""The port on which the Hub listens for registration.""")
def _regport_default(self):
return select_random_ports(1)[0]
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])