##// END OF EJS Templates
Merge pull request #3450 from ipython/flatten...
Fernando Perez -
r11042:0c0c1a16 merge
parent child Browse files
Show More

The requested changes are too big and content was truncated. Show full diff

1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 160000
NO CONTENT: new file 160000
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: new file 100644
NO CONTENT: new file 100644
The requested commit or file is too big and content was truncated. Show full diff
@@ -1,16 +1,16 b''
1 MANIFEST
1 MANIFEST
2 build
2 build
3 dist
3 dist
4 _build
4 _build
5 docs/man/*.gz
5 docs/man/*.gz
6 docs/source/api/generated
6 docs/source/api/generated
7 docs/gh-pages
7 docs/gh-pages
8 IPython/frontend/html/notebook/static/mathjax
8 IPython/html/notebook/static/mathjax
9 *.py[co]
9 *.py[co]
10 __pycache__
10 __pycache__
11 build
11 build
12 *.egg-info
12 *.egg-info
13 *~
13 *~
14 *.bak
14 *.bak
15 .ipynb_checkpoints
15 .ipynb_checkpoints
16 .tox
16 .tox
@@ -1,3 +1,3 b''
1 [submodule "components"]
1 [submodule "components"]
2 path = IPython/frontend/html/notebook/static/components
2 path = IPython/html/static/components
3 url = https://github.com/ipython/ipython-components.git
3 url = https://github.com/ipython/ipython-components.git
@@ -1,86 +1,86 b''
1 # encoding: utf-8
1 # encoding: utf-8
2 """
2 """
3 IPython: tools for interactive and parallel computing in Python.
3 IPython: tools for interactive and parallel computing in Python.
4
4
5 http://ipython.org
5 http://ipython.org
6 """
6 """
7 #-----------------------------------------------------------------------------
7 #-----------------------------------------------------------------------------
8 # Copyright (c) 2008-2011, IPython Development Team.
8 # Copyright (c) 2008-2011, IPython Development Team.
9 # Copyright (c) 2001-2007, Fernando Perez <fernando.perez@colorado.edu>
9 # Copyright (c) 2001-2007, Fernando Perez <fernando.perez@colorado.edu>
10 # Copyright (c) 2001, Janko Hauser <jhauser@zscout.de>
10 # Copyright (c) 2001, Janko Hauser <jhauser@zscout.de>
11 # Copyright (c) 2001, Nathaniel Gray <n8gray@caltech.edu>
11 # Copyright (c) 2001, Nathaniel Gray <n8gray@caltech.edu>
12 #
12 #
13 # Distributed under the terms of the Modified BSD License.
13 # Distributed under the terms of the Modified BSD License.
14 #
14 #
15 # The full license is in the file COPYING.txt, distributed with this software.
15 # The full license is in the file COPYING.txt, distributed with this software.
16 #-----------------------------------------------------------------------------
16 #-----------------------------------------------------------------------------
17
17
18 #-----------------------------------------------------------------------------
18 #-----------------------------------------------------------------------------
19 # Imports
19 # Imports
20 #-----------------------------------------------------------------------------
20 #-----------------------------------------------------------------------------
21 from __future__ import absolute_import
21 from __future__ import absolute_import
22
22
23 import os
23 import os
24 import sys
24 import sys
25
25
26 #-----------------------------------------------------------------------------
26 #-----------------------------------------------------------------------------
27 # Setup everything
27 # Setup everything
28 #-----------------------------------------------------------------------------
28 #-----------------------------------------------------------------------------
29
29
30 # Don't forget to also update setup.py when this changes!
30 # Don't forget to also update setup.py when this changes!
31 if sys.version[0:3] < '2.6':
31 if sys.version[0:3] < '2.6':
32 raise ImportError('Python Version 2.6 or above is required for IPython.')
32 raise ImportError('Python Version 2.6 or above is required for IPython.')
33
33
34 # Make it easy to import extensions - they are always directly on pythonpath.
34 # Make it easy to import extensions - they are always directly on pythonpath.
35 # Therefore, non-IPython modules can be added to extensions directory.
35 # Therefore, non-IPython modules can be added to extensions directory.
36 # This should probably be in ipapp.py.
36 # This should probably be in ipapp.py.
37 sys.path.append(os.path.join(os.path.dirname(__file__), "extensions"))
37 sys.path.append(os.path.join(os.path.dirname(__file__), "extensions"))
38
38
39 #-----------------------------------------------------------------------------
39 #-----------------------------------------------------------------------------
40 # Setup the top level names
40 # Setup the top level names
41 #-----------------------------------------------------------------------------
41 #-----------------------------------------------------------------------------
42
42
43 from .config.loader import Config
43 from .config.loader import Config
44 from .core.getipython import get_ipython
44 from .core.getipython import get_ipython
45 from .core import release
45 from .core import release
46 from .core.application import Application
46 from .core.application import Application
47 from .frontend.terminal.embed import embed
47 from .terminal.embed import embed
48
48
49 from .core.error import TryNext
49 from .core.error import TryNext
50 from .core.interactiveshell import InteractiveShell
50 from .core.interactiveshell import InteractiveShell
51 from .testing import test
51 from .testing import test
52 from .utils.sysinfo import sys_info
52 from .utils.sysinfo import sys_info
53 from .utils.frame import extract_module_locals
53 from .utils.frame import extract_module_locals
54
54
55 # Release data
55 # Release data
56 __author__ = '%s <%s>' % (release.author, release.author_email)
56 __author__ = '%s <%s>' % (release.author, release.author_email)
57 __license__ = release.license
57 __license__ = release.license
58 __version__ = release.version
58 __version__ = release.version
59 version_info = release.version_info
59 version_info = release.version_info
60
60
61 def embed_kernel(module=None, local_ns=None, **kwargs):
61 def embed_kernel(module=None, local_ns=None, **kwargs):
62 """Embed and start an IPython kernel in a given scope.
62 """Embed and start an IPython kernel in a given scope.
63
63
64 Parameters
64 Parameters
65 ----------
65 ----------
66 module : ModuleType, optional
66 module : ModuleType, optional
67 The module to load into IPython globals (default: caller)
67 The module to load into IPython globals (default: caller)
68 local_ns : dict, optional
68 local_ns : dict, optional
69 The namespace to load into IPython user namespace (default: caller)
69 The namespace to load into IPython user namespace (default: caller)
70
70
71 kwargs : various, optional
71 kwargs : various, optional
72 Further keyword args are relayed to the IPKernelApp constructor,
72 Further keyword args are relayed to the IPKernelApp constructor,
73 allowing configuration of the Kernel. Will only have an effect
73 allowing configuration of the Kernel. Will only have an effect
74 on the first embed_kernel call for a given process.
74 on the first embed_kernel call for a given process.
75
75
76 """
76 """
77
77
78 (caller_module, caller_locals) = extract_module_locals(1)
78 (caller_module, caller_locals) = extract_module_locals(1)
79 if module is None:
79 if module is None:
80 module = caller_module
80 module = caller_module
81 if local_ns is None:
81 if local_ns is None:
82 local_ns = caller_locals
82 local_ns = caller_locals
83
83
84 # Only import .zmq when we really need it
84 # Only import .zmq when we really need it
85 from IPython.kernel.zmq.embed import embed_kernel as real_embed_kernel
85 from IPython.kernel.zmq.embed import embed_kernel as real_embed_kernel
86 real_embed_kernel(module=module, local_ns=local_ns, **kwargs)
86 real_embed_kernel(module=module, local_ns=local_ns, **kwargs)
@@ -1,14 +1,14 b''
1 # encoding: utf-8
1 # encoding: utf-8
2 """Terminal-based IPython entry point.
2 """Terminal-based IPython entry point.
3 """
3 """
4 #-----------------------------------------------------------------------------
4 #-----------------------------------------------------------------------------
5 # Copyright (c) 2012, IPython Development Team.
5 # Copyright (c) 2012, IPython Development Team.
6 #
6 #
7 # Distributed under the terms of the Modified BSD License.
7 # Distributed under the terms of the Modified BSD License.
8 #
8 #
9 # The full license is in the file COPYING.txt, distributed with this software.
9 # The full license is in the file COPYING.txt, distributed with this software.
10 #-----------------------------------------------------------------------------
10 #-----------------------------------------------------------------------------
11
11
12 from IPython.frontend.terminal.ipapp import launch_new_instance
12 from IPython.terminal.ipapp import launch_new_instance
13
13
14 launch_new_instance()
14 launch_new_instance()
@@ -1,391 +1,391 b''
1 """ A minimal application base mixin for all ZMQ based IPython frontends.
1 """ A minimal application base mixin for all ZMQ based IPython frontends.
2
2
3 This is not a complete console app, as subprocess will not be able to receive
3 This is not a complete console app, as subprocess will not be able to receive
4 input, there is no real readline support, among other limitations. This is a
4 input, there is no real readline support, among other limitations. This is a
5 refactoring of what used to be the IPython/frontend/qt/console/qtconsoleapp.py
5 refactoring of what used to be the IPython/qt/console/qtconsoleapp.py
6
6
7 Authors:
7 Authors:
8
8
9 * Evan Patterson
9 * Evan Patterson
10 * Min RK
10 * Min RK
11 * Erik Tollerud
11 * Erik Tollerud
12 * Fernando Perez
12 * Fernando Perez
13 * Bussonnier Matthias
13 * Bussonnier Matthias
14 * Thomas Kluyver
14 * Thomas Kluyver
15 * Paul Ivanov
15 * Paul Ivanov
16
16
17 """
17 """
18
18
19 #-----------------------------------------------------------------------------
19 #-----------------------------------------------------------------------------
20 # Imports
20 # Imports
21 #-----------------------------------------------------------------------------
21 #-----------------------------------------------------------------------------
22
22
23 # stdlib imports
23 # stdlib imports
24 import atexit
24 import atexit
25 import json
25 import json
26 import os
26 import os
27 import shutil
27 import shutil
28 import signal
28 import signal
29 import sys
29 import sys
30 import uuid
30 import uuid
31
31
32
32
33 # Local imports
33 # Local imports
34 from IPython.config.application import boolean_flag
34 from IPython.config.application import boolean_flag
35 from IPython.config.configurable import Configurable
35 from IPython.config.configurable import Configurable
36 from IPython.core.profiledir import ProfileDir
36 from IPython.core.profiledir import ProfileDir
37 from IPython.kernel.blocking import BlockingKernelClient
37 from IPython.kernel.blocking import BlockingKernelClient
38 from IPython.kernel import KernelManager
38 from IPython.kernel import KernelManager
39 from IPython.kernel import tunnel_to_kernel, find_connection_file, swallow_argv
39 from IPython.kernel import tunnel_to_kernel, find_connection_file, swallow_argv
40 from IPython.utils.path import filefind
40 from IPython.utils.path import filefind
41 from IPython.utils.py3compat import str_to_bytes
41 from IPython.utils.py3compat import str_to_bytes
42 from IPython.utils.traitlets import (
42 from IPython.utils.traitlets import (
43 Dict, List, Unicode, CUnicode, Int, CBool, Any, CaselessStrEnum
43 Dict, List, Unicode, CUnicode, Int, CBool, Any, CaselessStrEnum
44 )
44 )
45 from IPython.kernel.zmq.kernelapp import (
45 from IPython.kernel.zmq.kernelapp import (
46 kernel_flags,
46 kernel_flags,
47 kernel_aliases,
47 kernel_aliases,
48 IPKernelApp
48 IPKernelApp
49 )
49 )
50 from IPython.kernel.zmq.session import Session, default_secure
50 from IPython.kernel.zmq.session import Session, default_secure
51 from IPython.kernel.zmq.zmqshell import ZMQInteractiveShell
51 from IPython.kernel.zmq.zmqshell import ZMQInteractiveShell
52
52
53 #-----------------------------------------------------------------------------
53 #-----------------------------------------------------------------------------
54 # Network Constants
54 # Network Constants
55 #-----------------------------------------------------------------------------
55 #-----------------------------------------------------------------------------
56
56
57 from IPython.utils.localinterfaces import LOCALHOST, LOCAL_IPS
57 from IPython.utils.localinterfaces import LOCALHOST, LOCAL_IPS
58
58
59 #-----------------------------------------------------------------------------
59 #-----------------------------------------------------------------------------
60 # Globals
60 # Globals
61 #-----------------------------------------------------------------------------
61 #-----------------------------------------------------------------------------
62
62
63
63
64 #-----------------------------------------------------------------------------
64 #-----------------------------------------------------------------------------
65 # Aliases and Flags
65 # Aliases and Flags
66 #-----------------------------------------------------------------------------
66 #-----------------------------------------------------------------------------
67
67
68 flags = dict(kernel_flags)
68 flags = dict(kernel_flags)
69
69
70 # the flags that are specific to the frontend
70 # the flags that are specific to the frontend
71 # these must be scrubbed before being passed to the kernel,
71 # these must be scrubbed before being passed to the kernel,
72 # or it will raise an error on unrecognized flags
72 # or it will raise an error on unrecognized flags
73 app_flags = {
73 app_flags = {
74 'existing' : ({'IPythonConsoleApp' : {'existing' : 'kernel*.json'}},
74 'existing' : ({'IPythonConsoleApp' : {'existing' : 'kernel*.json'}},
75 "Connect to an existing kernel. If no argument specified, guess most recent"),
75 "Connect to an existing kernel. If no argument specified, guess most recent"),
76 }
76 }
77 app_flags.update(boolean_flag(
77 app_flags.update(boolean_flag(
78 'confirm-exit', 'IPythonConsoleApp.confirm_exit',
78 'confirm-exit', 'IPythonConsoleApp.confirm_exit',
79 """Set to display confirmation dialog on exit. You can always use 'exit' or 'quit',
79 """Set to display confirmation dialog on exit. You can always use 'exit' or 'quit',
80 to force a direct exit without any confirmation.
80 to force a direct exit without any confirmation.
81 """,
81 """,
82 """Don't prompt the user when exiting. This will terminate the kernel
82 """Don't prompt the user when exiting. This will terminate the kernel
83 if it is owned by the frontend, and leave it alive if it is external.
83 if it is owned by the frontend, and leave it alive if it is external.
84 """
84 """
85 ))
85 ))
86 flags.update(app_flags)
86 flags.update(app_flags)
87
87
88 aliases = dict(kernel_aliases)
88 aliases = dict(kernel_aliases)
89
89
90 # also scrub aliases from the frontend
90 # also scrub aliases from the frontend
91 app_aliases = dict(
91 app_aliases = dict(
92 ip = 'KernelManager.ip',
92 ip = 'KernelManager.ip',
93 transport = 'KernelManager.transport',
93 transport = 'KernelManager.transport',
94 hb = 'IPythonConsoleApp.hb_port',
94 hb = 'IPythonConsoleApp.hb_port',
95 shell = 'IPythonConsoleApp.shell_port',
95 shell = 'IPythonConsoleApp.shell_port',
96 iopub = 'IPythonConsoleApp.iopub_port',
96 iopub = 'IPythonConsoleApp.iopub_port',
97 stdin = 'IPythonConsoleApp.stdin_port',
97 stdin = 'IPythonConsoleApp.stdin_port',
98 existing = 'IPythonConsoleApp.existing',
98 existing = 'IPythonConsoleApp.existing',
99 f = 'IPythonConsoleApp.connection_file',
99 f = 'IPythonConsoleApp.connection_file',
100
100
101
101
102 ssh = 'IPythonConsoleApp.sshserver',
102 ssh = 'IPythonConsoleApp.sshserver',
103 )
103 )
104 aliases.update(app_aliases)
104 aliases.update(app_aliases)
105
105
106 #-----------------------------------------------------------------------------
106 #-----------------------------------------------------------------------------
107 # Classes
107 # Classes
108 #-----------------------------------------------------------------------------
108 #-----------------------------------------------------------------------------
109
109
110 #-----------------------------------------------------------------------------
110 #-----------------------------------------------------------------------------
111 # IPythonConsole
111 # IPythonConsole
112 #-----------------------------------------------------------------------------
112 #-----------------------------------------------------------------------------
113
113
114 classes = [IPKernelApp, ZMQInteractiveShell, KernelManager, ProfileDir, Session]
114 classes = [IPKernelApp, ZMQInteractiveShell, KernelManager, ProfileDir, Session]
115
115
116 try:
116 try:
117 from IPython.kernel.zmq.pylab.backend_inline import InlineBackend
117 from IPython.kernel.zmq.pylab.backend_inline import InlineBackend
118 except ImportError:
118 except ImportError:
119 pass
119 pass
120 else:
120 else:
121 classes.append(InlineBackend)
121 classes.append(InlineBackend)
122
122
123 class IPythonConsoleApp(Configurable):
123 class IPythonConsoleApp(Configurable):
124 name = 'ipython-console-mixin'
124 name = 'ipython-console-mixin'
125 default_config_file_name='ipython_config.py'
125 default_config_file_name='ipython_config.py'
126
126
127 description = """
127 description = """
128 The IPython Mixin Console.
128 The IPython Mixin Console.
129
129
130 This class contains the common portions of console client (QtConsole,
130 This class contains the common portions of console client (QtConsole,
131 ZMQ-based terminal console, etc). It is not a full console, in that
131 ZMQ-based terminal console, etc). It is not a full console, in that
132 launched terminal subprocesses will not be able to accept input.
132 launched terminal subprocesses will not be able to accept input.
133
133
134 The Console using this mixing supports various extra features beyond
134 The Console using this mixing supports various extra features beyond
135 the single-process Terminal IPython shell, such as connecting to
135 the single-process Terminal IPython shell, such as connecting to
136 existing kernel, via:
136 existing kernel, via:
137
137
138 ipython <appname> --existing
138 ipython <appname> --existing
139
139
140 as well as tunnel via SSH
140 as well as tunnel via SSH
141
141
142 """
142 """
143
143
144 classes = classes
144 classes = classes
145 flags = Dict(flags)
145 flags = Dict(flags)
146 aliases = Dict(aliases)
146 aliases = Dict(aliases)
147 kernel_manager_class = KernelManager
147 kernel_manager_class = KernelManager
148 kernel_client_class = BlockingKernelClient
148 kernel_client_class = BlockingKernelClient
149
149
150 kernel_argv = List(Unicode)
150 kernel_argv = List(Unicode)
151 # frontend flags&aliases to be stripped when building kernel_argv
151 # frontend flags&aliases to be stripped when building kernel_argv
152 frontend_flags = Any(app_flags)
152 frontend_flags = Any(app_flags)
153 frontend_aliases = Any(app_aliases)
153 frontend_aliases = Any(app_aliases)
154
154
155 # create requested profiles by default, if they don't exist:
155 # create requested profiles by default, if they don't exist:
156 auto_create = CBool(True)
156 auto_create = CBool(True)
157 # connection info:
157 # connection info:
158
158
159 sshserver = Unicode('', config=True,
159 sshserver = Unicode('', config=True,
160 help="""The SSH server to use to connect to the kernel.""")
160 help="""The SSH server to use to connect to the kernel.""")
161 sshkey = Unicode('', config=True,
161 sshkey = Unicode('', config=True,
162 help="""Path to the ssh key to use for logging in to the ssh server.""")
162 help="""Path to the ssh key to use for logging in to the ssh server.""")
163
163
164 hb_port = Int(0, config=True,
164 hb_port = Int(0, config=True,
165 help="set the heartbeat port [default: random]")
165 help="set the heartbeat port [default: random]")
166 shell_port = Int(0, config=True,
166 shell_port = Int(0, config=True,
167 help="set the shell (ROUTER) port [default: random]")
167 help="set the shell (ROUTER) port [default: random]")
168 iopub_port = Int(0, config=True,
168 iopub_port = Int(0, config=True,
169 help="set the iopub (PUB) port [default: random]")
169 help="set the iopub (PUB) port [default: random]")
170 stdin_port = Int(0, config=True,
170 stdin_port = Int(0, config=True,
171 help="set the stdin (DEALER) port [default: random]")
171 help="set the stdin (DEALER) port [default: random]")
172 connection_file = Unicode('', config=True,
172 connection_file = Unicode('', config=True,
173 help="""JSON file in which to store connection info [default: kernel-<pid>.json]
173 help="""JSON file in which to store connection info [default: kernel-<pid>.json]
174
174
175 This file will contain the IP, ports, and authentication key needed to connect
175 This file will contain the IP, ports, and authentication key needed to connect
176 clients to this kernel. By default, this file will be created in the security-dir
176 clients to this kernel. By default, this file will be created in the security-dir
177 of the current profile, but can be specified by absolute path.
177 of the current profile, but can be specified by absolute path.
178 """)
178 """)
179 def _connection_file_default(self):
179 def _connection_file_default(self):
180 return 'kernel-%i.json' % os.getpid()
180 return 'kernel-%i.json' % os.getpid()
181
181
182 existing = CUnicode('', config=True,
182 existing = CUnicode('', config=True,
183 help="""Connect to an already running kernel""")
183 help="""Connect to an already running kernel""")
184
184
185 confirm_exit = CBool(True, config=True,
185 confirm_exit = CBool(True, config=True,
186 help="""
186 help="""
187 Set to display confirmation dialog on exit. You can always use 'exit' or 'quit',
187 Set to display confirmation dialog on exit. You can always use 'exit' or 'quit',
188 to force a direct exit without any confirmation.""",
188 to force a direct exit without any confirmation.""",
189 )
189 )
190
190
191
191
192 def build_kernel_argv(self, argv=None):
192 def build_kernel_argv(self, argv=None):
193 """build argv to be passed to kernel subprocess"""
193 """build argv to be passed to kernel subprocess"""
194 if argv is None:
194 if argv is None:
195 argv = sys.argv[1:]
195 argv = sys.argv[1:]
196 self.kernel_argv = swallow_argv(argv, self.frontend_aliases, self.frontend_flags)
196 self.kernel_argv = swallow_argv(argv, self.frontend_aliases, self.frontend_flags)
197 # kernel should inherit default config file from frontend
197 # kernel should inherit default config file from frontend
198 self.kernel_argv.append("--IPKernelApp.parent_appname='%s'" % self.name)
198 self.kernel_argv.append("--IPKernelApp.parent_appname='%s'" % self.name)
199
199
200 def init_connection_file(self):
200 def init_connection_file(self):
201 """find the connection file, and load the info if found.
201 """find the connection file, and load the info if found.
202
202
203 The current working directory and the current profile's security
203 The current working directory and the current profile's security
204 directory will be searched for the file if it is not given by
204 directory will be searched for the file if it is not given by
205 absolute path.
205 absolute path.
206
206
207 When attempting to connect to an existing kernel and the `--existing`
207 When attempting to connect to an existing kernel and the `--existing`
208 argument does not match an existing file, it will be interpreted as a
208 argument does not match an existing file, it will be interpreted as a
209 fileglob, and the matching file in the current profile's security dir
209 fileglob, and the matching file in the current profile's security dir
210 with the latest access time will be used.
210 with the latest access time will be used.
211
211
212 After this method is called, self.connection_file contains the *full path*
212 After this method is called, self.connection_file contains the *full path*
213 to the connection file, never just its name.
213 to the connection file, never just its name.
214 """
214 """
215 if self.existing:
215 if self.existing:
216 try:
216 try:
217 cf = find_connection_file(self.existing)
217 cf = find_connection_file(self.existing)
218 except Exception:
218 except Exception:
219 self.log.critical("Could not find existing kernel connection file %s", self.existing)
219 self.log.critical("Could not find existing kernel connection file %s", self.existing)
220 self.exit(1)
220 self.exit(1)
221 self.log.info("Connecting to existing kernel: %s" % cf)
221 self.log.info("Connecting to existing kernel: %s" % cf)
222 self.connection_file = cf
222 self.connection_file = cf
223 else:
223 else:
224 # not existing, check if we are going to write the file
224 # not existing, check if we are going to write the file
225 # and ensure that self.connection_file is a full path, not just the shortname
225 # and ensure that self.connection_file is a full path, not just the shortname
226 try:
226 try:
227 cf = find_connection_file(self.connection_file)
227 cf = find_connection_file(self.connection_file)
228 except Exception:
228 except Exception:
229 # file might not exist
229 # file might not exist
230 if self.connection_file == os.path.basename(self.connection_file):
230 if self.connection_file == os.path.basename(self.connection_file):
231 # just shortname, put it in security dir
231 # just shortname, put it in security dir
232 cf = os.path.join(self.profile_dir.security_dir, self.connection_file)
232 cf = os.path.join(self.profile_dir.security_dir, self.connection_file)
233 else:
233 else:
234 cf = self.connection_file
234 cf = self.connection_file
235 self.connection_file = cf
235 self.connection_file = cf
236
236
237 # should load_connection_file only be used for existing?
237 # should load_connection_file only be used for existing?
238 # as it is now, this allows reusing ports if an existing
238 # as it is now, this allows reusing ports if an existing
239 # file is requested
239 # file is requested
240 try:
240 try:
241 self.load_connection_file()
241 self.load_connection_file()
242 except Exception:
242 except Exception:
243 self.log.error("Failed to load connection file: %r", self.connection_file, exc_info=True)
243 self.log.error("Failed to load connection file: %r", self.connection_file, exc_info=True)
244 self.exit(1)
244 self.exit(1)
245
245
246 def load_connection_file(self):
246 def load_connection_file(self):
247 """load ip/port/hmac config from JSON connection file"""
247 """load ip/port/hmac config from JSON connection file"""
248 # this is identical to IPKernelApp.load_connection_file
248 # this is identical to IPKernelApp.load_connection_file
249 # perhaps it can be centralized somewhere?
249 # perhaps it can be centralized somewhere?
250 try:
250 try:
251 fname = filefind(self.connection_file, ['.', self.profile_dir.security_dir])
251 fname = filefind(self.connection_file, ['.', self.profile_dir.security_dir])
252 except IOError:
252 except IOError:
253 self.log.debug("Connection File not found: %s", self.connection_file)
253 self.log.debug("Connection File not found: %s", self.connection_file)
254 return
254 return
255 self.log.debug(u"Loading connection file %s", fname)
255 self.log.debug(u"Loading connection file %s", fname)
256 with open(fname) as f:
256 with open(fname) as f:
257 cfg = json.load(f)
257 cfg = json.load(f)
258
258
259 self.config.KernelManager.transport = cfg.get('transport', 'tcp')
259 self.config.KernelManager.transport = cfg.get('transport', 'tcp')
260 self.config.KernelManager.ip = cfg.get('ip', LOCALHOST)
260 self.config.KernelManager.ip = cfg.get('ip', LOCALHOST)
261
261
262 for channel in ('hb', 'shell', 'iopub', 'stdin'):
262 for channel in ('hb', 'shell', 'iopub', 'stdin'):
263 name = channel + '_port'
263 name = channel + '_port'
264 if getattr(self, name) == 0 and name in cfg:
264 if getattr(self, name) == 0 and name in cfg:
265 # not overridden by config or cl_args
265 # not overridden by config or cl_args
266 setattr(self, name, cfg[name])
266 setattr(self, name, cfg[name])
267 if 'key' in cfg:
267 if 'key' in cfg:
268 self.config.Session.key = str_to_bytes(cfg['key'])
268 self.config.Session.key = str_to_bytes(cfg['key'])
269
269
270 def init_ssh(self):
270 def init_ssh(self):
271 """set up ssh tunnels, if needed."""
271 """set up ssh tunnels, if needed."""
272 if not self.existing or (not self.sshserver and not self.sshkey):
272 if not self.existing or (not self.sshserver and not self.sshkey):
273 return
273 return
274
274
275 self.load_connection_file()
275 self.load_connection_file()
276
276
277 transport = self.config.KernelManager.transport
277 transport = self.config.KernelManager.transport
278 ip = self.config.KernelManager.ip
278 ip = self.config.KernelManager.ip
279
279
280 if transport != 'tcp':
280 if transport != 'tcp':
281 self.log.error("Can only use ssh tunnels with TCP sockets, not %s", transport)
281 self.log.error("Can only use ssh tunnels with TCP sockets, not %s", transport)
282 sys.exit(-1)
282 sys.exit(-1)
283
283
284 if self.sshkey and not self.sshserver:
284 if self.sshkey and not self.sshserver:
285 # specifying just the key implies that we are connecting directly
285 # specifying just the key implies that we are connecting directly
286 self.sshserver = ip
286 self.sshserver = ip
287 ip = LOCALHOST
287 ip = LOCALHOST
288
288
289 # build connection dict for tunnels:
289 # build connection dict for tunnels:
290 info = dict(ip=ip,
290 info = dict(ip=ip,
291 shell_port=self.shell_port,
291 shell_port=self.shell_port,
292 iopub_port=self.iopub_port,
292 iopub_port=self.iopub_port,
293 stdin_port=self.stdin_port,
293 stdin_port=self.stdin_port,
294 hb_port=self.hb_port
294 hb_port=self.hb_port
295 )
295 )
296
296
297 self.log.info("Forwarding connections to %s via %s"%(ip, self.sshserver))
297 self.log.info("Forwarding connections to %s via %s"%(ip, self.sshserver))
298
298
299 # tunnels return a new set of ports, which will be on localhost:
299 # tunnels return a new set of ports, which will be on localhost:
300 self.config.KernelManager.ip = LOCALHOST
300 self.config.KernelManager.ip = LOCALHOST
301 try:
301 try:
302 newports = tunnel_to_kernel(info, self.sshserver, self.sshkey)
302 newports = tunnel_to_kernel(info, self.sshserver, self.sshkey)
303 except:
303 except:
304 # even catch KeyboardInterrupt
304 # even catch KeyboardInterrupt
305 self.log.error("Could not setup tunnels", exc_info=True)
305 self.log.error("Could not setup tunnels", exc_info=True)
306 self.exit(1)
306 self.exit(1)
307
307
308 self.shell_port, self.iopub_port, self.stdin_port, self.hb_port = newports
308 self.shell_port, self.iopub_port, self.stdin_port, self.hb_port = newports
309
309
310 cf = self.connection_file
310 cf = self.connection_file
311 base,ext = os.path.splitext(cf)
311 base,ext = os.path.splitext(cf)
312 base = os.path.basename(base)
312 base = os.path.basename(base)
313 self.connection_file = os.path.basename(base)+'-ssh'+ext
313 self.connection_file = os.path.basename(base)+'-ssh'+ext
314 self.log.critical("To connect another client via this tunnel, use:")
314 self.log.critical("To connect another client via this tunnel, use:")
315 self.log.critical("--existing %s" % self.connection_file)
315 self.log.critical("--existing %s" % self.connection_file)
316
316
317 def _new_connection_file(self):
317 def _new_connection_file(self):
318 cf = ''
318 cf = ''
319 while not cf:
319 while not cf:
320 # we don't need a 128b id to distinguish kernels, use more readable
320 # we don't need a 128b id to distinguish kernels, use more readable
321 # 48b node segment (12 hex chars). Users running more than 32k simultaneous
321 # 48b node segment (12 hex chars). Users running more than 32k simultaneous
322 # kernels can subclass.
322 # kernels can subclass.
323 ident = str(uuid.uuid4()).split('-')[-1]
323 ident = str(uuid.uuid4()).split('-')[-1]
324 cf = os.path.join(self.profile_dir.security_dir, 'kernel-%s.json' % ident)
324 cf = os.path.join(self.profile_dir.security_dir, 'kernel-%s.json' % ident)
325 # only keep if it's actually new. Protect against unlikely collision
325 # only keep if it's actually new. Protect against unlikely collision
326 # in 48b random search space
326 # in 48b random search space
327 cf = cf if not os.path.exists(cf) else ''
327 cf = cf if not os.path.exists(cf) else ''
328 return cf
328 return cf
329
329
330 def init_kernel_manager(self):
330 def init_kernel_manager(self):
331 # Don't let Qt or ZMQ swallow KeyboardInterupts.
331 # Don't let Qt or ZMQ swallow KeyboardInterupts.
332 if self.existing:
332 if self.existing:
333 self.kernel_manager = None
333 self.kernel_manager = None
334 return
334 return
335 signal.signal(signal.SIGINT, signal.SIG_DFL)
335 signal.signal(signal.SIGINT, signal.SIG_DFL)
336
336
337 # Create a KernelManager and start a kernel.
337 # Create a KernelManager and start a kernel.
338 self.kernel_manager = self.kernel_manager_class(
338 self.kernel_manager = self.kernel_manager_class(
339 shell_port=self.shell_port,
339 shell_port=self.shell_port,
340 iopub_port=self.iopub_port,
340 iopub_port=self.iopub_port,
341 stdin_port=self.stdin_port,
341 stdin_port=self.stdin_port,
342 hb_port=self.hb_port,
342 hb_port=self.hb_port,
343 connection_file=self.connection_file,
343 connection_file=self.connection_file,
344 config=self.config,
344 config=self.config,
345 )
345 )
346 self.kernel_manager.client_factory = self.kernel_client_class
346 self.kernel_manager.client_factory = self.kernel_client_class
347 self.kernel_manager.start_kernel(extra_arguments=self.kernel_argv)
347 self.kernel_manager.start_kernel(extra_arguments=self.kernel_argv)
348 atexit.register(self.kernel_manager.cleanup_ipc_files)
348 atexit.register(self.kernel_manager.cleanup_ipc_files)
349
349
350 if self.sshserver:
350 if self.sshserver:
351 # ssh, write new connection file
351 # ssh, write new connection file
352 self.kernel_manager.write_connection_file()
352 self.kernel_manager.write_connection_file()
353
353
354 # in case KM defaults / ssh writing changes things:
354 # in case KM defaults / ssh writing changes things:
355 km = self.kernel_manager
355 km = self.kernel_manager
356 self.shell_port=km.shell_port
356 self.shell_port=km.shell_port
357 self.iopub_port=km.iopub_port
357 self.iopub_port=km.iopub_port
358 self.stdin_port=km.stdin_port
358 self.stdin_port=km.stdin_port
359 self.hb_port=km.hb_port
359 self.hb_port=km.hb_port
360 self.connection_file = km.connection_file
360 self.connection_file = km.connection_file
361
361
362 atexit.register(self.kernel_manager.cleanup_connection_file)
362 atexit.register(self.kernel_manager.cleanup_connection_file)
363
363
364 def init_kernel_client(self):
364 def init_kernel_client(self):
365 if self.kernel_manager is not None:
365 if self.kernel_manager is not None:
366 self.kernel_client = self.kernel_manager.client()
366 self.kernel_client = self.kernel_manager.client()
367 else:
367 else:
368 self.kernel_client = self.kernel_client_class(
368 self.kernel_client = self.kernel_client_class(
369 shell_port=self.shell_port,
369 shell_port=self.shell_port,
370 iopub_port=self.iopub_port,
370 iopub_port=self.iopub_port,
371 stdin_port=self.stdin_port,
371 stdin_port=self.stdin_port,
372 hb_port=self.hb_port,
372 hb_port=self.hb_port,
373 connection_file=self.connection_file,
373 connection_file=self.connection_file,
374 config=self.config,
374 config=self.config,
375 )
375 )
376
376
377 self.kernel_client.start_channels()
377 self.kernel_client.start_channels()
378
378
379
379
380
380
381 def initialize(self, argv=None):
381 def initialize(self, argv=None):
382 """
382 """
383 Classes which mix this class in should call:
383 Classes which mix this class in should call:
384 IPythonConsoleApp.initialize(self,argv)
384 IPythonConsoleApp.initialize(self,argv)
385 """
385 """
386 self.init_connection_file()
386 self.init_connection_file()
387 default_secure(self.config)
387 default_secure(self.config)
388 self.init_ssh()
388 self.init_ssh()
389 self.init_kernel_manager()
389 self.init_kernel_manager()
390 self.init_kernel_client()
390 self.init_kernel_client()
391
391
@@ -1,306 +1,306 b''
1 # encoding: utf-8
1 # encoding: utf-8
2 """
2 """
3 An application for managing IPython profiles.
3 An application for managing IPython profiles.
4
4
5 To be invoked as the `ipython profile` subcommand.
5 To be invoked as the `ipython profile` subcommand.
6
6
7 Authors:
7 Authors:
8
8
9 * Min RK
9 * Min RK
10
10
11 """
11 """
12
12
13 #-----------------------------------------------------------------------------
13 #-----------------------------------------------------------------------------
14 # Copyright (C) 2008-2011 The IPython Development Team
14 # Copyright (C) 2008-2011 The IPython Development Team
15 #
15 #
16 # Distributed under the terms of the BSD License. The full license is in
16 # Distributed under the terms of the BSD License. The full license is in
17 # the file COPYING, distributed as part of this software.
17 # the file COPYING, distributed as part of this software.
18 #-----------------------------------------------------------------------------
18 #-----------------------------------------------------------------------------
19
19
20 #-----------------------------------------------------------------------------
20 #-----------------------------------------------------------------------------
21 # Imports
21 # Imports
22 #-----------------------------------------------------------------------------
22 #-----------------------------------------------------------------------------
23
23
24 import os
24 import os
25
25
26 from IPython.config.application import Application
26 from IPython.config.application import Application
27 from IPython.core.application import (
27 from IPython.core.application import (
28 BaseIPythonApplication, base_flags
28 BaseIPythonApplication, base_flags
29 )
29 )
30 from IPython.core.profiledir import ProfileDir
30 from IPython.core.profiledir import ProfileDir
31 from IPython.utils.path import get_ipython_dir, get_ipython_package_dir
31 from IPython.utils.path import get_ipython_dir, get_ipython_package_dir
32 from IPython.utils.traitlets import Unicode, Bool, Dict
32 from IPython.utils.traitlets import Unicode, Bool, Dict
33
33
34 #-----------------------------------------------------------------------------
34 #-----------------------------------------------------------------------------
35 # Constants
35 # Constants
36 #-----------------------------------------------------------------------------
36 #-----------------------------------------------------------------------------
37
37
38 create_help = """Create an IPython profile by name
38 create_help = """Create an IPython profile by name
39
39
40 Create an ipython profile directory by its name or
40 Create an ipython profile directory by its name or
41 profile directory path. Profile directories contain
41 profile directory path. Profile directories contain
42 configuration, log and security related files and are named
42 configuration, log and security related files and are named
43 using the convention 'profile_<name>'. By default they are
43 using the convention 'profile_<name>'. By default they are
44 located in your ipython directory. Once created, you will
44 located in your ipython directory. Once created, you will
45 can edit the configuration files in the profile
45 can edit the configuration files in the profile
46 directory to configure IPython. Most users will create a
46 directory to configure IPython. Most users will create a
47 profile directory by name,
47 profile directory by name,
48 `ipython profile create myprofile`, which will put the directory
48 `ipython profile create myprofile`, which will put the directory
49 in `<ipython_dir>/profile_myprofile`.
49 in `<ipython_dir>/profile_myprofile`.
50 """
50 """
51 list_help = """List available IPython profiles
51 list_help = """List available IPython profiles
52
52
53 List all available profiles, by profile location, that can
53 List all available profiles, by profile location, that can
54 be found in the current working directly or in the ipython
54 be found in the current working directly or in the ipython
55 directory. Profile directories are named using the convention
55 directory. Profile directories are named using the convention
56 'profile_<profile>'.
56 'profile_<profile>'.
57 """
57 """
58 profile_help = """Manage IPython profiles
58 profile_help = """Manage IPython profiles
59
59
60 Profile directories contain
60 Profile directories contain
61 configuration, log and security related files and are named
61 configuration, log and security related files and are named
62 using the convention 'profile_<name>'. By default they are
62 using the convention 'profile_<name>'. By default they are
63 located in your ipython directory. You can create profiles
63 located in your ipython directory. You can create profiles
64 with `ipython profile create <name>`, or see the profiles you
64 with `ipython profile create <name>`, or see the profiles you
65 already have with `ipython profile list`
65 already have with `ipython profile list`
66
66
67 To get started configuring IPython, simply do:
67 To get started configuring IPython, simply do:
68
68
69 $> ipython profile create
69 $> ipython profile create
70
70
71 and IPython will create the default profile in <ipython_dir>/profile_default,
71 and IPython will create the default profile in <ipython_dir>/profile_default,
72 where you can edit ipython_config.py to start configuring IPython.
72 where you can edit ipython_config.py to start configuring IPython.
73
73
74 """
74 """
75
75
76 _list_examples = "ipython profile list # list all profiles"
76 _list_examples = "ipython profile list # list all profiles"
77
77
78 _create_examples = """
78 _create_examples = """
79 ipython profile create foo # create profile foo w/ default config files
79 ipython profile create foo # create profile foo w/ default config files
80 ipython profile create foo --reset # restage default config files over current
80 ipython profile create foo --reset # restage default config files over current
81 ipython profile create foo --parallel # also stage parallel config files
81 ipython profile create foo --parallel # also stage parallel config files
82 """
82 """
83
83
84 _main_examples = """
84 _main_examples = """
85 ipython profile create -h # show the help string for the create subcommand
85 ipython profile create -h # show the help string for the create subcommand
86 ipython profile list -h # show the help string for the list subcommand
86 ipython profile list -h # show the help string for the list subcommand
87
87
88 ipython locate profile foo # print the path to the directory for profile 'foo'
88 ipython locate profile foo # print the path to the directory for profile 'foo'
89 """
89 """
90
90
91 #-----------------------------------------------------------------------------
91 #-----------------------------------------------------------------------------
92 # Profile Application Class (for `ipython profile` subcommand)
92 # Profile Application Class (for `ipython profile` subcommand)
93 #-----------------------------------------------------------------------------
93 #-----------------------------------------------------------------------------
94
94
95
95
96 def list_profiles_in(path):
96 def list_profiles_in(path):
97 """list profiles in a given root directory"""
97 """list profiles in a given root directory"""
98 files = os.listdir(path)
98 files = os.listdir(path)
99 profiles = []
99 profiles = []
100 for f in files:
100 for f in files:
101 full_path = os.path.join(path, f)
101 full_path = os.path.join(path, f)
102 if os.path.isdir(full_path) and f.startswith('profile_'):
102 if os.path.isdir(full_path) and f.startswith('profile_'):
103 profiles.append(f.split('_',1)[-1])
103 profiles.append(f.split('_',1)[-1])
104 return profiles
104 return profiles
105
105
106
106
107 def list_bundled_profiles():
107 def list_bundled_profiles():
108 """list profiles that are bundled with IPython."""
108 """list profiles that are bundled with IPython."""
109 path = os.path.join(get_ipython_package_dir(), u'config', u'profile')
109 path = os.path.join(get_ipython_package_dir(), u'config', u'profile')
110 files = os.listdir(path)
110 files = os.listdir(path)
111 profiles = []
111 profiles = []
112 for profile in files:
112 for profile in files:
113 full_path = os.path.join(path, profile)
113 full_path = os.path.join(path, profile)
114 if os.path.isdir(full_path) and profile != "__pycache__":
114 if os.path.isdir(full_path) and profile != "__pycache__":
115 profiles.append(profile)
115 profiles.append(profile)
116 return profiles
116 return profiles
117
117
118
118
119 class ProfileLocate(BaseIPythonApplication):
119 class ProfileLocate(BaseIPythonApplication):
120 description = """print the path an IPython profile dir"""
120 description = """print the path an IPython profile dir"""
121
121
122 def parse_command_line(self, argv=None):
122 def parse_command_line(self, argv=None):
123 super(ProfileLocate, self).parse_command_line(argv)
123 super(ProfileLocate, self).parse_command_line(argv)
124 if self.extra_args:
124 if self.extra_args:
125 self.profile = self.extra_args[0]
125 self.profile = self.extra_args[0]
126
126
127 def start(self):
127 def start(self):
128 print self.profile_dir.location
128 print self.profile_dir.location
129
129
130
130
131 class ProfileList(Application):
131 class ProfileList(Application):
132 name = u'ipython-profile'
132 name = u'ipython-profile'
133 description = list_help
133 description = list_help
134 examples = _list_examples
134 examples = _list_examples
135
135
136 aliases = Dict({
136 aliases = Dict({
137 'ipython-dir' : 'ProfileList.ipython_dir',
137 'ipython-dir' : 'ProfileList.ipython_dir',
138 'log-level' : 'Application.log_level',
138 'log-level' : 'Application.log_level',
139 })
139 })
140 flags = Dict(dict(
140 flags = Dict(dict(
141 debug = ({'Application' : {'log_level' : 0}},
141 debug = ({'Application' : {'log_level' : 0}},
142 "Set Application.log_level to 0, maximizing log output."
142 "Set Application.log_level to 0, maximizing log output."
143 )
143 )
144 ))
144 ))
145
145
146 ipython_dir = Unicode(get_ipython_dir(), config=True,
146 ipython_dir = Unicode(get_ipython_dir(), config=True,
147 help="""
147 help="""
148 The name of the IPython directory. This directory is used for logging
148 The name of the IPython directory. This directory is used for logging
149 configuration (through profiles), history storage, etc. The default
149 configuration (through profiles), history storage, etc. The default
150 is usually $HOME/.ipython. This options can also be specified through
150 is usually $HOME/.ipython. This options can also be specified through
151 the environment variable IPYTHONDIR.
151 the environment variable IPYTHONDIR.
152 """
152 """
153 )
153 )
154
154
155
155
156 def _print_profiles(self, profiles):
156 def _print_profiles(self, profiles):
157 """print list of profiles, indented."""
157 """print list of profiles, indented."""
158 for profile in profiles:
158 for profile in profiles:
159 print ' %s' % profile
159 print ' %s' % profile
160
160
161 def list_profile_dirs(self):
161 def list_profile_dirs(self):
162 profiles = list_bundled_profiles()
162 profiles = list_bundled_profiles()
163 if profiles:
163 if profiles:
164 print
164 print
165 print "Available profiles in IPython:"
165 print "Available profiles in IPython:"
166 self._print_profiles(profiles)
166 self._print_profiles(profiles)
167 print
167 print
168 print " The first request for a bundled profile will copy it"
168 print " The first request for a bundled profile will copy it"
169 print " into your IPython directory (%s)," % self.ipython_dir
169 print " into your IPython directory (%s)," % self.ipython_dir
170 print " where you can customize it."
170 print " where you can customize it."
171
171
172 profiles = list_profiles_in(self.ipython_dir)
172 profiles = list_profiles_in(self.ipython_dir)
173 if profiles:
173 if profiles:
174 print
174 print
175 print "Available profiles in %s:" % self.ipython_dir
175 print "Available profiles in %s:" % self.ipython_dir
176 self._print_profiles(profiles)
176 self._print_profiles(profiles)
177
177
178 profiles = list_profiles_in(os.getcwdu())
178 profiles = list_profiles_in(os.getcwdu())
179 if profiles:
179 if profiles:
180 print
180 print
181 print "Available profiles in current directory (%s):" % os.getcwdu()
181 print "Available profiles in current directory (%s):" % os.getcwdu()
182 self._print_profiles(profiles)
182 self._print_profiles(profiles)
183
183
184 print
184 print
185 print "To use any of the above profiles, start IPython with:"
185 print "To use any of the above profiles, start IPython with:"
186 print " ipython --profile=<name>"
186 print " ipython --profile=<name>"
187 print
187 print
188
188
189 def start(self):
189 def start(self):
190 self.list_profile_dirs()
190 self.list_profile_dirs()
191
191
192
192
193 create_flags = {}
193 create_flags = {}
194 create_flags.update(base_flags)
194 create_flags.update(base_flags)
195 # don't include '--init' flag, which implies running profile create in other apps
195 # don't include '--init' flag, which implies running profile create in other apps
196 create_flags.pop('init')
196 create_flags.pop('init')
197 create_flags['reset'] = ({'ProfileCreate': {'overwrite' : True}},
197 create_flags['reset'] = ({'ProfileCreate': {'overwrite' : True}},
198 "reset config files in this profile to the defaults.")
198 "reset config files in this profile to the defaults.")
199 create_flags['parallel'] = ({'ProfileCreate': {'parallel' : True}},
199 create_flags['parallel'] = ({'ProfileCreate': {'parallel' : True}},
200 "Include the config files for parallel "
200 "Include the config files for parallel "
201 "computing apps (ipengine, ipcontroller, etc.)")
201 "computing apps (ipengine, ipcontroller, etc.)")
202
202
203
203
204 class ProfileCreate(BaseIPythonApplication):
204 class ProfileCreate(BaseIPythonApplication):
205 name = u'ipython-profile'
205 name = u'ipython-profile'
206 description = create_help
206 description = create_help
207 examples = _create_examples
207 examples = _create_examples
208 auto_create = Bool(True, config=False)
208 auto_create = Bool(True, config=False)
209
209
210 def _copy_config_files_default(self):
210 def _copy_config_files_default(self):
211 return True
211 return True
212
212
213 parallel = Bool(False, config=True,
213 parallel = Bool(False, config=True,
214 help="whether to include parallel computing config files")
214 help="whether to include parallel computing config files")
215 def _parallel_changed(self, name, old, new):
215 def _parallel_changed(self, name, old, new):
216 parallel_files = [ 'ipcontroller_config.py',
216 parallel_files = [ 'ipcontroller_config.py',
217 'ipengine_config.py',
217 'ipengine_config.py',
218 'ipcluster_config.py'
218 'ipcluster_config.py'
219 ]
219 ]
220 if new:
220 if new:
221 for cf in parallel_files:
221 for cf in parallel_files:
222 self.config_files.append(cf)
222 self.config_files.append(cf)
223 else:
223 else:
224 for cf in parallel_files:
224 for cf in parallel_files:
225 if cf in self.config_files:
225 if cf in self.config_files:
226 self.config_files.remove(cf)
226 self.config_files.remove(cf)
227
227
228 def parse_command_line(self, argv):
228 def parse_command_line(self, argv):
229 super(ProfileCreate, self).parse_command_line(argv)
229 super(ProfileCreate, self).parse_command_line(argv)
230 # accept positional arg as profile name
230 # accept positional arg as profile name
231 if self.extra_args:
231 if self.extra_args:
232 self.profile = self.extra_args[0]
232 self.profile = self.extra_args[0]
233
233
234 flags = Dict(create_flags)
234 flags = Dict(create_flags)
235
235
236 classes = [ProfileDir]
236 classes = [ProfileDir]
237
237
238 def init_config_files(self):
238 def init_config_files(self):
239 super(ProfileCreate, self).init_config_files()
239 super(ProfileCreate, self).init_config_files()
240 # use local imports, since these classes may import from here
240 # use local imports, since these classes may import from here
241 from IPython.frontend.terminal.ipapp import TerminalIPythonApp
241 from IPython.terminal.ipapp import TerminalIPythonApp
242 apps = [TerminalIPythonApp]
242 apps = [TerminalIPythonApp]
243 try:
243 try:
244 from IPython.frontend.qt.console.qtconsoleapp import IPythonQtConsoleApp
244 from IPython.qt.console.qtconsoleapp import IPythonQtConsoleApp
245 except Exception:
245 except Exception:
246 # this should be ImportError, but under weird circumstances
246 # this should be ImportError, but under weird circumstances
247 # this might be an AttributeError, or possibly others
247 # this might be an AttributeError, or possibly others
248 # in any case, nothing should cause the profile creation to crash.
248 # in any case, nothing should cause the profile creation to crash.
249 pass
249 pass
250 else:
250 else:
251 apps.append(IPythonQtConsoleApp)
251 apps.append(IPythonQtConsoleApp)
252 try:
252 try:
253 from IPython.frontend.html.notebook.notebookapp import NotebookApp
253 from IPython.html.notebookapp import NotebookApp
254 except ImportError:
254 except ImportError:
255 pass
255 pass
256 except Exception:
256 except Exception:
257 self.log.debug('Unexpected error when importing NotebookApp',
257 self.log.debug('Unexpected error when importing NotebookApp',
258 exc_info=True
258 exc_info=True
259 )
259 )
260 else:
260 else:
261 apps.append(NotebookApp)
261 apps.append(NotebookApp)
262 if self.parallel:
262 if self.parallel:
263 from IPython.parallel.apps.ipcontrollerapp import IPControllerApp
263 from IPython.parallel.apps.ipcontrollerapp import IPControllerApp
264 from IPython.parallel.apps.ipengineapp import IPEngineApp
264 from IPython.parallel.apps.ipengineapp import IPEngineApp
265 from IPython.parallel.apps.ipclusterapp import IPClusterStart
265 from IPython.parallel.apps.ipclusterapp import IPClusterStart
266 from IPython.parallel.apps.iploggerapp import IPLoggerApp
266 from IPython.parallel.apps.iploggerapp import IPLoggerApp
267 apps.extend([
267 apps.extend([
268 IPControllerApp,
268 IPControllerApp,
269 IPEngineApp,
269 IPEngineApp,
270 IPClusterStart,
270 IPClusterStart,
271 IPLoggerApp,
271 IPLoggerApp,
272 ])
272 ])
273 for App in apps:
273 for App in apps:
274 app = App()
274 app = App()
275 app.config.update(self.config)
275 app.config.update(self.config)
276 app.log = self.log
276 app.log = self.log
277 app.overwrite = self.overwrite
277 app.overwrite = self.overwrite
278 app.copy_config_files=True
278 app.copy_config_files=True
279 app.profile = self.profile
279 app.profile = self.profile
280 app.init_profile_dir()
280 app.init_profile_dir()
281 app.init_config_files()
281 app.init_config_files()
282
282
283 def stage_default_config_file(self):
283 def stage_default_config_file(self):
284 pass
284 pass
285
285
286
286
287 class ProfileApp(Application):
287 class ProfileApp(Application):
288 name = u'ipython-profile'
288 name = u'ipython-profile'
289 description = profile_help
289 description = profile_help
290 examples = _main_examples
290 examples = _main_examples
291
291
292 subcommands = Dict(dict(
292 subcommands = Dict(dict(
293 create = (ProfileCreate, ProfileCreate.description.splitlines()[0]),
293 create = (ProfileCreate, ProfileCreate.description.splitlines()[0]),
294 list = (ProfileList, ProfileList.description.splitlines()[0]),
294 list = (ProfileList, ProfileList.description.splitlines()[0]),
295 ))
295 ))
296
296
297 def start(self):
297 def start(self):
298 if self.subapp is None:
298 if self.subapp is None:
299 print "No subcommand specified. Must specify one of: %s"%(self.subcommands.keys())
299 print "No subcommand specified. Must specify one of: %s"%(self.subcommands.keys())
300 print
300 print
301 self.print_description()
301 self.print_description()
302 self.print_subcommands()
302 self.print_subcommands()
303 self.exit(1)
303 self.exit(1)
304 else:
304 else:
305 return self.subapp.start()
305 return self.subapp.start()
306
306
@@ -1,38 +1,38 b''
1 #-----------------------------------------------------------------------------
1 #-----------------------------------------------------------------------------
2 # Copyright (C) 2010-2011 The IPython Development Team.
2 # Copyright (C) 2010-2011 The IPython Development Team.
3 #
3 #
4 # Distributed under the terms of the BSD License.
4 # Distributed under the terms of the BSD License.
5 #
5 #
6 # The full license is in the file COPYING.txt, distributed with this software.
6 # The full license is in the file COPYING.txt, distributed with this software.
7 #-----------------------------------------------------------------------------
7 #-----------------------------------------------------------------------------
8 import os
8 import os
9
9
10 import nose.tools as nt
10 import nose.tools as nt
11
11
12 from IPython.core import display
12 from IPython.core import display
13 from IPython.utils import path as ipath
13 from IPython.utils import path as ipath
14
14
15 def test_image_size():
15 def test_image_size():
16 """Simple test for display.Image(args, width=x,height=y)"""
16 """Simple test for display.Image(args, width=x,height=y)"""
17 thisurl = 'http://www.google.fr/images/srpr/logo3w.png'
17 thisurl = 'http://www.google.fr/images/srpr/logo3w.png'
18 img = display.Image(url=thisurl, width=200, height=200)
18 img = display.Image(url=thisurl, width=200, height=200)
19 nt.assert_equal(u'<img src="%s" width="200" height="200"/>' % (thisurl), img._repr_html_())
19 nt.assert_equal(u'<img src="%s" width="200" height="200"/>' % (thisurl), img._repr_html_())
20 img = display.Image(url=thisurl, width=200)
20 img = display.Image(url=thisurl, width=200)
21 nt.assert_equal(u'<img src="%s" width="200"/>' % (thisurl), img._repr_html_())
21 nt.assert_equal(u'<img src="%s" width="200"/>' % (thisurl), img._repr_html_())
22 img = display.Image(url=thisurl)
22 img = display.Image(url=thisurl)
23 nt.assert_equal(u'<img src="%s"/>' % (thisurl), img._repr_html_())
23 nt.assert_equal(u'<img src="%s"/>' % (thisurl), img._repr_html_())
24
24
25 def test_image_filename_defaults():
25 def test_image_filename_defaults():
26 '''test format constraint, and validity of jpeg and png'''
26 '''test format constraint, and validity of jpeg and png'''
27 tpath = ipath.get_ipython_package_dir()
27 tpath = ipath.get_ipython_package_dir()
28 nt.assert_raises(ValueError, display.Image, filename=os.path.join(tpath, 'testing/tests/badformat.gif'),
28 nt.assert_raises(ValueError, display.Image, filename=os.path.join(tpath, 'testing/tests/badformat.gif'),
29 embed=True)
29 embed=True)
30 nt.assert_raises(ValueError, display.Image)
30 nt.assert_raises(ValueError, display.Image)
31 nt.assert_raises(ValueError, display.Image, data='this is not an image', format='badformat', embed=True)
31 nt.assert_raises(ValueError, display.Image, data='this is not an image', format='badformat', embed=True)
32 imgfile = os.path.join(tpath, 'frontend/html/notebook/static/base/images/ipynblogo.png')
32 imgfile = os.path.join(tpath, 'html/static/base/images/ipynblogo.png')
33 img = display.Image(filename=imgfile)
33 img = display.Image(filename=imgfile)
34 nt.assert_equal('png', img.format)
34 nt.assert_equal('png', img.format)
35 nt.assert_is_not_none(img._repr_png_())
35 nt.assert_is_not_none(img._repr_png_())
36 img = display.Image(filename=os.path.join(tpath, 'testing/tests/logo.jpg'), embed=False)
36 img = display.Image(filename=os.path.join(tpath, 'testing/tests/logo.jpg'), embed=False)
37 nt.assert_equal('jpeg', img.format)
37 nt.assert_equal('jpeg', img.format)
38 nt.assert_is_none(img._repr_jpeg_())
38 nt.assert_is_none(img._repr_jpeg_())
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/README.md to IPython/html/README.md
NO CONTENT: file renamed from IPython/frontend/html/notebook/README.md to IPython/html/README.md
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/__init__.py to IPython/html/__init__.py
NO CONTENT: file renamed from IPython/frontend/html/notebook/__init__.py to IPython/html/__init__.py
1 NO CONTENT: file renamed from IPython/deathrow/__init__.py to IPython/html/auth/__init__.py
NO CONTENT: file renamed from IPython/deathrow/__init__.py to IPython/html/auth/__init__.py
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/auth/login.py to IPython/html/auth/login.py
NO CONTENT: file renamed from IPython/frontend/html/notebook/auth/login.py to IPython/html/auth/login.py
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/auth/logout.py to IPython/html/auth/logout.py
NO CONTENT: file renamed from IPython/frontend/html/notebook/auth/logout.py to IPython/html/auth/logout.py
1 NO CONTENT: file renamed from IPython/deathrow/gui/__init__.py to IPython/html/base/__init__.py
NO CONTENT: file renamed from IPython/deathrow/gui/__init__.py to IPython/html/base/__init__.py
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/base/handlers.py to IPython/html/base/handlers.py
NO CONTENT: file renamed from IPython/frontend/html/notebook/base/handlers.py to IPython/html/base/handlers.py
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/base/zmqhandlers.py to IPython/html/base/zmqhandlers.py
NO CONTENT: file renamed from IPython/frontend/html/notebook/base/zmqhandlers.py to IPython/html/base/zmqhandlers.py
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/fabfile.py to IPython/html/fabfile.py
NO CONTENT: file renamed from IPython/frontend/html/notebook/fabfile.py to IPython/html/fabfile.py
1 NO CONTENT: file renamed from IPython/deathrow/gui/wx/__init__.py to IPython/html/notebook/__init__.py
NO CONTENT: file renamed from IPython/deathrow/gui/wx/__init__.py to IPython/html/notebook/__init__.py
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/notebook/handlers.py to IPython/html/notebook/handlers.py
NO CONTENT: file renamed from IPython/frontend/html/notebook/notebook/handlers.py to IPython/html/notebook/handlers.py
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/notebookapp.py to IPython/html/notebookapp.py
NO CONTENT: file renamed from IPython/frontend/html/notebook/notebookapp.py to IPython/html/notebookapp.py
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file renamed from IPython/deathrow/oldfrontend/cocoa/__init__.py to IPython/html/services/__init__.py
NO CONTENT: file renamed from IPython/deathrow/oldfrontend/cocoa/__init__.py to IPython/html/services/__init__.py
1 NO CONTENT: file renamed from IPython/deathrow/oldfrontend/cocoa/tests/__init__.py to IPython/html/services/clusters/__init__.py
NO CONTENT: file renamed from IPython/deathrow/oldfrontend/cocoa/tests/__init__.py to IPython/html/services/clusters/__init__.py
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/services/clusters/clustermanager.py to IPython/html/services/clusters/clustermanager.py
NO CONTENT: file renamed from IPython/frontend/html/notebook/services/clusters/clustermanager.py to IPython/html/services/clusters/clustermanager.py
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/services/clusters/handlers.py to IPython/html/services/clusters/handlers.py
NO CONTENT: file renamed from IPython/frontend/html/notebook/services/clusters/handlers.py to IPython/html/services/clusters/handlers.py
1 NO CONTENT: file renamed from IPython/deathrow/oldfrontend/tests/__init__.py to IPython/html/services/kernels/__init__.py
NO CONTENT: file renamed from IPython/deathrow/oldfrontend/tests/__init__.py to IPython/html/services/kernels/__init__.py
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/services/kernels/handlers.py to IPython/html/services/kernels/handlers.py
NO CONTENT: file renamed from IPython/frontend/html/notebook/services/kernels/handlers.py to IPython/html/services/kernels/handlers.py
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/services/kernels/kernelmanager.py to IPython/html/services/kernels/kernelmanager.py
NO CONTENT: file renamed from IPython/frontend/html/notebook/services/kernels/kernelmanager.py to IPython/html/services/kernels/kernelmanager.py
1 NO CONTENT: file renamed from IPython/deathrow/oldfrontend/wx/__init__.py to IPython/html/services/notebooks/__init__.py
NO CONTENT: file renamed from IPython/deathrow/oldfrontend/wx/__init__.py to IPython/html/services/notebooks/__init__.py
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/services/notebooks/azurenbmanager.py to IPython/html/services/notebooks/azurenbmanager.py
NO CONTENT: file renamed from IPython/frontend/html/notebook/services/notebooks/azurenbmanager.py to IPython/html/services/notebooks/azurenbmanager.py
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/services/notebooks/filenbmanager.py to IPython/html/services/notebooks/filenbmanager.py
NO CONTENT: file renamed from IPython/frontend/html/notebook/services/notebooks/filenbmanager.py to IPython/html/services/notebooks/filenbmanager.py
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/services/notebooks/handlers.py to IPython/html/services/notebooks/handlers.py
NO CONTENT: file renamed from IPython/frontend/html/notebook/services/notebooks/handlers.py to IPython/html/services/notebooks/handlers.py
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/services/notebooks/nbmanager.py to IPython/html/services/notebooks/nbmanager.py
NO CONTENT: file renamed from IPython/frontend/html/notebook/services/notebooks/nbmanager.py to IPython/html/services/notebooks/nbmanager.py
1 NO CONTENT: file renamed from IPython/deathrow/tests/__init__.py to IPython/html/services/notebooks/tests/__init__.py
NO CONTENT: file renamed from IPython/deathrow/tests/__init__.py to IPython/html/services/notebooks/tests/__init__.py
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/services/notebooks/tests/test_nbmanager.py to IPython/html/services/notebooks/tests/test_nbmanager.py
NO CONTENT: file renamed from IPython/frontend/html/notebook/services/notebooks/tests/test_nbmanager.py to IPython/html/services/notebooks/tests/test_nbmanager.py
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/auth/css/override.css to IPython/html/static/auth/css/override.css
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/auth/css/override.css to IPython/html/static/auth/css/override.css
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/auth/js/loginmain.js to IPython/html/static/auth/js/loginmain.js
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/auth/js/loginmain.js to IPython/html/static/auth/js/loginmain.js
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/auth/js/loginwidget.js to IPython/html/static/auth/js/loginwidget.js
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/auth/js/loginwidget.js to IPython/html/static/auth/js/loginwidget.js
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/auth/js/logoutmain.js to IPython/html/static/auth/js/logoutmain.js
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/auth/js/logoutmain.js to IPython/html/static/auth/js/logoutmain.js
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/auth/less/login.less to IPython/html/static/auth/less/login.less
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/auth/less/login.less to IPython/html/static/auth/less/login.less
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/auth/less/logout.less to IPython/html/static/auth/less/logout.less
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/auth/less/logout.less to IPython/html/static/auth/less/logout.less
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/auth/less/style.less to IPython/html/static/auth/less/style.less
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/auth/less/style.less to IPython/html/static/auth/less/style.less
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/base/css/boilerplate.css to IPython/html/static/base/css/boilerplate.css
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/base/css/boilerplate.css to IPython/html/static/base/css/boilerplate.css
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/base/images/favicon.ico to IPython/html/static/base/images/favicon.ico
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/base/images/favicon.ico to IPython/html/static/base/images/favicon.ico
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/base/images/ipynblogo.png to IPython/html/static/base/images/ipynblogo.png
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/base/images/ipynblogo.png to IPython/html/static/base/images/ipynblogo.png
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/base/images/ipynblogo.svg to IPython/html/static/base/images/ipynblogo.svg
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/base/images/ipynblogo.svg to IPython/html/static/base/images/ipynblogo.svg
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/base/js/dialog.js to IPython/html/static/base/js/dialog.js
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/base/js/dialog.js to IPython/html/static/base/js/dialog.js
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/base/js/events.js to IPython/html/static/base/js/events.js
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/base/js/events.js to IPython/html/static/base/js/events.js
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/base/js/namespace.js to IPython/html/static/base/js/namespace.js
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/base/js/namespace.js to IPython/html/static/base/js/namespace.js
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/base/js/page.js to IPython/html/static/base/js/page.js
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/base/js/page.js to IPython/html/static/base/js/page.js
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/base/js/pagemain.js to IPython/html/static/base/js/pagemain.js
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/base/js/pagemain.js to IPython/html/static/base/js/pagemain.js
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/base/js/utils.js to IPython/html/static/base/js/utils.js
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/base/js/utils.js to IPython/html/static/base/js/utils.js
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/base/less/flexbox.less to IPython/html/static/base/less/flexbox.less
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/base/less/flexbox.less to IPython/html/static/base/less/flexbox.less
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/base/less/mixins.less to IPython/html/static/base/less/mixins.less
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/base/less/mixins.less to IPython/html/static/base/less/mixins.less
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/base/less/page.less to IPython/html/static/base/less/page.less
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/base/less/page.less to IPython/html/static/base/less/page.less
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/base/less/style.less to IPython/html/static/base/less/style.less
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/base/less/style.less to IPython/html/static/base/less/style.less
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/base/less/variables.less to IPython/html/static/base/less/variables.less
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/base/less/variables.less to IPython/html/static/base/less/variables.less
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/custom/custom.css to IPython/html/static/custom/custom.css
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/custom/custom.css to IPython/html/static/custom/custom.css
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/custom/custom.js to IPython/html/static/custom/custom.js
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/custom/custom.js to IPython/html/static/custom/custom.js
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/dateformat/date.format.js to IPython/html/static/dateformat/date.format.js
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/dateformat/date.format.js to IPython/html/static/dateformat/date.format.js
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/css/override.css to IPython/html/static/notebook/css/override.css
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/css/override.css to IPython/html/static/notebook/css/override.css
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/js/cell.js to IPython/html/static/notebook/js/cell.js
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/js/cell.js to IPython/html/static/notebook/js/cell.js
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/js/celltoolbar.js to IPython/html/static/notebook/js/celltoolbar.js
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/js/celltoolbar.js to IPython/html/static/notebook/js/celltoolbar.js
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/js/celltoolbarpresets/default.js to IPython/html/static/notebook/js/celltoolbarpresets/default.js
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/js/celltoolbarpresets/default.js to IPython/html/static/notebook/js/celltoolbarpresets/default.js
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/js/celltoolbarpresets/example.js to IPython/html/static/notebook/js/celltoolbarpresets/example.js
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/js/celltoolbarpresets/example.js to IPython/html/static/notebook/js/celltoolbarpresets/example.js
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/js/celltoolbarpresets/slideshow.js to IPython/html/static/notebook/js/celltoolbarpresets/slideshow.js
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/js/celltoolbarpresets/slideshow.js to IPython/html/static/notebook/js/celltoolbarpresets/slideshow.js
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/js/codecell.js to IPython/html/static/notebook/js/codecell.js
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/js/codecell.js to IPython/html/static/notebook/js/codecell.js
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/js/codemirror-ipython.js to IPython/html/static/notebook/js/codemirror-ipython.js
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/js/codemirror-ipython.js to IPython/html/static/notebook/js/codemirror-ipython.js
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/js/completer.js to IPython/html/static/notebook/js/completer.js
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/js/completer.js to IPython/html/static/notebook/js/completer.js
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/js/config.js to IPython/html/static/notebook/js/config.js
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/js/config.js to IPython/html/static/notebook/js/config.js
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/js/contexthint.js to IPython/html/static/notebook/js/contexthint.js
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/js/contexthint.js to IPython/html/static/notebook/js/contexthint.js
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/js/layoutmanager.js to IPython/html/static/notebook/js/layoutmanager.js
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/js/layoutmanager.js to IPython/html/static/notebook/js/layoutmanager.js
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/js/main.js to IPython/html/static/notebook/js/main.js
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/js/main.js to IPython/html/static/notebook/js/main.js
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/js/maintoolbar.js to IPython/html/static/notebook/js/maintoolbar.js
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/js/maintoolbar.js to IPython/html/static/notebook/js/maintoolbar.js
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/js/mathjaxutils.js to IPython/html/static/notebook/js/mathjaxutils.js
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/js/mathjaxutils.js to IPython/html/static/notebook/js/mathjaxutils.js
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/js/menubar.js to IPython/html/static/notebook/js/menubar.js
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/js/menubar.js to IPython/html/static/notebook/js/menubar.js
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/js/notebook.js to IPython/html/static/notebook/js/notebook.js
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/js/notebook.js to IPython/html/static/notebook/js/notebook.js
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/js/notificationarea.js to IPython/html/static/notebook/js/notificationarea.js
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/js/notificationarea.js to IPython/html/static/notebook/js/notificationarea.js
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/js/notificationwidget.js to IPython/html/static/notebook/js/notificationwidget.js
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/js/notificationwidget.js to IPython/html/static/notebook/js/notificationwidget.js
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/js/outputarea.js to IPython/html/static/notebook/js/outputarea.js
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/js/outputarea.js to IPython/html/static/notebook/js/outputarea.js
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/js/pager.js to IPython/html/static/notebook/js/pager.js
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/js/pager.js to IPython/html/static/notebook/js/pager.js
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/js/quickhelp.js to IPython/html/static/notebook/js/quickhelp.js
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/js/quickhelp.js to IPython/html/static/notebook/js/quickhelp.js
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/js/savewidget.js to IPython/html/static/notebook/js/savewidget.js
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/js/savewidget.js to IPython/html/static/notebook/js/savewidget.js
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/js/textcell.js to IPython/html/static/notebook/js/textcell.js
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/js/textcell.js to IPython/html/static/notebook/js/textcell.js
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/js/toolbar.js to IPython/html/static/notebook/js/toolbar.js
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/js/toolbar.js to IPython/html/static/notebook/js/toolbar.js
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/js/tooltip.js to IPython/html/static/notebook/js/tooltip.js
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/js/tooltip.js to IPython/html/static/notebook/js/tooltip.js
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/less/ansicolors.less to IPython/html/static/notebook/less/ansicolors.less
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/less/ansicolors.less to IPython/html/static/notebook/less/ansicolors.less
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/less/cell.less to IPython/html/static/notebook/less/cell.less
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/less/cell.less to IPython/html/static/notebook/less/cell.less
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/less/celltoolbar.less to IPython/html/static/notebook/less/celltoolbar.less
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/less/celltoolbar.less to IPython/html/static/notebook/less/celltoolbar.less
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/less/codecell.less to IPython/html/static/notebook/less/codecell.less
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/less/codecell.less to IPython/html/static/notebook/less/codecell.less
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/less/codemirror.less to IPython/html/static/notebook/less/codemirror.less
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/less/codemirror.less to IPython/html/static/notebook/less/codemirror.less
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/less/completer.less to IPython/html/static/notebook/less/completer.less
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/less/completer.less to IPython/html/static/notebook/less/completer.less
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/less/highlight.less to IPython/html/static/notebook/less/highlight.less
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/less/highlight.less to IPython/html/static/notebook/less/highlight.less
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/less/menubar.less to IPython/html/static/notebook/less/menubar.less
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/less/menubar.less to IPython/html/static/notebook/less/menubar.less
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/less/notebook.less to IPython/html/static/notebook/less/notebook.less
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/less/notebook.less to IPython/html/static/notebook/less/notebook.less
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/less/notificationarea.less to IPython/html/static/notebook/less/notificationarea.less
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/less/notificationarea.less to IPython/html/static/notebook/less/notificationarea.less
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/less/notificationwidget.less to IPython/html/static/notebook/less/notificationwidget.less
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/less/notificationwidget.less to IPython/html/static/notebook/less/notificationwidget.less
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/less/outputarea.less to IPython/html/static/notebook/less/outputarea.less
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/less/outputarea.less to IPython/html/static/notebook/less/outputarea.less
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/less/pager.less to IPython/html/static/notebook/less/pager.less
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/less/pager.less to IPython/html/static/notebook/less/pager.less
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/less/quickhelp.less to IPython/html/static/notebook/less/quickhelp.less
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/less/quickhelp.less to IPython/html/static/notebook/less/quickhelp.less
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/less/renderedhtml.less to IPython/html/static/notebook/less/renderedhtml.less
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/less/renderedhtml.less to IPython/html/static/notebook/less/renderedhtml.less
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/less/savewidget.less to IPython/html/static/notebook/less/savewidget.less
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/less/savewidget.less to IPython/html/static/notebook/less/savewidget.less
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/less/style.less to IPython/html/static/notebook/less/style.less
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/less/style.less to IPython/html/static/notebook/less/style.less
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/less/textcell.less to IPython/html/static/notebook/less/textcell.less
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/less/textcell.less to IPython/html/static/notebook/less/textcell.less
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/less/toolbar.less to IPython/html/static/notebook/less/toolbar.less
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/less/toolbar.less to IPython/html/static/notebook/less/toolbar.less
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/less/tooltip.less to IPython/html/static/notebook/less/tooltip.less
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/less/tooltip.less to IPython/html/static/notebook/less/tooltip.less
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/less/variables.less to IPython/html/static/notebook/less/variables.less
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/notebook/less/variables.less to IPython/html/static/notebook/less/variables.less
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/services/kernels/js/kernel.js to IPython/html/static/services/kernels/js/kernel.js
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/services/kernels/js/kernel.js to IPython/html/static/services/kernels/js/kernel.js
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/style/style.less to IPython/html/static/style/style.less
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/style/style.less to IPython/html/static/style/style.less
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/style/style.min.css to IPython/html/static/style/style.min.css
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/style/style.min.css to IPython/html/static/style/style.min.css
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/tree/css/override.css to IPython/html/static/tree/css/override.css
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/tree/css/override.css to IPython/html/static/tree/css/override.css
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/tree/js/clusterlist.js to IPython/html/static/tree/js/clusterlist.js
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/tree/js/clusterlist.js to IPython/html/static/tree/js/clusterlist.js
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/tree/js/main.js to IPython/html/static/tree/js/main.js
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/tree/js/main.js to IPython/html/static/tree/js/main.js
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/tree/js/notebooklist.js to IPython/html/static/tree/js/notebooklist.js
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/tree/js/notebooklist.js to IPython/html/static/tree/js/notebooklist.js
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/tree/less/altuploadform.less to IPython/html/static/tree/less/altuploadform.less
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/tree/less/altuploadform.less to IPython/html/static/tree/less/altuploadform.less
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/tree/less/style.less to IPython/html/static/tree/less/style.less
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/tree/less/style.less to IPython/html/static/tree/less/style.less
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/static/tree/less/tree.less to IPython/html/static/tree/less/tree.less
NO CONTENT: file renamed from IPython/frontend/html/notebook/static/tree/less/tree.less to IPython/html/static/tree/less/tree.less
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/templates/login.html to IPython/html/templates/login.html
NO CONTENT: file renamed from IPython/frontend/html/notebook/templates/login.html to IPython/html/templates/login.html
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/templates/logout.html to IPython/html/templates/logout.html
NO CONTENT: file renamed from IPython/frontend/html/notebook/templates/logout.html to IPython/html/templates/logout.html
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/templates/notebook.html to IPython/html/templates/notebook.html
NO CONTENT: file renamed from IPython/frontend/html/notebook/templates/notebook.html to IPython/html/templates/notebook.html
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/templates/page.html to IPython/html/templates/page.html
NO CONTENT: file renamed from IPython/frontend/html/notebook/templates/page.html to IPython/html/templates/page.html
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/templates/tree.html to IPython/html/templates/tree.html
NO CONTENT: file renamed from IPython/frontend/html/notebook/templates/tree.html to IPython/html/templates/tree.html
1 NO CONTENT: file renamed from IPython/frontend/__init__.py to IPython/html/tests/__init__.py
NO CONTENT: file renamed from IPython/frontend/__init__.py to IPython/html/tests/__init__.py
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/tests/test_hist.sqlite to IPython/html/tests/test_hist.sqlite
NO CONTENT: file renamed from IPython/frontend/html/notebook/tests/test_hist.sqlite to IPython/html/tests/test_hist.sqlite
1 NO CONTENT: file renamed from IPython/frontend/html/__init__.py to IPython/html/tree/__init__.py
NO CONTENT: file renamed from IPython/frontend/html/__init__.py to IPython/html/tree/__init__.py
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/tree/handlers.py to IPython/html/tree/handlers.py
NO CONTENT: file renamed from IPython/frontend/html/notebook/tree/handlers.py to IPython/html/tree/handlers.py
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/utils.py to IPython/html/utils.py
NO CONTENT: file renamed from IPython/frontend/html/notebook/utils.py to IPython/html/utils.py
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/auth/__init__.py to IPython/qt/__init__.py
NO CONTENT: file renamed from IPython/frontend/html/notebook/auth/__init__.py to IPython/qt/__init__.py
1 NO CONTENT: file renamed from IPython/frontend/qt/base_frontend_mixin.py to IPython/qt/base_frontend_mixin.py
NO CONTENT: file renamed from IPython/frontend/qt/base_frontend_mixin.py to IPython/qt/base_frontend_mixin.py
1 NO CONTENT: file renamed from IPython/frontend/qt/client.py to IPython/qt/client.py
NO CONTENT: file renamed from IPython/frontend/qt/client.py to IPython/qt/client.py
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/base/__init__.py to IPython/qt/console/__init__.py
NO CONTENT: file renamed from IPython/frontend/html/notebook/base/__init__.py to IPython/qt/console/__init__.py
1 NO CONTENT: file renamed from IPython/frontend/qt/console/ansi_code_processor.py to IPython/qt/console/ansi_code_processor.py
NO CONTENT: file renamed from IPython/frontend/qt/console/ansi_code_processor.py to IPython/qt/console/ansi_code_processor.py
1 NO CONTENT: file renamed from IPython/frontend/qt/console/bracket_matcher.py to IPython/qt/console/bracket_matcher.py
NO CONTENT: file renamed from IPython/frontend/qt/console/bracket_matcher.py to IPython/qt/console/bracket_matcher.py
1 NO CONTENT: file renamed from IPython/frontend/qt/console/call_tip_widget.py to IPython/qt/console/call_tip_widget.py
NO CONTENT: file renamed from IPython/frontend/qt/console/call_tip_widget.py to IPython/qt/console/call_tip_widget.py
1 NO CONTENT: file renamed from IPython/frontend/qt/console/completion_html.py to IPython/qt/console/completion_html.py
NO CONTENT: file renamed from IPython/frontend/qt/console/completion_html.py to IPython/qt/console/completion_html.py
1 NO CONTENT: file renamed from IPython/frontend/qt/console/completion_lexer.py to IPython/qt/console/completion_lexer.py
NO CONTENT: file renamed from IPython/frontend/qt/console/completion_lexer.py to IPython/qt/console/completion_lexer.py
1 NO CONTENT: file renamed from IPython/frontend/qt/console/completion_plain.py to IPython/qt/console/completion_plain.py
NO CONTENT: file renamed from IPython/frontend/qt/console/completion_plain.py to IPython/qt/console/completion_plain.py
1 NO CONTENT: file renamed from IPython/frontend/qt/console/completion_widget.py to IPython/qt/console/completion_widget.py
NO CONTENT: file renamed from IPython/frontend/qt/console/completion_widget.py to IPython/qt/console/completion_widget.py
1 NO CONTENT: file renamed from IPython/frontend/qt/console/console_widget.py to IPython/qt/console/console_widget.py
NO CONTENT: file renamed from IPython/frontend/qt/console/console_widget.py to IPython/qt/console/console_widget.py
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file renamed from IPython/frontend/qt/console/frontend_widget.py to IPython/qt/console/frontend_widget.py
NO CONTENT: file renamed from IPython/frontend/qt/console/frontend_widget.py to IPython/qt/console/frontend_widget.py
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file renamed from IPython/frontend/qt/console/history_console_widget.py to IPython/qt/console/history_console_widget.py
NO CONTENT: file renamed from IPython/frontend/qt/console/history_console_widget.py to IPython/qt/console/history_console_widget.py
1 NO CONTENT: file renamed from IPython/frontend/qt/console/ipython_widget.py to IPython/qt/console/ipython_widget.py
NO CONTENT: file renamed from IPython/frontend/qt/console/ipython_widget.py to IPython/qt/console/ipython_widget.py
1 NO CONTENT: file renamed from IPython/frontend/qt/console/kill_ring.py to IPython/qt/console/kill_ring.py
NO CONTENT: file renamed from IPython/frontend/qt/console/kill_ring.py to IPython/qt/console/kill_ring.py
1 NO CONTENT: file renamed from IPython/frontend/qt/console/mainwindow.py to IPython/qt/console/mainwindow.py
NO CONTENT: file renamed from IPython/frontend/qt/console/mainwindow.py to IPython/qt/console/mainwindow.py
1 NO CONTENT: file renamed from IPython/frontend/qt/console/pygments_highlighter.py to IPython/qt/console/pygments_highlighter.py
NO CONTENT: file renamed from IPython/frontend/qt/console/pygments_highlighter.py to IPython/qt/console/pygments_highlighter.py
1 NO CONTENT: file renamed from IPython/frontend/qt/console/qtconsoleapp.py to IPython/qt/console/qtconsoleapp.py
NO CONTENT: file renamed from IPython/frontend/qt/console/qtconsoleapp.py to IPython/qt/console/qtconsoleapp.py
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file renamed from IPython/frontend/qt/console/resources/icon/IPythonConsole.svg to IPython/qt/console/resources/icon/IPythonConsole.svg
NO CONTENT: file renamed from IPython/frontend/qt/console/resources/icon/IPythonConsole.svg to IPython/qt/console/resources/icon/IPythonConsole.svg
1 NO CONTENT: file renamed from IPython/frontend/qt/console/rich_ipython_widget.py to IPython/qt/console/rich_ipython_widget.py
NO CONTENT: file renamed from IPython/frontend/qt/console/rich_ipython_widget.py to IPython/qt/console/rich_ipython_widget.py
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file renamed from IPython/frontend/qt/console/styles.py to IPython/qt/console/styles.py
NO CONTENT: file renamed from IPython/frontend/qt/console/styles.py to IPython/qt/console/styles.py
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/notebook/__init__.py to IPython/qt/console/tests/__init__.py
NO CONTENT: file renamed from IPython/frontend/html/notebook/notebook/__init__.py to IPython/qt/console/tests/__init__.py
1 NO CONTENT: file renamed from IPython/frontend/qt/console/tests/test_ansi_code_processor.py to IPython/qt/console/tests/test_ansi_code_processor.py
NO CONTENT: file renamed from IPython/frontend/qt/console/tests/test_ansi_code_processor.py to IPython/qt/console/tests/test_ansi_code_processor.py
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file renamed from IPython/frontend/qt/console/tests/test_completion_lexer.py to IPython/qt/console/tests/test_completion_lexer.py
NO CONTENT: file renamed from IPython/frontend/qt/console/tests/test_completion_lexer.py to IPython/qt/console/tests/test_completion_lexer.py
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file renamed from IPython/frontend/qt/console/tests/test_console_widget.py to IPython/qt/console/tests/test_console_widget.py
NO CONTENT: file renamed from IPython/frontend/qt/console/tests/test_console_widget.py to IPython/qt/console/tests/test_console_widget.py
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file renamed from IPython/frontend/qt/console/tests/test_kill_ring.py to IPython/qt/console/tests/test_kill_ring.py
NO CONTENT: file renamed from IPython/frontend/qt/console/tests/test_kill_ring.py to IPython/qt/console/tests/test_kill_ring.py
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file renamed from IPython/frontend/qt/inprocess.py to IPython/qt/inprocess.py
NO CONTENT: file renamed from IPython/frontend/qt/inprocess.py to IPython/qt/inprocess.py
1 NO CONTENT: file renamed from IPython/frontend/qt/kernel_mixins.py to IPython/qt/kernel_mixins.py
NO CONTENT: file renamed from IPython/frontend/qt/kernel_mixins.py to IPython/qt/kernel_mixins.py
1 NO CONTENT: file renamed from IPython/frontend/qt/manager.py to IPython/qt/manager.py
NO CONTENT: file renamed from IPython/frontend/qt/manager.py to IPython/qt/manager.py
1 NO CONTENT: file renamed from IPython/frontend/qt/rich_text.py to IPython/qt/rich_text.py
NO CONTENT: file renamed from IPython/frontend/qt/rich_text.py to IPython/qt/rich_text.py
1 NO CONTENT: file renamed from IPython/frontend/qt/svg.py to IPython/qt/svg.py
NO CONTENT: file renamed from IPython/frontend/qt/svg.py to IPython/qt/svg.py
1 NO CONTENT: file renamed from IPython/frontend/qt/util.py to IPython/qt/util.py
NO CONTENT: file renamed from IPython/frontend/qt/util.py to IPython/qt/util.py
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/services/__init__.py to IPython/terminal/__init__.py
NO CONTENT: file renamed from IPython/frontend/html/notebook/services/__init__.py to IPython/terminal/__init__.py
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/services/clusters/__init__.py to IPython/terminal/console/__init__.py
NO CONTENT: file renamed from IPython/frontend/html/notebook/services/clusters/__init__.py to IPython/terminal/console/__init__.py
1 NO CONTENT: file renamed from IPython/frontend/terminal/console/app.py to IPython/terminal/console/app.py
NO CONTENT: file renamed from IPython/frontend/terminal/console/app.py to IPython/terminal/console/app.py
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file renamed from IPython/frontend/terminal/console/completer.py to IPython/terminal/console/completer.py
NO CONTENT: file renamed from IPython/frontend/terminal/console/completer.py to IPython/terminal/console/completer.py
1 NO CONTENT: file renamed from IPython/frontend/terminal/console/interactiveshell.py to IPython/terminal/console/interactiveshell.py
NO CONTENT: file renamed from IPython/frontend/terminal/console/interactiveshell.py to IPython/terminal/console/interactiveshell.py
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/services/kernels/__init__.py to IPython/terminal/console/tests/__init__.py
NO CONTENT: file renamed from IPython/frontend/html/notebook/services/kernels/__init__.py to IPython/terminal/console/tests/__init__.py
1 NO CONTENT: file renamed from IPython/frontend/terminal/console/tests/test_console.py to IPython/terminal/console/tests/test_console.py
NO CONTENT: file renamed from IPython/frontend/terminal/console/tests/test_console.py to IPython/terminal/console/tests/test_console.py
1 NO CONTENT: file renamed from IPython/frontend/terminal/console/tests/test_image_handler.py to IPython/terminal/console/tests/test_image_handler.py
NO CONTENT: file renamed from IPython/frontend/terminal/console/tests/test_image_handler.py to IPython/terminal/console/tests/test_image_handler.py
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file renamed from IPython/frontend/terminal/console/tests/writetofile.py to IPython/terminal/console/tests/writetofile.py
NO CONTENT: file renamed from IPython/frontend/terminal/console/tests/writetofile.py to IPython/terminal/console/tests/writetofile.py
1 NO CONTENT: file renamed from IPython/frontend/terminal/embed.py to IPython/terminal/embed.py
NO CONTENT: file renamed from IPython/frontend/terminal/embed.py to IPython/terminal/embed.py
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file renamed from IPython/frontend/terminal/interactiveshell.py to IPython/terminal/interactiveshell.py
NO CONTENT: file renamed from IPython/frontend/terminal/interactiveshell.py to IPython/terminal/interactiveshell.py
1 NO CONTENT: file renamed from IPython/frontend/terminal/ipapp.py to IPython/terminal/ipapp.py
NO CONTENT: file renamed from IPython/frontend/terminal/ipapp.py to IPython/terminal/ipapp.py
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file renamed from IPython/frontend/html/notebook/services/notebooks/__init__.py to IPython/terminal/tests/__init__.py
NO CONTENT: file renamed from IPython/frontend/html/notebook/services/notebooks/__init__.py to IPython/terminal/tests/__init__.py
1 NO CONTENT: file renamed from IPython/frontend/terminal/tests/test_interactivshell.py to IPython/terminal/tests/test_interactivshell.py
NO CONTENT: file renamed from IPython/frontend/terminal/tests/test_interactivshell.py to IPython/terminal/tests/test_interactivshell.py
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: modified file
NO CONTENT: modified file
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
This diff has been collapsed as it changes many lines, (665 lines changed) Show them Hide them
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
This diff has been collapsed as it changes many lines, (518 lines changed) Show them Hide them
1 NO CONTENT: file was removed
NO CONTENT: file was removed
This diff has been collapsed as it changes many lines, (510 lines changed) Show them Hide them
1 NO CONTENT: file was removed
NO CONTENT: file was removed
This diff has been collapsed as it changes many lines, (942 lines changed) Show them Hide them
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
This diff has been collapsed as it changes many lines, (1767 lines changed) Show them Hide them
1 NO CONTENT: file was removed
NO CONTENT: file was removed
This diff has been collapsed as it changes many lines, (1126 lines changed) Show them Hide them
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
This diff has been collapsed as it changes many lines, (2328 lines changed) Show them Hide them
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
This diff has been collapsed as it changes many lines, (669 lines changed) Show them Hide them
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
This diff has been collapsed as it changes many lines, (560 lines changed) Show them Hide them
1 NO CONTENT: file was removed, binary diff hidden
NO CONTENT: file was removed, binary diff hidden
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
1 NO CONTENT: file was removed
NO CONTENT: file was removed
The requested commit or file is too big and content was truncated. Show full diff
General Comments 0
You need to be logged in to leave comments. Login now