Show More
@@ -1,611 +1,612 b'' | |||||
1 | # -*- coding: utf-8 -*- |
|
1 | # -*- coding: utf-8 -*- | |
2 | """ |
|
2 | """ | |
3 | Pdb debugger class. |
|
3 | Pdb debugger class. | |
4 |
|
4 | |||
5 | Modified from the standard pdb.Pdb class to avoid including readline, so that |
|
5 | Modified from the standard pdb.Pdb class to avoid including readline, so that | |
6 | the command line completion of other programs which include this isn't |
|
6 | the command line completion of other programs which include this isn't | |
7 | damaged. |
|
7 | damaged. | |
8 |
|
8 | |||
9 | In the future, this class will be expanded with improvements over the standard |
|
9 | In the future, this class will be expanded with improvements over the standard | |
10 | pdb. |
|
10 | pdb. | |
11 |
|
11 | |||
12 | The code in this file is mainly lifted out of cmd.py in Python 2.2, with minor |
|
12 | The code in this file is mainly lifted out of cmd.py in Python 2.2, with minor | |
13 | changes. Licensing should therefore be under the standard Python terms. For |
|
13 | changes. Licensing should therefore be under the standard Python terms. For | |
14 | details on the PSF (Python Software Foundation) standard license, see: |
|
14 | details on the PSF (Python Software Foundation) standard license, see: | |
15 |
|
15 | |||
16 |
http |
|
16 | https://docs.python.org/2/license.html | |
|
17 | """ | |||
17 |
|
18 | |||
18 | #***************************************************************************** |
|
19 | #***************************************************************************** | |
19 | # |
|
20 | # | |
20 | # This file is licensed under the PSF license. |
|
21 | # This file is licensed under the PSF license. | |
21 | # |
|
22 | # | |
22 | # Copyright (C) 2001 Python Software Foundation, www.python.org |
|
23 | # Copyright (C) 2001 Python Software Foundation, www.python.org | |
23 | # Copyright (C) 2005-2006 Fernando Perez. <fperez@colorado.edu> |
|
24 | # Copyright (C) 2005-2006 Fernando Perez. <fperez@colorado.edu> | |
24 | # |
|
25 | # | |
25 | # |
|
26 | # | |
26 | #***************************************************************************** |
|
27 | #***************************************************************************** | |
27 |
|
28 | |||
28 | import bdb |
|
29 | import bdb | |
29 | import functools |
|
30 | import functools | |
30 | import inspect |
|
31 | import inspect | |
31 | import linecache |
|
32 | import linecache | |
32 | import sys |
|
33 | import sys | |
33 | import warnings |
|
34 | import warnings | |
34 |
|
35 | |||
35 | from IPython import get_ipython |
|
36 | from IPython import get_ipython | |
36 | from IPython.utils import PyColorize |
|
37 | from IPython.utils import PyColorize | |
37 | from IPython.utils import coloransi, py3compat |
|
38 | from IPython.utils import coloransi, py3compat | |
38 | from IPython.core.excolors import exception_colors |
|
39 | from IPython.core.excolors import exception_colors | |
39 | from IPython.testing.skipdoctest import skip_doctest |
|
40 | from IPython.testing.skipdoctest import skip_doctest | |
40 |
|
41 | |||
41 |
|
42 | |||
42 | prompt = 'ipdb> ' |
|
43 | prompt = 'ipdb> ' | |
43 |
|
44 | |||
44 | #We have to check this directly from sys.argv, config struct not yet available |
|
45 | #We have to check this directly from sys.argv, config struct not yet available | |
45 | from pdb import Pdb as OldPdb |
|
46 | from pdb import Pdb as OldPdb | |
46 |
|
47 | |||
47 | # Allow the set_trace code to operate outside of an ipython instance, even if |
|
48 | # Allow the set_trace code to operate outside of an ipython instance, even if | |
48 | # it does so with some limitations. The rest of this support is implemented in |
|
49 | # it does so with some limitations. The rest of this support is implemented in | |
49 | # the Tracer constructor. |
|
50 | # the Tracer constructor. | |
50 |
|
51 | |||
51 | def make_arrow(pad): |
|
52 | def make_arrow(pad): | |
52 | """generate the leading arrow in front of traceback or debugger""" |
|
53 | """generate the leading arrow in front of traceback or debugger""" | |
53 | if pad >= 2: |
|
54 | if pad >= 2: | |
54 | return '-'*(pad-2) + '> ' |
|
55 | return '-'*(pad-2) + '> ' | |
55 | elif pad == 1: |
|
56 | elif pad == 1: | |
56 | return '>' |
|
57 | return '>' | |
57 | return '' |
|
58 | return '' | |
58 |
|
59 | |||
59 |
|
60 | |||
60 | def BdbQuit_excepthook(et, ev, tb, excepthook=None): |
|
61 | def BdbQuit_excepthook(et, ev, tb, excepthook=None): | |
61 | """Exception hook which handles `BdbQuit` exceptions. |
|
62 | """Exception hook which handles `BdbQuit` exceptions. | |
62 |
|
63 | |||
63 | All other exceptions are processed using the `excepthook` |
|
64 | All other exceptions are processed using the `excepthook` | |
64 | parameter. |
|
65 | parameter. | |
65 | """ |
|
66 | """ | |
66 | warnings.warn("`BdbQuit_excepthook` is deprecated since version 5.1", |
|
67 | warnings.warn("`BdbQuit_excepthook` is deprecated since version 5.1", | |
67 | DeprecationWarning, stacklevel=2) |
|
68 | DeprecationWarning, stacklevel=2) | |
68 | if et==bdb.BdbQuit: |
|
69 | if et==bdb.BdbQuit: | |
69 | print('Exiting Debugger.') |
|
70 | print('Exiting Debugger.') | |
70 | elif excepthook is not None: |
|
71 | elif excepthook is not None: | |
71 | excepthook(et, ev, tb) |
|
72 | excepthook(et, ev, tb) | |
72 | else: |
|
73 | else: | |
73 | # Backwards compatibility. Raise deprecation warning? |
|
74 | # Backwards compatibility. Raise deprecation warning? | |
74 | BdbQuit_excepthook.excepthook_ori(et,ev,tb) |
|
75 | BdbQuit_excepthook.excepthook_ori(et,ev,tb) | |
75 |
|
76 | |||
76 |
|
77 | |||
77 | def BdbQuit_IPython_excepthook(self,et,ev,tb,tb_offset=None): |
|
78 | def BdbQuit_IPython_excepthook(self,et,ev,tb,tb_offset=None): | |
78 | warnings.warn( |
|
79 | warnings.warn( | |
79 | "`BdbQuit_IPython_excepthook` is deprecated since version 5.1", |
|
80 | "`BdbQuit_IPython_excepthook` is deprecated since version 5.1", | |
80 | DeprecationWarning, stacklevel=2) |
|
81 | DeprecationWarning, stacklevel=2) | |
81 | print('Exiting Debugger.') |
|
82 | print('Exiting Debugger.') | |
82 |
|
83 | |||
83 |
|
84 | |||
84 | class Tracer(object): |
|
85 | class Tracer(object): | |
85 | """ |
|
86 | """ | |
86 | DEPRECATED |
|
87 | DEPRECATED | |
87 |
|
88 | |||
88 | Class for local debugging, similar to pdb.set_trace. |
|
89 | Class for local debugging, similar to pdb.set_trace. | |
89 |
|
90 | |||
90 | Instances of this class, when called, behave like pdb.set_trace, but |
|
91 | Instances of this class, when called, behave like pdb.set_trace, but | |
91 | providing IPython's enhanced capabilities. |
|
92 | providing IPython's enhanced capabilities. | |
92 |
|
93 | |||
93 | This is implemented as a class which must be initialized in your own code |
|
94 | This is implemented as a class which must be initialized in your own code | |
94 | and not as a standalone function because we need to detect at runtime |
|
95 | and not as a standalone function because we need to detect at runtime | |
95 | whether IPython is already active or not. That detection is done in the |
|
96 | whether IPython is already active or not. That detection is done in the | |
96 | constructor, ensuring that this code plays nicely with a running IPython, |
|
97 | constructor, ensuring that this code plays nicely with a running IPython, | |
97 | while functioning acceptably (though with limitations) if outside of it. |
|
98 | while functioning acceptably (though with limitations) if outside of it. | |
98 | """ |
|
99 | """ | |
99 |
|
100 | |||
100 | @skip_doctest |
|
101 | @skip_doctest | |
101 | def __init__(self, colors=None): |
|
102 | def __init__(self, colors=None): | |
102 | """ |
|
103 | """ | |
103 | DEPRECATED |
|
104 | DEPRECATED | |
104 |
|
105 | |||
105 | Create a local debugger instance. |
|
106 | Create a local debugger instance. | |
106 |
|
107 | |||
107 | Parameters |
|
108 | Parameters | |
108 | ---------- |
|
109 | ---------- | |
109 |
|
110 | |||
110 | colors : str, optional |
|
111 | colors : str, optional | |
111 | The name of the color scheme to use, it must be one of IPython's |
|
112 | The name of the color scheme to use, it must be one of IPython's | |
112 | valid color schemes. If not given, the function will default to |
|
113 | valid color schemes. If not given, the function will default to | |
113 | the current IPython scheme when running inside IPython, and to |
|
114 | the current IPython scheme when running inside IPython, and to | |
114 | 'NoColor' otherwise. |
|
115 | 'NoColor' otherwise. | |
115 |
|
116 | |||
116 | Examples |
|
117 | Examples | |
117 | -------- |
|
118 | -------- | |
118 | :: |
|
119 | :: | |
119 |
|
120 | |||
120 | from IPython.core.debugger import Tracer; debug_here = Tracer() |
|
121 | from IPython.core.debugger import Tracer; debug_here = Tracer() | |
121 |
|
122 | |||
122 | Later in your code:: |
|
123 | Later in your code:: | |
123 |
|
124 | |||
124 | debug_here() # -> will open up the debugger at that point. |
|
125 | debug_here() # -> will open up the debugger at that point. | |
125 |
|
126 | |||
126 | Once the debugger activates, you can use all of its regular commands to |
|
127 | Once the debugger activates, you can use all of its regular commands to | |
127 | step through code, set breakpoints, etc. See the pdb documentation |
|
128 | step through code, set breakpoints, etc. See the pdb documentation | |
128 | from the Python standard library for usage details. |
|
129 | from the Python standard library for usage details. | |
129 | """ |
|
130 | """ | |
130 | warnings.warn("`Tracer` is deprecated since version 5.1, directly use " |
|
131 | warnings.warn("`Tracer` is deprecated since version 5.1, directly use " | |
131 | "`IPython.core.debugger.Pdb.set_trace()`", |
|
132 | "`IPython.core.debugger.Pdb.set_trace()`", | |
132 | DeprecationWarning, stacklevel=2) |
|
133 | DeprecationWarning, stacklevel=2) | |
133 |
|
134 | |||
134 | ip = get_ipython() |
|
135 | ip = get_ipython() | |
135 | if ip is None: |
|
136 | if ip is None: | |
136 | # Outside of ipython, we set our own exception hook manually |
|
137 | # Outside of ipython, we set our own exception hook manually | |
137 | sys.excepthook = functools.partial(BdbQuit_excepthook, |
|
138 | sys.excepthook = functools.partial(BdbQuit_excepthook, | |
138 | excepthook=sys.excepthook) |
|
139 | excepthook=sys.excepthook) | |
139 | def_colors = 'NoColor' |
|
140 | def_colors = 'NoColor' | |
140 | else: |
|
141 | else: | |
141 | # In ipython, we use its custom exception handler mechanism |
|
142 | # In ipython, we use its custom exception handler mechanism | |
142 | def_colors = ip.colors |
|
143 | def_colors = ip.colors | |
143 | ip.set_custom_exc((bdb.BdbQuit,), BdbQuit_IPython_excepthook) |
|
144 | ip.set_custom_exc((bdb.BdbQuit,), BdbQuit_IPython_excepthook) | |
144 |
|
145 | |||
145 | if colors is None: |
|
146 | if colors is None: | |
146 | colors = def_colors |
|
147 | colors = def_colors | |
147 |
|
148 | |||
148 | # The stdlib debugger internally uses a modified repr from the `repr` |
|
149 | # The stdlib debugger internally uses a modified repr from the `repr` | |
149 | # module, that limits the length of printed strings to a hardcoded |
|
150 | # module, that limits the length of printed strings to a hardcoded | |
150 | # limit of 30 characters. That much trimming is too aggressive, let's |
|
151 | # limit of 30 characters. That much trimming is too aggressive, let's | |
151 | # at least raise that limit to 80 chars, which should be enough for |
|
152 | # at least raise that limit to 80 chars, which should be enough for | |
152 | # most interactive uses. |
|
153 | # most interactive uses. | |
153 | try: |
|
154 | try: | |
154 | try: |
|
155 | try: | |
155 | from reprlib import aRepr # Py 3 |
|
156 | from reprlib import aRepr # Py 3 | |
156 | except ImportError: |
|
157 | except ImportError: | |
157 | from repr import aRepr # Py 2 |
|
158 | from repr import aRepr # Py 2 | |
158 | aRepr.maxstring = 80 |
|
159 | aRepr.maxstring = 80 | |
159 | except: |
|
160 | except: | |
160 | # This is only a user-facing convenience, so any error we encounter |
|
161 | # This is only a user-facing convenience, so any error we encounter | |
161 | # here can be warned about but can be otherwise ignored. These |
|
162 | # here can be warned about but can be otherwise ignored. These | |
162 | # printouts will tell us about problems if this API changes |
|
163 | # printouts will tell us about problems if this API changes | |
163 | import traceback |
|
164 | import traceback | |
164 | traceback.print_exc() |
|
165 | traceback.print_exc() | |
165 |
|
166 | |||
166 | self.debugger = Pdb(colors) |
|
167 | self.debugger = Pdb(colors) | |
167 |
|
168 | |||
168 | def __call__(self): |
|
169 | def __call__(self): | |
169 | """Starts an interactive debugger at the point where called. |
|
170 | """Starts an interactive debugger at the point where called. | |
170 |
|
171 | |||
171 | This is similar to the pdb.set_trace() function from the std lib, but |
|
172 | This is similar to the pdb.set_trace() function from the std lib, but | |
172 | using IPython's enhanced debugger.""" |
|
173 | using IPython's enhanced debugger.""" | |
173 |
|
174 | |||
174 | self.debugger.set_trace(sys._getframe().f_back) |
|
175 | self.debugger.set_trace(sys._getframe().f_back) | |
175 |
|
176 | |||
176 |
|
177 | |||
177 | def decorate_fn_with_doc(new_fn, old_fn, additional_text=""): |
|
178 | def decorate_fn_with_doc(new_fn, old_fn, additional_text=""): | |
178 | """Make new_fn have old_fn's doc string. This is particularly useful |
|
179 | """Make new_fn have old_fn's doc string. This is particularly useful | |
179 | for the ``do_...`` commands that hook into the help system. |
|
180 | for the ``do_...`` commands that hook into the help system. | |
180 | Adapted from from a comp.lang.python posting |
|
181 | Adapted from from a comp.lang.python posting | |
181 | by Duncan Booth.""" |
|
182 | by Duncan Booth.""" | |
182 | def wrapper(*args, **kw): |
|
183 | def wrapper(*args, **kw): | |
183 | return new_fn(*args, **kw) |
|
184 | return new_fn(*args, **kw) | |
184 | if old_fn.__doc__: |
|
185 | if old_fn.__doc__: | |
185 | wrapper.__doc__ = old_fn.__doc__ + additional_text |
|
186 | wrapper.__doc__ = old_fn.__doc__ + additional_text | |
186 | return wrapper |
|
187 | return wrapper | |
187 |
|
188 | |||
188 |
|
189 | |||
189 | def _file_lines(fname): |
|
190 | def _file_lines(fname): | |
190 | """Return the contents of a named file as a list of lines. |
|
191 | """Return the contents of a named file as a list of lines. | |
191 |
|
192 | |||
192 | This function never raises an IOError exception: if the file can't be |
|
193 | This function never raises an IOError exception: if the file can't be | |
193 | read, it simply returns an empty list.""" |
|
194 | read, it simply returns an empty list.""" | |
194 |
|
195 | |||
195 | try: |
|
196 | try: | |
196 | outfile = open(fname) |
|
197 | outfile = open(fname) | |
197 | except IOError: |
|
198 | except IOError: | |
198 | return [] |
|
199 | return [] | |
199 | else: |
|
200 | else: | |
200 | out = outfile.readlines() |
|
201 | out = outfile.readlines() | |
201 | outfile.close() |
|
202 | outfile.close() | |
202 | return out |
|
203 | return out | |
203 |
|
204 | |||
204 |
|
205 | |||
205 | class Pdb(OldPdb): |
|
206 | class Pdb(OldPdb): | |
206 | """Modified Pdb class, does not load readline. |
|
207 | """Modified Pdb class, does not load readline. | |
207 |
|
208 | |||
208 | for a standalone version that uses prompt_toolkit, see |
|
209 | for a standalone version that uses prompt_toolkit, see | |
209 | `IPython.terminal.debugger.TerminalPdb` and |
|
210 | `IPython.terminal.debugger.TerminalPdb` and | |
210 | `IPython.terminal.debugger.set_trace()` |
|
211 | `IPython.terminal.debugger.set_trace()` | |
211 | """ |
|
212 | """ | |
212 |
|
213 | |||
213 | def __init__(self, color_scheme=None, completekey=None, |
|
214 | def __init__(self, color_scheme=None, completekey=None, | |
214 | stdin=None, stdout=None, context=5): |
|
215 | stdin=None, stdout=None, context=5): | |
215 |
|
216 | |||
216 | # Parent constructor: |
|
217 | # Parent constructor: | |
217 | try: |
|
218 | try: | |
218 | self.context = int(context) |
|
219 | self.context = int(context) | |
219 | if self.context <= 0: |
|
220 | if self.context <= 0: | |
220 | raise ValueError("Context must be a positive integer") |
|
221 | raise ValueError("Context must be a positive integer") | |
221 | except (TypeError, ValueError): |
|
222 | except (TypeError, ValueError): | |
222 | raise ValueError("Context must be a positive integer") |
|
223 | raise ValueError("Context must be a positive integer") | |
223 |
|
224 | |||
224 | OldPdb.__init__(self, completekey, stdin, stdout) |
|
225 | OldPdb.__init__(self, completekey, stdin, stdout) | |
225 |
|
226 | |||
226 | # IPython changes... |
|
227 | # IPython changes... | |
227 | self.shell = get_ipython() |
|
228 | self.shell = get_ipython() | |
228 |
|
229 | |||
229 | if self.shell is None: |
|
230 | if self.shell is None: | |
230 | save_main = sys.modules['__main__'] |
|
231 | save_main = sys.modules['__main__'] | |
231 | # No IPython instance running, we must create one |
|
232 | # No IPython instance running, we must create one | |
232 | from IPython.terminal.interactiveshell import \ |
|
233 | from IPython.terminal.interactiveshell import \ | |
233 | TerminalInteractiveShell |
|
234 | TerminalInteractiveShell | |
234 | self.shell = TerminalInteractiveShell.instance() |
|
235 | self.shell = TerminalInteractiveShell.instance() | |
235 | # needed by any code which calls __import__("__main__") after |
|
236 | # needed by any code which calls __import__("__main__") after | |
236 | # the debugger was entered. See also #9941. |
|
237 | # the debugger was entered. See also #9941. | |
237 | sys.modules['__main__'] = save_main |
|
238 | sys.modules['__main__'] = save_main | |
238 |
|
239 | |||
239 | if color_scheme is not None: |
|
240 | if color_scheme is not None: | |
240 | warnings.warn( |
|
241 | warnings.warn( | |
241 | "The `color_scheme` argument is deprecated since version 5.1", |
|
242 | "The `color_scheme` argument is deprecated since version 5.1", | |
242 | DeprecationWarning, stacklevel=2) |
|
243 | DeprecationWarning, stacklevel=2) | |
243 | else: |
|
244 | else: | |
244 | color_scheme = self.shell.colors |
|
245 | color_scheme = self.shell.colors | |
245 |
|
246 | |||
246 | self.aliases = {} |
|
247 | self.aliases = {} | |
247 |
|
248 | |||
248 | # Create color table: we copy the default one from the traceback |
|
249 | # Create color table: we copy the default one from the traceback | |
249 | # module and add a few attributes needed for debugging |
|
250 | # module and add a few attributes needed for debugging | |
250 | self.color_scheme_table = exception_colors() |
|
251 | self.color_scheme_table = exception_colors() | |
251 |
|
252 | |||
252 | # shorthands |
|
253 | # shorthands | |
253 | C = coloransi.TermColors |
|
254 | C = coloransi.TermColors | |
254 | cst = self.color_scheme_table |
|
255 | cst = self.color_scheme_table | |
255 |
|
256 | |||
256 | cst['NoColor'].colors.prompt = C.NoColor |
|
257 | cst['NoColor'].colors.prompt = C.NoColor | |
257 | cst['NoColor'].colors.breakpoint_enabled = C.NoColor |
|
258 | cst['NoColor'].colors.breakpoint_enabled = C.NoColor | |
258 | cst['NoColor'].colors.breakpoint_disabled = C.NoColor |
|
259 | cst['NoColor'].colors.breakpoint_disabled = C.NoColor | |
259 |
|
260 | |||
260 | cst['Linux'].colors.prompt = C.Green |
|
261 | cst['Linux'].colors.prompt = C.Green | |
261 | cst['Linux'].colors.breakpoint_enabled = C.LightRed |
|
262 | cst['Linux'].colors.breakpoint_enabled = C.LightRed | |
262 | cst['Linux'].colors.breakpoint_disabled = C.Red |
|
263 | cst['Linux'].colors.breakpoint_disabled = C.Red | |
263 |
|
264 | |||
264 | cst['LightBG'].colors.prompt = C.Blue |
|
265 | cst['LightBG'].colors.prompt = C.Blue | |
265 | cst['LightBG'].colors.breakpoint_enabled = C.LightRed |
|
266 | cst['LightBG'].colors.breakpoint_enabled = C.LightRed | |
266 | cst['LightBG'].colors.breakpoint_disabled = C.Red |
|
267 | cst['LightBG'].colors.breakpoint_disabled = C.Red | |
267 |
|
268 | |||
268 | cst['Neutral'].colors.prompt = C.Blue |
|
269 | cst['Neutral'].colors.prompt = C.Blue | |
269 | cst['Neutral'].colors.breakpoint_enabled = C.LightRed |
|
270 | cst['Neutral'].colors.breakpoint_enabled = C.LightRed | |
270 | cst['Neutral'].colors.breakpoint_disabled = C.Red |
|
271 | cst['Neutral'].colors.breakpoint_disabled = C.Red | |
271 |
|
272 | |||
272 |
|
273 | |||
273 | # Add a python parser so we can syntax highlight source while |
|
274 | # Add a python parser so we can syntax highlight source while | |
274 | # debugging. |
|
275 | # debugging. | |
275 | self.parser = PyColorize.Parser(style=color_scheme) |
|
276 | self.parser = PyColorize.Parser(style=color_scheme) | |
276 | self.set_colors(color_scheme) |
|
277 | self.set_colors(color_scheme) | |
277 |
|
278 | |||
278 | # Set the prompt - the default prompt is '(Pdb)' |
|
279 | # Set the prompt - the default prompt is '(Pdb)' | |
279 | self.prompt = prompt |
|
280 | self.prompt = prompt | |
280 |
|
281 | |||
281 | def set_colors(self, scheme): |
|
282 | def set_colors(self, scheme): | |
282 | """Shorthand access to the color table scheme selector method.""" |
|
283 | """Shorthand access to the color table scheme selector method.""" | |
283 | self.color_scheme_table.set_active_scheme(scheme) |
|
284 | self.color_scheme_table.set_active_scheme(scheme) | |
284 | self.parser.style = scheme |
|
285 | self.parser.style = scheme | |
285 |
|
286 | |||
286 | def interaction(self, frame, traceback): |
|
287 | def interaction(self, frame, traceback): | |
287 | try: |
|
288 | try: | |
288 | OldPdb.interaction(self, frame, traceback) |
|
289 | OldPdb.interaction(self, frame, traceback) | |
289 | except KeyboardInterrupt: |
|
290 | except KeyboardInterrupt: | |
290 | sys.stdout.write('\n' + self.shell.get_exception_only()) |
|
291 | sys.stdout.write('\n' + self.shell.get_exception_only()) | |
291 |
|
292 | |||
292 | def new_do_up(self, arg): |
|
293 | def new_do_up(self, arg): | |
293 | OldPdb.do_up(self, arg) |
|
294 | OldPdb.do_up(self, arg) | |
294 | do_u = do_up = decorate_fn_with_doc(new_do_up, OldPdb.do_up) |
|
295 | do_u = do_up = decorate_fn_with_doc(new_do_up, OldPdb.do_up) | |
295 |
|
296 | |||
296 | def new_do_down(self, arg): |
|
297 | def new_do_down(self, arg): | |
297 | OldPdb.do_down(self, arg) |
|
298 | OldPdb.do_down(self, arg) | |
298 |
|
299 | |||
299 | do_d = do_down = decorate_fn_with_doc(new_do_down, OldPdb.do_down) |
|
300 | do_d = do_down = decorate_fn_with_doc(new_do_down, OldPdb.do_down) | |
300 |
|
301 | |||
301 | def new_do_frame(self, arg): |
|
302 | def new_do_frame(self, arg): | |
302 | OldPdb.do_frame(self, arg) |
|
303 | OldPdb.do_frame(self, arg) | |
303 |
|
304 | |||
304 | def new_do_quit(self, arg): |
|
305 | def new_do_quit(self, arg): | |
305 |
|
306 | |||
306 | if hasattr(self, 'old_all_completions'): |
|
307 | if hasattr(self, 'old_all_completions'): | |
307 | self.shell.Completer.all_completions=self.old_all_completions |
|
308 | self.shell.Completer.all_completions=self.old_all_completions | |
308 |
|
309 | |||
309 | return OldPdb.do_quit(self, arg) |
|
310 | return OldPdb.do_quit(self, arg) | |
310 |
|
311 | |||
311 | do_q = do_quit = decorate_fn_with_doc(new_do_quit, OldPdb.do_quit) |
|
312 | do_q = do_quit = decorate_fn_with_doc(new_do_quit, OldPdb.do_quit) | |
312 |
|
313 | |||
313 | def new_do_restart(self, arg): |
|
314 | def new_do_restart(self, arg): | |
314 | """Restart command. In the context of ipython this is exactly the same |
|
315 | """Restart command. In the context of ipython this is exactly the same | |
315 | thing as 'quit'.""" |
|
316 | thing as 'quit'.""" | |
316 | self.msg("Restart doesn't make sense here. Using 'quit' instead.") |
|
317 | self.msg("Restart doesn't make sense here. Using 'quit' instead.") | |
317 | return self.do_quit(arg) |
|
318 | return self.do_quit(arg) | |
318 |
|
319 | |||
319 | def print_stack_trace(self, context=None): |
|
320 | def print_stack_trace(self, context=None): | |
320 | if context is None: |
|
321 | if context is None: | |
321 | context = self.context |
|
322 | context = self.context | |
322 | try: |
|
323 | try: | |
323 | context=int(context) |
|
324 | context=int(context) | |
324 | if context <= 0: |
|
325 | if context <= 0: | |
325 | raise ValueError("Context must be a positive integer") |
|
326 | raise ValueError("Context must be a positive integer") | |
326 | except (TypeError, ValueError): |
|
327 | except (TypeError, ValueError): | |
327 | raise ValueError("Context must be a positive integer") |
|
328 | raise ValueError("Context must be a positive integer") | |
328 | try: |
|
329 | try: | |
329 | for frame_lineno in self.stack: |
|
330 | for frame_lineno in self.stack: | |
330 | self.print_stack_entry(frame_lineno, context=context) |
|
331 | self.print_stack_entry(frame_lineno, context=context) | |
331 | except KeyboardInterrupt: |
|
332 | except KeyboardInterrupt: | |
332 | pass |
|
333 | pass | |
333 |
|
334 | |||
334 | def print_stack_entry(self,frame_lineno, prompt_prefix='\n-> ', |
|
335 | def print_stack_entry(self,frame_lineno, prompt_prefix='\n-> ', | |
335 | context=None): |
|
336 | context=None): | |
336 | if context is None: |
|
337 | if context is None: | |
337 | context = self.context |
|
338 | context = self.context | |
338 | try: |
|
339 | try: | |
339 | context=int(context) |
|
340 | context=int(context) | |
340 | if context <= 0: |
|
341 | if context <= 0: | |
341 | raise ValueError("Context must be a positive integer") |
|
342 | raise ValueError("Context must be a positive integer") | |
342 | except (TypeError, ValueError): |
|
343 | except (TypeError, ValueError): | |
343 | raise ValueError("Context must be a positive integer") |
|
344 | raise ValueError("Context must be a positive integer") | |
344 | print(self.format_stack_entry(frame_lineno, '', context)) |
|
345 | print(self.format_stack_entry(frame_lineno, '', context)) | |
345 |
|
346 | |||
346 | # vds: >> |
|
347 | # vds: >> | |
347 | frame, lineno = frame_lineno |
|
348 | frame, lineno = frame_lineno | |
348 | filename = frame.f_code.co_filename |
|
349 | filename = frame.f_code.co_filename | |
349 | self.shell.hooks.synchronize_with_editor(filename, lineno, 0) |
|
350 | self.shell.hooks.synchronize_with_editor(filename, lineno, 0) | |
350 | # vds: << |
|
351 | # vds: << | |
351 |
|
352 | |||
352 | def format_stack_entry(self, frame_lineno, lprefix=': ', context=None): |
|
353 | def format_stack_entry(self, frame_lineno, lprefix=': ', context=None): | |
353 | if context is None: |
|
354 | if context is None: | |
354 | context = self.context |
|
355 | context = self.context | |
355 | try: |
|
356 | try: | |
356 | context=int(context) |
|
357 | context=int(context) | |
357 | if context <= 0: |
|
358 | if context <= 0: | |
358 | print("Context must be a positive integer") |
|
359 | print("Context must be a positive integer") | |
359 | except (TypeError, ValueError): |
|
360 | except (TypeError, ValueError): | |
360 | print("Context must be a positive integer") |
|
361 | print("Context must be a positive integer") | |
361 | try: |
|
362 | try: | |
362 | import reprlib # Py 3 |
|
363 | import reprlib # Py 3 | |
363 | except ImportError: |
|
364 | except ImportError: | |
364 | import repr as reprlib # Py 2 |
|
365 | import repr as reprlib # Py 2 | |
365 |
|
366 | |||
366 | ret = [] |
|
367 | ret = [] | |
367 |
|
368 | |||
368 | Colors = self.color_scheme_table.active_colors |
|
369 | Colors = self.color_scheme_table.active_colors | |
369 | ColorsNormal = Colors.Normal |
|
370 | ColorsNormal = Colors.Normal | |
370 | tpl_link = u'%s%%s%s' % (Colors.filenameEm, ColorsNormal) |
|
371 | tpl_link = u'%s%%s%s' % (Colors.filenameEm, ColorsNormal) | |
371 | tpl_call = u'%s%%s%s%%s%s' % (Colors.vName, Colors.valEm, ColorsNormal) |
|
372 | tpl_call = u'%s%%s%s%%s%s' % (Colors.vName, Colors.valEm, ColorsNormal) | |
372 | tpl_line = u'%%s%s%%s %s%%s' % (Colors.lineno, ColorsNormal) |
|
373 | tpl_line = u'%%s%s%%s %s%%s' % (Colors.lineno, ColorsNormal) | |
373 | tpl_line_em = u'%%s%s%%s %s%%s%s' % (Colors.linenoEm, Colors.line, |
|
374 | tpl_line_em = u'%%s%s%%s %s%%s%s' % (Colors.linenoEm, Colors.line, | |
374 | ColorsNormal) |
|
375 | ColorsNormal) | |
375 |
|
376 | |||
376 | frame, lineno = frame_lineno |
|
377 | frame, lineno = frame_lineno | |
377 |
|
378 | |||
378 | return_value = '' |
|
379 | return_value = '' | |
379 | if '__return__' in frame.f_locals: |
|
380 | if '__return__' in frame.f_locals: | |
380 | rv = frame.f_locals['__return__'] |
|
381 | rv = frame.f_locals['__return__'] | |
381 | #return_value += '->' |
|
382 | #return_value += '->' | |
382 | return_value += reprlib.repr(rv) + '\n' |
|
383 | return_value += reprlib.repr(rv) + '\n' | |
383 | ret.append(return_value) |
|
384 | ret.append(return_value) | |
384 |
|
385 | |||
385 | #s = filename + '(' + `lineno` + ')' |
|
386 | #s = filename + '(' + `lineno` + ')' | |
386 | filename = self.canonic(frame.f_code.co_filename) |
|
387 | filename = self.canonic(frame.f_code.co_filename) | |
387 | link = tpl_link % py3compat.cast_unicode(filename) |
|
388 | link = tpl_link % py3compat.cast_unicode(filename) | |
388 |
|
389 | |||
389 | if frame.f_code.co_name: |
|
390 | if frame.f_code.co_name: | |
390 | func = frame.f_code.co_name |
|
391 | func = frame.f_code.co_name | |
391 | else: |
|
392 | else: | |
392 | func = "<lambda>" |
|
393 | func = "<lambda>" | |
393 |
|
394 | |||
394 | call = '' |
|
395 | call = '' | |
395 | if func != '?': |
|
396 | if func != '?': | |
396 | if '__args__' in frame.f_locals: |
|
397 | if '__args__' in frame.f_locals: | |
397 | args = reprlib.repr(frame.f_locals['__args__']) |
|
398 | args = reprlib.repr(frame.f_locals['__args__']) | |
398 | else: |
|
399 | else: | |
399 | args = '()' |
|
400 | args = '()' | |
400 | call = tpl_call % (func, args) |
|
401 | call = tpl_call % (func, args) | |
401 |
|
402 | |||
402 | # The level info should be generated in the same format pdb uses, to |
|
403 | # The level info should be generated in the same format pdb uses, to | |
403 | # avoid breaking the pdbtrack functionality of python-mode in *emacs. |
|
404 | # avoid breaking the pdbtrack functionality of python-mode in *emacs. | |
404 | if frame is self.curframe: |
|
405 | if frame is self.curframe: | |
405 | ret.append('> ') |
|
406 | ret.append('> ') | |
406 | else: |
|
407 | else: | |
407 | ret.append(' ') |
|
408 | ret.append(' ') | |
408 | ret.append(u'%s(%s)%s\n' % (link,lineno,call)) |
|
409 | ret.append(u'%s(%s)%s\n' % (link,lineno,call)) | |
409 |
|
410 | |||
410 | start = lineno - 1 - context//2 |
|
411 | start = lineno - 1 - context//2 | |
411 | lines = linecache.getlines(filename) |
|
412 | lines = linecache.getlines(filename) | |
412 | start = min(start, len(lines) - context) |
|
413 | start = min(start, len(lines) - context) | |
413 | start = max(start, 0) |
|
414 | start = max(start, 0) | |
414 | lines = lines[start : start + context] |
|
415 | lines = lines[start : start + context] | |
415 |
|
416 | |||
416 | for i,line in enumerate(lines): |
|
417 | for i,line in enumerate(lines): | |
417 | show_arrow = (start + 1 + i == lineno) |
|
418 | show_arrow = (start + 1 + i == lineno) | |
418 | linetpl = (frame is self.curframe or show_arrow) \ |
|
419 | linetpl = (frame is self.curframe or show_arrow) \ | |
419 | and tpl_line_em \ |
|
420 | and tpl_line_em \ | |
420 | or tpl_line |
|
421 | or tpl_line | |
421 | ret.append(self.__format_line(linetpl, filename, |
|
422 | ret.append(self.__format_line(linetpl, filename, | |
422 | start + 1 + i, line, |
|
423 | start + 1 + i, line, | |
423 | arrow = show_arrow) ) |
|
424 | arrow = show_arrow) ) | |
424 | return ''.join(ret) |
|
425 | return ''.join(ret) | |
425 |
|
426 | |||
426 | def __format_line(self, tpl_line, filename, lineno, line, arrow = False): |
|
427 | def __format_line(self, tpl_line, filename, lineno, line, arrow = False): | |
427 | bp_mark = "" |
|
428 | bp_mark = "" | |
428 | bp_mark_color = "" |
|
429 | bp_mark_color = "" | |
429 |
|
430 | |||
430 | new_line, err = self.parser.format2(line, 'str') |
|
431 | new_line, err = self.parser.format2(line, 'str') | |
431 | if not err: |
|
432 | if not err: | |
432 | line = new_line |
|
433 | line = new_line | |
433 |
|
434 | |||
434 | bp = None |
|
435 | bp = None | |
435 | if lineno in self.get_file_breaks(filename): |
|
436 | if lineno in self.get_file_breaks(filename): | |
436 | bps = self.get_breaks(filename, lineno) |
|
437 | bps = self.get_breaks(filename, lineno) | |
437 | bp = bps[-1] |
|
438 | bp = bps[-1] | |
438 |
|
439 | |||
439 | if bp: |
|
440 | if bp: | |
440 | Colors = self.color_scheme_table.active_colors |
|
441 | Colors = self.color_scheme_table.active_colors | |
441 | bp_mark = str(bp.number) |
|
442 | bp_mark = str(bp.number) | |
442 | bp_mark_color = Colors.breakpoint_enabled |
|
443 | bp_mark_color = Colors.breakpoint_enabled | |
443 | if not bp.enabled: |
|
444 | if not bp.enabled: | |
444 | bp_mark_color = Colors.breakpoint_disabled |
|
445 | bp_mark_color = Colors.breakpoint_disabled | |
445 |
|
446 | |||
446 | numbers_width = 7 |
|
447 | numbers_width = 7 | |
447 | if arrow: |
|
448 | if arrow: | |
448 | # This is the line with the error |
|
449 | # This is the line with the error | |
449 | pad = numbers_width - len(str(lineno)) - len(bp_mark) |
|
450 | pad = numbers_width - len(str(lineno)) - len(bp_mark) | |
450 | num = '%s%s' % (make_arrow(pad), str(lineno)) |
|
451 | num = '%s%s' % (make_arrow(pad), str(lineno)) | |
451 | else: |
|
452 | else: | |
452 | num = '%*s' % (numbers_width - len(bp_mark), str(lineno)) |
|
453 | num = '%*s' % (numbers_width - len(bp_mark), str(lineno)) | |
453 |
|
454 | |||
454 | return tpl_line % (bp_mark_color + bp_mark, num, line) |
|
455 | return tpl_line % (bp_mark_color + bp_mark, num, line) | |
455 |
|
456 | |||
456 |
|
457 | |||
457 | def print_list_lines(self, filename, first, last): |
|
458 | def print_list_lines(self, filename, first, last): | |
458 | """The printing (as opposed to the parsing part of a 'list' |
|
459 | """The printing (as opposed to the parsing part of a 'list' | |
459 | command.""" |
|
460 | command.""" | |
460 | try: |
|
461 | try: | |
461 | Colors = self.color_scheme_table.active_colors |
|
462 | Colors = self.color_scheme_table.active_colors | |
462 | ColorsNormal = Colors.Normal |
|
463 | ColorsNormal = Colors.Normal | |
463 | tpl_line = '%%s%s%%s %s%%s' % (Colors.lineno, ColorsNormal) |
|
464 | tpl_line = '%%s%s%%s %s%%s' % (Colors.lineno, ColorsNormal) | |
464 | tpl_line_em = '%%s%s%%s %s%%s%s' % (Colors.linenoEm, Colors.line, ColorsNormal) |
|
465 | tpl_line_em = '%%s%s%%s %s%%s%s' % (Colors.linenoEm, Colors.line, ColorsNormal) | |
465 | src = [] |
|
466 | src = [] | |
466 | if filename == "<string>" and hasattr(self, "_exec_filename"): |
|
467 | if filename == "<string>" and hasattr(self, "_exec_filename"): | |
467 | filename = self._exec_filename |
|
468 | filename = self._exec_filename | |
468 |
|
469 | |||
469 | for lineno in range(first, last+1): |
|
470 | for lineno in range(first, last+1): | |
470 | line = linecache.getline(filename, lineno) |
|
471 | line = linecache.getline(filename, lineno) | |
471 | if not line: |
|
472 | if not line: | |
472 | break |
|
473 | break | |
473 |
|
474 | |||
474 | if lineno == self.curframe.f_lineno: |
|
475 | if lineno == self.curframe.f_lineno: | |
475 | line = self.__format_line(tpl_line_em, filename, lineno, line, arrow = True) |
|
476 | line = self.__format_line(tpl_line_em, filename, lineno, line, arrow = True) | |
476 | else: |
|
477 | else: | |
477 | line = self.__format_line(tpl_line, filename, lineno, line, arrow = False) |
|
478 | line = self.__format_line(tpl_line, filename, lineno, line, arrow = False) | |
478 |
|
479 | |||
479 | src.append(line) |
|
480 | src.append(line) | |
480 | self.lineno = lineno |
|
481 | self.lineno = lineno | |
481 |
|
482 | |||
482 | print(''.join(src)) |
|
483 | print(''.join(src)) | |
483 |
|
484 | |||
484 | except KeyboardInterrupt: |
|
485 | except KeyboardInterrupt: | |
485 | pass |
|
486 | pass | |
486 |
|
487 | |||
487 | def do_list(self, arg): |
|
488 | def do_list(self, arg): | |
488 | self.lastcmd = 'list' |
|
489 | self.lastcmd = 'list' | |
489 | last = None |
|
490 | last = None | |
490 | if arg: |
|
491 | if arg: | |
491 | try: |
|
492 | try: | |
492 | x = eval(arg, {}, {}) |
|
493 | x = eval(arg, {}, {}) | |
493 | if type(x) == type(()): |
|
494 | if type(x) == type(()): | |
494 | first, last = x |
|
495 | first, last = x | |
495 | first = int(first) |
|
496 | first = int(first) | |
496 | last = int(last) |
|
497 | last = int(last) | |
497 | if last < first: |
|
498 | if last < first: | |
498 | # Assume it's a count |
|
499 | # Assume it's a count | |
499 | last = first + last |
|
500 | last = first + last | |
500 | else: |
|
501 | else: | |
501 | first = max(1, int(x) - 5) |
|
502 | first = max(1, int(x) - 5) | |
502 | except: |
|
503 | except: | |
503 | print('*** Error in argument:', repr(arg)) |
|
504 | print('*** Error in argument:', repr(arg)) | |
504 | return |
|
505 | return | |
505 | elif self.lineno is None: |
|
506 | elif self.lineno is None: | |
506 | first = max(1, self.curframe.f_lineno - 5) |
|
507 | first = max(1, self.curframe.f_lineno - 5) | |
507 | else: |
|
508 | else: | |
508 | first = self.lineno + 1 |
|
509 | first = self.lineno + 1 | |
509 | if last is None: |
|
510 | if last is None: | |
510 | last = first + 10 |
|
511 | last = first + 10 | |
511 | self.print_list_lines(self.curframe.f_code.co_filename, first, last) |
|
512 | self.print_list_lines(self.curframe.f_code.co_filename, first, last) | |
512 |
|
513 | |||
513 | # vds: >> |
|
514 | # vds: >> | |
514 | lineno = first |
|
515 | lineno = first | |
515 | filename = self.curframe.f_code.co_filename |
|
516 | filename = self.curframe.f_code.co_filename | |
516 | self.shell.hooks.synchronize_with_editor(filename, lineno, 0) |
|
517 | self.shell.hooks.synchronize_with_editor(filename, lineno, 0) | |
517 | # vds: << |
|
518 | # vds: << | |
518 |
|
519 | |||
519 | do_l = do_list |
|
520 | do_l = do_list | |
520 |
|
521 | |||
521 | def getsourcelines(self, obj): |
|
522 | def getsourcelines(self, obj): | |
522 | lines, lineno = inspect.findsource(obj) |
|
523 | lines, lineno = inspect.findsource(obj) | |
523 | if inspect.isframe(obj) and obj.f_globals is obj.f_locals: |
|
524 | if inspect.isframe(obj) and obj.f_globals is obj.f_locals: | |
524 | # must be a module frame: do not try to cut a block out of it |
|
525 | # must be a module frame: do not try to cut a block out of it | |
525 | return lines, 1 |
|
526 | return lines, 1 | |
526 | elif inspect.ismodule(obj): |
|
527 | elif inspect.ismodule(obj): | |
527 | return lines, 1 |
|
528 | return lines, 1 | |
528 | return inspect.getblock(lines[lineno:]), lineno+1 |
|
529 | return inspect.getblock(lines[lineno:]), lineno+1 | |
529 |
|
530 | |||
530 | def do_longlist(self, arg): |
|
531 | def do_longlist(self, arg): | |
531 | self.lastcmd = 'longlist' |
|
532 | self.lastcmd = 'longlist' | |
532 | try: |
|
533 | try: | |
533 | lines, lineno = self.getsourcelines(self.curframe) |
|
534 | lines, lineno = self.getsourcelines(self.curframe) | |
534 | except OSError as err: |
|
535 | except OSError as err: | |
535 | self.error(err) |
|
536 | self.error(err) | |
536 | return |
|
537 | return | |
537 | last = lineno + len(lines) |
|
538 | last = lineno + len(lines) | |
538 | self.print_list_lines(self.curframe.f_code.co_filename, lineno, last) |
|
539 | self.print_list_lines(self.curframe.f_code.co_filename, lineno, last) | |
539 | do_ll = do_longlist |
|
540 | do_ll = do_longlist | |
540 |
|
541 | |||
541 | def do_pdef(self, arg): |
|
542 | def do_pdef(self, arg): | |
542 | """Print the call signature for any callable object. |
|
543 | """Print the call signature for any callable object. | |
543 |
|
544 | |||
544 | The debugger interface to %pdef""" |
|
545 | The debugger interface to %pdef""" | |
545 | namespaces = [('Locals', self.curframe.f_locals), |
|
546 | namespaces = [('Locals', self.curframe.f_locals), | |
546 | ('Globals', self.curframe.f_globals)] |
|
547 | ('Globals', self.curframe.f_globals)] | |
547 | self.shell.find_line_magic('pdef')(arg, namespaces=namespaces) |
|
548 | self.shell.find_line_magic('pdef')(arg, namespaces=namespaces) | |
548 |
|
549 | |||
549 | def do_pdoc(self, arg): |
|
550 | def do_pdoc(self, arg): | |
550 | """Print the docstring for an object. |
|
551 | """Print the docstring for an object. | |
551 |
|
552 | |||
552 | The debugger interface to %pdoc.""" |
|
553 | The debugger interface to %pdoc.""" | |
553 | namespaces = [('Locals', self.curframe.f_locals), |
|
554 | namespaces = [('Locals', self.curframe.f_locals), | |
554 | ('Globals', self.curframe.f_globals)] |
|
555 | ('Globals', self.curframe.f_globals)] | |
555 | self.shell.find_line_magic('pdoc')(arg, namespaces=namespaces) |
|
556 | self.shell.find_line_magic('pdoc')(arg, namespaces=namespaces) | |
556 |
|
557 | |||
557 | def do_pfile(self, arg): |
|
558 | def do_pfile(self, arg): | |
558 | """Print (or run through pager) the file where an object is defined. |
|
559 | """Print (or run through pager) the file where an object is defined. | |
559 |
|
560 | |||
560 | The debugger interface to %pfile. |
|
561 | The debugger interface to %pfile. | |
561 | """ |
|
562 | """ | |
562 | namespaces = [('Locals', self.curframe.f_locals), |
|
563 | namespaces = [('Locals', self.curframe.f_locals), | |
563 | ('Globals', self.curframe.f_globals)] |
|
564 | ('Globals', self.curframe.f_globals)] | |
564 | self.shell.find_line_magic('pfile')(arg, namespaces=namespaces) |
|
565 | self.shell.find_line_magic('pfile')(arg, namespaces=namespaces) | |
565 |
|
566 | |||
566 | def do_pinfo(self, arg): |
|
567 | def do_pinfo(self, arg): | |
567 | """Provide detailed information about an object. |
|
568 | """Provide detailed information about an object. | |
568 |
|
569 | |||
569 | The debugger interface to %pinfo, i.e., obj?.""" |
|
570 | The debugger interface to %pinfo, i.e., obj?.""" | |
570 | namespaces = [('Locals', self.curframe.f_locals), |
|
571 | namespaces = [('Locals', self.curframe.f_locals), | |
571 | ('Globals', self.curframe.f_globals)] |
|
572 | ('Globals', self.curframe.f_globals)] | |
572 | self.shell.find_line_magic('pinfo')(arg, namespaces=namespaces) |
|
573 | self.shell.find_line_magic('pinfo')(arg, namespaces=namespaces) | |
573 |
|
574 | |||
574 | def do_pinfo2(self, arg): |
|
575 | def do_pinfo2(self, arg): | |
575 | """Provide extra detailed information about an object. |
|
576 | """Provide extra detailed information about an object. | |
576 |
|
577 | |||
577 | The debugger interface to %pinfo2, i.e., obj??.""" |
|
578 | The debugger interface to %pinfo2, i.e., obj??.""" | |
578 | namespaces = [('Locals', self.curframe.f_locals), |
|
579 | namespaces = [('Locals', self.curframe.f_locals), | |
579 | ('Globals', self.curframe.f_globals)] |
|
580 | ('Globals', self.curframe.f_globals)] | |
580 | self.shell.find_line_magic('pinfo2')(arg, namespaces=namespaces) |
|
581 | self.shell.find_line_magic('pinfo2')(arg, namespaces=namespaces) | |
581 |
|
582 | |||
582 | def do_psource(self, arg): |
|
583 | def do_psource(self, arg): | |
583 | """Print (or run through pager) the source code for an object.""" |
|
584 | """Print (or run through pager) the source code for an object.""" | |
584 | namespaces = [('Locals', self.curframe.f_locals), |
|
585 | namespaces = [('Locals', self.curframe.f_locals), | |
585 | ('Globals', self.curframe.f_globals)] |
|
586 | ('Globals', self.curframe.f_globals)] | |
586 | self.shell.find_line_magic('psource')(arg, namespaces=namespaces) |
|
587 | self.shell.find_line_magic('psource')(arg, namespaces=namespaces) | |
587 |
|
588 | |||
588 | def do_where(self, arg): |
|
589 | def do_where(self, arg): | |
589 | """w(here) |
|
590 | """w(here) | |
590 | Print a stack trace, with the most recent frame at the bottom. |
|
591 | Print a stack trace, with the most recent frame at the bottom. | |
591 | An arrow indicates the "current frame", which determines the |
|
592 | An arrow indicates the "current frame", which determines the | |
592 | context of most commands. 'bt' is an alias for this command. |
|
593 | context of most commands. 'bt' is an alias for this command. | |
593 |
|
594 | |||
594 | Take a number as argument as an (optional) number of context line to |
|
595 | Take a number as argument as an (optional) number of context line to | |
595 | print""" |
|
596 | print""" | |
596 | if arg: |
|
597 | if arg: | |
597 | context = int(arg) |
|
598 | context = int(arg) | |
598 | self.print_stack_trace(context) |
|
599 | self.print_stack_trace(context) | |
599 | else: |
|
600 | else: | |
600 | self.print_stack_trace() |
|
601 | self.print_stack_trace() | |
601 |
|
602 | |||
602 | do_w = do_where |
|
603 | do_w = do_where | |
603 |
|
604 | |||
604 |
|
605 | |||
605 | def set_trace(frame=None): |
|
606 | def set_trace(frame=None): | |
606 | """ |
|
607 | """ | |
607 | Start debugging from `frame`. |
|
608 | Start debugging from `frame`. | |
608 |
|
609 | |||
609 | If frame is not specified, debugging starts from caller's frame. |
|
610 | If frame is not specified, debugging starts from caller's frame. | |
610 | """ |
|
611 | """ | |
611 | Pdb().set_trace(frame or sys._getframe().f_back) |
|
612 | Pdb().set_trace(frame or sys._getframe().f_back) |
@@ -1,557 +1,557 b'' | |||||
1 | """Various display related classes. |
|
1 | """Various display related classes. | |
2 |
|
2 | |||
3 | Authors : MinRK, gregcaporaso, dannystaple |
|
3 | Authors : MinRK, gregcaporaso, dannystaple | |
4 | """ |
|
4 | """ | |
5 | from os.path import exists, isfile, splitext, abspath, join, isdir |
|
5 | from os.path import exists, isfile, splitext, abspath, join, isdir | |
6 | from os import walk, sep |
|
6 | from os import walk, sep | |
7 |
|
7 | |||
8 | from IPython.core.display import DisplayObject |
|
8 | from IPython.core.display import DisplayObject | |
9 |
|
9 | |||
10 | __all__ = ['Audio', 'IFrame', 'YouTubeVideo', 'VimeoVideo', 'ScribdDocument', |
|
10 | __all__ = ['Audio', 'IFrame', 'YouTubeVideo', 'VimeoVideo', 'ScribdDocument', | |
11 | 'FileLink', 'FileLinks'] |
|
11 | 'FileLink', 'FileLinks'] | |
12 |
|
12 | |||
13 |
|
13 | |||
14 | class Audio(DisplayObject): |
|
14 | class Audio(DisplayObject): | |
15 | """Create an audio object. |
|
15 | """Create an audio object. | |
16 |
|
16 | |||
17 | When this object is returned by an input cell or passed to the |
|
17 | When this object is returned by an input cell or passed to the | |
18 | display function, it will result in Audio controls being displayed |
|
18 | display function, it will result in Audio controls being displayed | |
19 | in the frontend (only works in the notebook). |
|
19 | in the frontend (only works in the notebook). | |
20 |
|
20 | |||
21 | Parameters |
|
21 | Parameters | |
22 | ---------- |
|
22 | ---------- | |
23 | data : numpy array, list, unicode, str or bytes |
|
23 | data : numpy array, list, unicode, str or bytes | |
24 | Can be one of |
|
24 | Can be one of | |
25 |
|
25 | |||
26 | * Numpy 1d array containing the desired waveform (mono) |
|
26 | * Numpy 1d array containing the desired waveform (mono) | |
27 | * Numpy 2d array containing waveforms for each channel. |
|
27 | * Numpy 2d array containing waveforms for each channel. | |
28 | Shape=(NCHAN, NSAMPLES). For the standard channel order, see |
|
28 | Shape=(NCHAN, NSAMPLES). For the standard channel order, see | |
29 | http://msdn.microsoft.com/en-us/library/windows/hardware/dn653308(v=vs.85).aspx |
|
29 | http://msdn.microsoft.com/en-us/library/windows/hardware/dn653308(v=vs.85).aspx | |
30 | * List of float or integer representing the waveform (mono) |
|
30 | * List of float or integer representing the waveform (mono) | |
31 | * String containing the filename |
|
31 | * String containing the filename | |
32 | * Bytestring containing raw PCM data or |
|
32 | * Bytestring containing raw PCM data or | |
33 | * URL pointing to a file on the web. |
|
33 | * URL pointing to a file on the web. | |
34 |
|
34 | |||
35 | If the array option is used the waveform will be normalized. |
|
35 | If the array option is used the waveform will be normalized. | |
36 |
|
36 | |||
37 | If a filename or url is used the format support will be browser |
|
37 | If a filename or url is used the format support will be browser | |
38 | dependent. |
|
38 | dependent. | |
39 | url : unicode |
|
39 | url : unicode | |
40 | A URL to download the data from. |
|
40 | A URL to download the data from. | |
41 | filename : unicode |
|
41 | filename : unicode | |
42 | Path to a local file to load the data from. |
|
42 | Path to a local file to load the data from. | |
43 | embed : boolean |
|
43 | embed : boolean | |
44 | Should the audio data be embedded using a data URI (True) or should |
|
44 | Should the audio data be embedded using a data URI (True) or should | |
45 | the original source be referenced. Set this to True if you want the |
|
45 | the original source be referenced. Set this to True if you want the | |
46 | audio to playable later with no internet connection in the notebook. |
|
46 | audio to playable later with no internet connection in the notebook. | |
47 |
|
47 | |||
48 | Default is `True`, unless the keyword argument `url` is set, then |
|
48 | Default is `True`, unless the keyword argument `url` is set, then | |
49 | default value is `False`. |
|
49 | default value is `False`. | |
50 | rate : integer |
|
50 | rate : integer | |
51 | The sampling rate of the raw data. |
|
51 | The sampling rate of the raw data. | |
52 | Only required when data parameter is being used as an array |
|
52 | Only required when data parameter is being used as an array | |
53 | autoplay : bool |
|
53 | autoplay : bool | |
54 | Set to True if the audio should immediately start playing. |
|
54 | Set to True if the audio should immediately start playing. | |
55 | Default is `False`. |
|
55 | Default is `False`. | |
56 |
|
56 | |||
57 | Examples |
|
57 | Examples | |
58 | -------- |
|
58 | -------- | |
59 | :: |
|
59 | :: | |
60 |
|
60 | |||
61 | # Generate a sound |
|
61 | # Generate a sound | |
62 | import numpy as np |
|
62 | import numpy as np | |
63 | framerate = 44100 |
|
63 | framerate = 44100 | |
64 | t = np.linspace(0,5,framerate*5) |
|
64 | t = np.linspace(0,5,framerate*5) | |
65 | data = np.sin(2*np.pi*220*t) + np.sin(2*np.pi*224*t)) |
|
65 | data = np.sin(2*np.pi*220*t) + np.sin(2*np.pi*224*t)) | |
66 | Audio(data,rate=framerate) |
|
66 | Audio(data,rate=framerate) | |
67 |
|
67 | |||
68 | # Can also do stereo or more channels |
|
68 | # Can also do stereo or more channels | |
69 | dataleft = np.sin(2*np.pi*220*t) |
|
69 | dataleft = np.sin(2*np.pi*220*t) | |
70 | dataright = np.sin(2*np.pi*224*t) |
|
70 | dataright = np.sin(2*np.pi*224*t) | |
71 | Audio([dataleft, dataright],rate=framerate) |
|
71 | Audio([dataleft, dataright],rate=framerate) | |
72 |
|
72 | |||
73 | Audio("http://www.nch.com.au/acm/8k16bitpcm.wav") # From URL |
|
73 | Audio("http://www.nch.com.au/acm/8k16bitpcm.wav") # From URL | |
74 | Audio(url="http://www.w3schools.com/html/horse.ogg") |
|
74 | Audio(url="http://www.w3schools.com/html/horse.ogg") | |
75 |
|
75 | |||
76 | Audio('/path/to/sound.wav') # From file |
|
76 | Audio('/path/to/sound.wav') # From file | |
77 | Audio(filename='/path/to/sound.ogg') |
|
77 | Audio(filename='/path/to/sound.ogg') | |
78 |
|
78 | |||
79 | Audio(b'RAW_WAV_DATA..) # From bytes |
|
79 | Audio(b'RAW_WAV_DATA..) # From bytes | |
80 | Audio(data=b'RAW_WAV_DATA..) |
|
80 | Audio(data=b'RAW_WAV_DATA..) | |
81 |
|
81 | |||
82 | """ |
|
82 | """ | |
83 | _read_flags = 'rb' |
|
83 | _read_flags = 'rb' | |
84 |
|
84 | |||
85 | def __init__(self, data=None, filename=None, url=None, embed=None, rate=None, autoplay=False): |
|
85 | def __init__(self, data=None, filename=None, url=None, embed=None, rate=None, autoplay=False): | |
86 | if filename is None and url is None and data is None: |
|
86 | if filename is None and url is None and data is None: | |
87 | raise ValueError("No image data found. Expecting filename, url, or data.") |
|
87 | raise ValueError("No image data found. Expecting filename, url, or data.") | |
88 | if embed is False and url is None: |
|
88 | if embed is False and url is None: | |
89 | raise ValueError("No url found. Expecting url when embed=False") |
|
89 | raise ValueError("No url found. Expecting url when embed=False") | |
90 |
|
90 | |||
91 | if url is not None and embed is not True: |
|
91 | if url is not None and embed is not True: | |
92 | self.embed = False |
|
92 | self.embed = False | |
93 | else: |
|
93 | else: | |
94 | self.embed = True |
|
94 | self.embed = True | |
95 | self.autoplay = autoplay |
|
95 | self.autoplay = autoplay | |
96 | super(Audio, self).__init__(data=data, url=url, filename=filename) |
|
96 | super(Audio, self).__init__(data=data, url=url, filename=filename) | |
97 |
|
97 | |||
98 | if self.data is not None and not isinstance(self.data, bytes): |
|
98 | if self.data is not None and not isinstance(self.data, bytes): | |
99 | self.data = self._make_wav(data,rate) |
|
99 | self.data = self._make_wav(data,rate) | |
100 |
|
100 | |||
101 | def reload(self): |
|
101 | def reload(self): | |
102 | """Reload the raw data from file or URL.""" |
|
102 | """Reload the raw data from file or URL.""" | |
103 | import mimetypes |
|
103 | import mimetypes | |
104 | if self.embed: |
|
104 | if self.embed: | |
105 | super(Audio, self).reload() |
|
105 | super(Audio, self).reload() | |
106 |
|
106 | |||
107 | if self.filename is not None: |
|
107 | if self.filename is not None: | |
108 | self.mimetype = mimetypes.guess_type(self.filename)[0] |
|
108 | self.mimetype = mimetypes.guess_type(self.filename)[0] | |
109 | elif self.url is not None: |
|
109 | elif self.url is not None: | |
110 | self.mimetype = mimetypes.guess_type(self.url)[0] |
|
110 | self.mimetype = mimetypes.guess_type(self.url)[0] | |
111 | else: |
|
111 | else: | |
112 | self.mimetype = "audio/wav" |
|
112 | self.mimetype = "audio/wav" | |
113 |
|
113 | |||
114 | def _make_wav(self, data, rate): |
|
114 | def _make_wav(self, data, rate): | |
115 | """ Transform a numpy array to a PCM bytestring """ |
|
115 | """ Transform a numpy array to a PCM bytestring """ | |
116 | import struct |
|
116 | import struct | |
117 | from io import BytesIO |
|
117 | from io import BytesIO | |
118 | import wave |
|
118 | import wave | |
119 |
|
119 | |||
120 | try: |
|
120 | try: | |
121 | import numpy as np |
|
121 | import numpy as np | |
122 |
|
122 | |||
123 | data = np.array(data, dtype=float) |
|
123 | data = np.array(data, dtype=float) | |
124 | if len(data.shape) == 1: |
|
124 | if len(data.shape) == 1: | |
125 | nchan = 1 |
|
125 | nchan = 1 | |
126 | elif len(data.shape) == 2: |
|
126 | elif len(data.shape) == 2: | |
127 | # In wave files,channels are interleaved. E.g., |
|
127 | # In wave files,channels are interleaved. E.g., | |
128 | # "L1R1L2R2..." for stereo. See |
|
128 | # "L1R1L2R2..." for stereo. See | |
129 | # http://msdn.microsoft.com/en-us/library/windows/hardware/dn653308(v=vs.85).aspx |
|
129 | # http://msdn.microsoft.com/en-us/library/windows/hardware/dn653308(v=vs.85).aspx | |
130 | # for channel ordering |
|
130 | # for channel ordering | |
131 | nchan = data.shape[0] |
|
131 | nchan = data.shape[0] | |
132 | data = data.T.ravel() |
|
132 | data = data.T.ravel() | |
133 | else: |
|
133 | else: | |
134 | raise ValueError('Array audio input must be a 1D or 2D array') |
|
134 | raise ValueError('Array audio input must be a 1D or 2D array') | |
135 | scaled = np.int16(data/np.max(np.abs(data))*32767).tolist() |
|
135 | scaled = np.int16(data/np.max(np.abs(data))*32767).tolist() | |
136 | except ImportError: |
|
136 | except ImportError: | |
137 | # check that it is a "1D" list |
|
137 | # check that it is a "1D" list | |
138 | idata = iter(data) # fails if not an iterable |
|
138 | idata = iter(data) # fails if not an iterable | |
139 | try: |
|
139 | try: | |
140 | iter(idata.next()) |
|
140 | iter(idata.next()) | |
141 | raise TypeError('Only lists of mono audio are ' |
|
141 | raise TypeError('Only lists of mono audio are ' | |
142 | 'supported if numpy is not installed') |
|
142 | 'supported if numpy is not installed') | |
143 | except TypeError: |
|
143 | except TypeError: | |
144 | # this means it's not a nested list, which is what we want |
|
144 | # this means it's not a nested list, which is what we want | |
145 | pass |
|
145 | pass | |
146 | maxabsvalue = float(max([abs(x) for x in data])) |
|
146 | maxabsvalue = float(max([abs(x) for x in data])) | |
147 | scaled = [int(x/maxabsvalue*32767) for x in data] |
|
147 | scaled = [int(x/maxabsvalue*32767) for x in data] | |
148 | nchan = 1 |
|
148 | nchan = 1 | |
149 |
|
149 | |||
150 | fp = BytesIO() |
|
150 | fp = BytesIO() | |
151 | waveobj = wave.open(fp,mode='wb') |
|
151 | waveobj = wave.open(fp,mode='wb') | |
152 | waveobj.setnchannels(nchan) |
|
152 | waveobj.setnchannels(nchan) | |
153 | waveobj.setframerate(rate) |
|
153 | waveobj.setframerate(rate) | |
154 | waveobj.setsampwidth(2) |
|
154 | waveobj.setsampwidth(2) | |
155 | waveobj.setcomptype('NONE','NONE') |
|
155 | waveobj.setcomptype('NONE','NONE') | |
156 | waveobj.writeframes(b''.join([struct.pack('<h',x) for x in scaled])) |
|
156 | waveobj.writeframes(b''.join([struct.pack('<h',x) for x in scaled])) | |
157 | val = fp.getvalue() |
|
157 | val = fp.getvalue() | |
158 | waveobj.close() |
|
158 | waveobj.close() | |
159 |
|
159 | |||
160 | return val |
|
160 | return val | |
161 |
|
161 | |||
162 | def _data_and_metadata(self): |
|
162 | def _data_and_metadata(self): | |
163 | """shortcut for returning metadata with url information, if defined""" |
|
163 | """shortcut for returning metadata with url information, if defined""" | |
164 | md = {} |
|
164 | md = {} | |
165 | if self.url: |
|
165 | if self.url: | |
166 | md['url'] = self.url |
|
166 | md['url'] = self.url | |
167 | if md: |
|
167 | if md: | |
168 | return self.data, md |
|
168 | return self.data, md | |
169 | else: |
|
169 | else: | |
170 | return self.data |
|
170 | return self.data | |
171 |
|
171 | |||
172 | def _repr_html_(self): |
|
172 | def _repr_html_(self): | |
173 | src = """ |
|
173 | src = """ | |
174 | <audio controls="controls" {autoplay}> |
|
174 | <audio controls="controls" {autoplay}> | |
175 | <source src="{src}" type="{type}" /> |
|
175 | <source src="{src}" type="{type}" /> | |
176 | Your browser does not support the audio element. |
|
176 | Your browser does not support the audio element. | |
177 | </audio> |
|
177 | </audio> | |
178 | """ |
|
178 | """ | |
179 | return src.format(src=self.src_attr(),type=self.mimetype, autoplay=self.autoplay_attr()) |
|
179 | return src.format(src=self.src_attr(),type=self.mimetype, autoplay=self.autoplay_attr()) | |
180 |
|
180 | |||
181 | def src_attr(self): |
|
181 | def src_attr(self): | |
182 | import base64 |
|
182 | import base64 | |
183 | if self.embed and (self.data is not None): |
|
183 | if self.embed and (self.data is not None): | |
184 | data = base64=base64.b64encode(self.data).decode('ascii') |
|
184 | data = base64=base64.b64encode(self.data).decode('ascii') | |
185 | return """data:{type};base64,{base64}""".format(type=self.mimetype, |
|
185 | return """data:{type};base64,{base64}""".format(type=self.mimetype, | |
186 | base64=data) |
|
186 | base64=data) | |
187 | elif self.url is not None: |
|
187 | elif self.url is not None: | |
188 | return self.url |
|
188 | return self.url | |
189 | else: |
|
189 | else: | |
190 | return "" |
|
190 | return "" | |
191 |
|
191 | |||
192 | def autoplay_attr(self): |
|
192 | def autoplay_attr(self): | |
193 | if(self.autoplay): |
|
193 | if(self.autoplay): | |
194 | return 'autoplay="autoplay"' |
|
194 | return 'autoplay="autoplay"' | |
195 | else: |
|
195 | else: | |
196 | return '' |
|
196 | return '' | |
197 |
|
197 | |||
198 | class IFrame(object): |
|
198 | class IFrame(object): | |
199 | """ |
|
199 | """ | |
200 | Generic class to embed an iframe in an IPython notebook |
|
200 | Generic class to embed an iframe in an IPython notebook | |
201 | """ |
|
201 | """ | |
202 |
|
202 | |||
203 | iframe = """ |
|
203 | iframe = """ | |
204 | <iframe |
|
204 | <iframe | |
205 | width="{width}" |
|
205 | width="{width}" | |
206 | height="{height}" |
|
206 | height="{height}" | |
207 | src="{src}{params}" |
|
207 | src="{src}{params}" | |
208 | frameborder="0" |
|
208 | frameborder="0" | |
209 | allowfullscreen |
|
209 | allowfullscreen | |
210 | ></iframe> |
|
210 | ></iframe> | |
211 | """ |
|
211 | """ | |
212 |
|
212 | |||
213 | def __init__(self, src, width, height, **kwargs): |
|
213 | def __init__(self, src, width, height, **kwargs): | |
214 | self.src = src |
|
214 | self.src = src | |
215 | self.width = width |
|
215 | self.width = width | |
216 | self.height = height |
|
216 | self.height = height | |
217 | self.params = kwargs |
|
217 | self.params = kwargs | |
218 |
|
218 | |||
219 | def _repr_html_(self): |
|
219 | def _repr_html_(self): | |
220 | """return the embed iframe""" |
|
220 | """return the embed iframe""" | |
221 | if self.params: |
|
221 | if self.params: | |
222 | try: |
|
222 | try: | |
223 | from urllib.parse import urlencode # Py 3 |
|
223 | from urllib.parse import urlencode # Py 3 | |
224 | except ImportError: |
|
224 | except ImportError: | |
225 | from urllib import urlencode |
|
225 | from urllib import urlencode | |
226 | params = "?" + urlencode(self.params) |
|
226 | params = "?" + urlencode(self.params) | |
227 | else: |
|
227 | else: | |
228 | params = "" |
|
228 | params = "" | |
229 | return self.iframe.format(src=self.src, |
|
229 | return self.iframe.format(src=self.src, | |
230 | width=self.width, |
|
230 | width=self.width, | |
231 | height=self.height, |
|
231 | height=self.height, | |
232 | params=params) |
|
232 | params=params) | |
233 |
|
233 | |||
234 | class YouTubeVideo(IFrame): |
|
234 | class YouTubeVideo(IFrame): | |
235 | """Class for embedding a YouTube Video in an IPython session, based on its video id. |
|
235 | """Class for embedding a YouTube Video in an IPython session, based on its video id. | |
236 |
|
236 | |||
237 | e.g. to embed the video from https://www.youtube.com/watch?v=foo , you would |
|
237 | e.g. to embed the video from https://www.youtube.com/watch?v=foo , you would | |
238 | do:: |
|
238 | do:: | |
239 |
|
239 | |||
240 | vid = YouTubeVideo("foo") |
|
240 | vid = YouTubeVideo("foo") | |
241 | display(vid) |
|
241 | display(vid) | |
242 |
|
242 | |||
243 | To start from 30 seconds:: |
|
243 | To start from 30 seconds:: | |
244 |
|
244 | |||
245 | vid = YouTubeVideo("abc", start=30) |
|
245 | vid = YouTubeVideo("abc", start=30) | |
246 | display(vid) |
|
246 | display(vid) | |
247 |
|
247 | |||
248 | To calculate seconds from time as hours, minutes, seconds use |
|
248 | To calculate seconds from time as hours, minutes, seconds use | |
249 | :class:`datetime.timedelta`:: |
|
249 | :class:`datetime.timedelta`:: | |
250 |
|
250 | |||
251 | start=int(timedelta(hours=1, minutes=46, seconds=40).total_seconds()) |
|
251 | start=int(timedelta(hours=1, minutes=46, seconds=40).total_seconds()) | |
252 |
|
252 | |||
253 | Other parameters can be provided as documented at |
|
253 | Other parameters can be provided as documented at | |
254 |
https://developers.google.com/youtube/player_parameters# |
|
254 | https://developers.google.com/youtube/player_parameters#Parameters | |
255 |
|
255 | |||
256 | When converting the notebook using nbconvert, a jpeg representation of the video |
|
256 | When converting the notebook using nbconvert, a jpeg representation of the video | |
257 | will be inserted in the document. |
|
257 | will be inserted in the document. | |
258 | """ |
|
258 | """ | |
259 |
|
259 | |||
260 | def __init__(self, id, width=400, height=300, **kwargs): |
|
260 | def __init__(self, id, width=400, height=300, **kwargs): | |
261 | self.id=id |
|
261 | self.id=id | |
262 | src = "https://www.youtube.com/embed/{0}".format(id) |
|
262 | src = "https://www.youtube.com/embed/{0}".format(id) | |
263 | super(YouTubeVideo, self).__init__(src, width, height, **kwargs) |
|
263 | super(YouTubeVideo, self).__init__(src, width, height, **kwargs) | |
264 |
|
264 | |||
265 | def _repr_jpeg_(self): |
|
265 | def _repr_jpeg_(self): | |
266 | # Deferred import |
|
266 | # Deferred import | |
267 | from urllib.request import urlopen |
|
267 | from urllib.request import urlopen | |
268 |
|
268 | |||
269 | try: |
|
269 | try: | |
270 | return urlopen("https://img.youtube.com/vi/{id}/hqdefault.jpg".format(id=self.id)).read() |
|
270 | return urlopen("https://img.youtube.com/vi/{id}/hqdefault.jpg".format(id=self.id)).read() | |
271 | except IOError: |
|
271 | except IOError: | |
272 | return None |
|
272 | return None | |
273 |
|
273 | |||
274 | class VimeoVideo(IFrame): |
|
274 | class VimeoVideo(IFrame): | |
275 | """ |
|
275 | """ | |
276 | Class for embedding a Vimeo video in an IPython session, based on its video id. |
|
276 | Class for embedding a Vimeo video in an IPython session, based on its video id. | |
277 | """ |
|
277 | """ | |
278 |
|
278 | |||
279 | def __init__(self, id, width=400, height=300, **kwargs): |
|
279 | def __init__(self, id, width=400, height=300, **kwargs): | |
280 | src="https://player.vimeo.com/video/{0}".format(id) |
|
280 | src="https://player.vimeo.com/video/{0}".format(id) | |
281 | super(VimeoVideo, self).__init__(src, width, height, **kwargs) |
|
281 | super(VimeoVideo, self).__init__(src, width, height, **kwargs) | |
282 |
|
282 | |||
283 | class ScribdDocument(IFrame): |
|
283 | class ScribdDocument(IFrame): | |
284 | """ |
|
284 | """ | |
285 | Class for embedding a Scribd document in an IPython session |
|
285 | Class for embedding a Scribd document in an IPython session | |
286 |
|
286 | |||
287 | Use the start_page params to specify a starting point in the document |
|
287 | Use the start_page params to specify a starting point in the document | |
288 | Use the view_mode params to specify display type one off scroll | slideshow | book |
|
288 | Use the view_mode params to specify display type one off scroll | slideshow | book | |
289 |
|
289 | |||
290 | e.g to Display Wes' foundational paper about PANDAS in book mode from page 3 |
|
290 | e.g to Display Wes' foundational paper about PANDAS in book mode from page 3 | |
291 |
|
291 | |||
292 | ScribdDocument(71048089, width=800, height=400, start_page=3, view_mode="book") |
|
292 | ScribdDocument(71048089, width=800, height=400, start_page=3, view_mode="book") | |
293 | """ |
|
293 | """ | |
294 |
|
294 | |||
295 | def __init__(self, id, width=400, height=300, **kwargs): |
|
295 | def __init__(self, id, width=400, height=300, **kwargs): | |
296 | src="https://www.scribd.com/embeds/{0}/content".format(id) |
|
296 | src="https://www.scribd.com/embeds/{0}/content".format(id) | |
297 | super(ScribdDocument, self).__init__(src, width, height, **kwargs) |
|
297 | super(ScribdDocument, self).__init__(src, width, height, **kwargs) | |
298 |
|
298 | |||
299 | class FileLink(object): |
|
299 | class FileLink(object): | |
300 | """Class for embedding a local file link in an IPython session, based on path |
|
300 | """Class for embedding a local file link in an IPython session, based on path | |
301 |
|
301 | |||
302 | e.g. to embed a link that was generated in the IPython notebook as my/data.txt |
|
302 | e.g. to embed a link that was generated in the IPython notebook as my/data.txt | |
303 |
|
303 | |||
304 | you would do:: |
|
304 | you would do:: | |
305 |
|
305 | |||
306 | local_file = FileLink("my/data.txt") |
|
306 | local_file = FileLink("my/data.txt") | |
307 | display(local_file) |
|
307 | display(local_file) | |
308 |
|
308 | |||
309 | or in the HTML notebook, just:: |
|
309 | or in the HTML notebook, just:: | |
310 |
|
310 | |||
311 | FileLink("my/data.txt") |
|
311 | FileLink("my/data.txt") | |
312 | """ |
|
312 | """ | |
313 |
|
313 | |||
314 | html_link_str = "<a href='%s' target='_blank'>%s</a>" |
|
314 | html_link_str = "<a href='%s' target='_blank'>%s</a>" | |
315 |
|
315 | |||
316 | def __init__(self, |
|
316 | def __init__(self, | |
317 | path, |
|
317 | path, | |
318 | url_prefix='', |
|
318 | url_prefix='', | |
319 | result_html_prefix='', |
|
319 | result_html_prefix='', | |
320 | result_html_suffix='<br>'): |
|
320 | result_html_suffix='<br>'): | |
321 | """ |
|
321 | """ | |
322 | Parameters |
|
322 | Parameters | |
323 | ---------- |
|
323 | ---------- | |
324 | path : str |
|
324 | path : str | |
325 | path to the file or directory that should be formatted |
|
325 | path to the file or directory that should be formatted | |
326 | directory_prefix : str |
|
326 | directory_prefix : str | |
327 | prefix to be prepended to all files to form a working link [default: |
|
327 | prefix to be prepended to all files to form a working link [default: | |
328 | 'files'] |
|
328 | 'files'] | |
329 | result_html_prefix : str |
|
329 | result_html_prefix : str | |
330 | text to append to beginning to link [default: none] |
|
330 | text to append to beginning to link [default: none] | |
331 | result_html_suffix : str |
|
331 | result_html_suffix : str | |
332 | text to append at the end of link [default: '<br>'] |
|
332 | text to append at the end of link [default: '<br>'] | |
333 | """ |
|
333 | """ | |
334 | if isdir(path): |
|
334 | if isdir(path): | |
335 | raise ValueError("Cannot display a directory using FileLink. " |
|
335 | raise ValueError("Cannot display a directory using FileLink. " | |
336 | "Use FileLinks to display '%s'." % path) |
|
336 | "Use FileLinks to display '%s'." % path) | |
337 | self.path = path |
|
337 | self.path = path | |
338 | self.url_prefix = url_prefix |
|
338 | self.url_prefix = url_prefix | |
339 | self.result_html_prefix = result_html_prefix |
|
339 | self.result_html_prefix = result_html_prefix | |
340 | self.result_html_suffix = result_html_suffix |
|
340 | self.result_html_suffix = result_html_suffix | |
341 |
|
341 | |||
342 | def _format_path(self): |
|
342 | def _format_path(self): | |
343 | fp = ''.join([self.url_prefix,self.path]) |
|
343 | fp = ''.join([self.url_prefix,self.path]) | |
344 | return ''.join([self.result_html_prefix, |
|
344 | return ''.join([self.result_html_prefix, | |
345 | self.html_link_str % (fp, self.path), |
|
345 | self.html_link_str % (fp, self.path), | |
346 | self.result_html_suffix]) |
|
346 | self.result_html_suffix]) | |
347 |
|
347 | |||
348 | def _repr_html_(self): |
|
348 | def _repr_html_(self): | |
349 | """return html link to file |
|
349 | """return html link to file | |
350 | """ |
|
350 | """ | |
351 | if not exists(self.path): |
|
351 | if not exists(self.path): | |
352 | return ("Path (<tt>%s</tt>) doesn't exist. " |
|
352 | return ("Path (<tt>%s</tt>) doesn't exist. " | |
353 | "It may still be in the process of " |
|
353 | "It may still be in the process of " | |
354 | "being generated, or you may have the " |
|
354 | "being generated, or you may have the " | |
355 | "incorrect path." % self.path) |
|
355 | "incorrect path." % self.path) | |
356 |
|
356 | |||
357 | return self._format_path() |
|
357 | return self._format_path() | |
358 |
|
358 | |||
359 | def __repr__(self): |
|
359 | def __repr__(self): | |
360 | """return absolute path to file |
|
360 | """return absolute path to file | |
361 | """ |
|
361 | """ | |
362 | return abspath(self.path) |
|
362 | return abspath(self.path) | |
363 |
|
363 | |||
364 | class FileLinks(FileLink): |
|
364 | class FileLinks(FileLink): | |
365 | """Class for embedding local file links in an IPython session, based on path |
|
365 | """Class for embedding local file links in an IPython session, based on path | |
366 |
|
366 | |||
367 | e.g. to embed links to files that were generated in the IPython notebook |
|
367 | e.g. to embed links to files that were generated in the IPython notebook | |
368 | under ``my/data``, you would do:: |
|
368 | under ``my/data``, you would do:: | |
369 |
|
369 | |||
370 | local_files = FileLinks("my/data") |
|
370 | local_files = FileLinks("my/data") | |
371 | display(local_files) |
|
371 | display(local_files) | |
372 |
|
372 | |||
373 | or in the HTML notebook, just:: |
|
373 | or in the HTML notebook, just:: | |
374 |
|
374 | |||
375 | FileLinks("my/data") |
|
375 | FileLinks("my/data") | |
376 | """ |
|
376 | """ | |
377 | def __init__(self, |
|
377 | def __init__(self, | |
378 | path, |
|
378 | path, | |
379 | url_prefix='', |
|
379 | url_prefix='', | |
380 | included_suffixes=None, |
|
380 | included_suffixes=None, | |
381 | result_html_prefix='', |
|
381 | result_html_prefix='', | |
382 | result_html_suffix='<br>', |
|
382 | result_html_suffix='<br>', | |
383 | notebook_display_formatter=None, |
|
383 | notebook_display_formatter=None, | |
384 | terminal_display_formatter=None, |
|
384 | terminal_display_formatter=None, | |
385 | recursive=True): |
|
385 | recursive=True): | |
386 | """ |
|
386 | """ | |
387 | See :class:`FileLink` for the ``path``, ``url_prefix``, |
|
387 | See :class:`FileLink` for the ``path``, ``url_prefix``, | |
388 | ``result_html_prefix`` and ``result_html_suffix`` parameters. |
|
388 | ``result_html_prefix`` and ``result_html_suffix`` parameters. | |
389 |
|
389 | |||
390 | included_suffixes : list |
|
390 | included_suffixes : list | |
391 | Filename suffixes to include when formatting output [default: include |
|
391 | Filename suffixes to include when formatting output [default: include | |
392 | all files] |
|
392 | all files] | |
393 |
|
393 | |||
394 | notebook_display_formatter : function |
|
394 | notebook_display_formatter : function | |
395 | Used to format links for display in the notebook. See discussion of |
|
395 | Used to format links for display in the notebook. See discussion of | |
396 | formatter functions below. |
|
396 | formatter functions below. | |
397 |
|
397 | |||
398 | terminal_display_formatter : function |
|
398 | terminal_display_formatter : function | |
399 | Used to format links for display in the terminal. See discussion of |
|
399 | Used to format links for display in the terminal. See discussion of | |
400 | formatter functions below. |
|
400 | formatter functions below. | |
401 |
|
401 | |||
402 | Formatter functions must be of the form:: |
|
402 | Formatter functions must be of the form:: | |
403 |
|
403 | |||
404 | f(dirname, fnames, included_suffixes) |
|
404 | f(dirname, fnames, included_suffixes) | |
405 |
|
405 | |||
406 | dirname : str |
|
406 | dirname : str | |
407 | The name of a directory |
|
407 | The name of a directory | |
408 | fnames : list |
|
408 | fnames : list | |
409 | The files in that directory |
|
409 | The files in that directory | |
410 | included_suffixes : list |
|
410 | included_suffixes : list | |
411 | The file suffixes that should be included in the output (passing None |
|
411 | The file suffixes that should be included in the output (passing None | |
412 | meansto include all suffixes in the output in the built-in formatters) |
|
412 | meansto include all suffixes in the output in the built-in formatters) | |
413 | recursive : boolean |
|
413 | recursive : boolean | |
414 | Whether to recurse into subdirectories. Default is True. |
|
414 | Whether to recurse into subdirectories. Default is True. | |
415 |
|
415 | |||
416 | The function should return a list of lines that will be printed in the |
|
416 | The function should return a list of lines that will be printed in the | |
417 | notebook (if passing notebook_display_formatter) or the terminal (if |
|
417 | notebook (if passing notebook_display_formatter) or the terminal (if | |
418 | passing terminal_display_formatter). This function is iterated over for |
|
418 | passing terminal_display_formatter). This function is iterated over for | |
419 | each directory in self.path. Default formatters are in place, can be |
|
419 | each directory in self.path. Default formatters are in place, can be | |
420 | passed here to support alternative formatting. |
|
420 | passed here to support alternative formatting. | |
421 |
|
421 | |||
422 | """ |
|
422 | """ | |
423 | if isfile(path): |
|
423 | if isfile(path): | |
424 | raise ValueError("Cannot display a file using FileLinks. " |
|
424 | raise ValueError("Cannot display a file using FileLinks. " | |
425 | "Use FileLink to display '%s'." % path) |
|
425 | "Use FileLink to display '%s'." % path) | |
426 | self.included_suffixes = included_suffixes |
|
426 | self.included_suffixes = included_suffixes | |
427 | # remove trailing slashs for more consistent output formatting |
|
427 | # remove trailing slashs for more consistent output formatting | |
428 | path = path.rstrip('/') |
|
428 | path = path.rstrip('/') | |
429 |
|
429 | |||
430 | self.path = path |
|
430 | self.path = path | |
431 | self.url_prefix = url_prefix |
|
431 | self.url_prefix = url_prefix | |
432 | self.result_html_prefix = result_html_prefix |
|
432 | self.result_html_prefix = result_html_prefix | |
433 | self.result_html_suffix = result_html_suffix |
|
433 | self.result_html_suffix = result_html_suffix | |
434 |
|
434 | |||
435 | self.notebook_display_formatter = \ |
|
435 | self.notebook_display_formatter = \ | |
436 | notebook_display_formatter or self._get_notebook_display_formatter() |
|
436 | notebook_display_formatter or self._get_notebook_display_formatter() | |
437 | self.terminal_display_formatter = \ |
|
437 | self.terminal_display_formatter = \ | |
438 | terminal_display_formatter or self._get_terminal_display_formatter() |
|
438 | terminal_display_formatter or self._get_terminal_display_formatter() | |
439 |
|
439 | |||
440 | self.recursive = recursive |
|
440 | self.recursive = recursive | |
441 |
|
441 | |||
442 | def _get_display_formatter(self, |
|
442 | def _get_display_formatter(self, | |
443 | dirname_output_format, |
|
443 | dirname_output_format, | |
444 | fname_output_format, |
|
444 | fname_output_format, | |
445 | fp_format, |
|
445 | fp_format, | |
446 | fp_cleaner=None): |
|
446 | fp_cleaner=None): | |
447 | """ generate built-in formatter function |
|
447 | """ generate built-in formatter function | |
448 |
|
448 | |||
449 | this is used to define both the notebook and terminal built-in |
|
449 | this is used to define both the notebook and terminal built-in | |
450 | formatters as they only differ by some wrapper text for each entry |
|
450 | formatters as they only differ by some wrapper text for each entry | |
451 |
|
451 | |||
452 | dirname_output_format: string to use for formatting directory |
|
452 | dirname_output_format: string to use for formatting directory | |
453 | names, dirname will be substituted for a single "%s" which |
|
453 | names, dirname will be substituted for a single "%s" which | |
454 | must appear in this string |
|
454 | must appear in this string | |
455 | fname_output_format: string to use for formatting file names, |
|
455 | fname_output_format: string to use for formatting file names, | |
456 | if a single "%s" appears in the string, fname will be substituted |
|
456 | if a single "%s" appears in the string, fname will be substituted | |
457 | if two "%s" appear in the string, the path to fname will be |
|
457 | if two "%s" appear in the string, the path to fname will be | |
458 | substituted for the first and fname will be substituted for the |
|
458 | substituted for the first and fname will be substituted for the | |
459 | second |
|
459 | second | |
460 | fp_format: string to use for formatting filepaths, must contain |
|
460 | fp_format: string to use for formatting filepaths, must contain | |
461 | exactly two "%s" and the dirname will be subsituted for the first |
|
461 | exactly two "%s" and the dirname will be subsituted for the first | |
462 | and fname will be substituted for the second |
|
462 | and fname will be substituted for the second | |
463 | """ |
|
463 | """ | |
464 | def f(dirname, fnames, included_suffixes=None): |
|
464 | def f(dirname, fnames, included_suffixes=None): | |
465 | result = [] |
|
465 | result = [] | |
466 | # begin by figuring out which filenames, if any, |
|
466 | # begin by figuring out which filenames, if any, | |
467 | # are going to be displayed |
|
467 | # are going to be displayed | |
468 | display_fnames = [] |
|
468 | display_fnames = [] | |
469 | for fname in fnames: |
|
469 | for fname in fnames: | |
470 | if (isfile(join(dirname,fname)) and |
|
470 | if (isfile(join(dirname,fname)) and | |
471 | (included_suffixes is None or |
|
471 | (included_suffixes is None or | |
472 | splitext(fname)[1] in included_suffixes)): |
|
472 | splitext(fname)[1] in included_suffixes)): | |
473 | display_fnames.append(fname) |
|
473 | display_fnames.append(fname) | |
474 |
|
474 | |||
475 | if len(display_fnames) == 0: |
|
475 | if len(display_fnames) == 0: | |
476 | # if there are no filenames to display, don't print anything |
|
476 | # if there are no filenames to display, don't print anything | |
477 | # (not even the directory name) |
|
477 | # (not even the directory name) | |
478 | pass |
|
478 | pass | |
479 | else: |
|
479 | else: | |
480 | # otherwise print the formatted directory name followed by |
|
480 | # otherwise print the formatted directory name followed by | |
481 | # the formatted filenames |
|
481 | # the formatted filenames | |
482 | dirname_output_line = dirname_output_format % dirname |
|
482 | dirname_output_line = dirname_output_format % dirname | |
483 | result.append(dirname_output_line) |
|
483 | result.append(dirname_output_line) | |
484 | for fname in display_fnames: |
|
484 | for fname in display_fnames: | |
485 | fp = fp_format % (dirname,fname) |
|
485 | fp = fp_format % (dirname,fname) | |
486 | if fp_cleaner is not None: |
|
486 | if fp_cleaner is not None: | |
487 | fp = fp_cleaner(fp) |
|
487 | fp = fp_cleaner(fp) | |
488 | try: |
|
488 | try: | |
489 | # output can include both a filepath and a filename... |
|
489 | # output can include both a filepath and a filename... | |
490 | fname_output_line = fname_output_format % (fp, fname) |
|
490 | fname_output_line = fname_output_format % (fp, fname) | |
491 | except TypeError: |
|
491 | except TypeError: | |
492 | # ... or just a single filepath |
|
492 | # ... or just a single filepath | |
493 | fname_output_line = fname_output_format % fname |
|
493 | fname_output_line = fname_output_format % fname | |
494 | result.append(fname_output_line) |
|
494 | result.append(fname_output_line) | |
495 | return result |
|
495 | return result | |
496 | return f |
|
496 | return f | |
497 |
|
497 | |||
498 | def _get_notebook_display_formatter(self, |
|
498 | def _get_notebook_display_formatter(self, | |
499 | spacer=" "): |
|
499 | spacer=" "): | |
500 | """ generate function to use for notebook formatting |
|
500 | """ generate function to use for notebook formatting | |
501 | """ |
|
501 | """ | |
502 | dirname_output_format = \ |
|
502 | dirname_output_format = \ | |
503 | self.result_html_prefix + "%s/" + self.result_html_suffix |
|
503 | self.result_html_prefix + "%s/" + self.result_html_suffix | |
504 | fname_output_format = \ |
|
504 | fname_output_format = \ | |
505 | self.result_html_prefix + spacer + self.html_link_str + self.result_html_suffix |
|
505 | self.result_html_prefix + spacer + self.html_link_str + self.result_html_suffix | |
506 | fp_format = self.url_prefix + '%s/%s' |
|
506 | fp_format = self.url_prefix + '%s/%s' | |
507 | if sep == "\\": |
|
507 | if sep == "\\": | |
508 | # Working on a platform where the path separator is "\", so |
|
508 | # Working on a platform where the path separator is "\", so | |
509 | # must convert these to "/" for generating a URI |
|
509 | # must convert these to "/" for generating a URI | |
510 | def fp_cleaner(fp): |
|
510 | def fp_cleaner(fp): | |
511 | # Replace all occurences of backslash ("\") with a forward |
|
511 | # Replace all occurences of backslash ("\") with a forward | |
512 | # slash ("/") - this is necessary on windows when a path is |
|
512 | # slash ("/") - this is necessary on windows when a path is | |
513 | # provided as input, but we must link to a URI |
|
513 | # provided as input, but we must link to a URI | |
514 | return fp.replace('\\','/') |
|
514 | return fp.replace('\\','/') | |
515 | else: |
|
515 | else: | |
516 | fp_cleaner = None |
|
516 | fp_cleaner = None | |
517 |
|
517 | |||
518 | return self._get_display_formatter(dirname_output_format, |
|
518 | return self._get_display_formatter(dirname_output_format, | |
519 | fname_output_format, |
|
519 | fname_output_format, | |
520 | fp_format, |
|
520 | fp_format, | |
521 | fp_cleaner) |
|
521 | fp_cleaner) | |
522 |
|
522 | |||
523 | def _get_terminal_display_formatter(self, |
|
523 | def _get_terminal_display_formatter(self, | |
524 | spacer=" "): |
|
524 | spacer=" "): | |
525 | """ generate function to use for terminal formatting |
|
525 | """ generate function to use for terminal formatting | |
526 | """ |
|
526 | """ | |
527 | dirname_output_format = "%s/" |
|
527 | dirname_output_format = "%s/" | |
528 | fname_output_format = spacer + "%s" |
|
528 | fname_output_format = spacer + "%s" | |
529 | fp_format = '%s/%s' |
|
529 | fp_format = '%s/%s' | |
530 |
|
530 | |||
531 | return self._get_display_formatter(dirname_output_format, |
|
531 | return self._get_display_formatter(dirname_output_format, | |
532 | fname_output_format, |
|
532 | fname_output_format, | |
533 | fp_format) |
|
533 | fp_format) | |
534 |
|
534 | |||
535 | def _format_path(self): |
|
535 | def _format_path(self): | |
536 | result_lines = [] |
|
536 | result_lines = [] | |
537 | if self.recursive: |
|
537 | if self.recursive: | |
538 | walked_dir = list(walk(self.path)) |
|
538 | walked_dir = list(walk(self.path)) | |
539 | else: |
|
539 | else: | |
540 | walked_dir = [next(walk(self.path))] |
|
540 | walked_dir = [next(walk(self.path))] | |
541 | walked_dir.sort() |
|
541 | walked_dir.sort() | |
542 | for dirname, subdirs, fnames in walked_dir: |
|
542 | for dirname, subdirs, fnames in walked_dir: | |
543 | result_lines += self.notebook_display_formatter(dirname, fnames, self.included_suffixes) |
|
543 | result_lines += self.notebook_display_formatter(dirname, fnames, self.included_suffixes) | |
544 | return '\n'.join(result_lines) |
|
544 | return '\n'.join(result_lines) | |
545 |
|
545 | |||
546 | def __repr__(self): |
|
546 | def __repr__(self): | |
547 | """return newline-separated absolute paths |
|
547 | """return newline-separated absolute paths | |
548 | """ |
|
548 | """ | |
549 | result_lines = [] |
|
549 | result_lines = [] | |
550 | if self.recursive: |
|
550 | if self.recursive: | |
551 | walked_dir = list(walk(self.path)) |
|
551 | walked_dir = list(walk(self.path)) | |
552 | else: |
|
552 | else: | |
553 | walked_dir = [next(walk(self.path))] |
|
553 | walked_dir = [next(walk(self.path))] | |
554 | walked_dir.sort() |
|
554 | walked_dir.sort() | |
555 | for dirname, subdirs, fnames in walked_dir: |
|
555 | for dirname, subdirs, fnames in walked_dir: | |
556 | result_lines += self.terminal_display_formatter(dirname, fnames, self.included_suffixes) |
|
556 | result_lines += self.terminal_display_formatter(dirname, fnames, self.included_suffixes) | |
557 | return '\n'.join(result_lines) |
|
557 | return '\n'.join(result_lines) |
@@ -1,103 +1,103 b'' | |||||
1 | .. _extensions_overview: |
|
1 | .. _extensions_overview: | |
2 |
|
2 | |||
3 | ================== |
|
3 | ================== | |
4 | IPython extensions |
|
4 | IPython extensions | |
5 | ================== |
|
5 | ================== | |
6 |
|
6 | |||
7 | A level above configuration are IPython extensions, Python modules which modify |
|
7 | A level above configuration are IPython extensions, Python modules which modify | |
8 | the behaviour of the shell. They are referred to by an importable module name, |
|
8 | the behaviour of the shell. They are referred to by an importable module name, | |
9 | and can be placed anywhere you'd normally import from, or in |
|
9 | and can be placed anywhere you'd normally import from, or in | |
10 | ``.ipython/extensions/``. |
|
10 | ``.ipython/extensions/``. | |
11 |
|
11 | |||
12 | Getting extensions |
|
12 | Getting extensions | |
13 | ================== |
|
13 | ================== | |
14 |
|
14 | |||
15 | A few important extensions are :ref:`bundled with IPython <bundled_extensions>`. |
|
15 | A few important extensions are :ref:`bundled with IPython <bundled_extensions>`. | |
16 | Others can be found on the `extensions index |
|
16 | Others can be found on the `extensions index | |
17 | <https://github.com/ipython/ipython/wiki/Extensions-Index>`_ on the wiki, and |
|
17 | <https://github.com/ipython/ipython/wiki/Extensions-Index>`_ on the wiki, and | |
18 | the `Framework :: IPython tag <https://pypi.python.org/pypi?:action=browse&c=586>`_ |
|
18 | the `Framework :: IPython tag <https://pypi.python.org/pypi?:action=browse&c=586>`_ | |
19 | on PyPI. |
|
19 | on PyPI. | |
20 |
|
20 | |||
21 | Extensions on PyPI can be installed using ``pip``, like any other Python package. |
|
21 | Extensions on PyPI can be installed using ``pip``, like any other Python package. | |
22 |
|
22 | |||
23 | Using extensions |
|
23 | Using extensions | |
24 | ================ |
|
24 | ================ | |
25 |
|
25 | |||
26 | To load an extension while IPython is running, use the ``%load_ext`` magic: |
|
26 | To load an extension while IPython is running, use the ``%load_ext`` magic: | |
27 |
|
27 | |||
28 | .. sourcecode:: ipython |
|
28 | .. sourcecode:: ipython | |
29 |
|
29 | |||
30 | In [1]: %load_ext myextension |
|
30 | In [1]: %load_ext myextension | |
31 |
|
31 | |||
32 | To load it each time IPython starts, list it in your configuration file:: |
|
32 | To load it each time IPython starts, list it in your configuration file:: | |
33 |
|
33 | |||
34 | c.InteractiveShellApp.extensions = [ |
|
34 | c.InteractiveShellApp.extensions = [ | |
35 | 'myextension' |
|
35 | 'myextension' | |
36 | ] |
|
36 | ] | |
37 |
|
37 | |||
38 | Writing extensions |
|
38 | Writing extensions | |
39 | ================== |
|
39 | ================== | |
40 |
|
40 | |||
41 | An IPython extension is an importable Python module that has a couple of special |
|
41 | An IPython extension is an importable Python module that has a couple of special | |
42 | functions to load and unload it. Here is a template:: |
|
42 | functions to load and unload it. Here is a template:: | |
43 |
|
43 | |||
44 | # myextension.py |
|
44 | # myextension.py | |
45 |
|
45 | |||
46 | def load_ipython_extension(ipython): |
|
46 | def load_ipython_extension(ipython): | |
47 | # The `ipython` argument is the currently active `InteractiveShell` |
|
47 | # The `ipython` argument is the currently active `InteractiveShell` | |
48 | # instance, which can be used in any way. This allows you to register |
|
48 | # instance, which can be used in any way. This allows you to register | |
49 | # new magics or aliases, for example. |
|
49 | # new magics or aliases, for example. | |
50 |
|
50 | |||
51 | def unload_ipython_extension(ipython): |
|
51 | def unload_ipython_extension(ipython): | |
52 | # If you want your extension to be unloadable, put that logic here. |
|
52 | # If you want your extension to be unloadable, put that logic here. | |
53 |
|
53 | |||
54 | This :func:`load_ipython_extension` function is called after your extension is |
|
54 | This :func:`load_ipython_extension` function is called after your extension is | |
55 | imported, and the currently active :class:`~IPython.core.interactiveshell.InteractiveShell` |
|
55 | imported, and the currently active :class:`~IPython.core.interactiveshell.InteractiveShell` | |
56 | instance is passed as the only argument. You can do anything you want with |
|
56 | instance is passed as the only argument. You can do anything you want with | |
57 | IPython at that point. |
|
57 | IPython at that point. | |
58 |
|
58 | |||
59 | :func:`load_ipython_extension` will not be called again if the user use |
|
59 | :func:`load_ipython_extension` will not be called again if the user use | |
60 | `%load_extension`. The user have to explicitly ask the extension to be |
|
60 | `%load_extension`. The user have to explicitly ask the extension to be | |
61 | reloaded (with `%reload_extension`). In case where the use ask the extension to |
|
61 | reloaded (with `%reload_extension`). In case where the use ask the extension to | |
62 | be reloaded, , the extension will be unloaded (with |
|
62 | be reloaded, , the extension will be unloaded (with | |
63 | `unload_ipython_extension`), and loaded again. |
|
63 | `unload_ipython_extension`), and loaded again. | |
64 |
|
64 | |||
65 | Useful :class:`InteractiveShell` methods include :meth:`~IPython.core.interactiveshell.InteractiveShell.register_magic_function`, |
|
65 | Useful :class:`InteractiveShell` methods include :meth:`~IPython.core.interactiveshell.InteractiveShell.register_magic_function`, | |
66 | :meth:`~IPython.core.interactiveshell.InteractiveShell.push` (to add variables to the user namespace) and |
|
66 | :meth:`~IPython.core.interactiveshell.InteractiveShell.push` (to add variables to the user namespace) and | |
67 | :meth:`~IPython.core.interactiveshell.InteractiveShell.drop_by_id` (to remove variables on unloading). |
|
67 | :meth:`~IPython.core.interactiveshell.InteractiveShell.drop_by_id` (to remove variables on unloading). | |
68 |
|
68 | |||
69 | .. seealso:: |
|
69 | .. seealso:: | |
70 |
|
70 | |||
71 | :ref:`defining_magics` |
|
71 | :ref:`defining_magics` | |
72 |
|
72 | |||
73 | You can put your extension modules anywhere you want, as long as they can be |
|
73 | You can put your extension modules anywhere you want, as long as they can be | |
74 | imported by Python's standard import mechanism. However, to make it easy to |
|
74 | imported by Python's standard import mechanism. However, to make it easy to | |
75 | write extensions, you can also put your extensions in :file:`extensions/` |
|
75 | write extensions, you can also put your extensions in :file:`extensions/` | |
76 | within the :ref:`IPython directory <ipythondir>`. This directory is |
|
76 | within the :ref:`IPython directory <ipythondir>`. This directory is | |
77 | added to :data:`sys.path` automatically. |
|
77 | added to :data:`sys.path` automatically. | |
78 |
|
78 | |||
79 | When your extension is ready for general use, please add it to the `extensions |
|
79 | When your extension is ready for general use, please add it to the `extensions | |
80 | index <https://github.com/ipython/ipython/wiki/Extensions-Index>`_. We also |
|
80 | index <https://github.com/ipython/ipython/wiki/Extensions-Index>`_. We also | |
81 | encourage you to upload it to PyPI and use the ``Framework :: IPython`` |
|
81 | encourage you to upload it to PyPI and use the ``Framework :: IPython`` | |
82 | classifier, so that users can install it with standard packaging tools. |
|
82 | classifier, so that users can install it with standard packaging tools. | |
83 |
|
83 | |||
84 | .. _bundled_extensions: |
|
84 | .. _bundled_extensions: | |
85 |
|
85 | |||
86 | Extensions bundled with IPython |
|
86 | Extensions bundled with IPython | |
87 | =============================== |
|
87 | =============================== | |
88 |
|
88 | |||
89 | .. toctree:: |
|
89 | .. toctree:: | |
90 | :maxdepth: 1 |
|
90 | :maxdepth: 1 | |
91 |
|
91 | |||
92 | autoreload |
|
92 | autoreload | |
93 | storemagic |
|
93 | storemagic | |
94 |
|
94 | |||
95 |
* ``octavemagic`` used to be bundled, but is now part of `oct2py <http://blink1073.github.io/oct2py |
|
95 | * ``octavemagic`` used to be bundled, but is now part of `oct2py <https://blink1073.github.io/oct2py/>`_. | |
96 | Use ``%load_ext oct2py.ipython`` to load it. |
|
96 | Use ``%load_ext oct2py.ipython`` to load it. | |
97 | * ``rmagic`` is now part of `rpy2 <http://rpy.sourceforge.net/>`_. Use |
|
97 | * ``rmagic`` is now part of `rpy2 <http://rpy.sourceforge.net/>`_. Use | |
98 | ``%load_ext rpy2.ipython`` to load it, and see :mod:`rpy2.ipython.rmagic` for |
|
98 | ``%load_ext rpy2.ipython`` to load it, and see :mod:`rpy2.ipython.rmagic` for | |
99 | details of how to use it. |
|
99 | details of how to use it. | |
100 | * ``cythonmagic`` used to be bundled, but is now part of `cython <https://github.com/cython/cython/>`_ |
|
100 | * ``cythonmagic`` used to be bundled, but is now part of `cython <https://github.com/cython/cython/>`_ | |
101 | Use ``%load_ext Cython`` to load it. |
|
101 | Use ``%load_ext Cython`` to load it. | |
102 | * ``sympyprinting`` used to be a bundled extension, but you should now use |
|
102 | * ``sympyprinting`` used to be a bundled extension, but you should now use | |
103 | :func:`sympy.init_printing` instead. |
|
103 | :func:`sympy.init_printing` instead. |
@@ -1,252 +1,252 b'' | |||||
1 | .. _release_process: |
|
1 | .. _release_process: | |
2 |
|
2 | |||
3 | ======================= |
|
3 | ======================= | |
4 | IPython release process |
|
4 | IPython release process | |
5 | ======================= |
|
5 | ======================= | |
6 |
|
6 | |||
7 | This document contains the process that is used to create an IPython release. |
|
7 | This document contains the process that is used to create an IPython release. | |
8 |
|
8 | |||
9 | Conveniently, the ``release`` script in the ``tools`` directory of the ``IPython`` |
|
9 | Conveniently, the ``release`` script in the ``tools`` directory of the ``IPython`` | |
10 | repository automates most of the release process. This document serves as a |
|
10 | repository automates most of the release process. This document serves as a | |
11 | handy reminder and checklist for the release manager. |
|
11 | handy reminder and checklist for the release manager. | |
12 |
|
12 | |||
13 | During the release process, you might need the extra following dependencies: |
|
13 | During the release process, you might need the extra following dependencies: | |
14 |
|
14 | |||
15 | - ``keyring`` to access your GitHub authentication tokens |
|
15 | - ``keyring`` to access your GitHub authentication tokens | |
16 | - ``graphviz`` to generate some graphs in the documentation |
|
16 | - ``graphviz`` to generate some graphs in the documentation | |
17 |
|
17 | |||
18 | Make sure you have all the required dependencies to run the tests as well. |
|
18 | Make sure you have all the required dependencies to run the tests as well. | |
19 |
|
19 | |||
20 |
|
20 | |||
21 | 1. Set Environment variables |
|
21 | 1. Set Environment variables | |
22 | ---------------------------- |
|
22 | ---------------------------- | |
23 |
|
23 | |||
24 | Set environment variables to document previous release tag, current |
|
24 | Set environment variables to document previous release tag, current | |
25 | release milestone, current release version, and git tag. |
|
25 | release milestone, current release version, and git tag. | |
26 |
|
26 | |||
27 | These variables may be used later to copy/paste as answers to the script |
|
27 | These variables may be used later to copy/paste as answers to the script | |
28 | questions instead of typing the appropriate command when the time comes. These |
|
28 | questions instead of typing the appropriate command when the time comes. These | |
29 | variables are not used by the scripts directly; therefore, there is no need to |
|
29 | variables are not used by the scripts directly; therefore, there is no need to | |
30 | ``export`` them. The format for bash is as follows, but note that these values |
|
30 | ``export`` them. The format for bash is as follows, but note that these values | |
31 | are just an example valid only for the 5.0 release; you'll need to update them |
|
31 | are just an example valid only for the 5.0 release; you'll need to update them | |
32 | for the release you are actually making:: |
|
32 | for the release you are actually making:: | |
33 |
|
33 | |||
34 | PREV_RELEASE=4.2.1 |
|
34 | PREV_RELEASE=4.2.1 | |
35 | MILESTONE=5.0 |
|
35 | MILESTONE=5.0 | |
36 | VERSION=5.0.0 |
|
36 | VERSION=5.0.0 | |
37 | BRANCH=master |
|
37 | BRANCH=master | |
38 |
|
38 | |||
39 |
|
39 | |||
40 | 2. Create GitHub stats and finish release note |
|
40 | 2. Create GitHub stats and finish release note | |
41 | ---------------------------------------------- |
|
41 | ---------------------------------------------- | |
42 |
|
42 | |||
43 | .. note:: |
|
43 | .. note:: | |
44 |
|
44 | |||
45 | This step is optional if making a Beta or RC release. |
|
45 | This step is optional if making a Beta or RC release. | |
46 |
|
46 | |||
47 | .. note:: |
|
47 | .. note:: | |
48 |
|
48 | |||
49 | Before generating the GitHub stats, verify that all closed issues and pull |
|
49 | Before generating the GitHub stats, verify that all closed issues and pull | |
50 | requests have `appropriate milestones |
|
50 | requests have `appropriate milestones | |
51 |
<https://github.com/ipython/ipython/wiki/Dev |
|
51 | <https://github.com/ipython/ipython/wiki/Dev:-GitHub-workflow#milestones>`_. | |
52 | `This search |
|
52 | `This search | |
53 | <https://github.com/ipython/ipython/issues?q=is%3Aclosed+no%3Amilestone+is%3Aissue>`_ |
|
53 | <https://github.com/ipython/ipython/issues?q=is%3Aclosed+no%3Amilestone+is%3Aissue>`_ | |
54 | should return no results before creating the GitHub stats. |
|
54 | should return no results before creating the GitHub stats. | |
55 |
|
55 | |||
56 | If a major release: |
|
56 | If a major release: | |
57 |
|
57 | |||
58 | - merge any pull request notes into what's new:: |
|
58 | - merge any pull request notes into what's new:: | |
59 |
|
59 | |||
60 | python tools/update_whatsnew.py |
|
60 | python tools/update_whatsnew.py | |
61 |
|
61 | |||
62 | - update ``docs/source/whatsnew/development.rst``, to ensure it covers |
|
62 | - update ``docs/source/whatsnew/development.rst``, to ensure it covers | |
63 | the major release features |
|
63 | the major release features | |
64 |
|
64 | |||
65 | - move the contents of ``development.rst`` to ``versionX.rst`` where ``X`` is |
|
65 | - move the contents of ``development.rst`` to ``versionX.rst`` where ``X`` is | |
66 | the numerical release version |
|
66 | the numerical release version | |
67 |
|
67 | |||
68 | - generate summary of GitHub contributions, which can be done with:: |
|
68 | - generate summary of GitHub contributions, which can be done with:: | |
69 |
|
69 | |||
70 | python tools/github_stats.py --milestone $MILESTONE > stats.rst |
|
70 | python tools/github_stats.py --milestone $MILESTONE > stats.rst | |
71 |
|
71 | |||
72 | which may need some manual cleanup of ``stats.rst``. Add the cleaned |
|
72 | which may need some manual cleanup of ``stats.rst``. Add the cleaned | |
73 | ``stats.rst`` results to ``docs/source/whatsnew/github-stats-X.rst`` |
|
73 | ``stats.rst`` results to ``docs/source/whatsnew/github-stats-X.rst`` | |
74 | where ``X`` is the numerical release version (don't forget to add it to |
|
74 | where ``X`` is the numerical release version (don't forget to add it to | |
75 | the git repo as well). If creating a major release, make a new |
|
75 | the git repo as well). If creating a major release, make a new | |
76 | ``github-stats-X.rst`` file; if creating a minor release, the content |
|
76 | ``github-stats-X.rst`` file; if creating a minor release, the content | |
77 | from ``stats.rst`` may simply be added to the top of an existing |
|
77 | from ``stats.rst`` may simply be added to the top of an existing | |
78 | ``github-stats-X.rst`` file. Finally, edit |
|
78 | ``github-stats-X.rst`` file. Finally, edit | |
79 | ``docs/source/whatsnew/index.rst`` to list the new ``github-stats-X`` |
|
79 | ``docs/source/whatsnew/index.rst`` to list the new ``github-stats-X`` | |
80 | file you just created and remove temporarily the first entry called |
|
80 | file you just created and remove temporarily the first entry called | |
81 | ``development`` (you'll need to add it back after release). |
|
81 | ``development`` (you'll need to add it back after release). | |
82 |
|
82 | |||
83 | Make sure that the stats file has a header or it won't be rendered in |
|
83 | Make sure that the stats file has a header or it won't be rendered in | |
84 | the final documentation. |
|
84 | the final documentation. | |
85 |
|
85 | |||
86 | To find duplicates and update `.mailmap`, use:: |
|
86 | To find duplicates and update `.mailmap`, use:: | |
87 |
|
87 | |||
88 | git log --format="%aN <%aE>" $PREV_RELEASE... | sort -u -f |
|
88 | git log --format="%aN <%aE>" $PREV_RELEASE... | sort -u -f | |
89 |
|
89 | |||
90 | 3. Make sure the repository is clean |
|
90 | 3. Make sure the repository is clean | |
91 | ------------------------------------ |
|
91 | ------------------------------------ | |
92 |
|
92 | |||
93 | of any file that could be problematic. |
|
93 | of any file that could be problematic. | |
94 | Remove all non-tracked files with: |
|
94 | Remove all non-tracked files with: | |
95 |
|
95 | |||
96 | .. code:: |
|
96 | .. code:: | |
97 |
|
97 | |||
98 | git clean -xfdi |
|
98 | git clean -xfdi | |
99 |
|
99 | |||
100 | This will ask for confirmation before removing all untracked files. Make |
|
100 | This will ask for confirmation before removing all untracked files. Make | |
101 | sure the ``dist/`` folder is clean to avoid any stale builds from |
|
101 | sure the ``dist/`` folder is clean to avoid any stale builds from | |
102 | previous build attempts. |
|
102 | previous build attempts. | |
103 |
|
103 | |||
104 |
|
104 | |||
105 | 4. Update the release version number |
|
105 | 4. Update the release version number | |
106 | ------------------------------------ |
|
106 | ------------------------------------ | |
107 |
|
107 | |||
108 | Edit ``IPython/core/release.py`` to have the current version. |
|
108 | Edit ``IPython/core/release.py`` to have the current version. | |
109 |
|
109 | |||
110 | in particular, update version number and ``_version_extra`` content in |
|
110 | in particular, update version number and ``_version_extra`` content in | |
111 | ``IPython/core/release.py``. |
|
111 | ``IPython/core/release.py``. | |
112 |
|
112 | |||
113 | Step 5 will validate your changes automatically, but you might still want to |
|
113 | Step 5 will validate your changes automatically, but you might still want to | |
114 | make sure the version number matches pep440. |
|
114 | make sure the version number matches pep440. | |
115 |
|
115 | |||
116 | In particular, ``rc`` and ``beta`` are not separated by ``.`` or the ``sdist`` |
|
116 | In particular, ``rc`` and ``beta`` are not separated by ``.`` or the ``sdist`` | |
117 | and ``bdist`` will appear as different releases. For example, a valid version |
|
117 | and ``bdist`` will appear as different releases. For example, a valid version | |
118 | number for a release candidate (rc) release is: ``1.3rc1``. Notice that there |
|
118 | number for a release candidate (rc) release is: ``1.3rc1``. Notice that there | |
119 | is no separator between the '3' and the 'r'. Check the environment variable |
|
119 | is no separator between the '3' and the 'r'. Check the environment variable | |
120 | ``$VERSION`` as well. |
|
120 | ``$VERSION`` as well. | |
121 |
|
121 | |||
122 | You will likely just have to modify/comment/uncomment one of the lines setting |
|
122 | You will likely just have to modify/comment/uncomment one of the lines setting | |
123 | ``_version_extra`` |
|
123 | ``_version_extra`` | |
124 |
|
124 | |||
125 |
|
125 | |||
126 | 5. Run the `tools/build_release` script |
|
126 | 5. Run the `tools/build_release` script | |
127 | --------------------------------------- |
|
127 | --------------------------------------- | |
128 |
|
128 | |||
129 | Running ``tools/build_release`` does all the file checking and building that |
|
129 | Running ``tools/build_release`` does all the file checking and building that | |
130 | the real release script will do. This makes test installations, checks that |
|
130 | the real release script will do. This makes test installations, checks that | |
131 | the build procedure runs OK, and tests other steps in the release process. |
|
131 | the build procedure runs OK, and tests other steps in the release process. | |
132 |
|
132 | |||
133 | The ``build_release`` script will in particular verify that the version number |
|
133 | The ``build_release`` script will in particular verify that the version number | |
134 | match PEP 440, in order to avoid surprise at the time of build upload. |
|
134 | match PEP 440, in order to avoid surprise at the time of build upload. | |
135 |
|
135 | |||
136 | We encourage creating a test build of the docs as well. |
|
136 | We encourage creating a test build of the docs as well. | |
137 |
|
137 | |||
138 | 6. Create and push the new tag |
|
138 | 6. Create and push the new tag | |
139 | ------------------------------ |
|
139 | ------------------------------ | |
140 |
|
140 | |||
141 | Commit the changes to release.py:: |
|
141 | Commit the changes to release.py:: | |
142 |
|
142 | |||
143 | git commit -am "release $VERSION" |
|
143 | git commit -am "release $VERSION" | |
144 | git push origin $BRANCH |
|
144 | git push origin $BRANCH | |
145 |
|
145 | |||
146 | Create and push the tag:: |
|
146 | Create and push the tag:: | |
147 |
|
147 | |||
148 | git tag -am "release $VERSION" "$VERSION" |
|
148 | git tag -am "release $VERSION" "$VERSION" | |
149 | git push origin --tags |
|
149 | git push origin --tags | |
150 |
|
150 | |||
151 | Update release.py back to ``x.y-dev`` or ``x.y-maint``, and re-add the |
|
151 | Update release.py back to ``x.y-dev`` or ``x.y-maint``, and re-add the | |
152 | ``development`` entry in ``docs/source/whatsnew/index.rst`` and push:: |
|
152 | ``development`` entry in ``docs/source/whatsnew/index.rst`` and push:: | |
153 |
|
153 | |||
154 | git commit -am "back to development" |
|
154 | git commit -am "back to development" | |
155 | git push origin $BRANCH |
|
155 | git push origin $BRANCH | |
156 |
|
156 | |||
157 | 7. Get a fresh clone |
|
157 | 7. Get a fresh clone | |
158 | -------------------- |
|
158 | -------------------- | |
159 |
|
159 | |||
160 | Get a fresh clone of the tag for building the release:: |
|
160 | Get a fresh clone of the tag for building the release:: | |
161 |
|
161 | |||
162 | cd /tmp |
|
162 | cd /tmp | |
163 | git clone --depth 1 https://github.com/ipython/ipython.git -b "$VERSION" |
|
163 | git clone --depth 1 https://github.com/ipython/ipython.git -b "$VERSION" | |
164 | cd ipython |
|
164 | cd ipython | |
165 |
|
165 | |||
166 | .. note:: |
|
166 | .. note:: | |
167 |
|
167 | |||
168 | You can aslo cleanup the current working repository with ``git clean -xfdi`` |
|
168 | You can aslo cleanup the current working repository with ``git clean -xfdi`` | |
169 |
|
169 | |||
170 | 8. Run the release script |
|
170 | 8. Run the release script | |
171 | ------------------------- |
|
171 | ------------------------- | |
172 |
|
172 | |||
173 | .. important:: |
|
173 | .. important:: | |
174 |
|
174 | |||
175 | These steps cover instructions for creating releases of IPython 5.x LTS and |
|
175 | These steps cover instructions for creating releases of IPython 5.x LTS and | |
176 | IPython 6.x. Ignore release steps for Python 2 when releasing IPython 6.x |
|
176 | IPython 6.x. Ignore release steps for Python 2 when releasing IPython 6.x | |
177 | which no longer supports Python 2. |
|
177 | which no longer supports Python 2. | |
178 |
|
178 | |||
179 | Run the ``release`` script, this step requires having a current wheel, Python |
|
179 | Run the ``release`` script, this step requires having a current wheel, Python | |
180 | >=3.4 and Python 2.7.:: |
|
180 | >=3.4 and Python 2.7.:: | |
181 |
|
181 | |||
182 | ./tools/release |
|
182 | ./tools/release | |
183 |
|
183 | |||
184 | This makes the tarballs and wheels, and puts them under the ``dist/`` |
|
184 | This makes the tarballs and wheels, and puts them under the ``dist/`` | |
185 | folder. Be sure to test the ``wheels`` and the ``sdist`` locally before |
|
185 | folder. Be sure to test the ``wheels`` and the ``sdist`` locally before | |
186 | uploading them to PyPI. We do not use an universal wheel as each wheel |
|
186 | uploading them to PyPI. We do not use an universal wheel as each wheel | |
187 | installs an ``ipython2`` or ``ipython3`` script, depending on the version of |
|
187 | installs an ``ipython2`` or ``ipython3`` script, depending on the version of | |
188 | Python it is built for. Using an universal wheel would prevent this. |
|
188 | Python it is built for. Using an universal wheel would prevent this. | |
189 |
|
189 | |||
190 | Use the following to actually upload the result of the build:: |
|
190 | Use the following to actually upload the result of the build:: | |
191 |
|
191 | |||
192 | ./tools/release upload |
|
192 | ./tools/release upload | |
193 |
|
193 | |||
194 | It should posts them to ``archive.ipython.org``. |
|
194 | It should posts them to ``archive.ipython.org``. | |
195 |
|
195 | |||
196 | You will need to use `twine <https://github.com/pypa/twine>`_ ) manually to |
|
196 | You will need to use `twine <https://github.com/pypa/twine>`_ ) manually to | |
197 | actually upload on PyPI. Unlike setuptools, twine is able to upload packages |
|
197 | actually upload on PyPI. Unlike setuptools, twine is able to upload packages | |
198 | over SSL:: |
|
198 | over SSL:: | |
199 |
|
199 | |||
200 | twine upload dist/* |
|
200 | twine upload dist/* | |
201 |
|
201 | |||
202 |
|
202 | |||
203 | PyPI/Warehouse will automatically hide previous releases. If you are uploading |
|
203 | PyPI/Warehouse will automatically hide previous releases. If you are uploading | |
204 | a non-stable version, make sure to log-in to PyPI and un-hide previous version. |
|
204 | a non-stable version, make sure to log-in to PyPI and un-hide previous version. | |
205 |
|
205 | |||
206 |
|
206 | |||
207 | 9. Draft a short release announcement |
|
207 | 9. Draft a short release announcement | |
208 | ------------------------------------- |
|
208 | ------------------------------------- | |
209 |
|
209 | |||
210 | The announcement should include: |
|
210 | The announcement should include: | |
211 |
|
211 | |||
212 | - release highlights |
|
212 | - release highlights | |
213 | - a link to the html version of the *What's new* section of the documentation |
|
213 | - a link to the html version of the *What's new* section of the documentation | |
214 | - a link to upgrade or installation tips (if necessary) |
|
214 | - a link to upgrade or installation tips (if necessary) | |
215 |
|
215 | |||
216 | Post the announcement to the mailing list and or blog, and link from Twitter. |
|
216 | Post the announcement to the mailing list and or blog, and link from Twitter. | |
217 |
|
217 | |||
218 | .. note:: |
|
218 | .. note:: | |
219 |
|
219 | |||
220 | If you are doing a RC or Beta, you can likely skip the next steps. |
|
220 | If you are doing a RC or Beta, you can likely skip the next steps. | |
221 |
|
221 | |||
222 | 10. Update milestones on GitHub |
|
222 | 10. Update milestones on GitHub | |
223 | ------------------------------- |
|
223 | ------------------------------- | |
224 |
|
224 | |||
225 | These steps will bring milestones up to date: |
|
225 | These steps will bring milestones up to date: | |
226 |
|
226 | |||
227 | - close the just released milestone |
|
227 | - close the just released milestone | |
228 | - open a new milestone for the next release (x, y+1), if the milestone doesn't |
|
228 | - open a new milestone for the next release (x, y+1), if the milestone doesn't | |
229 | exist already |
|
229 | exist already | |
230 |
|
230 | |||
231 | 11. Update the IPython website |
|
231 | 11. Update the IPython website | |
232 | ------------------------------ |
|
232 | ------------------------------ | |
233 |
|
233 | |||
234 | The IPython website should document the new release: |
|
234 | The IPython website should document the new release: | |
235 |
|
235 | |||
236 | - add release announcement (news, announcements) |
|
236 | - add release announcement (news, announcements) | |
237 | - update current version and download links |
|
237 | - update current version and download links | |
238 | - update links on the documentation page (especially if a major release) |
|
238 | - update links on the documentation page (especially if a major release) | |
239 |
|
239 | |||
240 | 12. Update readthedocs |
|
240 | 12. Update readthedocs | |
241 | ---------------------- |
|
241 | ---------------------- | |
242 |
|
242 | |||
243 | Make sure to update readthedocs and set the latest tag as stable, as well as |
|
243 | Make sure to update readthedocs and set the latest tag as stable, as well as | |
244 | checking that previous release is still building under its own tag. |
|
244 | checking that previous release is still building under its own tag. | |
245 |
|
245 | |||
246 |
|
246 | |||
247 | 13. Celebrate! |
|
247 | 13. Celebrate! | |
248 | -------------- |
|
248 | -------------- | |
249 |
|
249 | |||
250 | Celebrate the release and please thank the contributors for their work. Great |
|
250 | Celebrate the release and please thank the contributors for their work. Great | |
251 | job! |
|
251 | job! | |
252 |
|
252 |
@@ -1,175 +1,175 b'' | |||||
1 | Making simple Python wrapper kernels |
|
1 | Making simple Python wrapper kernels | |
2 | ==================================== |
|
2 | ==================================== | |
3 |
|
3 | |||
4 | .. versionadded:: 3.0 |
|
4 | .. versionadded:: 3.0 | |
5 |
|
5 | |||
6 | You can now re-use the kernel machinery in IPython to easily make new kernels. |
|
6 | You can now re-use the kernel machinery in IPython to easily make new kernels. | |
7 | This is useful for languages that have Python bindings, such as `Octave |
|
7 | This is useful for languages that have Python bindings, such as `Octave | |
8 | <http://www.gnu.org/software/octave/>`_ (via |
|
8 | <http://www.gnu.org/software/octave/>`_ (via | |
9 |
`Oct2Py <http://blink1073.github.io/oct2py/ |
|
9 | `Oct2Py <http://blink1073.github.io/oct2py/>`_), or languages | |
10 | where the REPL can be controlled in a tty using `pexpect <http://pexpect.readthedocs.io/en/latest/>`_, |
|
10 | where the REPL can be controlled in a tty using `pexpect <http://pexpect.readthedocs.io/en/latest/>`_, | |
11 | such as bash. |
|
11 | such as bash. | |
12 |
|
12 | |||
13 | .. seealso:: |
|
13 | .. seealso:: | |
14 |
|
14 | |||
15 | `bash_kernel <https://github.com/takluyver/bash_kernel>`_ |
|
15 | `bash_kernel <https://github.com/takluyver/bash_kernel>`_ | |
16 | A simple kernel for bash, written using this machinery |
|
16 | A simple kernel for bash, written using this machinery | |
17 |
|
17 | |||
18 | Required steps |
|
18 | Required steps | |
19 | -------------- |
|
19 | -------------- | |
20 |
|
20 | |||
21 | Subclass :class:`ipykernel.kernelbase.Kernel`, and implement the |
|
21 | Subclass :class:`ipykernel.kernelbase.Kernel`, and implement the | |
22 | following methods and attributes: |
|
22 | following methods and attributes: | |
23 |
|
23 | |||
24 | .. class:: MyKernel |
|
24 | .. class:: MyKernel | |
25 |
|
25 | |||
26 | .. attribute:: implementation |
|
26 | .. attribute:: implementation | |
27 | implementation_version |
|
27 | implementation_version | |
28 | language |
|
28 | language | |
29 | language_version |
|
29 | language_version | |
30 | banner |
|
30 | banner | |
31 |
|
31 | |||
32 | Information for :ref:`msging_kernel_info` replies. 'Implementation' refers |
|
32 | Information for :ref:`msging_kernel_info` replies. 'Implementation' refers | |
33 | to the kernel (e.g. IPython), and 'language' refers to the language it |
|
33 | to the kernel (e.g. IPython), and 'language' refers to the language it | |
34 | interprets (e.g. Python). The 'banner' is displayed to the user in console |
|
34 | interprets (e.g. Python). The 'banner' is displayed to the user in console | |
35 | UIs before the first prompt. All of these values are strings. |
|
35 | UIs before the first prompt. All of these values are strings. | |
36 |
|
36 | |||
37 | .. attribute:: language_info |
|
37 | .. attribute:: language_info | |
38 |
|
38 | |||
39 | Language information for :ref:`msging_kernel_info` replies, in a dictionary. |
|
39 | Language information for :ref:`msging_kernel_info` replies, in a dictionary. | |
40 | This should contain the key ``mimetype`` with the mimetype of code in the |
|
40 | This should contain the key ``mimetype`` with the mimetype of code in the | |
41 | target language (e.g. ``'text/x-python'``), and ``file_extension`` (e.g. |
|
41 | target language (e.g. ``'text/x-python'``), and ``file_extension`` (e.g. | |
42 | ``'py'``). |
|
42 | ``'py'``). | |
43 | It may also contain keys ``codemirror_mode`` and ``pygments_lexer`` if they |
|
43 | It may also contain keys ``codemirror_mode`` and ``pygments_lexer`` if they | |
44 | need to differ from :attr:`language`. |
|
44 | need to differ from :attr:`language`. | |
45 |
|
45 | |||
46 | Other keys may be added to this later. |
|
46 | Other keys may be added to this later. | |
47 |
|
47 | |||
48 | .. method:: do_execute(code, silent, store_history=True, user_expressions=None, allow_stdin=False) |
|
48 | .. method:: do_execute(code, silent, store_history=True, user_expressions=None, allow_stdin=False) | |
49 |
|
49 | |||
50 | Execute user code. |
|
50 | Execute user code. | |
51 |
|
51 | |||
52 | :param str code: The code to be executed. |
|
52 | :param str code: The code to be executed. | |
53 | :param bool silent: Whether to display output. |
|
53 | :param bool silent: Whether to display output. | |
54 | :param bool store_history: Whether to record this code in history and |
|
54 | :param bool store_history: Whether to record this code in history and | |
55 | increase the execution count. If silent is True, this is implicitly |
|
55 | increase the execution count. If silent is True, this is implicitly | |
56 | False. |
|
56 | False. | |
57 | :param dict user_expressions: Mapping of names to expressions to evaluate |
|
57 | :param dict user_expressions: Mapping of names to expressions to evaluate | |
58 | after the code has run. You can ignore this if you need to. |
|
58 | after the code has run. You can ignore this if you need to. | |
59 | :param bool allow_stdin: Whether the frontend can provide input on request |
|
59 | :param bool allow_stdin: Whether the frontend can provide input on request | |
60 | (e.g. for Python's :func:`raw_input`). |
|
60 | (e.g. for Python's :func:`raw_input`). | |
61 |
|
61 | |||
62 | Your method should return a dict containing the fields described in |
|
62 | Your method should return a dict containing the fields described in | |
63 | :ref:`execution_results`. To display output, it can send messages |
|
63 | :ref:`execution_results`. To display output, it can send messages | |
64 | using :meth:`~ipykernel.kernelbase.Kernel.send_response`. |
|
64 | using :meth:`~ipykernel.kernelbase.Kernel.send_response`. | |
65 | See :doc:`messaging` for details of the different message types. |
|
65 | See :doc:`messaging` for details of the different message types. | |
66 |
|
66 | |||
67 | To launch your kernel, add this at the end of your module:: |
|
67 | To launch your kernel, add this at the end of your module:: | |
68 |
|
68 | |||
69 | if __name__ == '__main__': |
|
69 | if __name__ == '__main__': | |
70 | from ipykernel.kernelapp import IPKernelApp |
|
70 | from ipykernel.kernelapp import IPKernelApp | |
71 | IPKernelApp.launch_instance(kernel_class=MyKernel) |
|
71 | IPKernelApp.launch_instance(kernel_class=MyKernel) | |
72 |
|
72 | |||
73 | Example |
|
73 | Example | |
74 | ------- |
|
74 | ------- | |
75 |
|
75 | |||
76 | ``echokernel.py`` will simply echo any input it's given to stdout:: |
|
76 | ``echokernel.py`` will simply echo any input it's given to stdout:: | |
77 |
|
77 | |||
78 | from ipykernel.kernelbase import Kernel |
|
78 | from ipykernel.kernelbase import Kernel | |
79 |
|
79 | |||
80 | class EchoKernel(Kernel): |
|
80 | class EchoKernel(Kernel): | |
81 | implementation = 'Echo' |
|
81 | implementation = 'Echo' | |
82 | implementation_version = '1.0' |
|
82 | implementation_version = '1.0' | |
83 | language = 'no-op' |
|
83 | language = 'no-op' | |
84 | language_version = '0.1' |
|
84 | language_version = '0.1' | |
85 | language_info = {'mimetype': 'text/plain'} |
|
85 | language_info = {'mimetype': 'text/plain'} | |
86 | banner = "Echo kernel - as useful as a parrot" |
|
86 | banner = "Echo kernel - as useful as a parrot" | |
87 |
|
87 | |||
88 | def do_execute(self, code, silent, store_history=True, user_expressions=None, |
|
88 | def do_execute(self, code, silent, store_history=True, user_expressions=None, | |
89 | allow_stdin=False): |
|
89 | allow_stdin=False): | |
90 | if not silent: |
|
90 | if not silent: | |
91 | stream_content = {'name': 'stdout', 'text': code} |
|
91 | stream_content = {'name': 'stdout', 'text': code} | |
92 | self.send_response(self.iopub_socket, 'stream', stream_content) |
|
92 | self.send_response(self.iopub_socket, 'stream', stream_content) | |
93 |
|
93 | |||
94 | return {'status': 'ok', |
|
94 | return {'status': 'ok', | |
95 | # The base class increments the execution count |
|
95 | # The base class increments the execution count | |
96 | 'execution_count': self.execution_count, |
|
96 | 'execution_count': self.execution_count, | |
97 | 'payload': [], |
|
97 | 'payload': [], | |
98 | 'user_expressions': {}, |
|
98 | 'user_expressions': {}, | |
99 | } |
|
99 | } | |
100 |
|
100 | |||
101 | if __name__ == '__main__': |
|
101 | if __name__ == '__main__': | |
102 | from ipykernel.kernelapp import IPKernelApp |
|
102 | from ipykernel.kernelapp import IPKernelApp | |
103 | IPKernelApp.launch_instance(kernel_class=EchoKernel) |
|
103 | IPKernelApp.launch_instance(kernel_class=EchoKernel) | |
104 |
|
104 | |||
105 | Here's the Kernel spec ``kernel.json`` file for this:: |
|
105 | Here's the Kernel spec ``kernel.json`` file for this:: | |
106 |
|
106 | |||
107 | {"argv":["python","-m","echokernel", "-f", "{connection_file}"], |
|
107 | {"argv":["python","-m","echokernel", "-f", "{connection_file}"], | |
108 | "display_name":"Echo" |
|
108 | "display_name":"Echo" | |
109 | } |
|
109 | } | |
110 |
|
110 | |||
111 |
|
111 | |||
112 | Optional steps |
|
112 | Optional steps | |
113 | -------------- |
|
113 | -------------- | |
114 |
|
114 | |||
115 | You can override a number of other methods to improve the functionality of your |
|
115 | You can override a number of other methods to improve the functionality of your | |
116 | kernel. All of these methods should return a dictionary as described in the |
|
116 | kernel. All of these methods should return a dictionary as described in the | |
117 | relevant section of the :doc:`messaging spec <messaging>`. |
|
117 | relevant section of the :doc:`messaging spec <messaging>`. | |
118 |
|
118 | |||
119 | .. class:: MyKernel |
|
119 | .. class:: MyKernel | |
120 |
|
120 | |||
121 | .. method:: do_complete(code, cusor_pos) |
|
121 | .. method:: do_complete(code, cusor_pos) | |
122 |
|
122 | |||
123 | Code completion |
|
123 | Code completion | |
124 |
|
124 | |||
125 | :param str code: The code already present |
|
125 | :param str code: The code already present | |
126 | :param int cursor_pos: The position in the code where completion is requested |
|
126 | :param int cursor_pos: The position in the code where completion is requested | |
127 |
|
127 | |||
128 | .. seealso:: |
|
128 | .. seealso:: | |
129 |
|
129 | |||
130 | :ref:`msging_completion` messages |
|
130 | :ref:`msging_completion` messages | |
131 |
|
131 | |||
132 | .. method:: do_inspect(code, cusor_pos, detail_level=0) |
|
132 | .. method:: do_inspect(code, cusor_pos, detail_level=0) | |
133 |
|
133 | |||
134 | Object introspection |
|
134 | Object introspection | |
135 |
|
135 | |||
136 | :param str code: The code |
|
136 | :param str code: The code | |
137 | :param int cursor_pos: The position in the code where introspection is requested |
|
137 | :param int cursor_pos: The position in the code where introspection is requested | |
138 | :param int detail_level: 0 or 1 for more or less detail. In IPython, 1 gets |
|
138 | :param int detail_level: 0 or 1 for more or less detail. In IPython, 1 gets | |
139 | the source code. |
|
139 | the source code. | |
140 |
|
140 | |||
141 | .. seealso:: |
|
141 | .. seealso:: | |
142 |
|
142 | |||
143 | :ref:`msging_inspection` messages |
|
143 | :ref:`msging_inspection` messages | |
144 |
|
144 | |||
145 | .. method:: do_history(hist_access_type, output, raw, session=None, start=None, stop=None, n=None, pattern=None, unique=False) |
|
145 | .. method:: do_history(hist_access_type, output, raw, session=None, start=None, stop=None, n=None, pattern=None, unique=False) | |
146 |
|
146 | |||
147 | History access. Only the relevant parameters for the type of history |
|
147 | History access. Only the relevant parameters for the type of history | |
148 | request concerned will be passed, so your method definition must have defaults |
|
148 | request concerned will be passed, so your method definition must have defaults | |
149 | for all the arguments shown with defaults here. |
|
149 | for all the arguments shown with defaults here. | |
150 |
|
150 | |||
151 | .. seealso:: |
|
151 | .. seealso:: | |
152 |
|
152 | |||
153 | :ref:`msging_history` messages |
|
153 | :ref:`msging_history` messages | |
154 |
|
154 | |||
155 | .. method:: do_is_complete(code) |
|
155 | .. method:: do_is_complete(code) | |
156 |
|
156 | |||
157 | Is code entered in a console-like interface complete and ready to execute, |
|
157 | Is code entered in a console-like interface complete and ready to execute, | |
158 | or should a continuation prompt be shown? |
|
158 | or should a continuation prompt be shown? | |
159 |
|
159 | |||
160 | :param str code: The code entered so far - possibly multiple lines |
|
160 | :param str code: The code entered so far - possibly multiple lines | |
161 |
|
161 | |||
162 | .. seealso:: |
|
162 | .. seealso:: | |
163 |
|
163 | |||
164 | :ref:`msging_is_complete` messages |
|
164 | :ref:`msging_is_complete` messages | |
165 |
|
165 | |||
166 | .. method:: do_shutdown(restart) |
|
166 | .. method:: do_shutdown(restart) | |
167 |
|
167 | |||
168 | Shutdown the kernel. You only need to handle your own clean up - the kernel |
|
168 | Shutdown the kernel. You only need to handle your own clean up - the kernel | |
169 | machinery will take care of cleaning up its own things before stopping. |
|
169 | machinery will take care of cleaning up its own things before stopping. | |
170 |
|
170 | |||
171 | :param bool restart: Whether the kernel will be started again afterwards |
|
171 | :param bool restart: Whether the kernel will be started again afterwards | |
172 |
|
172 | |||
173 | .. seealso:: |
|
173 | .. seealso:: | |
174 |
|
174 | |||
175 | :ref:`msging_shutdown` messages |
|
175 | :ref:`msging_shutdown` messages |
@@ -1,1203 +1,1203 b'' | |||||
1 | .. _issues_list_013: |
|
1 | .. _issues_list_013: | |
2 |
|
2 | |||
3 | Issues closed in the 0.13 development cycle |
|
3 | Issues closed in the 0.13 development cycle | |
4 | =========================================== |
|
4 | =========================================== | |
5 |
|
5 | |||
6 | Issues closed in 0.13 |
|
6 | Issues closed in 0.13 | |
7 | --------------------- |
|
7 | --------------------- | |
8 |
|
8 | |||
9 | GitHub stats since IPython 0.12 (2011/12/19 - 2012/06/30) |
|
9 | GitHub stats since IPython 0.12 (2011/12/19 - 2012/06/30) | |
10 |
|
10 | |||
11 | These lists are automatically generated, and may be incomplete or contain |
|
11 | These lists are automatically generated, and may be incomplete or contain | |
12 | duplicates. |
|
12 | duplicates. | |
13 |
|
13 | |||
14 | The following 62 authors contributed 1760 commits. |
|
14 | The following 62 authors contributed 1760 commits. | |
15 |
|
15 | |||
16 | * Aaron Culich |
|
16 | * Aaron Culich | |
17 | * Aaron Meurer |
|
17 | * Aaron Meurer | |
18 | * Alex Kramer |
|
18 | * Alex Kramer | |
19 | * Andrew Giessel |
|
19 | * Andrew Giessel | |
20 | * Andrew Straw |
|
20 | * Andrew Straw | |
21 | * AndrΓ© Matos |
|
21 | * AndrΓ© Matos | |
22 | * Aron Ahmadia |
|
22 | * Aron Ahmadia | |
23 | * Ben Edwards |
|
23 | * Ben Edwards | |
24 | * Benjamin Ragan-Kelley |
|
24 | * Benjamin Ragan-Kelley | |
25 | * Bradley M. Froehle |
|
25 | * Bradley M. Froehle | |
26 | * Brandon Parsons |
|
26 | * Brandon Parsons | |
27 | * Brian E. Granger |
|
27 | * Brian E. Granger | |
28 | * Carlos Cordoba |
|
28 | * Carlos Cordoba | |
29 | * David Hirschfeld |
|
29 | * David Hirschfeld | |
30 | * David Zderic |
|
30 | * David Zderic | |
31 | * Ernie French |
|
31 | * Ernie French | |
32 | * Fernando Perez |
|
32 | * Fernando Perez | |
33 | * Ian Murray |
|
33 | * Ian Murray | |
34 | * Jason Grout |
|
34 | * Jason Grout | |
35 | * Jens H Nielsen |
|
35 | * Jens H Nielsen | |
36 | * Jez Ng |
|
36 | * Jez Ng | |
37 | * Jonathan March |
|
37 | * Jonathan March | |
38 | * Jonathan Taylor |
|
38 | * Jonathan Taylor | |
39 | * Julian Taylor |
|
39 | * Julian Taylor | |
40 | * JΓΆrgen Stenarson |
|
40 | * JΓΆrgen Stenarson | |
41 | * Kent Inverarity |
|
41 | * Kent Inverarity | |
42 | * Marc Abramowitz |
|
42 | * Marc Abramowitz | |
43 | * Mark Wiebe |
|
43 | * Mark Wiebe | |
44 | * Matthew Brett |
|
44 | * Matthew Brett | |
45 | * Matthias BUSSONNIER |
|
45 | * Matthias BUSSONNIER | |
46 | * Michael Droettboom |
|
46 | * Michael Droettboom | |
47 | * Mike Hansen |
|
47 | * Mike Hansen | |
48 | * Nathan Rice |
|
48 | * Nathan Rice | |
49 | * Pankaj Pandey |
|
49 | * Pankaj Pandey | |
50 | * Paul |
|
50 | * Paul | |
51 | * Paul Ivanov |
|
51 | * Paul Ivanov | |
52 | * Piotr Zolnierczuk |
|
52 | * Piotr Zolnierczuk | |
53 | * Piti Ongmongkolkul |
|
53 | * Piti Ongmongkolkul | |
54 | * Puneeth Chaganti |
|
54 | * Puneeth Chaganti | |
55 | * Robert Kern |
|
55 | * Robert Kern | |
56 | * Ross Jones |
|
56 | * Ross Jones | |
57 | * Roy Hyunjin Han |
|
57 | * Roy Hyunjin Han | |
58 | * Scott Tsai |
|
58 | * Scott Tsai | |
59 | * Skipper Seabold |
|
59 | * Skipper Seabold | |
60 | * Stefan van der Walt |
|
60 | * Stefan van der Walt | |
61 | * Steven Johnson |
|
61 | * Steven Johnson | |
62 | * Takafumi Arakaki |
|
62 | * Takafumi Arakaki | |
63 | * Ted Wright |
|
63 | * Ted Wright | |
64 | * Thomas Hisch |
|
64 | * Thomas Hisch | |
65 | * Thomas Kluyver |
|
65 | * Thomas Kluyver | |
66 | * Thomas Spura |
|
66 | * Thomas Spura | |
67 | * Thomi Richards |
|
67 | * Thomi Richards | |
68 | * Tim Couper |
|
68 | * Tim Couper | |
69 | * Timo Paulssen |
|
69 | * Timo Paulssen | |
70 | * Toby Gilham |
|
70 | * Toby Gilham | |
71 | * Tony S Yu |
|
71 | * Tony S Yu | |
72 | * W. Trevor King |
|
72 | * W. Trevor King | |
73 | * Walter Doerwald |
|
73 | * Walter Doerwald | |
74 | * anatoly techtonik |
|
74 | * anatoly techtonik | |
75 | * fawce |
|
75 | * fawce | |
76 | * mcelrath |
|
76 | * mcelrath | |
77 | * wilsaj |
|
77 | * wilsaj | |
78 |
|
78 | |||
79 |
|
79 | |||
80 | We closed a total of 1115 issues, 373 pull requests and 742 regular issues; |
|
80 | We closed a total of 1115 issues, 373 pull requests and 742 regular issues; | |
81 | this is the full list (generated with the script |
|
81 | this is the full list (generated with the script | |
82 | :file:`tools/github_stats.py`): |
|
82 | :file:`tools/github_stats.py`): | |
83 |
|
83 | |||
84 | Pull Requests (373): |
|
84 | Pull Requests (373): | |
85 |
|
85 | |||
86 | * :ghpull:`1943`: add screenshot and link into releasenotes |
|
86 | * :ghpull:`1943`: add screenshot and link into releasenotes | |
87 | * :ghpull:`1954`: update some example notebooks |
|
87 | * :ghpull:`1954`: update some example notebooks | |
88 | * :ghpull:`2048`: move _encode_binary to jsonutil.encode_images |
|
88 | * :ghpull:`2048`: move _encode_binary to jsonutil.encode_images | |
89 | * :ghpull:`2050`: only add quotes around xunit-file on Windows |
|
89 | * :ghpull:`2050`: only add quotes around xunit-file on Windows | |
90 | * :ghpull:`2047`: disable auto-scroll on mozilla |
|
90 | * :ghpull:`2047`: disable auto-scroll on mozilla | |
91 | * :ghpull:`2015`: Fixes for %paste with special transformations |
|
91 | * :ghpull:`2015`: Fixes for %paste with special transformations | |
92 | * :ghpull:`2046`: Iptest unicode |
|
92 | * :ghpull:`2046`: Iptest unicode | |
93 | * :ghpull:`1939`: Namespaces |
|
93 | * :ghpull:`1939`: Namespaces | |
94 | * :ghpull:`2042`: increase auto-scroll threshold to 100 lines |
|
94 | * :ghpull:`2042`: increase auto-scroll threshold to 100 lines | |
95 | * :ghpull:`2043`: move RemoteError import to top-level |
|
95 | * :ghpull:`2043`: move RemoteError import to top-level | |
96 | * :ghpull:`2036`: %alias_magic |
|
96 | * :ghpull:`2036`: %alias_magic | |
97 | * :ghpull:`1968`: Proposal of icons for .ipynb files |
|
97 | * :ghpull:`1968`: Proposal of icons for .ipynb files | |
98 | * :ghpull:`2037`: remove `ipython-qtconsole` gui-script |
|
98 | * :ghpull:`2037`: remove `ipython-qtconsole` gui-script | |
99 | * :ghpull:`2038`: add extra clear warning to shell doc |
|
99 | * :ghpull:`2038`: add extra clear warning to shell doc | |
100 | * :ghpull:`2029`: Ship unminified js |
|
100 | * :ghpull:`2029`: Ship unminified js | |
101 | * :ghpull:`2007`: Add custom_control and custom_page_control variables to override the Qt widgets used by qtconsole |
|
101 | * :ghpull:`2007`: Add custom_control and custom_page_control variables to override the Qt widgets used by qtconsole | |
102 | * :ghpull:`2034`: fix&test push/pull recarrays |
|
102 | * :ghpull:`2034`: fix&test push/pull recarrays | |
103 | * :ghpull:`2028`: Reduce unhelpful information shown by pinfo |
|
103 | * :ghpull:`2028`: Reduce unhelpful information shown by pinfo | |
104 | * :ghpull:`2030`: check wxPython version in inputhook |
|
104 | * :ghpull:`2030`: check wxPython version in inputhook | |
105 | * :ghpull:`2024`: Make interactive_usage a bit more rst friendly |
|
105 | * :ghpull:`2024`: Make interactive_usage a bit more rst friendly | |
106 | * :ghpull:`2031`: disable ^C^C confirmation on Windows |
|
106 | * :ghpull:`2031`: disable ^C^C confirmation on Windows | |
107 | * :ghpull:`2027`: match stdin encoding in frontend readline test |
|
107 | * :ghpull:`2027`: match stdin encoding in frontend readline test | |
108 | * :ghpull:`2025`: Fix parallel test on WinXP - wait for resource cleanup. |
|
108 | * :ghpull:`2025`: Fix parallel test on WinXP - wait for resource cleanup. | |
109 | * :ghpull:`2016`: BUG: test runner fails in Windows if filenames contain spaces. |
|
109 | * :ghpull:`2016`: BUG: test runner fails in Windows if filenames contain spaces. | |
110 | * :ghpull:`2020`: Fix home path expansion test in Windows. |
|
110 | * :ghpull:`2020`: Fix home path expansion test in Windows. | |
111 | * :ghpull:`2021`: Fix Windows pathname issue in 'odd encoding' test. |
|
111 | * :ghpull:`2021`: Fix Windows pathname issue in 'odd encoding' test. | |
112 | * :ghpull:`2022`: don't check writability in test for get_home_dir when HOME is undefined |
|
112 | * :ghpull:`2022`: don't check writability in test for get_home_dir when HOME is undefined | |
113 | * :ghpull:`1996`: frontend test tweaks |
|
113 | * :ghpull:`1996`: frontend test tweaks | |
114 | * :ghpull:`2014`: relax profile regex in notebook |
|
114 | * :ghpull:`2014`: relax profile regex in notebook | |
115 | * :ghpull:`2012`: Mono cursor offset |
|
115 | * :ghpull:`2012`: Mono cursor offset | |
116 | * :ghpull:`2004`: Clarify generic message spec vs. Python message API in docs |
|
116 | * :ghpull:`2004`: Clarify generic message spec vs. Python message API in docs | |
117 | * :ghpull:`2010`: notebook: Print a warning (but do not abort) if no webbrowser can be found. |
|
117 | * :ghpull:`2010`: notebook: Print a warning (but do not abort) if no webbrowser can be found. | |
118 | * :ghpull:`2002`: Refactor %magic into a lsmagic_docs API function. |
|
118 | * :ghpull:`2002`: Refactor %magic into a lsmagic_docs API function. | |
119 | * :ghpull:`1999`: `%magic` help: display line and cell magics in alphabetical order. |
|
119 | * :ghpull:`1999`: `%magic` help: display line and cell magics in alphabetical order. | |
120 | * :ghpull:`1981`: Clean BG processes created by %%script on kernel exit |
|
120 | * :ghpull:`1981`: Clean BG processes created by %%script on kernel exit | |
121 | * :ghpull:`1994`: Fix RST misformatting. |
|
121 | * :ghpull:`1994`: Fix RST misformatting. | |
122 | * :ghpull:`1951`: minor notebook startup/notebook-dir adjustments |
|
122 | * :ghpull:`1951`: minor notebook startup/notebook-dir adjustments | |
123 | * :ghpull:`1974`: Allow path completion on notebook. |
|
123 | * :ghpull:`1974`: Allow path completion on notebook. | |
124 | * :ghpull:`1964`: allow multiple instances of a Magic |
|
124 | * :ghpull:`1964`: allow multiple instances of a Magic | |
125 | * :ghpull:`1991`: fix _ofind attr in %page |
|
125 | * :ghpull:`1991`: fix _ofind attr in %page | |
126 | * :ghpull:`1988`: check for active frontend in update_restart_checkbox |
|
126 | * :ghpull:`1988`: check for active frontend in update_restart_checkbox | |
127 |
* :ghpull:`1979`: Add support for tox (http://tox.tes |
|
127 | * :ghpull:`1979`: Add support for tox (https://tox.readthedocs.io/) and Travis CI (http://travis-ci.org/) | |
128 | * :ghpull:`1970`: dblclick to restore size of images |
|
128 | * :ghpull:`1970`: dblclick to restore size of images | |
129 | * :ghpull:`1978`: Notebook names truncating at the first period |
|
129 | * :ghpull:`1978`: Notebook names truncating at the first period | |
130 | * :ghpull:`1825`: second attempt at scrolled long output |
|
130 | * :ghpull:`1825`: second attempt at scrolled long output | |
131 | * :ghpull:`1934`: Cell/Worksheet metadata |
|
131 | * :ghpull:`1934`: Cell/Worksheet metadata | |
132 | * :ghpull:`1746`: Confirm restart (configuration option, and checkbox UI) |
|
132 | * :ghpull:`1746`: Confirm restart (configuration option, and checkbox UI) | |
133 | * :ghpull:`1944`: [qtconsole] take %,%% prefix into account for completion |
|
133 | * :ghpull:`1944`: [qtconsole] take %,%% prefix into account for completion | |
134 | * :ghpull:`1973`: fix another FreeBSD $HOME symlink issue |
|
134 | * :ghpull:`1973`: fix another FreeBSD $HOME symlink issue | |
135 | * :ghpull:`1967`: Fix psums example description in docs |
|
135 | * :ghpull:`1967`: Fix psums example description in docs | |
136 | * :ghpull:`1965`: fix for #1678, undo no longer clears cells |
|
136 | * :ghpull:`1965`: fix for #1678, undo no longer clears cells | |
137 | * :ghpull:`1952`: avoid duplicate "Websockets closed" dialog on ws close |
|
137 | * :ghpull:`1952`: avoid duplicate "Websockets closed" dialog on ws close | |
138 | * :ghpull:`1962`: Support unicode prompts |
|
138 | * :ghpull:`1962`: Support unicode prompts | |
139 | * :ghpull:`1955`: update to latest version of vim-ipython |
|
139 | * :ghpull:`1955`: update to latest version of vim-ipython | |
140 | * :ghpull:`1945`: Add --proc option to %%script |
|
140 | * :ghpull:`1945`: Add --proc option to %%script | |
141 | * :ghpull:`1956`: move import RemoteError after get_exc_info |
|
141 | * :ghpull:`1956`: move import RemoteError after get_exc_info | |
142 | * :ghpull:`1950`: Fix for copy action (Ctrl+C) when there is no pager defined in qtconsole |
|
142 | * :ghpull:`1950`: Fix for copy action (Ctrl+C) when there is no pager defined in qtconsole | |
143 | * :ghpull:`1948`: Fix help string for InteractiveShell.ast_node_interactivity |
|
143 | * :ghpull:`1948`: Fix help string for InteractiveShell.ast_node_interactivity | |
144 | * :ghpull:`1942`: swallow stderr of which in utils.process.find_cmd |
|
144 | * :ghpull:`1942`: swallow stderr of which in utils.process.find_cmd | |
145 | * :ghpull:`1940`: fix completer css on some Chrome versions |
|
145 | * :ghpull:`1940`: fix completer css on some Chrome versions | |
146 | * :ghpull:`1938`: remove remaining references to deprecated XREP/XREQ names |
|
146 | * :ghpull:`1938`: remove remaining references to deprecated XREP/XREQ names | |
147 | * :ghpull:`1925`: Fix styling of superscripts and subscripts. Closes #1924. |
|
147 | * :ghpull:`1925`: Fix styling of superscripts and subscripts. Closes #1924. | |
148 | * :ghpull:`1936`: increase duration of save messages |
|
148 | * :ghpull:`1936`: increase duration of save messages | |
149 | * :ghpull:`1937`: add %save -f |
|
149 | * :ghpull:`1937`: add %save -f | |
150 | * :ghpull:`1935`: add version checking to pyreadline import test |
|
150 | * :ghpull:`1935`: add version checking to pyreadline import test | |
151 | * :ghpull:`1849`: Octave magics |
|
151 | * :ghpull:`1849`: Octave magics | |
152 | * :ghpull:`1759`: github, merge PR(s) just by number(s) |
|
152 | * :ghpull:`1759`: github, merge PR(s) just by number(s) | |
153 | * :ghpull:`1931`: Win py3fixes |
|
153 | * :ghpull:`1931`: Win py3fixes | |
154 | * :ghpull:`1933`: oinspect.find_file: Additional safety if file cannot be found. |
|
154 | * :ghpull:`1933`: oinspect.find_file: Additional safety if file cannot be found. | |
155 | * :ghpull:`1932`: Fix adding functions to CommandChainDispatcher with equal priority on Py 3 |
|
155 | * :ghpull:`1932`: Fix adding functions to CommandChainDispatcher with equal priority on Py 3 | |
156 | * :ghpull:`1928`: Select NoDB by default |
|
156 | * :ghpull:`1928`: Select NoDB by default | |
157 | * :ghpull:`1923`: Add IPython syntax support to the %timeit magic, in line and cell mode |
|
157 | * :ghpull:`1923`: Add IPython syntax support to the %timeit magic, in line and cell mode | |
158 | * :ghpull:`1926`: Make completer recognize escaped quotes in strings. |
|
158 | * :ghpull:`1926`: Make completer recognize escaped quotes in strings. | |
159 | * :ghpull:`1893`: Update Parallel Magics and Exception Display |
|
159 | * :ghpull:`1893`: Update Parallel Magics and Exception Display | |
160 | * :ghpull:`1921`: magic_arguments: dedent but otherwise preserve indentation. |
|
160 | * :ghpull:`1921`: magic_arguments: dedent but otherwise preserve indentation. | |
161 | * :ghpull:`1919`: Use oinspect in CodeMagics._find_edit_target |
|
161 | * :ghpull:`1919`: Use oinspect in CodeMagics._find_edit_target | |
162 | * :ghpull:`1918`: don't warn in iptest if deathrow/quarantine are missing |
|
162 | * :ghpull:`1918`: don't warn in iptest if deathrow/quarantine are missing | |
163 | * :ghpull:`1917`: Fix for %pdef on Python 3 |
|
163 | * :ghpull:`1917`: Fix for %pdef on Python 3 | |
164 | * :ghpull:`1913`: Fix for #1428 |
|
164 | * :ghpull:`1913`: Fix for #1428 | |
165 | * :ghpull:`1911`: temporarily skip autoreload tests |
|
165 | * :ghpull:`1911`: temporarily skip autoreload tests | |
166 | * :ghpull:`1909`: Fix for #1908, use os.path.normcase for safe filename comparisons |
|
166 | * :ghpull:`1909`: Fix for #1908, use os.path.normcase for safe filename comparisons | |
167 | * :ghpull:`1907`: py3compat fixes for %%script and tests |
|
167 | * :ghpull:`1907`: py3compat fixes for %%script and tests | |
168 | * :ghpull:`1906`: ofind finds non-unique cell magics |
|
168 | * :ghpull:`1906`: ofind finds non-unique cell magics | |
169 | * :ghpull:`1845`: Fixes to inspection machinery for magics |
|
169 | * :ghpull:`1845`: Fixes to inspection machinery for magics | |
170 | * :ghpull:`1902`: Workaround fix for gh-1632; minimal revert of gh-1424 |
|
170 | * :ghpull:`1902`: Workaround fix for gh-1632; minimal revert of gh-1424 | |
171 | * :ghpull:`1900`: Cython libs |
|
171 | * :ghpull:`1900`: Cython libs | |
172 | * :ghpull:`1899`: add ScriptMagics to class list for generated config |
|
172 | * :ghpull:`1899`: add ScriptMagics to class list for generated config | |
173 | * :ghpull:`1898`: minimize manpages |
|
173 | * :ghpull:`1898`: minimize manpages | |
174 | * :ghpull:`1897`: use glob for bad exclusion warning |
|
174 | * :ghpull:`1897`: use glob for bad exclusion warning | |
175 | * :ghpull:`1855`: %%script and %%file magics |
|
175 | * :ghpull:`1855`: %%script and %%file magics | |
176 | * :ghpull:`1870`: add %%capture for capturing stdout/err |
|
176 | * :ghpull:`1870`: add %%capture for capturing stdout/err | |
177 | * :ghpull:`1861`: Use dvipng to format sympy.Matrix |
|
177 | * :ghpull:`1861`: Use dvipng to format sympy.Matrix | |
178 | * :ghpull:`1867`: Fix 1px margin bouncing of selected menu item. |
|
178 | * :ghpull:`1867`: Fix 1px margin bouncing of selected menu item. | |
179 | * :ghpull:`1889`: Reconnect when the websocket connection closes unexpectedly |
|
179 | * :ghpull:`1889`: Reconnect when the websocket connection closes unexpectedly | |
180 | * :ghpull:`1886`: Fix a bug in renaming notebook |
|
180 | * :ghpull:`1886`: Fix a bug in renaming notebook | |
181 | * :ghpull:`1895`: Fix error in test suite with ip.system() |
|
181 | * :ghpull:`1895`: Fix error in test suite with ip.system() | |
182 | * :ghpull:`1762`: add `locate` entry points |
|
182 | * :ghpull:`1762`: add `locate` entry points | |
183 | * :ghpull:`1883`: Fix vertical offset due to bold/italics, and bad browser fonts. |
|
183 | * :ghpull:`1883`: Fix vertical offset due to bold/italics, and bad browser fonts. | |
184 | * :ghpull:`1875`: re-write columnize, with intermediate step. |
|
184 | * :ghpull:`1875`: re-write columnize, with intermediate step. | |
185 | * :ghpull:`1851`: new completer for qtconsole. |
|
185 | * :ghpull:`1851`: new completer for qtconsole. | |
186 | * :ghpull:`1892`: Remove suspicious quotes in interactiveshell.py |
|
186 | * :ghpull:`1892`: Remove suspicious quotes in interactiveshell.py | |
187 | * :ghpull:`1864`: Rmagic exceptions |
|
187 | * :ghpull:`1864`: Rmagic exceptions | |
188 | * :ghpull:`1829`: [notebook] don't care about leading prct in completion |
|
188 | * :ghpull:`1829`: [notebook] don't care about leading prct in completion | |
189 | * :ghpull:`1832`: Make svg, jpeg and png images resizable in notebook. |
|
189 | * :ghpull:`1832`: Make svg, jpeg and png images resizable in notebook. | |
190 | * :ghpull:`1674`: HTML Notebook carriage-return handling, take 2 |
|
190 | * :ghpull:`1674`: HTML Notebook carriage-return handling, take 2 | |
191 | * :ghpull:`1882`: Remove importlib dependency which not available in Python 2.6. |
|
191 | * :ghpull:`1882`: Remove importlib dependency which not available in Python 2.6. | |
192 | * :ghpull:`1879`: Correct stack depth for variable expansion in !system commands |
|
192 | * :ghpull:`1879`: Correct stack depth for variable expansion in !system commands | |
193 | * :ghpull:`1841`: [notebook] deduplicate completion results |
|
193 | * :ghpull:`1841`: [notebook] deduplicate completion results | |
194 | * :ghpull:`1850`: Remove args/kwargs handling in TryNext, fix %paste error messages. |
|
194 | * :ghpull:`1850`: Remove args/kwargs handling in TryNext, fix %paste error messages. | |
195 | * :ghpull:`1663`: Keep line-endings in ipynb |
|
195 | * :ghpull:`1663`: Keep line-endings in ipynb | |
196 | * :ghpull:`1815`: Make : invalid in filenames in the Notebook JS code. |
|
196 | * :ghpull:`1815`: Make : invalid in filenames in the Notebook JS code. | |
197 | * :ghpull:`1819`: doc: cleanup the parallel psums example a little |
|
197 | * :ghpull:`1819`: doc: cleanup the parallel psums example a little | |
198 | * :ghpull:`1839`: External cleanup |
|
198 | * :ghpull:`1839`: External cleanup | |
199 | * :ghpull:`1782`: fix Magic menu in qtconsole, split in groups |
|
199 | * :ghpull:`1782`: fix Magic menu in qtconsole, split in groups | |
200 | * :ghpull:`1862`: Minor bind_kernel improvements |
|
200 | * :ghpull:`1862`: Minor bind_kernel improvements | |
201 | * :ghpull:`1857`: Prevent jumping of window to input when output is clicked. |
|
201 | * :ghpull:`1857`: Prevent jumping of window to input when output is clicked. | |
202 | * :ghpull:`1856`: Fix 1px jumping of cells and menus in Notebook. |
|
202 | * :ghpull:`1856`: Fix 1px jumping of cells and menus in Notebook. | |
203 | * :ghpull:`1852`: fix chained resubmissions |
|
203 | * :ghpull:`1852`: fix chained resubmissions | |
204 | * :ghpull:`1780`: Rmagic extension |
|
204 | * :ghpull:`1780`: Rmagic extension | |
205 | * :ghpull:`1847`: add InlineBackend to ConsoleApp class list |
|
205 | * :ghpull:`1847`: add InlineBackend to ConsoleApp class list | |
206 | * :ghpull:`1836`: preserve header for resubmitted tasks |
|
206 | * :ghpull:`1836`: preserve header for resubmitted tasks | |
207 | * :ghpull:`1828`: change default extension to .ipy for %save -r |
|
207 | * :ghpull:`1828`: change default extension to .ipy for %save -r | |
208 | * :ghpull:`1800`: Reintroduce recall |
|
208 | * :ghpull:`1800`: Reintroduce recall | |
209 | * :ghpull:`1830`: lsmagic lists magics in alphabetical order |
|
209 | * :ghpull:`1830`: lsmagic lists magics in alphabetical order | |
210 | * :ghpull:`1773`: Update SymPy profile: SymPy's latex() can now print set and frozenset |
|
210 | * :ghpull:`1773`: Update SymPy profile: SymPy's latex() can now print set and frozenset | |
211 | * :ghpull:`1761`: Edited documentation to use IPYTHONDIR in place of ~/.ipython |
|
211 | * :ghpull:`1761`: Edited documentation to use IPYTHONDIR in place of ~/.ipython | |
212 | * :ghpull:`1822`: aesthetics pass on AsyncResult.display_outputs |
|
212 | * :ghpull:`1822`: aesthetics pass on AsyncResult.display_outputs | |
213 | * :ghpull:`1821`: ENTER submits the rename notebook dialog. |
|
213 | * :ghpull:`1821`: ENTER submits the rename notebook dialog. | |
214 | * :ghpull:`1820`: NotebookApp: Make the number of ports to retry user configurable. |
|
214 | * :ghpull:`1820`: NotebookApp: Make the number of ports to retry user configurable. | |
215 | * :ghpull:`1816`: Always use filename as the notebook name. |
|
215 | * :ghpull:`1816`: Always use filename as the notebook name. | |
216 | * :ghpull:`1813`: Add assert_in method to nose for Python 2.6 |
|
216 | * :ghpull:`1813`: Add assert_in method to nose for Python 2.6 | |
217 | * :ghpull:`1711`: New Tooltip, New Completer and JS Refactor |
|
217 | * :ghpull:`1711`: New Tooltip, New Completer and JS Refactor | |
218 | * :ghpull:`1798`: a few simple fixes for docs/parallel |
|
218 | * :ghpull:`1798`: a few simple fixes for docs/parallel | |
219 | * :ghpull:`1812`: Ensure AsyncResult.display_outputs doesn't display empty streams |
|
219 | * :ghpull:`1812`: Ensure AsyncResult.display_outputs doesn't display empty streams | |
220 | * :ghpull:`1811`: warn on nonexistent exclusions in iptest |
|
220 | * :ghpull:`1811`: warn on nonexistent exclusions in iptest | |
221 | * :ghpull:`1810`: fix for #1809, failing tests in IPython.zmq |
|
221 | * :ghpull:`1810`: fix for #1809, failing tests in IPython.zmq | |
222 | * :ghpull:`1808`: Reposition alternate upload for firefox [need cross browser/OS/language test] |
|
222 | * :ghpull:`1808`: Reposition alternate upload for firefox [need cross browser/OS/language test] | |
223 | * :ghpull:`1742`: Check for custom_exceptions only once |
|
223 | * :ghpull:`1742`: Check for custom_exceptions only once | |
224 | * :ghpull:`1807`: add missing cython exclusion in iptest |
|
224 | * :ghpull:`1807`: add missing cython exclusion in iptest | |
225 | * :ghpull:`1805`: Fixed a vcvarsall.bat error on win32/Py2.7 when trying to compile with m... |
|
225 | * :ghpull:`1805`: Fixed a vcvarsall.bat error on win32/Py2.7 when trying to compile with m... | |
226 | * :ghpull:`1739`: Dashboard improvement (necessary merge of #1658 and #1676 + fix #1492) |
|
226 | * :ghpull:`1739`: Dashboard improvement (necessary merge of #1658 and #1676 + fix #1492) | |
227 | * :ghpull:`1770`: Cython related magic functions |
|
227 | * :ghpull:`1770`: Cython related magic functions | |
228 | * :ghpull:`1707`: Accept --gui=<...> switch in IPython qtconsole. |
|
228 | * :ghpull:`1707`: Accept --gui=<...> switch in IPython qtconsole. | |
229 | * :ghpull:`1797`: Fix comment which breaks Emacs syntax highlighting. |
|
229 | * :ghpull:`1797`: Fix comment which breaks Emacs syntax highlighting. | |
230 | * :ghpull:`1795`: fix %gui magic |
|
230 | * :ghpull:`1795`: fix %gui magic | |
231 | * :ghpull:`1793`: Raise repr limit for strings to 80 characters (from 30). |
|
231 | * :ghpull:`1793`: Raise repr limit for strings to 80 characters (from 30). | |
232 | * :ghpull:`1794`: don't use XDG path on OS X |
|
232 | * :ghpull:`1794`: don't use XDG path on OS X | |
233 | * :ghpull:`1792`: Unicode-aware logger |
|
233 | * :ghpull:`1792`: Unicode-aware logger | |
234 | * :ghpull:`1791`: update zmqshell magics |
|
234 | * :ghpull:`1791`: update zmqshell magics | |
235 | * :ghpull:`1787`: DOC: Remove regression from qt-console docs. |
|
235 | * :ghpull:`1787`: DOC: Remove regression from qt-console docs. | |
236 | * :ghpull:`1758`: test_pr, fallback on http if git protocol fail, and SSL errors... |
|
236 | * :ghpull:`1758`: test_pr, fallback on http if git protocol fail, and SSL errors... | |
237 | * :ghpull:`1748`: Fix some tests for Python 3.3 |
|
237 | * :ghpull:`1748`: Fix some tests for Python 3.3 | |
238 | * :ghpull:`1755`: test for pygments before running qt tests |
|
238 | * :ghpull:`1755`: test for pygments before running qt tests | |
239 | * :ghpull:`1771`: Make default value of interactivity passed to run_ast_nodes configurable |
|
239 | * :ghpull:`1771`: Make default value of interactivity passed to run_ast_nodes configurable | |
240 | * :ghpull:`1784`: restore loadpy to load |
|
240 | * :ghpull:`1784`: restore loadpy to load | |
241 | * :ghpull:`1768`: Update parallel magics |
|
241 | * :ghpull:`1768`: Update parallel magics | |
242 | * :ghpull:`1779`: Tidy up error raising in magic decorators. |
|
242 | * :ghpull:`1779`: Tidy up error raising in magic decorators. | |
243 | * :ghpull:`1769`: Allow cell mode timeit without setup code. |
|
243 | * :ghpull:`1769`: Allow cell mode timeit without setup code. | |
244 | * :ghpull:`1716`: Fix for fake filenames in verbose traceback |
|
244 | * :ghpull:`1716`: Fix for fake filenames in verbose traceback | |
245 | * :ghpull:`1763`: [qtconsole] fix append_plain_html -> append_html |
|
245 | * :ghpull:`1763`: [qtconsole] fix append_plain_html -> append_html | |
246 | * :ghpull:`1732`: Refactoring of the magics system and implementation of cell magics |
|
246 | * :ghpull:`1732`: Refactoring of the magics system and implementation of cell magics | |
247 | * :ghpull:`1630`: Merge divergent Kernel implementations |
|
247 | * :ghpull:`1630`: Merge divergent Kernel implementations | |
248 | * :ghpull:`1705`: [notebook] Make pager resizable, and remember size... |
|
248 | * :ghpull:`1705`: [notebook] Make pager resizable, and remember size... | |
249 | * :ghpull:`1606`: Share code for %pycat and %loadpy, make %pycat aware of URLs |
|
249 | * :ghpull:`1606`: Share code for %pycat and %loadpy, make %pycat aware of URLs | |
250 | * :ghpull:`1757`: Open IPython notebook hyperlinks in a new window using target=_blank |
|
250 | * :ghpull:`1757`: Open IPython notebook hyperlinks in a new window using target=_blank | |
251 | * :ghpull:`1754`: Fix typo enconters->encounters |
|
251 | * :ghpull:`1754`: Fix typo enconters->encounters | |
252 | * :ghpull:`1753`: Clear window title when kernel is restarted |
|
252 | * :ghpull:`1753`: Clear window title when kernel is restarted | |
253 | * :ghpull:`1449`: Fix for bug #735 : Images missing from XML/SVG export |
|
253 | * :ghpull:`1449`: Fix for bug #735 : Images missing from XML/SVG export | |
254 | * :ghpull:`1743`: Tooltip completer js refactor |
|
254 | * :ghpull:`1743`: Tooltip completer js refactor | |
255 | * :ghpull:`1681`: add qt config option to clear_on_kernel_restart |
|
255 | * :ghpull:`1681`: add qt config option to clear_on_kernel_restart | |
256 | * :ghpull:`1733`: Tooltip completer js refactor |
|
256 | * :ghpull:`1733`: Tooltip completer js refactor | |
257 | * :ghpull:`1727`: terminate kernel after embed_kernel tests |
|
257 | * :ghpull:`1727`: terminate kernel after embed_kernel tests | |
258 | * :ghpull:`1737`: add HistoryManager to ipapp class list |
|
258 | * :ghpull:`1737`: add HistoryManager to ipapp class list | |
259 | * :ghpull:`1686`: ENH: Open a notebook from the command line |
|
259 | * :ghpull:`1686`: ENH: Open a notebook from the command line | |
260 | * :ghpull:`1709`: fixes #1708, failing test in arg_split on windows |
|
260 | * :ghpull:`1709`: fixes #1708, failing test in arg_split on windows | |
261 | * :ghpull:`1718`: Use CRegExp trait for regular expressions. |
|
261 | * :ghpull:`1718`: Use CRegExp trait for regular expressions. | |
262 | * :ghpull:`1729`: Catch failure in repr() for %whos |
|
262 | * :ghpull:`1729`: Catch failure in repr() for %whos | |
263 | * :ghpull:`1726`: use eval for command-line args instead of exec |
|
263 | * :ghpull:`1726`: use eval for command-line args instead of exec | |
264 | * :ghpull:`1724`: fix scatter/gather with targets='all' |
|
264 | * :ghpull:`1724`: fix scatter/gather with targets='all' | |
265 | * :ghpull:`1725`: add --no-ff to git pull in test_pr |
|
265 | * :ghpull:`1725`: add --no-ff to git pull in test_pr | |
266 | * :ghpull:`1721`: Tooltip completer js refactor |
|
266 | * :ghpull:`1721`: Tooltip completer js refactor | |
267 | * :ghpull:`1657`: Add `wait` optional argument to `hooks.editor` |
|
267 | * :ghpull:`1657`: Add `wait` optional argument to `hooks.editor` | |
268 | * :ghpull:`1717`: Define generic sys.ps{1,2,3}, for use by scripts. |
|
268 | * :ghpull:`1717`: Define generic sys.ps{1,2,3}, for use by scripts. | |
269 | * :ghpull:`1691`: Finish PR #1446 |
|
269 | * :ghpull:`1691`: Finish PR #1446 | |
270 | * :ghpull:`1710`: update MathJax CDN url for https |
|
270 | * :ghpull:`1710`: update MathJax CDN url for https | |
271 | * :ghpull:`1713`: Make autocall regexp's configurable. |
|
271 | * :ghpull:`1713`: Make autocall regexp's configurable. | |
272 | * :ghpull:`1703`: Allow TryNext to have an error message without it affecting the command chain |
|
272 | * :ghpull:`1703`: Allow TryNext to have an error message without it affecting the command chain | |
273 | * :ghpull:`1714`: minor adjustments to test_pr |
|
273 | * :ghpull:`1714`: minor adjustments to test_pr | |
274 | * :ghpull:`1704`: ensure all needed qt parts can be imported before settling for one |
|
274 | * :ghpull:`1704`: ensure all needed qt parts can be imported before settling for one | |
275 | * :ghpull:`1706`: Mark test_push_numpy_nocopy as a known failure for Python 3 |
|
275 | * :ghpull:`1706`: Mark test_push_numpy_nocopy as a known failure for Python 3 | |
276 | * :ghpull:`1698`: fix tooltip on token with number |
|
276 | * :ghpull:`1698`: fix tooltip on token with number | |
277 | * :ghpull:`1245`: pythonw py3k fixes for issue #1226 |
|
277 | * :ghpull:`1245`: pythonw py3k fixes for issue #1226 | |
278 | * :ghpull:`1685`: Add script to test pull request |
|
278 | * :ghpull:`1685`: Add script to test pull request | |
279 | * :ghpull:`1693`: deprecate IPYTHON_DIR in favor of IPYTHONDIR |
|
279 | * :ghpull:`1693`: deprecate IPYTHON_DIR in favor of IPYTHONDIR | |
280 | * :ghpull:`1695`: Avoid deprecated warnings from ipython-qtconsole.desktop. |
|
280 | * :ghpull:`1695`: Avoid deprecated warnings from ipython-qtconsole.desktop. | |
281 | * :ghpull:`1694`: Add quote to notebook to allow it to load |
|
281 | * :ghpull:`1694`: Add quote to notebook to allow it to load | |
282 | * :ghpull:`1689`: Fix sys.path missing '' as first entry in `ipython kernel`. |
|
282 | * :ghpull:`1689`: Fix sys.path missing '' as first entry in `ipython kernel`. | |
283 | * :ghpull:`1687`: import Binary from bson instead of pymongo |
|
283 | * :ghpull:`1687`: import Binary from bson instead of pymongo | |
284 | * :ghpull:`1616`: Make IPython.core.display.Image less notebook-centric |
|
284 | * :ghpull:`1616`: Make IPython.core.display.Image less notebook-centric | |
285 | * :ghpull:`1684`: CLN: Remove redundant function definition. |
|
285 | * :ghpull:`1684`: CLN: Remove redundant function definition. | |
286 | * :ghpull:`1670`: Point %pastebin to gist |
|
286 | * :ghpull:`1670`: Point %pastebin to gist | |
287 | * :ghpull:`1669`: handle pyout messages in test_message_spec |
|
287 | * :ghpull:`1669`: handle pyout messages in test_message_spec | |
288 | * :ghpull:`1295`: add binary-tree engine interconnect example |
|
288 | * :ghpull:`1295`: add binary-tree engine interconnect example | |
289 | * :ghpull:`1642`: Cherry-picked commits from 0.12.1 release |
|
289 | * :ghpull:`1642`: Cherry-picked commits from 0.12.1 release | |
290 | * :ghpull:`1659`: Handle carriage return characters ("\r") in HTML notebook output. |
|
290 | * :ghpull:`1659`: Handle carriage return characters ("\r") in HTML notebook output. | |
291 | * :ghpull:`1656`: ensure kernels are cleaned up in embed_kernel tests |
|
291 | * :ghpull:`1656`: ensure kernels are cleaned up in embed_kernel tests | |
292 | * :ghpull:`1664`: InteractiveShell.run_code: Update docstring. |
|
292 | * :ghpull:`1664`: InteractiveShell.run_code: Update docstring. | |
293 | * :ghpull:`1662`: Delay flushing softspace until after cell finishes |
|
293 | * :ghpull:`1662`: Delay flushing softspace until after cell finishes | |
294 | * :ghpull:`1643`: handle jpg/jpeg in the qtconsole |
|
294 | * :ghpull:`1643`: handle jpg/jpeg in the qtconsole | |
295 | * :ghpull:`1652`: add patch_pyzmq() for backporting a few changes from newer pyzmq |
|
295 | * :ghpull:`1652`: add patch_pyzmq() for backporting a few changes from newer pyzmq | |
296 | * :ghpull:`1650`: DOC: moving files with SSH launchers |
|
296 | * :ghpull:`1650`: DOC: moving files with SSH launchers | |
297 | * :ghpull:`1357`: add IPython.embed_kernel() |
|
297 | * :ghpull:`1357`: add IPython.embed_kernel() | |
298 | * :ghpull:`1640`: Finish up embed_kernel |
|
298 | * :ghpull:`1640`: Finish up embed_kernel | |
299 | * :ghpull:`1651`: Remove bundled Itpl module |
|
299 | * :ghpull:`1651`: Remove bundled Itpl module | |
300 | * :ghpull:`1634`: incremental improvements to SSH launchers |
|
300 | * :ghpull:`1634`: incremental improvements to SSH launchers | |
301 | * :ghpull:`1649`: move examples/test_embed into examples/tests/embed |
|
301 | * :ghpull:`1649`: move examples/test_embed into examples/tests/embed | |
302 | * :ghpull:`1633`: Fix installing extension from local file on Windows |
|
302 | * :ghpull:`1633`: Fix installing extension from local file on Windows | |
303 | * :ghpull:`1645`: Exclude UserDict when deep reloading NumPy. |
|
303 | * :ghpull:`1645`: Exclude UserDict when deep reloading NumPy. | |
304 | * :ghpull:`1637`: Removed a ':' which shouldn't have been there |
|
304 | * :ghpull:`1637`: Removed a ':' which shouldn't have been there | |
305 | * :ghpull:`1631`: TST: QApplication doesn't quit early enough with PySide. |
|
305 | * :ghpull:`1631`: TST: QApplication doesn't quit early enough with PySide. | |
306 | * :ghpull:`1629`: evaluate a few dangling validate_message generators |
|
306 | * :ghpull:`1629`: evaluate a few dangling validate_message generators | |
307 | * :ghpull:`1621`: clear In[] prompt numbers on "Clear All Output" |
|
307 | * :ghpull:`1621`: clear In[] prompt numbers on "Clear All Output" | |
308 | * :ghpull:`1627`: Test the Message Spec |
|
308 | * :ghpull:`1627`: Test the Message Spec | |
309 | * :ghpull:`1624`: Fixes for byte-compilation on Python 3 |
|
309 | * :ghpull:`1624`: Fixes for byte-compilation on Python 3 | |
310 | * :ghpull:`1615`: Add show() method to figure objects. |
|
310 | * :ghpull:`1615`: Add show() method to figure objects. | |
311 | * :ghpull:`1625`: Fix deepreload on Python 3 |
|
311 | * :ghpull:`1625`: Fix deepreload on Python 3 | |
312 | * :ghpull:`1620`: pyin message now have execution_count |
|
312 | * :ghpull:`1620`: pyin message now have execution_count | |
313 | * :ghpull:`1457`: Update deepreload to use a rewritten knee.py. Fixes dreload(numpy). |
|
313 | * :ghpull:`1457`: Update deepreload to use a rewritten knee.py. Fixes dreload(numpy). | |
314 | * :ghpull:`1613`: allow map / parallel function for single-engine views |
|
314 | * :ghpull:`1613`: allow map / parallel function for single-engine views | |
315 | * :ghpull:`1609`: exit notebook cleanly on SIGINT, SIGTERM |
|
315 | * :ghpull:`1609`: exit notebook cleanly on SIGINT, SIGTERM | |
316 | * :ghpull:`1607`: cleanup sqlitedb temporary db file after tests |
|
316 | * :ghpull:`1607`: cleanup sqlitedb temporary db file after tests | |
317 | * :ghpull:`1608`: don't rely on timedelta.total_seconds in AsyncResult |
|
317 | * :ghpull:`1608`: don't rely on timedelta.total_seconds in AsyncResult | |
318 | * :ghpull:`1599`: Fix for %run -d on Python 3 |
|
318 | * :ghpull:`1599`: Fix for %run -d on Python 3 | |
319 | * :ghpull:`1602`: Fix %env magic on Python 3. |
|
319 | * :ghpull:`1602`: Fix %env magic on Python 3. | |
320 | * :ghpull:`1603`: Remove python3 profile |
|
320 | * :ghpull:`1603`: Remove python3 profile | |
321 | * :ghpull:`1604`: Exclude IPython.quarantine from installation |
|
321 | * :ghpull:`1604`: Exclude IPython.quarantine from installation | |
322 | * :ghpull:`1600`: Specify encoding for io.open in notebook_reformat tests |
|
322 | * :ghpull:`1600`: Specify encoding for io.open in notebook_reformat tests | |
323 | * :ghpull:`1605`: Small fixes for Animation and Progress notebook |
|
323 | * :ghpull:`1605`: Small fixes for Animation and Progress notebook | |
324 | * :ghpull:`1529`: __all__ feature, improvement to dir2, and tests for both |
|
324 | * :ghpull:`1529`: __all__ feature, improvement to dir2, and tests for both | |
325 | * :ghpull:`1548`: add sugar methods/properties to AsyncResult |
|
325 | * :ghpull:`1548`: add sugar methods/properties to AsyncResult | |
326 | * :ghpull:`1535`: Fix pretty printing dispatch |
|
326 | * :ghpull:`1535`: Fix pretty printing dispatch | |
327 | * :ghpull:`1399`: Use LaTeX to print various built-in types with the SymPy printing extension |
|
327 | * :ghpull:`1399`: Use LaTeX to print various built-in types with the SymPy printing extension | |
328 | * :ghpull:`1597`: re-enter kernel.eventloop after catching SIGINT |
|
328 | * :ghpull:`1597`: re-enter kernel.eventloop after catching SIGINT | |
329 | * :ghpull:`1490`: rename plaintext cell -> raw cell |
|
329 | * :ghpull:`1490`: rename plaintext cell -> raw cell | |
330 | * :ghpull:`1480`: Fix %notebook magic, etc. nbformat unicode tests and fixes |
|
330 | * :ghpull:`1480`: Fix %notebook magic, etc. nbformat unicode tests and fixes | |
331 | * :ghpull:`1588`: Gtk3 integration with ipython works. |
|
331 | * :ghpull:`1588`: Gtk3 integration with ipython works. | |
332 | * :ghpull:`1595`: Examples syntax (avoid errors installing on Python 3) |
|
332 | * :ghpull:`1595`: Examples syntax (avoid errors installing on Python 3) | |
333 | * :ghpull:`1526`: Find encoding for Python files |
|
333 | * :ghpull:`1526`: Find encoding for Python files | |
334 | * :ghpull:`1594`: Fix writing git commit ID to a file on build with Python 3 |
|
334 | * :ghpull:`1594`: Fix writing git commit ID to a file on build with Python 3 | |
335 | * :ghpull:`1556`: shallow-copy DictDB query results |
|
335 | * :ghpull:`1556`: shallow-copy DictDB query results | |
336 | * :ghpull:`1502`: small changes in response to pyflakes pass |
|
336 | * :ghpull:`1502`: small changes in response to pyflakes pass | |
337 | * :ghpull:`1445`: Don't build sphinx docs for sdists |
|
337 | * :ghpull:`1445`: Don't build sphinx docs for sdists | |
338 | * :ghpull:`1538`: store git commit hash in utils._sysinfo instead of hidden data file |
|
338 | * :ghpull:`1538`: store git commit hash in utils._sysinfo instead of hidden data file | |
339 | * :ghpull:`1546`: attempt to suppress exceptions in channel threads at shutdown |
|
339 | * :ghpull:`1546`: attempt to suppress exceptions in channel threads at shutdown | |
340 | * :ghpull:`1559`: update tools/github_stats.py to use GitHub API v3 |
|
340 | * :ghpull:`1559`: update tools/github_stats.py to use GitHub API v3 | |
341 | * :ghpull:`1563`: clear_output improvements |
|
341 | * :ghpull:`1563`: clear_output improvements | |
342 | * :ghpull:`1560`: remove obsolete discussion of Twisted/trial from testing docs |
|
342 | * :ghpull:`1560`: remove obsolete discussion of Twisted/trial from testing docs | |
343 | * :ghpull:`1569`: BUG: qtconsole -- non-standard handling of \a and \b. [Fixes #1561] |
|
343 | * :ghpull:`1569`: BUG: qtconsole -- non-standard handling of \a and \b. [Fixes #1561] | |
344 | * :ghpull:`1573`: BUG: Ctrl+C crashes wx pylab kernel in qtconsole. |
|
344 | * :ghpull:`1573`: BUG: Ctrl+C crashes wx pylab kernel in qtconsole. | |
345 | * :ghpull:`1568`: fix PR #1567 |
|
345 | * :ghpull:`1568`: fix PR #1567 | |
346 | * :ghpull:`1567`: Fix: openssh_tunnel did not parse port in `server` |
|
346 | * :ghpull:`1567`: Fix: openssh_tunnel did not parse port in `server` | |
347 | * :ghpull:`1565`: fix AsyncResult.abort |
|
347 | * :ghpull:`1565`: fix AsyncResult.abort | |
348 | * :ghpull:`1552`: use os.getcwdu in NotebookManager |
|
348 | * :ghpull:`1552`: use os.getcwdu in NotebookManager | |
349 | * :ghpull:`1541`: display_pub flushes stdout/err |
|
349 | * :ghpull:`1541`: display_pub flushes stdout/err | |
350 | * :ghpull:`1544`: make MultiKernelManager.kernel_manager_class configurable |
|
350 | * :ghpull:`1544`: make MultiKernelManager.kernel_manager_class configurable | |
351 | * :ghpull:`1517`: Fix indentation bug in IPython/lib/pretty.py |
|
351 | * :ghpull:`1517`: Fix indentation bug in IPython/lib/pretty.py | |
352 | * :ghpull:`1519`: BUG: Include the name of the exception type in its pretty format. |
|
352 | * :ghpull:`1519`: BUG: Include the name of the exception type in its pretty format. | |
353 | * :ghpull:`1489`: Fix zero-copy push |
|
353 | * :ghpull:`1489`: Fix zero-copy push | |
354 | * :ghpull:`1477`: fix dangling `buffer` in IPython.parallel.util |
|
354 | * :ghpull:`1477`: fix dangling `buffer` in IPython.parallel.util | |
355 | * :ghpull:`1514`: DOC: Fix references to IPython.lib.pretty instead of the old location |
|
355 | * :ghpull:`1514`: DOC: Fix references to IPython.lib.pretty instead of the old location | |
356 | * :ghpull:`1481`: BUG: Improve placement of CallTipWidget |
|
356 | * :ghpull:`1481`: BUG: Improve placement of CallTipWidget | |
357 | * :ghpull:`1496`: BUG: LBYL when clearing the output history on shutdown. |
|
357 | * :ghpull:`1496`: BUG: LBYL when clearing the output history on shutdown. | |
358 | * :ghpull:`1508`: fix sorting profiles in clustermanager |
|
358 | * :ghpull:`1508`: fix sorting profiles in clustermanager | |
359 | * :ghpull:`1495`: BUG: Fix pretty-printing for overzealous objects |
|
359 | * :ghpull:`1495`: BUG: Fix pretty-printing for overzealous objects | |
360 | * :ghpull:`1472`: more general fix for #662 |
|
360 | * :ghpull:`1472`: more general fix for #662 | |
361 | * :ghpull:`1483`: updated magic_history docstring |
|
361 | * :ghpull:`1483`: updated magic_history docstring | |
362 | * :ghpull:`1383`: First version of cluster web service. |
|
362 | * :ghpull:`1383`: First version of cluster web service. | |
363 | * :ghpull:`1398`: fix %tb after SyntaxError |
|
363 | * :ghpull:`1398`: fix %tb after SyntaxError | |
364 | * :ghpull:`1440`: Fix for failing testsuite when using --with-xml-coverage on windows. |
|
364 | * :ghpull:`1440`: Fix for failing testsuite when using --with-xml-coverage on windows. | |
365 | * :ghpull:`1419`: Add %install_ext magic function. |
|
365 | * :ghpull:`1419`: Add %install_ext magic function. | |
366 | * :ghpull:`1424`: Win32 shell interactivity |
|
366 | * :ghpull:`1424`: Win32 shell interactivity | |
367 | * :ghpull:`1468`: Simplify structure of a Job in the TaskScheduler |
|
367 | * :ghpull:`1468`: Simplify structure of a Job in the TaskScheduler | |
368 | * :ghpull:`1447`: 1107 - Tab autocompletion can suggest invalid syntax |
|
368 | * :ghpull:`1447`: 1107 - Tab autocompletion can suggest invalid syntax | |
369 | * :ghpull:`1469`: Fix typo in comment (insert space) |
|
369 | * :ghpull:`1469`: Fix typo in comment (insert space) | |
370 | * :ghpull:`1463`: Fix completion when importing modules in the cwd. |
|
370 | * :ghpull:`1463`: Fix completion when importing modules in the cwd. | |
371 | * :ghpull:`1466`: Fix for issue #1437, unfriendly windows qtconsole error handling |
|
371 | * :ghpull:`1466`: Fix for issue #1437, unfriendly windows qtconsole error handling | |
372 | * :ghpull:`1432`: Fix ipython directive |
|
372 | * :ghpull:`1432`: Fix ipython directive | |
373 | * :ghpull:`1465`: allow `ipython help subcommand` syntax |
|
373 | * :ghpull:`1465`: allow `ipython help subcommand` syntax | |
374 | * :ghpull:`1416`: Conditional import of ctypes in inputhook |
|
374 | * :ghpull:`1416`: Conditional import of ctypes in inputhook | |
375 | * :ghpull:`1462`: expedite parallel tests |
|
375 | * :ghpull:`1462`: expedite parallel tests | |
376 | * :ghpull:`1410`: Add javascript library and css stylesheet loading to JS class. |
|
376 | * :ghpull:`1410`: Add javascript library and css stylesheet loading to JS class. | |
377 | * :ghpull:`1448`: Fix for #875 Never build unicode error messages |
|
377 | * :ghpull:`1448`: Fix for #875 Never build unicode error messages | |
378 | * :ghpull:`1458`: use eval to uncan References |
|
378 | * :ghpull:`1458`: use eval to uncan References | |
379 | * :ghpull:`1450`: load mathjax from CDN via https |
|
379 | * :ghpull:`1450`: load mathjax from CDN via https | |
380 | * :ghpull:`1451`: include heading level in JSON |
|
380 | * :ghpull:`1451`: include heading level in JSON | |
381 | * :ghpull:`1444`: Fix pyhton -> python typos |
|
381 | * :ghpull:`1444`: Fix pyhton -> python typos | |
382 | * :ghpull:`1414`: ignore errors in shell.var_expand |
|
382 | * :ghpull:`1414`: ignore errors in shell.var_expand | |
383 | * :ghpull:`1430`: Fix for tornado check for tornado < 1.1.0 |
|
383 | * :ghpull:`1430`: Fix for tornado check for tornado < 1.1.0 | |
384 | * :ghpull:`1413`: get_home_dir expands symlinks, adjust test accordingly |
|
384 | * :ghpull:`1413`: get_home_dir expands symlinks, adjust test accordingly | |
385 | * :ghpull:`1385`: updated and prettified magic doc strings |
|
385 | * :ghpull:`1385`: updated and prettified magic doc strings | |
386 | * :ghpull:`1406`: Browser selection |
|
386 | * :ghpull:`1406`: Browser selection | |
387 | * :ghpull:`1377`: Saving non-ascii history |
|
387 | * :ghpull:`1377`: Saving non-ascii history | |
388 | * :ghpull:`1402`: fix symlinked /home issue for FreeBSD |
|
388 | * :ghpull:`1402`: fix symlinked /home issue for FreeBSD | |
389 | * :ghpull:`1405`: Only monkeypatch xunit when the tests are run using it. |
|
389 | * :ghpull:`1405`: Only monkeypatch xunit when the tests are run using it. | |
390 | * :ghpull:`1395`: Xunit & KnownFailure |
|
390 | * :ghpull:`1395`: Xunit & KnownFailure | |
391 | * :ghpull:`1396`: Fix for %tb magic. |
|
391 | * :ghpull:`1396`: Fix for %tb magic. | |
392 | * :ghpull:`1386`: Jsd3 |
|
392 | * :ghpull:`1386`: Jsd3 | |
393 | * :ghpull:`1388`: Add simple support for running inside a virtualenv |
|
393 | * :ghpull:`1388`: Add simple support for running inside a virtualenv | |
394 | * :ghpull:`1391`: Improve Hub/Scheduler when no engines are registered |
|
394 | * :ghpull:`1391`: Improve Hub/Scheduler when no engines are registered | |
395 | * :ghpull:`1369`: load header with engine id when engine dies in TaskScheduler |
|
395 | * :ghpull:`1369`: load header with engine id when engine dies in TaskScheduler | |
396 | * :ghpull:`1353`: Save notebook as script using unicode file handle. |
|
396 | * :ghpull:`1353`: Save notebook as script using unicode file handle. | |
397 | * :ghpull:`1352`: Add '-m mod : run library module as a script' option. |
|
397 | * :ghpull:`1352`: Add '-m mod : run library module as a script' option. | |
398 | * :ghpull:`1363`: Fix some minor color/style config issues in the qtconsole |
|
398 | * :ghpull:`1363`: Fix some minor color/style config issues in the qtconsole | |
399 | * :ghpull:`1371`: Adds a quiet keyword to sync_imports |
|
399 | * :ghpull:`1371`: Adds a quiet keyword to sync_imports | |
400 | * :ghpull:`1387`: Fixing Cell menu to update cell type select box. |
|
400 | * :ghpull:`1387`: Fixing Cell menu to update cell type select box. | |
401 | * :ghpull:`1296`: Wx gui example: fixes the broken example for `%gui wx`. |
|
401 | * :ghpull:`1296`: Wx gui example: fixes the broken example for `%gui wx`. | |
402 | * :ghpull:`1372`: ipcontroller cleans up connection files unless reuse=True |
|
402 | * :ghpull:`1372`: ipcontroller cleans up connection files unless reuse=True | |
403 | * :ghpull:`1374`: remove calls to meaningless ZMQStream.on_err |
|
403 | * :ghpull:`1374`: remove calls to meaningless ZMQStream.on_err | |
404 | * :ghpull:`1370`: allow draft76 websockets (Safari) |
|
404 | * :ghpull:`1370`: allow draft76 websockets (Safari) | |
405 | * :ghpull:`1368`: Ensure handler patterns are str, not unicode |
|
405 | * :ghpull:`1368`: Ensure handler patterns are str, not unicode | |
406 | * :ghpull:`1361`: Notebook bug fix branch |
|
406 | * :ghpull:`1361`: Notebook bug fix branch | |
407 | * :ghpull:`1364`: avoid jsonlib returning Decimal |
|
407 | * :ghpull:`1364`: avoid jsonlib returning Decimal | |
408 | * :ghpull:`1362`: Don't log complete contents of history replies, even in debug |
|
408 | * :ghpull:`1362`: Don't log complete contents of history replies, even in debug | |
409 | * :ghpull:`1347`: fix weird magic completion in notebook |
|
409 | * :ghpull:`1347`: fix weird magic completion in notebook | |
410 | * :ghpull:`1346`: fixups for alternate URL prefix stuff |
|
410 | * :ghpull:`1346`: fixups for alternate URL prefix stuff | |
411 | * :ghpull:`1336`: crack at making notebook.html use the layout.html template |
|
411 | * :ghpull:`1336`: crack at making notebook.html use the layout.html template | |
412 | * :ghpull:`1331`: RST and heading cells |
|
412 | * :ghpull:`1331`: RST and heading cells | |
413 | * :ghpull:`1247`: fixes a bug causing extra newlines after comments. |
|
413 | * :ghpull:`1247`: fixes a bug causing extra newlines after comments. | |
414 | * :ghpull:`1332`: notebook - allow prefixes in URL path. |
|
414 | * :ghpull:`1332`: notebook - allow prefixes in URL path. | |
415 | * :ghpull:`1341`: Don't attempt to tokenize binary files for tracebacks |
|
415 | * :ghpull:`1341`: Don't attempt to tokenize binary files for tracebacks | |
416 | * :ghpull:`1334`: added key handler for control-s to notebook, seems to work pretty well |
|
416 | * :ghpull:`1334`: added key handler for control-s to notebook, seems to work pretty well | |
417 | * :ghpull:`1338`: Fix see also in docstrings so API docs build |
|
417 | * :ghpull:`1338`: Fix see also in docstrings so API docs build | |
418 | * :ghpull:`1335`: Notebook toolbar UI |
|
418 | * :ghpull:`1335`: Notebook toolbar UI | |
419 | * :ghpull:`1299`: made notebook.html extend layout.html |
|
419 | * :ghpull:`1299`: made notebook.html extend layout.html | |
420 | * :ghpull:`1318`: make Ctrl-D in qtconsole act same as in terminal (ready to merge) |
|
420 | * :ghpull:`1318`: make Ctrl-D in qtconsole act same as in terminal (ready to merge) | |
421 | * :ghpull:`1328`: Coverage |
|
421 | * :ghpull:`1328`: Coverage | |
422 | * :ghpull:`1206`: don't preserve fixConsole output in json |
|
422 | * :ghpull:`1206`: don't preserve fixConsole output in json | |
423 | * :ghpull:`1330`: Add linewrapping to text cells (new feature in CodeMirror). |
|
423 | * :ghpull:`1330`: Add linewrapping to text cells (new feature in CodeMirror). | |
424 | * :ghpull:`1309`: Inoculate clearcmd extension into %reset functionality |
|
424 | * :ghpull:`1309`: Inoculate clearcmd extension into %reset functionality | |
425 | * :ghpull:`1327`: Updatecm2 |
|
425 | * :ghpull:`1327`: Updatecm2 | |
426 | * :ghpull:`1326`: Removing Ace edit capability. |
|
426 | * :ghpull:`1326`: Removing Ace edit capability. | |
427 | * :ghpull:`1325`: forgotten selected_cell -> get_selected_cell |
|
427 | * :ghpull:`1325`: forgotten selected_cell -> get_selected_cell | |
428 | * :ghpull:`1316`: Pass subprocess test runners a suitable location for xunit output |
|
428 | * :ghpull:`1316`: Pass subprocess test runners a suitable location for xunit output | |
429 | * :ghpull:`1303`: Updatecm |
|
429 | * :ghpull:`1303`: Updatecm | |
430 | * :ghpull:`1312`: minor heartbeat tweaks |
|
430 | * :ghpull:`1312`: minor heartbeat tweaks | |
431 | * :ghpull:`1306`: Fix %prun input parsing for escaped characters (closes #1302) |
|
431 | * :ghpull:`1306`: Fix %prun input parsing for escaped characters (closes #1302) | |
432 | * :ghpull:`1301`: New "Fix for issue #1202" based on current master. |
|
432 | * :ghpull:`1301`: New "Fix for issue #1202" based on current master. | |
433 | * :ghpull:`1289`: Make autoreload extension work on Python 3. |
|
433 | * :ghpull:`1289`: Make autoreload extension work on Python 3. | |
434 | * :ghpull:`1288`: Don't ask for confirmation when stdin isn't available |
|
434 | * :ghpull:`1288`: Don't ask for confirmation when stdin isn't available | |
435 | * :ghpull:`1294`: TaskScheduler.hwm default to 1 instead of 0 |
|
435 | * :ghpull:`1294`: TaskScheduler.hwm default to 1 instead of 0 | |
436 | * :ghpull:`1283`: HeartMonitor.period should be an Integer |
|
436 | * :ghpull:`1283`: HeartMonitor.period should be an Integer | |
437 | * :ghpull:`1264`: Aceify |
|
437 | * :ghpull:`1264`: Aceify | |
438 | * :ghpull:`1284`: a fix for GH 1269 |
|
438 | * :ghpull:`1284`: a fix for GH 1269 | |
439 | * :ghpull:`1213`: BUG: Minor typo in history_console_widget.py |
|
439 | * :ghpull:`1213`: BUG: Minor typo in history_console_widget.py | |
440 | * :ghpull:`1267`: add NoDB for non-recording Hub |
|
440 | * :ghpull:`1267`: add NoDB for non-recording Hub | |
441 | * :ghpull:`1222`: allow Reference as callable in map/apply |
|
441 | * :ghpull:`1222`: allow Reference as callable in map/apply | |
442 | * :ghpull:`1257`: use self.kernel_manager_class in qtconsoleapp |
|
442 | * :ghpull:`1257`: use self.kernel_manager_class in qtconsoleapp | |
443 | * :ghpull:`1253`: set auto_create flag for notebook apps |
|
443 | * :ghpull:`1253`: set auto_create flag for notebook apps | |
444 | * :ghpull:`1262`: Heartbeat no longer shares the app's Context |
|
444 | * :ghpull:`1262`: Heartbeat no longer shares the app's Context | |
445 | * :ghpull:`1229`: Fix display of SyntaxError in Python 3 |
|
445 | * :ghpull:`1229`: Fix display of SyntaxError in Python 3 | |
446 | * :ghpull:`1256`: Dewijmoize |
|
446 | * :ghpull:`1256`: Dewijmoize | |
447 | * :ghpull:`1246`: Skip tests that require X, when importing pylab results in RuntimeError. |
|
447 | * :ghpull:`1246`: Skip tests that require X, when importing pylab results in RuntimeError. | |
448 | * :ghpull:`1211`: serve local files in notebook-dir |
|
448 | * :ghpull:`1211`: serve local files in notebook-dir | |
449 | * :ghpull:`1224`: edit text cells on double-click instead of single-click |
|
449 | * :ghpull:`1224`: edit text cells on double-click instead of single-click | |
450 | * :ghpull:`1187`: misc notebook: connection file cleanup, first heartbeat, startup flush |
|
450 | * :ghpull:`1187`: misc notebook: connection file cleanup, first heartbeat, startup flush | |
451 | * :ghpull:`1207`: fix loadpy duplicating newlines |
|
451 | * :ghpull:`1207`: fix loadpy duplicating newlines | |
452 | * :ghpull:`1129`: Unified setup.py |
|
452 | * :ghpull:`1129`: Unified setup.py | |
453 | * :ghpull:`1199`: Reduce IPython.external.* |
|
453 | * :ghpull:`1199`: Reduce IPython.external.* | |
454 | * :ghpull:`1218`: Added -q option to %prun for suppression of the output, along with editing the dochelp string. |
|
454 | * :ghpull:`1218`: Added -q option to %prun for suppression of the output, along with editing the dochelp string. | |
455 | * :ghpull:`1217`: Added -q option to %prun for suppression of the output, along with editing the dochelp string |
|
455 | * :ghpull:`1217`: Added -q option to %prun for suppression of the output, along with editing the dochelp string | |
456 | * :ghpull:`1175`: core.completer: Clean up excessive and unused code. |
|
456 | * :ghpull:`1175`: core.completer: Clean up excessive and unused code. | |
457 | * :ghpull:`1196`: docs: looks like a file path might have been accidentally pasted in the middle of a word |
|
457 | * :ghpull:`1196`: docs: looks like a file path might have been accidentally pasted in the middle of a word | |
458 | * :ghpull:`1190`: Fix link to Chris Fonnesbeck blog post about 0.11 highlights. |
|
458 | * :ghpull:`1190`: Fix link to Chris Fonnesbeck blog post about 0.11 highlights. | |
459 |
|
459 | |||
460 | Issues (742): |
|
460 | Issues (742): | |
461 |
|
461 | |||
462 | * :ghissue:`1943`: add screenshot and link into releasenotes |
|
462 | * :ghissue:`1943`: add screenshot and link into releasenotes | |
463 | * :ghissue:`1570`: [notebook] remove 'left panel' references from example. |
|
463 | * :ghissue:`1570`: [notebook] remove 'left panel' references from example. | |
464 | * :ghissue:`1954`: update some example notebooks |
|
464 | * :ghissue:`1954`: update some example notebooks | |
465 | * :ghissue:`2048`: move _encode_binary to jsonutil.encode_images |
|
465 | * :ghissue:`2048`: move _encode_binary to jsonutil.encode_images | |
466 | * :ghissue:`2050`: only add quotes around xunit-file on Windows |
|
466 | * :ghissue:`2050`: only add quotes around xunit-file on Windows | |
467 | * :ghissue:`2047`: disable auto-scroll on mozilla |
|
467 | * :ghissue:`2047`: disable auto-scroll on mozilla | |
468 | * :ghissue:`1258`: Magic %paste error |
|
468 | * :ghissue:`1258`: Magic %paste error | |
469 | * :ghissue:`2015`: Fixes for %paste with special transformations |
|
469 | * :ghissue:`2015`: Fixes for %paste with special transformations | |
470 | * :ghissue:`760`: Windows: test runner fails if repo path contains spaces |
|
470 | * :ghissue:`760`: Windows: test runner fails if repo path contains spaces | |
471 | * :ghissue:`2046`: Iptest unicode |
|
471 | * :ghissue:`2046`: Iptest unicode | |
472 | * :ghissue:`1939`: Namespaces |
|
472 | * :ghissue:`1939`: Namespaces | |
473 | * :ghissue:`2042`: increase auto-scroll threshold to 100 lines |
|
473 | * :ghissue:`2042`: increase auto-scroll threshold to 100 lines | |
474 | * :ghissue:`2043`: move RemoteError import to top-level |
|
474 | * :ghissue:`2043`: move RemoteError import to top-level | |
475 | * :ghissue:`641`: In %magic help, remove duplicate aliases |
|
475 | * :ghissue:`641`: In %magic help, remove duplicate aliases | |
476 | * :ghissue:`2036`: %alias_magic |
|
476 | * :ghissue:`2036`: %alias_magic | |
477 | * :ghissue:`1968`: Proposal of icons for .ipynb files |
|
477 | * :ghissue:`1968`: Proposal of icons for .ipynb files | |
478 | * :ghissue:`825`: keyboardinterrupt crashes gtk gui when gtk.set_interactive is not available |
|
478 | * :ghissue:`825`: keyboardinterrupt crashes gtk gui when gtk.set_interactive is not available | |
479 | * :ghissue:`1971`: Remove duplicate magics docs |
|
479 | * :ghissue:`1971`: Remove duplicate magics docs | |
480 | * :ghissue:`2040`: Namespaces for cleaner public APIs |
|
480 | * :ghissue:`2040`: Namespaces for cleaner public APIs | |
481 | * :ghissue:`2039`: ipython parallel import exception |
|
481 | * :ghissue:`2039`: ipython parallel import exception | |
482 | * :ghissue:`2035`: Getdefaultencoding test error with sympy 0.7.1_git |
|
482 | * :ghissue:`2035`: Getdefaultencoding test error with sympy 0.7.1_git | |
483 | * :ghissue:`2037`: remove `ipython-qtconsole` gui-script |
|
483 | * :ghissue:`2037`: remove `ipython-qtconsole` gui-script | |
484 | * :ghissue:`1516`: ipython-qtconsole script isn't installed for Python 2.x |
|
484 | * :ghissue:`1516`: ipython-qtconsole script isn't installed for Python 2.x | |
485 | * :ghissue:`1297`: "ipython -p sh" is in documentation but doesn't work |
|
485 | * :ghissue:`1297`: "ipython -p sh" is in documentation but doesn't work | |
486 | * :ghissue:`2038`: add extra clear warning to shell doc |
|
486 | * :ghissue:`2038`: add extra clear warning to shell doc | |
487 | * :ghissue:`1265`: please ship unminified js and css sources |
|
487 | * :ghissue:`1265`: please ship unminified js and css sources | |
488 | * :ghissue:`2029`: Ship unminified js |
|
488 | * :ghissue:`2029`: Ship unminified js | |
489 | * :ghissue:`1920`: Provide an easy way to override the Qt widget used by qtconsole |
|
489 | * :ghissue:`1920`: Provide an easy way to override the Qt widget used by qtconsole | |
490 | * :ghissue:`2007`: Add custom_control and custom_page_control variables to override the Qt widgets used by qtconsole |
|
490 | * :ghissue:`2007`: Add custom_control and custom_page_control variables to override the Qt widgets used by qtconsole | |
491 | * :ghissue:`2009`: In %magic help, remove duplicate aliases |
|
491 | * :ghissue:`2009`: In %magic help, remove duplicate aliases | |
492 | * :ghissue:`2033`: ipython parallel pushing and pulling recarrays |
|
492 | * :ghissue:`2033`: ipython parallel pushing and pulling recarrays | |
493 | * :ghissue:`2034`: fix&test push/pull recarrays |
|
493 | * :ghissue:`2034`: fix&test push/pull recarrays | |
494 | * :ghissue:`2028`: Reduce unhelpful information shown by pinfo |
|
494 | * :ghissue:`2028`: Reduce unhelpful information shown by pinfo | |
495 | * :ghissue:`1992`: Tab completion fails with many spaces in filename |
|
495 | * :ghissue:`1992`: Tab completion fails with many spaces in filename | |
496 | * :ghissue:`1885`: handle too old wx |
|
496 | * :ghissue:`1885`: handle too old wx | |
497 | * :ghissue:`2030`: check wxPython version in inputhook |
|
497 | * :ghissue:`2030`: check wxPython version in inputhook | |
498 | * :ghissue:`2024`: Make interactive_usage a bit more rst friendly |
|
498 | * :ghissue:`2024`: Make interactive_usage a bit more rst friendly | |
499 | * :ghissue:`2031`: disable ^C^C confirmation on Windows |
|
499 | * :ghissue:`2031`: disable ^C^C confirmation on Windows | |
500 | * :ghissue:`2023`: Unicode test failure on OS X |
|
500 | * :ghissue:`2023`: Unicode test failure on OS X | |
501 | * :ghissue:`2027`: match stdin encoding in frontend readline test |
|
501 | * :ghissue:`2027`: match stdin encoding in frontend readline test | |
502 | * :ghissue:`1901`: Windows: parallel test fails assert, leaves 14 python processes alive |
|
502 | * :ghissue:`1901`: Windows: parallel test fails assert, leaves 14 python processes alive | |
503 | * :ghissue:`2025`: Fix parallel test on WinXP - wait for resource cleanup. |
|
503 | * :ghissue:`2025`: Fix parallel test on WinXP - wait for resource cleanup. | |
504 | * :ghissue:`1986`: Line magic function `%R` not found. (Rmagic) |
|
504 | * :ghissue:`1986`: Line magic function `%R` not found. (Rmagic) | |
505 | * :ghissue:`1712`: test failure in ubuntu package daily build |
|
505 | * :ghissue:`1712`: test failure in ubuntu package daily build | |
506 | * :ghissue:`1183`: 0.12 testsuite failures |
|
506 | * :ghissue:`1183`: 0.12 testsuite failures | |
507 | * :ghissue:`2016`: BUG: test runner fails in Windows if filenames contain spaces. |
|
507 | * :ghissue:`2016`: BUG: test runner fails in Windows if filenames contain spaces. | |
508 | * :ghissue:`1806`: Alternate upload methods in firefox |
|
508 | * :ghissue:`1806`: Alternate upload methods in firefox | |
509 | * :ghissue:`2019`: Windows: home directory expansion test fails |
|
509 | * :ghissue:`2019`: Windows: home directory expansion test fails | |
510 | * :ghissue:`2020`: Fix home path expansion test in Windows. |
|
510 | * :ghissue:`2020`: Fix home path expansion test in Windows. | |
511 | * :ghissue:`2017`: Windows core test error - filename quoting |
|
511 | * :ghissue:`2017`: Windows core test error - filename quoting | |
512 | * :ghissue:`2021`: Fix Windows pathname issue in 'odd encoding' test. |
|
512 | * :ghissue:`2021`: Fix Windows pathname issue in 'odd encoding' test. | |
513 | * :ghissue:`1998`: call to nt.assert_true(path._writable_dir(home)) returns false in test_path.py |
|
513 | * :ghissue:`1998`: call to nt.assert_true(path._writable_dir(home)) returns false in test_path.py | |
514 | * :ghissue:`2022`: don't check writability in test for get_home_dir when HOME is undefined |
|
514 | * :ghissue:`2022`: don't check writability in test for get_home_dir when HOME is undefined | |
515 | * :ghissue:`1589`: Test failures and docs don't build on Mac OS X Lion |
|
515 | * :ghissue:`1589`: Test failures and docs don't build on Mac OS X Lion | |
516 | * :ghissue:`1996`: frontend test tweaks |
|
516 | * :ghissue:`1996`: frontend test tweaks | |
517 | * :ghissue:`2011`: Notebook server can't start cluster with hyphen-containing profile name |
|
517 | * :ghissue:`2011`: Notebook server can't start cluster with hyphen-containing profile name | |
518 | * :ghissue:`2014`: relax profile regex in notebook |
|
518 | * :ghissue:`2014`: relax profile regex in notebook | |
519 | * :ghissue:`2013`: brew install pyqt |
|
519 | * :ghissue:`2013`: brew install pyqt | |
520 | * :ghissue:`2005`: Strange output artifacts in footer of notebook |
|
520 | * :ghissue:`2005`: Strange output artifacts in footer of notebook | |
521 | * :ghissue:`2012`: Mono cursor offset |
|
521 | * :ghissue:`2012`: Mono cursor offset | |
522 | * :ghissue:`2004`: Clarify generic message spec vs. Python message API in docs |
|
522 | * :ghissue:`2004`: Clarify generic message spec vs. Python message API in docs | |
523 | * :ghissue:`2006`: Don't crash when starting notebook server if runnable browser not found |
|
523 | * :ghissue:`2006`: Don't crash when starting notebook server if runnable browser not found | |
524 | * :ghissue:`2010`: notebook: Print a warning (but do not abort) if no webbrowser can be found. |
|
524 | * :ghissue:`2010`: notebook: Print a warning (but do not abort) if no webbrowser can be found. | |
525 | * :ghissue:`2008`: pip install virtualenv |
|
525 | * :ghissue:`2008`: pip install virtualenv | |
526 | * :ghissue:`2003`: Wrong case of rmagic in docs |
|
526 | * :ghissue:`2003`: Wrong case of rmagic in docs | |
527 | * :ghissue:`2002`: Refactor %magic into a lsmagic_docs API function. |
|
527 | * :ghissue:`2002`: Refactor %magic into a lsmagic_docs API function. | |
528 | * :ghissue:`2000`: kernel.js consistency with generic IPython message format. |
|
528 | * :ghissue:`2000`: kernel.js consistency with generic IPython message format. | |
529 | * :ghissue:`1999`: `%magic` help: display line and cell magics in alphabetical order. |
|
529 | * :ghissue:`1999`: `%magic` help: display line and cell magics in alphabetical order. | |
530 | * :ghissue:`1635`: test_prun_quotes fails on Windows |
|
530 | * :ghissue:`1635`: test_prun_quotes fails on Windows | |
531 | * :ghissue:`1984`: Cannot restart Notebook when using `%%script --bg` |
|
531 | * :ghissue:`1984`: Cannot restart Notebook when using `%%script --bg` | |
532 | * :ghissue:`1981`: Clean BG processes created by %%script on kernel exit |
|
532 | * :ghissue:`1981`: Clean BG processes created by %%script on kernel exit | |
533 | * :ghissue:`1994`: Fix RST misformatting. |
|
533 | * :ghissue:`1994`: Fix RST misformatting. | |
534 | * :ghissue:`1949`: Introduce Notebook Magics |
|
534 | * :ghissue:`1949`: Introduce Notebook Magics | |
535 | * :ghissue:`1985`: Kernels should start in notebook dir when manually specified |
|
535 | * :ghissue:`1985`: Kernels should start in notebook dir when manually specified | |
536 | * :ghissue:`1980`: Notebook should check that --notebook-dir exists |
|
536 | * :ghissue:`1980`: Notebook should check that --notebook-dir exists | |
537 | * :ghissue:`1951`: minor notebook startup/notebook-dir adjustments |
|
537 | * :ghissue:`1951`: minor notebook startup/notebook-dir adjustments | |
538 | * :ghissue:`1969`: tab completion in notebook for paths not triggered |
|
538 | * :ghissue:`1969`: tab completion in notebook for paths not triggered | |
539 | * :ghissue:`1974`: Allow path completion on notebook. |
|
539 | * :ghissue:`1974`: Allow path completion on notebook. | |
540 | * :ghissue:`1964`: allow multiple instances of a Magic |
|
540 | * :ghissue:`1964`: allow multiple instances of a Magic | |
541 | * :ghissue:`1960`: %page not working |
|
541 | * :ghissue:`1960`: %page not working | |
542 | * :ghissue:`1991`: fix _ofind attr in %page |
|
542 | * :ghissue:`1991`: fix _ofind attr in %page | |
543 | * :ghissue:`1982`: Shutdown qtconsole problem? |
|
543 | * :ghissue:`1982`: Shutdown qtconsole problem? | |
544 | * :ghissue:`1988`: check for active frontend in update_restart_checkbox |
|
544 | * :ghissue:`1988`: check for active frontend in update_restart_checkbox | |
545 |
* :ghissue:`1979`: Add support for tox (http://tox.tes |
|
545 | * :ghissue:`1979`: Add support for tox (https://tox.readthedocs.io/) and Travis CI (http://travis-ci.org/) | |
546 | * :ghissue:`1989`: Parallel: output of %px and %px${suffix} is inconsistent |
|
546 | * :ghissue:`1989`: Parallel: output of %px and %px${suffix} is inconsistent | |
547 | * :ghissue:`1966`: ValueError: packer could not serialize a simple message |
|
547 | * :ghissue:`1966`: ValueError: packer could not serialize a simple message | |
548 | * :ghissue:`1987`: Notebook: MathJax offline install not recognized |
|
548 | * :ghissue:`1987`: Notebook: MathJax offline install not recognized | |
549 | * :ghissue:`1970`: dblclick to restore size of images |
|
549 | * :ghissue:`1970`: dblclick to restore size of images | |
550 | * :ghissue:`1983`: Notebook does not save heading level |
|
550 | * :ghissue:`1983`: Notebook does not save heading level | |
551 | * :ghissue:`1978`: Notebook names truncating at the first period |
|
551 | * :ghissue:`1978`: Notebook names truncating at the first period | |
552 | * :ghissue:`1553`: Limited size of output cells and provide scroll bars for such output cells |
|
552 | * :ghissue:`1553`: Limited size of output cells and provide scroll bars for such output cells | |
553 | * :ghissue:`1825`: second attempt at scrolled long output |
|
553 | * :ghissue:`1825`: second attempt at scrolled long output | |
554 | * :ghissue:`1915`: add cell-level metadata |
|
554 | * :ghissue:`1915`: add cell-level metadata | |
555 | * :ghissue:`1934`: Cell/Worksheet metadata |
|
555 | * :ghissue:`1934`: Cell/Worksheet metadata | |
556 | * :ghissue:`1746`: Confirm restart (configuration option, and checkbox UI) |
|
556 | * :ghissue:`1746`: Confirm restart (configuration option, and checkbox UI) | |
557 | * :ghissue:`1790`: Commenting function. |
|
557 | * :ghissue:`1790`: Commenting function. | |
558 | * :ghissue:`1767`: Tab completion problems with cell magics |
|
558 | * :ghissue:`1767`: Tab completion problems with cell magics | |
559 | * :ghissue:`1944`: [qtconsole] take %,%% prefix into account for completion |
|
559 | * :ghissue:`1944`: [qtconsole] take %,%% prefix into account for completion | |
560 | * :ghissue:`1973`: fix another FreeBSD $HOME symlink issue |
|
560 | * :ghissue:`1973`: fix another FreeBSD $HOME symlink issue | |
561 | * :ghissue:`1972`: Fix completion of '%tim' in the Qt console |
|
561 | * :ghissue:`1972`: Fix completion of '%tim' in the Qt console | |
562 | * :ghissue:`1887`: Make it easy to resize jpeg/png images back to original size. |
|
562 | * :ghissue:`1887`: Make it easy to resize jpeg/png images back to original size. | |
563 | * :ghissue:`1967`: Fix psums example description in docs |
|
563 | * :ghissue:`1967`: Fix psums example description in docs | |
564 | * :ghissue:`1678`: ctrl-z clears cell output in notebook when pressed enough times |
|
564 | * :ghissue:`1678`: ctrl-z clears cell output in notebook when pressed enough times | |
565 | * :ghissue:`1965`: fix for #1678, undo no longer clears cells |
|
565 | * :ghissue:`1965`: fix for #1678, undo no longer clears cells | |
566 | * :ghissue:`1952`: avoid duplicate "Websockets closed" dialog on ws close |
|
566 | * :ghissue:`1952`: avoid duplicate "Websockets closed" dialog on ws close | |
567 | * :ghissue:`1961`: UnicodeDecodeError on directory with unicode chars in prompt |
|
567 | * :ghissue:`1961`: UnicodeDecodeError on directory with unicode chars in prompt | |
568 | * :ghissue:`1963`: styling prompt, {color.Normal} excepts |
|
568 | * :ghissue:`1963`: styling prompt, {color.Normal} excepts | |
569 | * :ghissue:`1962`: Support unicode prompts |
|
569 | * :ghissue:`1962`: Support unicode prompts | |
570 | * :ghissue:`1959`: %page not working on qtconsole for Windows XP 32-bit |
|
570 | * :ghissue:`1959`: %page not working on qtconsole for Windows XP 32-bit | |
571 | * :ghissue:`1955`: update to latest version of vim-ipython |
|
571 | * :ghissue:`1955`: update to latest version of vim-ipython | |
572 | * :ghissue:`1945`: Add --proc option to %%script |
|
572 | * :ghissue:`1945`: Add --proc option to %%script | |
573 | * :ghissue:`1957`: fix indentation in kernel.js |
|
573 | * :ghissue:`1957`: fix indentation in kernel.js | |
574 | * :ghissue:`1956`: move import RemoteError after get_exc_info |
|
574 | * :ghissue:`1956`: move import RemoteError after get_exc_info | |
575 | * :ghissue:`1950`: Fix for copy action (Ctrl+C) when there is no pager defined in qtconsole |
|
575 | * :ghissue:`1950`: Fix for copy action (Ctrl+C) when there is no pager defined in qtconsole | |
576 | * :ghissue:`1948`: Fix help string for InteractiveShell.ast_node_interactivity |
|
576 | * :ghissue:`1948`: Fix help string for InteractiveShell.ast_node_interactivity | |
577 | * :ghissue:`1941`: script magics cause terminal spam |
|
577 | * :ghissue:`1941`: script magics cause terminal spam | |
578 | * :ghissue:`1942`: swallow stderr of which in utils.process.find_cmd |
|
578 | * :ghissue:`1942`: swallow stderr of which in utils.process.find_cmd | |
579 | * :ghissue:`1833`: completer draws slightly too small on Chrome |
|
579 | * :ghissue:`1833`: completer draws slightly too small on Chrome | |
580 | * :ghissue:`1940`: fix completer css on some Chrome versions |
|
580 | * :ghissue:`1940`: fix completer css on some Chrome versions | |
581 | * :ghissue:`1938`: remove remaining references to deprecated XREP/XREQ names |
|
581 | * :ghissue:`1938`: remove remaining references to deprecated XREP/XREQ names | |
582 | * :ghissue:`1924`: HTML superscripts not shown raised in the notebook |
|
582 | * :ghissue:`1924`: HTML superscripts not shown raised in the notebook | |
583 | * :ghissue:`1925`: Fix styling of superscripts and subscripts. Closes #1924. |
|
583 | * :ghissue:`1925`: Fix styling of superscripts and subscripts. Closes #1924. | |
584 | * :ghissue:`1461`: User notification if notebook saving fails |
|
584 | * :ghissue:`1461`: User notification if notebook saving fails | |
585 | * :ghissue:`1936`: increase duration of save messages |
|
585 | * :ghissue:`1936`: increase duration of save messages | |
586 | * :ghissue:`1542`: %save magic fails in clients without stdin if file already exists |
|
586 | * :ghissue:`1542`: %save magic fails in clients without stdin if file already exists | |
587 | * :ghissue:`1937`: add %save -f |
|
587 | * :ghissue:`1937`: add %save -f | |
588 | * :ghissue:`1572`: pyreadline version dependency not correctly checked |
|
588 | * :ghissue:`1572`: pyreadline version dependency not correctly checked | |
589 | * :ghissue:`1935`: add version checking to pyreadline import test |
|
589 | * :ghissue:`1935`: add version checking to pyreadline import test | |
590 | * :ghissue:`1849`: Octave magics |
|
590 | * :ghissue:`1849`: Octave magics | |
591 | * :ghissue:`1759`: github, merge PR(s) just by number(s) |
|
591 | * :ghissue:`1759`: github, merge PR(s) just by number(s) | |
592 | * :ghissue:`1931`: Win py3fixes |
|
592 | * :ghissue:`1931`: Win py3fixes | |
593 | * :ghissue:`1646`: Meaning of restart parameter in client.shutdown() unclear |
|
593 | * :ghissue:`1646`: Meaning of restart parameter in client.shutdown() unclear | |
594 | * :ghissue:`1933`: oinspect.find_file: Additional safety if file cannot be found. |
|
594 | * :ghissue:`1933`: oinspect.find_file: Additional safety if file cannot be found. | |
595 | * :ghissue:`1916`: %paste doesn't work on py3 |
|
595 | * :ghissue:`1916`: %paste doesn't work on py3 | |
596 | * :ghissue:`1932`: Fix adding functions to CommandChainDispatcher with equal priority on Py 3 |
|
596 | * :ghissue:`1932`: Fix adding functions to CommandChainDispatcher with equal priority on Py 3 | |
597 | * :ghissue:`1928`: Select NoDB by default |
|
597 | * :ghissue:`1928`: Select NoDB by default | |
598 | * :ghissue:`1923`: Add IPython syntax support to the %timeit magic, in line and cell mode |
|
598 | * :ghissue:`1923`: Add IPython syntax support to the %timeit magic, in line and cell mode | |
599 | * :ghissue:`1926`: Make completer recognize escaped quotes in strings. |
|
599 | * :ghissue:`1926`: Make completer recognize escaped quotes in strings. | |
600 | * :ghissue:`1929`: Ipython-qtconsole (0.12.1) hangs with Python 2.7.3, Windows 7 64 bit |
|
600 | * :ghissue:`1929`: Ipython-qtconsole (0.12.1) hangs with Python 2.7.3, Windows 7 64 bit | |
601 | * :ghissue:`1409`: [qtconsole] forward delete bring completion into current line |
|
601 | * :ghissue:`1409`: [qtconsole] forward delete bring completion into current line | |
602 | * :ghissue:`1922`: py3k compatibility for setupegg.py |
|
602 | * :ghissue:`1922`: py3k compatibility for setupegg.py | |
603 | * :ghissue:`1598`: document that sync_imports() can't handle "import foo as bar" |
|
603 | * :ghissue:`1598`: document that sync_imports() can't handle "import foo as bar" | |
604 | * :ghissue:`1893`: Update Parallel Magics and Exception Display |
|
604 | * :ghissue:`1893`: Update Parallel Magics and Exception Display | |
605 | * :ghissue:`1890`: Docstrings for magics that use @magic_arguments are rendered wrong |
|
605 | * :ghissue:`1890`: Docstrings for magics that use @magic_arguments are rendered wrong | |
606 | * :ghissue:`1921`: magic_arguments: dedent but otherwise preserve indentation. |
|
606 | * :ghissue:`1921`: magic_arguments: dedent but otherwise preserve indentation. | |
607 | * :ghissue:`1919`: Use oinspect in CodeMagics._find_edit_target |
|
607 | * :ghissue:`1919`: Use oinspect in CodeMagics._find_edit_target | |
608 | * :ghissue:`1918`: don't warn in iptest if deathrow/quarantine are missing |
|
608 | * :ghissue:`1918`: don't warn in iptest if deathrow/quarantine are missing | |
609 | * :ghissue:`1914`: %pdef failing on python3 |
|
609 | * :ghissue:`1914`: %pdef failing on python3 | |
610 | * :ghissue:`1917`: Fix for %pdef on Python 3 |
|
610 | * :ghissue:`1917`: Fix for %pdef on Python 3 | |
611 | * :ghissue:`1428`: Failing test that prun does not clobber string escapes |
|
611 | * :ghissue:`1428`: Failing test that prun does not clobber string escapes | |
612 | * :ghissue:`1913`: Fix for #1428 |
|
612 | * :ghissue:`1913`: Fix for #1428 | |
613 | * :ghissue:`1911`: temporarily skip autoreload tests |
|
613 | * :ghissue:`1911`: temporarily skip autoreload tests | |
614 | * :ghissue:`1549`: autoreload extension crashes ipython |
|
614 | * :ghissue:`1549`: autoreload extension crashes ipython | |
615 | * :ghissue:`1908`: find_file errors on windows |
|
615 | * :ghissue:`1908`: find_file errors on windows | |
616 | * :ghissue:`1909`: Fix for #1908, use os.path.normcase for safe filename comparisons |
|
616 | * :ghissue:`1909`: Fix for #1908, use os.path.normcase for safe filename comparisons | |
617 | * :ghissue:`1907`: py3compat fixes for %%script and tests |
|
617 | * :ghissue:`1907`: py3compat fixes for %%script and tests | |
618 | * :ghissue:`1904`: %%px? doesn't work, shows info for %px, general cell magic problem |
|
618 | * :ghissue:`1904`: %%px? doesn't work, shows info for %px, general cell magic problem | |
619 | * :ghissue:`1906`: ofind finds non-unique cell magics |
|
619 | * :ghissue:`1906`: ofind finds non-unique cell magics | |
620 | * :ghissue:`1894`: Win64 binary install fails |
|
620 | * :ghissue:`1894`: Win64 binary install fails | |
621 | * :ghissue:`1799`: Source file not found for magics |
|
621 | * :ghissue:`1799`: Source file not found for magics | |
622 | * :ghissue:`1845`: Fixes to inspection machinery for magics |
|
622 | * :ghissue:`1845`: Fixes to inspection machinery for magics | |
623 | * :ghissue:`1774`: Some magics seems broken |
|
623 | * :ghissue:`1774`: Some magics seems broken | |
624 | * :ghissue:`1586`: Clean up tight coupling between Notebook, CodeCell and Kernel Javascript objects |
|
624 | * :ghissue:`1586`: Clean up tight coupling between Notebook, CodeCell and Kernel Javascript objects | |
625 | * :ghissue:`1632`: Win32 shell interactivity apparently broke qtconsole "cd" magic |
|
625 | * :ghissue:`1632`: Win32 shell interactivity apparently broke qtconsole "cd" magic | |
626 | * :ghissue:`1902`: Workaround fix for gh-1632; minimal revert of gh-1424 |
|
626 | * :ghissue:`1902`: Workaround fix for gh-1632; minimal revert of gh-1424 | |
627 | * :ghissue:`1900`: Cython libs |
|
627 | * :ghissue:`1900`: Cython libs | |
628 | * :ghissue:`1503`: Cursor is offset in notebook in Chrome 17 on Linux |
|
628 | * :ghissue:`1503`: Cursor is offset in notebook in Chrome 17 on Linux | |
629 | * :ghissue:`1426`: Qt console doesn't handle the `--gui` flag correctly. |
|
629 | * :ghissue:`1426`: Qt console doesn't handle the `--gui` flag correctly. | |
630 | * :ghissue:`1180`: Can't start IPython kernel in Spyder |
|
630 | * :ghissue:`1180`: Can't start IPython kernel in Spyder | |
631 | * :ghissue:`581`: test IPython.zmq |
|
631 | * :ghissue:`581`: test IPython.zmq | |
632 | * :ghissue:`1593`: Name embedded in notebook overrides filename |
|
632 | * :ghissue:`1593`: Name embedded in notebook overrides filename | |
633 | * :ghissue:`1899`: add ScriptMagics to class list for generated config |
|
633 | * :ghissue:`1899`: add ScriptMagics to class list for generated config | |
634 | * :ghissue:`1618`: generate or minimize manpages |
|
634 | * :ghissue:`1618`: generate or minimize manpages | |
635 | * :ghissue:`1898`: minimize manpages |
|
635 | * :ghissue:`1898`: minimize manpages | |
636 | * :ghissue:`1896`: Windows: apparently spurious warning 'Excluding nonexistent file' ... test_exampleip |
|
636 | * :ghissue:`1896`: Windows: apparently spurious warning 'Excluding nonexistent file' ... test_exampleip | |
637 | * :ghissue:`1897`: use glob for bad exclusion warning |
|
637 | * :ghissue:`1897`: use glob for bad exclusion warning | |
638 | * :ghissue:`1215`: updated %quickref to show short-hand for %sc and %sx |
|
638 | * :ghissue:`1215`: updated %quickref to show short-hand for %sc and %sx | |
639 | * :ghissue:`1855`: %%script and %%file magics |
|
639 | * :ghissue:`1855`: %%script and %%file magics | |
640 | * :ghissue:`1863`: Ability to silence a cell in the notebook |
|
640 | * :ghissue:`1863`: Ability to silence a cell in the notebook | |
641 | * :ghissue:`1870`: add %%capture for capturing stdout/err |
|
641 | * :ghissue:`1870`: add %%capture for capturing stdout/err | |
642 | * :ghissue:`1861`: Use dvipng to format sympy.Matrix |
|
642 | * :ghissue:`1861`: Use dvipng to format sympy.Matrix | |
643 | * :ghissue:`1867`: Fix 1px margin bouncing of selected menu item. |
|
643 | * :ghissue:`1867`: Fix 1px margin bouncing of selected menu item. | |
644 | * :ghissue:`1889`: Reconnect when the websocket connection closes unexpectedly |
|
644 | * :ghissue:`1889`: Reconnect when the websocket connection closes unexpectedly | |
645 | * :ghissue:`1577`: If a notebook loses its network connection WebSockets won't reconnect |
|
645 | * :ghissue:`1577`: If a notebook loses its network connection WebSockets won't reconnect | |
646 | * :ghissue:`1886`: Fix a bug in renaming notebook |
|
646 | * :ghissue:`1886`: Fix a bug in renaming notebook | |
647 | * :ghissue:`1895`: Fix error in test suite with ip.system() |
|
647 | * :ghissue:`1895`: Fix error in test suite with ip.system() | |
648 | * :ghissue:`1762`: add `locate` entry points |
|
648 | * :ghissue:`1762`: add `locate` entry points | |
649 | * :ghissue:`1883`: Fix vertical offset due to bold/italics, and bad browser fonts. |
|
649 | * :ghissue:`1883`: Fix vertical offset due to bold/italics, and bad browser fonts. | |
650 | * :ghissue:`1875`: re-write columnize, with intermediate step. |
|
650 | * :ghissue:`1875`: re-write columnize, with intermediate step. | |
651 | * :ghissue:`1860`: IPython.utils.columnize sometime wrong... |
|
651 | * :ghissue:`1860`: IPython.utils.columnize sometime wrong... | |
652 | * :ghissue:`1851`: new completer for qtconsole. |
|
652 | * :ghissue:`1851`: new completer for qtconsole. | |
653 | * :ghissue:`1892`: Remove suspicious quotes in interactiveshell.py |
|
653 | * :ghissue:`1892`: Remove suspicious quotes in interactiveshell.py | |
654 | * :ghissue:`1854`: Class `%hierarchy` and graphiz `%%dot` magics |
|
654 | * :ghissue:`1854`: Class `%hierarchy` and graphiz `%%dot` magics | |
655 | * :ghissue:`1827`: Sending tracebacks over ZMQ should protect against unicode failure |
|
655 | * :ghissue:`1827`: Sending tracebacks over ZMQ should protect against unicode failure | |
656 | * :ghissue:`1864`: Rmagic exceptions |
|
656 | * :ghissue:`1864`: Rmagic exceptions | |
657 | * :ghissue:`1829`: [notebook] don't care about leading prct in completion |
|
657 | * :ghissue:`1829`: [notebook] don't care about leading prct in completion | |
658 | * :ghissue:`1832`: Make svg, jpeg and png images resizable in notebook. |
|
658 | * :ghissue:`1832`: Make svg, jpeg and png images resizable in notebook. | |
659 | * :ghissue:`1674`: HTML Notebook carriage-return handling, take 2 |
|
659 | * :ghissue:`1674`: HTML Notebook carriage-return handling, take 2 | |
660 | * :ghissue:`1874`: cython_magic uses importlib, which doesn't ship with py2.6 |
|
660 | * :ghissue:`1874`: cython_magic uses importlib, which doesn't ship with py2.6 | |
661 | * :ghissue:`1882`: Remove importlib dependency which not available in Python 2.6. |
|
661 | * :ghissue:`1882`: Remove importlib dependency which not available in Python 2.6. | |
662 | * :ghissue:`1878`: shell access using ! will not fill class or function scope vars |
|
662 | * :ghissue:`1878`: shell access using ! will not fill class or function scope vars | |
663 | * :ghissue:`1879`: Correct stack depth for variable expansion in !system commands |
|
663 | * :ghissue:`1879`: Correct stack depth for variable expansion in !system commands | |
664 | * :ghissue:`1840`: New JS completer should merge completions before display |
|
664 | * :ghissue:`1840`: New JS completer should merge completions before display | |
665 | * :ghissue:`1841`: [notebook] deduplicate completion results |
|
665 | * :ghissue:`1841`: [notebook] deduplicate completion results | |
666 | * :ghissue:`1736`: no good error message on missing tkinter and %paste |
|
666 | * :ghissue:`1736`: no good error message on missing tkinter and %paste | |
667 | * :ghissue:`1741`: Display message from TryNext error in magic_paste |
|
667 | * :ghissue:`1741`: Display message from TryNext error in magic_paste | |
668 | * :ghissue:`1850`: Remove args/kwargs handling in TryNext, fix %paste error messages. |
|
668 | * :ghissue:`1850`: Remove args/kwargs handling in TryNext, fix %paste error messages. | |
669 | * :ghissue:`1663`: Keep line-endings in ipynb |
|
669 | * :ghissue:`1663`: Keep line-endings in ipynb | |
670 | * :ghissue:`1872`: Matplotlib window freezes using intreractive plot in qtconsole |
|
670 | * :ghissue:`1872`: Matplotlib window freezes using intreractive plot in qtconsole | |
671 | * :ghissue:`1869`: Improve CodeMagics._find_edit_target |
|
671 | * :ghissue:`1869`: Improve CodeMagics._find_edit_target | |
672 | * :ghissue:`1781`: Colons in notebook name causes notebook deletion without warning |
|
672 | * :ghissue:`1781`: Colons in notebook name causes notebook deletion without warning | |
673 | * :ghissue:`1815`: Make : invalid in filenames in the Notebook JS code. |
|
673 | * :ghissue:`1815`: Make : invalid in filenames in the Notebook JS code. | |
674 | * :ghissue:`1819`: doc: cleanup the parallel psums example a little |
|
674 | * :ghissue:`1819`: doc: cleanup the parallel psums example a little | |
675 | * :ghissue:`1838`: externals cleanup |
|
675 | * :ghissue:`1838`: externals cleanup | |
676 | * :ghissue:`1839`: External cleanup |
|
676 | * :ghissue:`1839`: External cleanup | |
677 | * :ghissue:`1782`: fix Magic menu in qtconsole, split in groups |
|
677 | * :ghissue:`1782`: fix Magic menu in qtconsole, split in groups | |
678 | * :ghissue:`1862`: Minor bind_kernel improvements |
|
678 | * :ghissue:`1862`: Minor bind_kernel improvements | |
679 | * :ghissue:`1859`: kernmagic during console startup |
|
679 | * :ghissue:`1859`: kernmagic during console startup | |
680 | * :ghissue:`1857`: Prevent jumping of window to input when output is clicked. |
|
680 | * :ghissue:`1857`: Prevent jumping of window to input when output is clicked. | |
681 | * :ghissue:`1856`: Fix 1px jumping of cells and menus in Notebook. |
|
681 | * :ghissue:`1856`: Fix 1px jumping of cells and menus in Notebook. | |
682 | * :ghissue:`1848`: task fails with "AssertionError: not enough buffers!" after second resubmit |
|
682 | * :ghissue:`1848`: task fails with "AssertionError: not enough buffers!" after second resubmit | |
683 | * :ghissue:`1852`: fix chained resubmissions |
|
683 | * :ghissue:`1852`: fix chained resubmissions | |
684 | * :ghissue:`1780`: Rmagic extension |
|
684 | * :ghissue:`1780`: Rmagic extension | |
685 | * :ghissue:`1853`: Fix jumpy notebook behavior |
|
685 | * :ghissue:`1853`: Fix jumpy notebook behavior | |
686 | * :ghissue:`1842`: task with UnmetDependency error still owned by engine |
|
686 | * :ghissue:`1842`: task with UnmetDependency error still owned by engine | |
687 | * :ghissue:`1847`: add InlineBackend to ConsoleApp class list |
|
687 | * :ghissue:`1847`: add InlineBackend to ConsoleApp class list | |
688 | * :ghissue:`1846`: Exceptions within multiprocessing crash Ipython notebook kernel |
|
688 | * :ghissue:`1846`: Exceptions within multiprocessing crash Ipython notebook kernel | |
689 | * :ghissue:`1843`: Notebook does not exist and permalinks |
|
689 | * :ghissue:`1843`: Notebook does not exist and permalinks | |
690 | * :ghissue:`1837`: edit magic broken in head |
|
690 | * :ghissue:`1837`: edit magic broken in head | |
691 | * :ghissue:`1834`: resubmitted tasks doesn't have same session name |
|
691 | * :ghissue:`1834`: resubmitted tasks doesn't have same session name | |
692 | * :ghissue:`1836`: preserve header for resubmitted tasks |
|
692 | * :ghissue:`1836`: preserve header for resubmitted tasks | |
693 | * :ghissue:`1776`: fix magic menu in qtconsole |
|
693 | * :ghissue:`1776`: fix magic menu in qtconsole | |
694 | * :ghissue:`1828`: change default extension to .ipy for %save -r |
|
694 | * :ghissue:`1828`: change default extension to .ipy for %save -r | |
695 | * :ghissue:`1800`: Reintroduce recall |
|
695 | * :ghissue:`1800`: Reintroduce recall | |
696 | * :ghissue:`1671`: __future__ environments |
|
696 | * :ghissue:`1671`: __future__ environments | |
697 | * :ghissue:`1830`: lsmagic lists magics in alphabetical order |
|
697 | * :ghissue:`1830`: lsmagic lists magics in alphabetical order | |
698 | * :ghissue:`1835`: Use Python import in ipython profile config |
|
698 | * :ghissue:`1835`: Use Python import in ipython profile config | |
699 | * :ghissue:`1773`: Update SymPy profile: SymPy's latex() can now print set and frozenset |
|
699 | * :ghissue:`1773`: Update SymPy profile: SymPy's latex() can now print set and frozenset | |
700 | * :ghissue:`1761`: Edited documentation to use IPYTHONDIR in place of ~/.ipython |
|
700 | * :ghissue:`1761`: Edited documentation to use IPYTHONDIR in place of ~/.ipython | |
701 | * :ghissue:`1772`: notebook autocomplete fail when typing number |
|
701 | * :ghissue:`1772`: notebook autocomplete fail when typing number | |
702 | * :ghissue:`1822`: aesthetics pass on AsyncResult.display_outputs |
|
702 | * :ghissue:`1822`: aesthetics pass on AsyncResult.display_outputs | |
703 | * :ghissue:`1460`: Redirect http to https for notebook |
|
703 | * :ghissue:`1460`: Redirect http to https for notebook | |
704 | * :ghissue:`1287`: Refactor the notebook tab completion/tooltip |
|
704 | * :ghissue:`1287`: Refactor the notebook tab completion/tooltip | |
705 | * :ghissue:`1596`: In rename dialog, <return> should submit |
|
705 | * :ghissue:`1596`: In rename dialog, <return> should submit | |
706 | * :ghissue:`1821`: ENTER submits the rename notebook dialog. |
|
706 | * :ghissue:`1821`: ENTER submits the rename notebook dialog. | |
707 | * :ghissue:`1750`: Let the user disable random port selection |
|
707 | * :ghissue:`1750`: Let the user disable random port selection | |
708 | * :ghissue:`1820`: NotebookApp: Make the number of ports to retry user configurable. |
|
708 | * :ghissue:`1820`: NotebookApp: Make the number of ports to retry user configurable. | |
709 | * :ghissue:`1816`: Always use filename as the notebook name. |
|
709 | * :ghissue:`1816`: Always use filename as the notebook name. | |
710 | * :ghissue:`1775`: assert_in not present on Python 2.6 |
|
710 | * :ghissue:`1775`: assert_in not present on Python 2.6 | |
711 | * :ghissue:`1813`: Add assert_in method to nose for Python 2.6 |
|
711 | * :ghissue:`1813`: Add assert_in method to nose for Python 2.6 | |
712 | * :ghissue:`1498`: Add tooltip keyboard shortcuts |
|
712 | * :ghissue:`1498`: Add tooltip keyboard shortcuts | |
713 | * :ghissue:`1711`: New Tooltip, New Completer and JS Refactor |
|
713 | * :ghissue:`1711`: New Tooltip, New Completer and JS Refactor | |
714 | * :ghissue:`1798`: a few simple fixes for docs/parallel |
|
714 | * :ghissue:`1798`: a few simple fixes for docs/parallel | |
715 | * :ghissue:`1818`: possible bug with latex / markdown |
|
715 | * :ghissue:`1818`: possible bug with latex / markdown | |
716 | * :ghissue:`1647`: Aborted parallel tasks can't be resubmitted |
|
716 | * :ghissue:`1647`: Aborted parallel tasks can't be resubmitted | |
717 | * :ghissue:`1817`: Change behavior of ipython notebook --port=... |
|
717 | * :ghissue:`1817`: Change behavior of ipython notebook --port=... | |
718 | * :ghissue:`1738`: IPython.embed_kernel issues |
|
718 | * :ghissue:`1738`: IPython.embed_kernel issues | |
719 | * :ghissue:`1610`: Basic bold and italic in HTML output cells |
|
719 | * :ghissue:`1610`: Basic bold and italic in HTML output cells | |
720 | * :ghissue:`1576`: Start and stop kernels from the notebook dashboard |
|
720 | * :ghissue:`1576`: Start and stop kernels from the notebook dashboard | |
721 | * :ghissue:`1515`: impossible to shutdown notebook kernels |
|
721 | * :ghissue:`1515`: impossible to shutdown notebook kernels | |
722 | * :ghissue:`1812`: Ensure AsyncResult.display_outputs doesn't display empty streams |
|
722 | * :ghissue:`1812`: Ensure AsyncResult.display_outputs doesn't display empty streams | |
723 | * :ghissue:`1811`: warn on nonexistent exclusions in iptest |
|
723 | * :ghissue:`1811`: warn on nonexistent exclusions in iptest | |
724 | * :ghissue:`1809`: test suite error in IPython.zmq on windows |
|
724 | * :ghissue:`1809`: test suite error in IPython.zmq on windows | |
725 | * :ghissue:`1810`: fix for #1809, failing tests in IPython.zmq |
|
725 | * :ghissue:`1810`: fix for #1809, failing tests in IPython.zmq | |
726 | * :ghissue:`1808`: Reposition alternate upload for firefox [need cross browser/OS/language test] |
|
726 | * :ghissue:`1808`: Reposition alternate upload for firefox [need cross browser/OS/language test] | |
727 | * :ghissue:`1742`: Check for custom_exceptions only once |
|
727 | * :ghissue:`1742`: Check for custom_exceptions only once | |
728 | * :ghissue:`1802`: cythonmagic tests should be skipped if Cython not available |
|
728 | * :ghissue:`1802`: cythonmagic tests should be skipped if Cython not available | |
729 | * :ghissue:`1062`: warning message in IPython.extensions test |
|
729 | * :ghissue:`1062`: warning message in IPython.extensions test | |
730 | * :ghissue:`1807`: add missing cython exclusion in iptest |
|
730 | * :ghissue:`1807`: add missing cython exclusion in iptest | |
731 | * :ghissue:`1805`: Fixed a vcvarsall.bat error on win32/Py2.7 when trying to compile with m... |
|
731 | * :ghissue:`1805`: Fixed a vcvarsall.bat error on win32/Py2.7 when trying to compile with m... | |
732 | * :ghissue:`1803`: MPI parallel %px bug |
|
732 | * :ghissue:`1803`: MPI parallel %px bug | |
733 | * :ghissue:`1804`: Fixed a vcvarsall.bat error on win32/Py2.7 when trying to compile with mingw. |
|
733 | * :ghissue:`1804`: Fixed a vcvarsall.bat error on win32/Py2.7 when trying to compile with mingw. | |
734 | * :ghissue:`1492`: Drag target very small if IPython Dashboard has no notebooks |
|
734 | * :ghissue:`1492`: Drag target very small if IPython Dashboard has no notebooks | |
735 | * :ghissue:`1562`: Offer a method other than drag-n-drop to upload notebooks |
|
735 | * :ghissue:`1562`: Offer a method other than drag-n-drop to upload notebooks | |
736 | * :ghissue:`1739`: Dashboard improvement (necessary merge of #1658 and #1676 + fix #1492) |
|
736 | * :ghissue:`1739`: Dashboard improvement (necessary merge of #1658 and #1676 + fix #1492) | |
737 | * :ghissue:`1770`: Cython related magic functions |
|
737 | * :ghissue:`1770`: Cython related magic functions | |
738 | * :ghissue:`1532`: qtconsole does not accept --gui switch |
|
738 | * :ghissue:`1532`: qtconsole does not accept --gui switch | |
739 | * :ghissue:`1707`: Accept --gui=<...> switch in IPython qtconsole. |
|
739 | * :ghissue:`1707`: Accept --gui=<...> switch in IPython qtconsole. | |
740 | * :ghissue:`1797`: Fix comment which breaks Emacs syntax highlighting. |
|
740 | * :ghissue:`1797`: Fix comment which breaks Emacs syntax highlighting. | |
741 | * :ghissue:`1796`: %gui magic broken |
|
741 | * :ghissue:`1796`: %gui magic broken | |
742 | * :ghissue:`1795`: fix %gui magic |
|
742 | * :ghissue:`1795`: fix %gui magic | |
743 | * :ghissue:`1788`: extreme truncating of return values |
|
743 | * :ghissue:`1788`: extreme truncating of return values | |
744 | * :ghissue:`1793`: Raise repr limit for strings to 80 characters (from 30). |
|
744 | * :ghissue:`1793`: Raise repr limit for strings to 80 characters (from 30). | |
745 | * :ghissue:`1794`: don't use XDG path on OS X |
|
745 | * :ghissue:`1794`: don't use XDG path on OS X | |
746 | * :ghissue:`1777`: ipython crash on wrong encoding |
|
746 | * :ghissue:`1777`: ipython crash on wrong encoding | |
747 | * :ghissue:`1792`: Unicode-aware logger |
|
747 | * :ghissue:`1792`: Unicode-aware logger | |
748 | * :ghissue:`1791`: update zmqshell magics |
|
748 | * :ghissue:`1791`: update zmqshell magics | |
749 | * :ghissue:`1787`: DOC: Remove regression from qt-console docs. |
|
749 | * :ghissue:`1787`: DOC: Remove regression from qt-console docs. | |
750 | * :ghissue:`1785`: IPython.utils.tests.test_process.SubProcessTestCase |
|
750 | * :ghissue:`1785`: IPython.utils.tests.test_process.SubProcessTestCase | |
751 | * :ghissue:`1758`: test_pr, fallback on http if git protocol fail, and SSL errors... |
|
751 | * :ghissue:`1758`: test_pr, fallback on http if git protocol fail, and SSL errors... | |
752 | * :ghissue:`1786`: Make notebook save failures more salient |
|
752 | * :ghissue:`1786`: Make notebook save failures more salient | |
753 | * :ghissue:`1748`: Fix some tests for Python 3.3 |
|
753 | * :ghissue:`1748`: Fix some tests for Python 3.3 | |
754 | * :ghissue:`1755`: test for pygments before running qt tests |
|
754 | * :ghissue:`1755`: test for pygments before running qt tests | |
755 | * :ghissue:`1771`: Make default value of interactivity passed to run_ast_nodes configurable |
|
755 | * :ghissue:`1771`: Make default value of interactivity passed to run_ast_nodes configurable | |
756 | * :ghissue:`1783`: part of PR #1606 (loadpy -> load) erased by magic refactoring. |
|
756 | * :ghissue:`1783`: part of PR #1606 (loadpy -> load) erased by magic refactoring. | |
757 | * :ghissue:`1784`: restore loadpy to load |
|
757 | * :ghissue:`1784`: restore loadpy to load | |
758 | * :ghissue:`1768`: Update parallel magics |
|
758 | * :ghissue:`1768`: Update parallel magics | |
759 | * :ghissue:`1778`: string exception in IPython/core/magic.py:232 |
|
759 | * :ghissue:`1778`: string exception in IPython/core/magic.py:232 | |
760 | * :ghissue:`1779`: Tidy up error raising in magic decorators. |
|
760 | * :ghissue:`1779`: Tidy up error raising in magic decorators. | |
761 | * :ghissue:`1769`: Allow cell mode timeit without setup code. |
|
761 | * :ghissue:`1769`: Allow cell mode timeit without setup code. | |
762 | * :ghissue:`1716`: Fix for fake filenames in verbose traceback |
|
762 | * :ghissue:`1716`: Fix for fake filenames in verbose traceback | |
763 | * :ghissue:`1763`: [qtconsole] fix append_plain_html -> append_html |
|
763 | * :ghissue:`1763`: [qtconsole] fix append_plain_html -> append_html | |
764 | * :ghissue:`1766`: Test failure in IPython.parallel |
|
764 | * :ghissue:`1766`: Test failure in IPython.parallel | |
765 | * :ghissue:`1611`: IPEP1: Cell magics and general cleanup of the Magic system |
|
765 | * :ghissue:`1611`: IPEP1: Cell magics and general cleanup of the Magic system | |
766 | * :ghissue:`1732`: Refactoring of the magics system and implementation of cell magics |
|
766 | * :ghissue:`1732`: Refactoring of the magics system and implementation of cell magics | |
767 | * :ghissue:`1765`: test_pr should clearn PYTHONPATH for the subprocesses |
|
767 | * :ghissue:`1765`: test_pr should clearn PYTHONPATH for the subprocesses | |
768 | * :ghissue:`1630`: Merge divergent Kernel implementations |
|
768 | * :ghissue:`1630`: Merge divergent Kernel implementations | |
769 | * :ghissue:`1705`: [notebook] Make pager resizable, and remember size... |
|
769 | * :ghissue:`1705`: [notebook] Make pager resizable, and remember size... | |
770 | * :ghissue:`1606`: Share code for %pycat and %loadpy, make %pycat aware of URLs |
|
770 | * :ghissue:`1606`: Share code for %pycat and %loadpy, make %pycat aware of URLs | |
771 | * :ghissue:`1720`: Adding interactive inline plotting to notebooks with flot |
|
771 | * :ghissue:`1720`: Adding interactive inline plotting to notebooks with flot | |
772 | * :ghissue:`1701`: [notebook] Open HTML links in a new window by default |
|
772 | * :ghissue:`1701`: [notebook] Open HTML links in a new window by default | |
773 | * :ghissue:`1757`: Open IPython notebook hyperlinks in a new window using target=_blank |
|
773 | * :ghissue:`1757`: Open IPython notebook hyperlinks in a new window using target=_blank | |
774 | * :ghissue:`1735`: Open IPython notebook hyperlinks in a new window using target=_blank |
|
774 | * :ghissue:`1735`: Open IPython notebook hyperlinks in a new window using target=_blank | |
775 | * :ghissue:`1754`: Fix typo enconters->encounters |
|
775 | * :ghissue:`1754`: Fix typo enconters->encounters | |
776 | * :ghissue:`1753`: Clear window title when kernel is restarted |
|
776 | * :ghissue:`1753`: Clear window title when kernel is restarted | |
777 | * :ghissue:`735`: Images missing from XML/SVG export (for me) |
|
777 | * :ghissue:`735`: Images missing from XML/SVG export (for me) | |
778 | * :ghissue:`1449`: Fix for bug #735 : Images missing from XML/SVG export |
|
778 | * :ghissue:`1449`: Fix for bug #735 : Images missing from XML/SVG export | |
779 | * :ghissue:`1752`: Reconnect Websocket when it closes unexpectedly |
|
779 | * :ghissue:`1752`: Reconnect Websocket when it closes unexpectedly | |
780 | * :ghissue:`1751`: Reconnect Websocket when it closes unexpectedly |
|
780 | * :ghissue:`1751`: Reconnect Websocket when it closes unexpectedly | |
781 | * :ghissue:`1749`: Load MathJax.js using HTTPS when IPython notebook server is HTTPS |
|
781 | * :ghissue:`1749`: Load MathJax.js using HTTPS when IPython notebook server is HTTPS | |
782 | * :ghissue:`1743`: Tooltip completer js refactor |
|
782 | * :ghissue:`1743`: Tooltip completer js refactor | |
783 | * :ghissue:`1700`: A module for sending custom user messages from the kernel. |
|
783 | * :ghissue:`1700`: A module for sending custom user messages from the kernel. | |
784 | * :ghissue:`1745`: htmlnotebook: Cursor is off |
|
784 | * :ghissue:`1745`: htmlnotebook: Cursor is off | |
785 | * :ghissue:`1728`: ipython crash with matplotlib during picking |
|
785 | * :ghissue:`1728`: ipython crash with matplotlib during picking | |
786 | * :ghissue:`1681`: add qt config option to clear_on_kernel_restart |
|
786 | * :ghissue:`1681`: add qt config option to clear_on_kernel_restart | |
787 | * :ghissue:`1733`: Tooltip completer js refactor |
|
787 | * :ghissue:`1733`: Tooltip completer js refactor | |
788 | * :ghissue:`1676`: Kernel status/shutdown from dashboard |
|
788 | * :ghissue:`1676`: Kernel status/shutdown from dashboard | |
789 | * :ghissue:`1658`: Alternate notebook upload methods |
|
789 | * :ghissue:`1658`: Alternate notebook upload methods | |
790 | * :ghissue:`1727`: terminate kernel after embed_kernel tests |
|
790 | * :ghissue:`1727`: terminate kernel after embed_kernel tests | |
791 | * :ghissue:`1737`: add HistoryManager to ipapp class list |
|
791 | * :ghissue:`1737`: add HistoryManager to ipapp class list | |
792 | * :ghissue:`945`: Open a notebook from the command line |
|
792 | * :ghissue:`945`: Open a notebook from the command line | |
793 | * :ghissue:`1686`: ENH: Open a notebook from the command line |
|
793 | * :ghissue:`1686`: ENH: Open a notebook from the command line | |
794 | * :ghissue:`1709`: fixes #1708, failing test in arg_split on windows |
|
794 | * :ghissue:`1709`: fixes #1708, failing test in arg_split on windows | |
795 | * :ghissue:`1718`: Use CRegExp trait for regular expressions. |
|
795 | * :ghissue:`1718`: Use CRegExp trait for regular expressions. | |
796 | * :ghissue:`1729`: Catch failure in repr() for %whos |
|
796 | * :ghissue:`1729`: Catch failure in repr() for %whos | |
797 | * :ghissue:`1726`: use eval for command-line args instead of exec |
|
797 | * :ghissue:`1726`: use eval for command-line args instead of exec | |
798 | * :ghissue:`1723`: scatter/gather fail with targets='all' |
|
798 | * :ghissue:`1723`: scatter/gather fail with targets='all' | |
799 | * :ghissue:`1724`: fix scatter/gather with targets='all' |
|
799 | * :ghissue:`1724`: fix scatter/gather with targets='all' | |
800 | * :ghissue:`1725`: add --no-ff to git pull in test_pr |
|
800 | * :ghissue:`1725`: add --no-ff to git pull in test_pr | |
801 | * :ghissue:`1722`: unicode exception when evaluating expression with non-ascii characters |
|
801 | * :ghissue:`1722`: unicode exception when evaluating expression with non-ascii characters | |
802 | * :ghissue:`1721`: Tooltip completer js refactor |
|
802 | * :ghissue:`1721`: Tooltip completer js refactor | |
803 | * :ghissue:`1657`: Add `wait` optional argument to `hooks.editor` |
|
803 | * :ghissue:`1657`: Add `wait` optional argument to `hooks.editor` | |
804 | * :ghissue:`123`: Define sys.ps{1,2} |
|
804 | * :ghissue:`123`: Define sys.ps{1,2} | |
805 | * :ghissue:`1717`: Define generic sys.ps{1,2,3}, for use by scripts. |
|
805 | * :ghissue:`1717`: Define generic sys.ps{1,2,3}, for use by scripts. | |
806 | * :ghissue:`1442`: cache-size issue in qtconsole |
|
806 | * :ghissue:`1442`: cache-size issue in qtconsole | |
807 | * :ghissue:`1691`: Finish PR #1446 |
|
807 | * :ghissue:`1691`: Finish PR #1446 | |
808 | * :ghissue:`1446`: Fixing Issue #1442 |
|
808 | * :ghissue:`1446`: Fixing Issue #1442 | |
809 | * :ghissue:`1710`: update MathJax CDN url for https |
|
809 | * :ghissue:`1710`: update MathJax CDN url for https | |
810 | * :ghissue:`81`: Autocall fails if first function argument begins with "-" or "+ |
|
810 | * :ghissue:`81`: Autocall fails if first function argument begins with "-" or "+ | |
811 | * :ghissue:`1713`: Make autocall regexp's configurable. |
|
811 | * :ghissue:`1713`: Make autocall regexp's configurable. | |
812 | * :ghissue:`211`: paste command not working |
|
812 | * :ghissue:`211`: paste command not working | |
813 | * :ghissue:`1703`: Allow TryNext to have an error message without it affecting the command chain |
|
813 | * :ghissue:`1703`: Allow TryNext to have an error message without it affecting the command chain | |
814 | * :ghissue:`1714`: minor adjustments to test_pr |
|
814 | * :ghissue:`1714`: minor adjustments to test_pr | |
815 | * :ghissue:`1509`: New tooltip for notebook |
|
815 | * :ghissue:`1509`: New tooltip for notebook | |
816 | * :ghissue:`1697`: Major refactoring of the Notebook, Kernel and CodeCell JavaScript. |
|
816 | * :ghissue:`1697`: Major refactoring of the Notebook, Kernel and CodeCell JavaScript. | |
817 | * :ghissue:`788`: Progress indicator in the notebook (and perhaps the Qt console) |
|
817 | * :ghissue:`788`: Progress indicator in the notebook (and perhaps the Qt console) | |
818 | * :ghissue:`1034`: Single process Qt console |
|
818 | * :ghissue:`1034`: Single process Qt console | |
819 | * :ghissue:`1557`: magic function conflict while using --pylab |
|
819 | * :ghissue:`1557`: magic function conflict while using --pylab | |
820 | * :ghissue:`1476`: Pylab figure objects not properly updating |
|
820 | * :ghissue:`1476`: Pylab figure objects not properly updating | |
821 | * :ghissue:`1704`: ensure all needed qt parts can be imported before settling for one |
|
821 | * :ghissue:`1704`: ensure all needed qt parts can be imported before settling for one | |
822 | * :ghissue:`1708`: test failure in arg_split on windows |
|
822 | * :ghissue:`1708`: test failure in arg_split on windows | |
823 | * :ghissue:`1706`: Mark test_push_numpy_nocopy as a known failure for Python 3 |
|
823 | * :ghissue:`1706`: Mark test_push_numpy_nocopy as a known failure for Python 3 | |
824 | * :ghissue:`1696`: notebook tooltip fail on function with number |
|
824 | * :ghissue:`1696`: notebook tooltip fail on function with number | |
825 | * :ghissue:`1698`: fix tooltip on token with number |
|
825 | * :ghissue:`1698`: fix tooltip on token with number | |
826 | * :ghissue:`1226`: Windows GUI only (pythonw) bug for IPython on Python 3.x |
|
826 | * :ghissue:`1226`: Windows GUI only (pythonw) bug for IPython on Python 3.x | |
827 | * :ghissue:`1245`: pythonw py3k fixes for issue #1226 |
|
827 | * :ghissue:`1245`: pythonw py3k fixes for issue #1226 | |
828 | * :ghissue:`1417`: Notebook Completer Class |
|
828 | * :ghissue:`1417`: Notebook Completer Class | |
829 | * :ghissue:`1690`: [Bogus] Deliberately make a test fail |
|
829 | * :ghissue:`1690`: [Bogus] Deliberately make a test fail | |
830 | * :ghissue:`1685`: Add script to test pull request |
|
830 | * :ghissue:`1685`: Add script to test pull request | |
831 | * :ghissue:`1167`: Settle on a choice for $IPYTHONDIR |
|
831 | * :ghissue:`1167`: Settle on a choice for $IPYTHONDIR | |
832 | * :ghissue:`1693`: deprecate IPYTHON_DIR in favor of IPYTHONDIR |
|
832 | * :ghissue:`1693`: deprecate IPYTHON_DIR in favor of IPYTHONDIR | |
833 | * :ghissue:`1672`: ipython-qtconsole.desktop is using a deprecated format |
|
833 | * :ghissue:`1672`: ipython-qtconsole.desktop is using a deprecated format | |
834 | * :ghissue:`1695`: Avoid deprecated warnings from ipython-qtconsole.desktop. |
|
834 | * :ghissue:`1695`: Avoid deprecated warnings from ipython-qtconsole.desktop. | |
835 | * :ghissue:`1694`: Add quote to notebook to allow it to load |
|
835 | * :ghissue:`1694`: Add quote to notebook to allow it to load | |
836 | * :ghissue:`1240`: sys.path missing `''` as first entry when kernel launched without interface |
|
836 | * :ghissue:`1240`: sys.path missing `''` as first entry when kernel launched without interface | |
837 | * :ghissue:`1689`: Fix sys.path missing '' as first entry in `ipython kernel`. |
|
837 | * :ghissue:`1689`: Fix sys.path missing '' as first entry in `ipython kernel`. | |
838 | * :ghissue:`1683`: Parallel controller failing with Pymongo 2.2 |
|
838 | * :ghissue:`1683`: Parallel controller failing with Pymongo 2.2 | |
839 | * :ghissue:`1687`: import Binary from bson instead of pymongo |
|
839 | * :ghissue:`1687`: import Binary from bson instead of pymongo | |
840 | * :ghissue:`1614`: Display Image in Qtconsole |
|
840 | * :ghissue:`1614`: Display Image in Qtconsole | |
841 | * :ghissue:`1616`: Make IPython.core.display.Image less notebook-centric |
|
841 | * :ghissue:`1616`: Make IPython.core.display.Image less notebook-centric | |
842 | * :ghissue:`1684`: CLN: Remove redundant function definition. |
|
842 | * :ghissue:`1684`: CLN: Remove redundant function definition. | |
843 | * :ghissue:`1655`: Add %open magic command to open editor in non-blocking manner |
|
843 | * :ghissue:`1655`: Add %open magic command to open editor in non-blocking manner | |
844 | * :ghissue:`1677`: middle-click paste broken in notebook |
|
844 | * :ghissue:`1677`: middle-click paste broken in notebook | |
845 | * :ghissue:`1670`: Point %pastebin to gist |
|
845 | * :ghissue:`1670`: Point %pastebin to gist | |
846 | * :ghissue:`1667`: Test failure in test_message_spec |
|
846 | * :ghissue:`1667`: Test failure in test_message_spec | |
847 | * :ghissue:`1668`: Test failure in IPython.zmq.tests.test_message_spec.test_complete "'pyout' != 'status'" |
|
847 | * :ghissue:`1668`: Test failure in IPython.zmq.tests.test_message_spec.test_complete "'pyout' != 'status'" | |
848 | * :ghissue:`1669`: handle pyout messages in test_message_spec |
|
848 | * :ghissue:`1669`: handle pyout messages in test_message_spec | |
849 | * :ghissue:`1295`: add binary-tree engine interconnect example |
|
849 | * :ghissue:`1295`: add binary-tree engine interconnect example | |
850 | * :ghissue:`1642`: Cherry-picked commits from 0.12.1 release |
|
850 | * :ghissue:`1642`: Cherry-picked commits from 0.12.1 release | |
851 | * :ghissue:`1659`: Handle carriage return characters ("\r") in HTML notebook output. |
|
851 | * :ghissue:`1659`: Handle carriage return characters ("\r") in HTML notebook output. | |
852 | * :ghissue:`1313`: Figure out MathJax 2 support |
|
852 | * :ghissue:`1313`: Figure out MathJax 2 support | |
853 | * :ghissue:`1653`: Test failure in IPython.zmq |
|
853 | * :ghissue:`1653`: Test failure in IPython.zmq | |
854 | * :ghissue:`1656`: ensure kernels are cleaned up in embed_kernel tests |
|
854 | * :ghissue:`1656`: ensure kernels are cleaned up in embed_kernel tests | |
855 | * :ghissue:`1666`: pip install ipython==dev installs version 0.8 from an old svn repo |
|
855 | * :ghissue:`1666`: pip install ipython==dev installs version 0.8 from an old svn repo | |
856 | * :ghissue:`1664`: InteractiveShell.run_code: Update docstring. |
|
856 | * :ghissue:`1664`: InteractiveShell.run_code: Update docstring. | |
857 | * :ghissue:`1512`: `print stuff,` should avoid newline |
|
857 | * :ghissue:`1512`: `print stuff,` should avoid newline | |
858 | * :ghissue:`1662`: Delay flushing softspace until after cell finishes |
|
858 | * :ghissue:`1662`: Delay flushing softspace until after cell finishes | |
859 | * :ghissue:`1643`: handle jpg/jpeg in the qtconsole |
|
859 | * :ghissue:`1643`: handle jpg/jpeg in the qtconsole | |
860 | * :ghissue:`966`: dreload fails on Windows XP with iPython 0.11 "Unexpected Error" |
|
860 | * :ghissue:`966`: dreload fails on Windows XP with iPython 0.11 "Unexpected Error" | |
861 | * :ghissue:`1500`: dreload doesn't seem to exclude numpy |
|
861 | * :ghissue:`1500`: dreload doesn't seem to exclude numpy | |
862 | * :ghissue:`1520`: kernel crash when showing tooltip (?) |
|
862 | * :ghissue:`1520`: kernel crash when showing tooltip (?) | |
863 | * :ghissue:`1652`: add patch_pyzmq() for backporting a few changes from newer pyzmq |
|
863 | * :ghissue:`1652`: add patch_pyzmq() for backporting a few changes from newer pyzmq | |
864 | * :ghissue:`1650`: DOC: moving files with SSH launchers |
|
864 | * :ghissue:`1650`: DOC: moving files with SSH launchers | |
865 | * :ghissue:`1357`: add IPython.embed_kernel() |
|
865 | * :ghissue:`1357`: add IPython.embed_kernel() | |
866 | * :ghissue:`1640`: Finish up embed_kernel |
|
866 | * :ghissue:`1640`: Finish up embed_kernel | |
867 | * :ghissue:`1651`: Remove bundled Itpl module |
|
867 | * :ghissue:`1651`: Remove bundled Itpl module | |
868 | * :ghissue:`1634`: incremental improvements to SSH launchers |
|
868 | * :ghissue:`1634`: incremental improvements to SSH launchers | |
869 | * :ghissue:`1649`: move examples/test_embed into examples/tests/embed |
|
869 | * :ghissue:`1649`: move examples/test_embed into examples/tests/embed | |
870 | * :ghissue:`1171`: Recognise virtualenvs |
|
870 | * :ghissue:`1171`: Recognise virtualenvs | |
871 | * :ghissue:`1479`: test_extension failing in Windows |
|
871 | * :ghissue:`1479`: test_extension failing in Windows | |
872 | * :ghissue:`1633`: Fix installing extension from local file on Windows |
|
872 | * :ghissue:`1633`: Fix installing extension from local file on Windows | |
873 | * :ghissue:`1644`: Update copyright date to 2012 |
|
873 | * :ghissue:`1644`: Update copyright date to 2012 | |
874 | * :ghissue:`1636`: Test_deepreload breaks pylab irunner tests |
|
874 | * :ghissue:`1636`: Test_deepreload breaks pylab irunner tests | |
875 | * :ghissue:`1645`: Exclude UserDict when deep reloading NumPy. |
|
875 | * :ghissue:`1645`: Exclude UserDict when deep reloading NumPy. | |
876 | * :ghissue:`1454`: make it possible to start engine in 'disabled' mode and 'enable' later |
|
876 | * :ghissue:`1454`: make it possible to start engine in 'disabled' mode and 'enable' later | |
877 | * :ghissue:`1641`: Escape code for the current time in PromptManager |
|
877 | * :ghissue:`1641`: Escape code for the current time in PromptManager | |
878 | * :ghissue:`1638`: ipython console clobbers custom sys.path |
|
878 | * :ghissue:`1638`: ipython console clobbers custom sys.path | |
879 | * :ghissue:`1637`: Removed a ':' which shouldn't have been there |
|
879 | * :ghissue:`1637`: Removed a ':' which shouldn't have been there | |
880 | * :ghissue:`1536`: ipython 0.12 embed shell won't run startup scripts |
|
880 | * :ghissue:`1536`: ipython 0.12 embed shell won't run startup scripts | |
881 | * :ghissue:`1628`: error: QApplication already exists in TestKillRing |
|
881 | * :ghissue:`1628`: error: QApplication already exists in TestKillRing | |
882 | * :ghissue:`1631`: TST: QApplication doesn't quit early enough with PySide. |
|
882 | * :ghissue:`1631`: TST: QApplication doesn't quit early enough with PySide. | |
883 | * :ghissue:`1629`: evaluate a few dangling validate_message generators |
|
883 | * :ghissue:`1629`: evaluate a few dangling validate_message generators | |
884 | * :ghissue:`1621`: clear In[] prompt numbers on "Clear All Output" |
|
884 | * :ghissue:`1621`: clear In[] prompt numbers on "Clear All Output" | |
885 | * :ghissue:`1627`: Test the Message Spec |
|
885 | * :ghissue:`1627`: Test the Message Spec | |
886 | * :ghissue:`1470`: SyntaxError on setup.py install with Python 3 |
|
886 | * :ghissue:`1470`: SyntaxError on setup.py install with Python 3 | |
887 | * :ghissue:`1624`: Fixes for byte-compilation on Python 3 |
|
887 | * :ghissue:`1624`: Fixes for byte-compilation on Python 3 | |
888 | * :ghissue:`1612`: pylab=inline fig.show() non-existent in notebook |
|
888 | * :ghissue:`1612`: pylab=inline fig.show() non-existent in notebook | |
889 | * :ghissue:`1615`: Add show() method to figure objects. |
|
889 | * :ghissue:`1615`: Add show() method to figure objects. | |
890 | * :ghissue:`1622`: deepreload fails on Python 3 |
|
890 | * :ghissue:`1622`: deepreload fails on Python 3 | |
891 | * :ghissue:`1625`: Fix deepreload on Python 3 |
|
891 | * :ghissue:`1625`: Fix deepreload on Python 3 | |
892 | * :ghissue:`1626`: Failure in new `dreload` tests under Python 3.2 |
|
892 | * :ghissue:`1626`: Failure in new `dreload` tests under Python 3.2 | |
893 | * :ghissue:`1623`: iPython / matplotlib Memory error with imshow |
|
893 | * :ghissue:`1623`: iPython / matplotlib Memory error with imshow | |
894 | * :ghissue:`1619`: pyin messages should have execution_count |
|
894 | * :ghissue:`1619`: pyin messages should have execution_count | |
895 | * :ghissue:`1620`: pyin message now have execution_count |
|
895 | * :ghissue:`1620`: pyin message now have execution_count | |
896 | * :ghissue:`32`: dreload produces spurious traceback when numpy is involved |
|
896 | * :ghissue:`32`: dreload produces spurious traceback when numpy is involved | |
897 | * :ghissue:`1457`: Update deepreload to use a rewritten knee.py. Fixes dreload(numpy). |
|
897 | * :ghissue:`1457`: Update deepreload to use a rewritten knee.py. Fixes dreload(numpy). | |
898 | * :ghissue:`1613`: allow map / parallel function for single-engine views |
|
898 | * :ghissue:`1613`: allow map / parallel function for single-engine views | |
899 | * :ghissue:`1609`: exit notebook cleanly on SIGINT, SIGTERM |
|
899 | * :ghissue:`1609`: exit notebook cleanly on SIGINT, SIGTERM | |
900 | * :ghissue:`1531`: Function keyword completion fails if cursor is in the middle of the complete parentheses |
|
900 | * :ghissue:`1531`: Function keyword completion fails if cursor is in the middle of the complete parentheses | |
901 | * :ghissue:`1607`: cleanup sqlitedb temporary db file after tests |
|
901 | * :ghissue:`1607`: cleanup sqlitedb temporary db file after tests | |
902 | * :ghissue:`1608`: don't rely on timedelta.total_seconds in AsyncResult |
|
902 | * :ghissue:`1608`: don't rely on timedelta.total_seconds in AsyncResult | |
903 | * :ghissue:`1421`: ipython32 %run -d breaks with NameError name 'execfile' is not defined |
|
903 | * :ghissue:`1421`: ipython32 %run -d breaks with NameError name 'execfile' is not defined | |
904 | * :ghissue:`1599`: Fix for %run -d on Python 3 |
|
904 | * :ghissue:`1599`: Fix for %run -d on Python 3 | |
905 | * :ghissue:`1201`: %env magic fails with Python 3.2 |
|
905 | * :ghissue:`1201`: %env magic fails with Python 3.2 | |
906 | * :ghissue:`1602`: Fix %env magic on Python 3. |
|
906 | * :ghissue:`1602`: Fix %env magic on Python 3. | |
907 | * :ghissue:`1603`: Remove python3 profile |
|
907 | * :ghissue:`1603`: Remove python3 profile | |
908 | * :ghissue:`1604`: Exclude IPython.quarantine from installation |
|
908 | * :ghissue:`1604`: Exclude IPython.quarantine from installation | |
909 | * :ghissue:`1601`: Security file is not removed after shutdown by Ctrl+C or kill -INT |
|
909 | * :ghissue:`1601`: Security file is not removed after shutdown by Ctrl+C or kill -INT | |
910 | * :ghissue:`1600`: Specify encoding for io.open in notebook_reformat tests |
|
910 | * :ghissue:`1600`: Specify encoding for io.open in notebook_reformat tests | |
911 | * :ghissue:`1605`: Small fixes for Animation and Progress notebook |
|
911 | * :ghissue:`1605`: Small fixes for Animation and Progress notebook | |
912 | * :ghissue:`1452`: Bug fix for approval |
|
912 | * :ghissue:`1452`: Bug fix for approval | |
913 | * :ghissue:`13`: Improve robustness and debuggability of test suite |
|
913 | * :ghissue:`13`: Improve robustness and debuggability of test suite | |
914 | * :ghissue:`70`: IPython should prioritize __all__ during tab completion |
|
914 | * :ghissue:`70`: IPython should prioritize __all__ during tab completion | |
915 | * :ghissue:`1529`: __all__ feature, improvement to dir2, and tests for both |
|
915 | * :ghissue:`1529`: __all__ feature, improvement to dir2, and tests for both | |
916 | * :ghissue:`1475`: Custom namespace for %run |
|
916 | * :ghissue:`1475`: Custom namespace for %run | |
917 | * :ghissue:`1564`: calling .abort on AsyncMapResult results in traceback |
|
917 | * :ghissue:`1564`: calling .abort on AsyncMapResult results in traceback | |
918 | * :ghissue:`1548`: add sugar methods/properties to AsyncResult |
|
918 | * :ghissue:`1548`: add sugar methods/properties to AsyncResult | |
919 | * :ghissue:`1535`: Fix pretty printing dispatch |
|
919 | * :ghissue:`1535`: Fix pretty printing dispatch | |
920 | * :ghissue:`1522`: Discussion: some potential Qt console refactoring |
|
920 | * :ghissue:`1522`: Discussion: some potential Qt console refactoring | |
921 | * :ghissue:`1399`: Use LaTeX to print various built-in types with the SymPy printing extension |
|
921 | * :ghissue:`1399`: Use LaTeX to print various built-in types with the SymPy printing extension | |
922 | * :ghissue:`1597`: re-enter kernel.eventloop after catching SIGINT |
|
922 | * :ghissue:`1597`: re-enter kernel.eventloop after catching SIGINT | |
923 | * :ghissue:`1490`: rename plaintext cell -> raw cell |
|
923 | * :ghissue:`1490`: rename plaintext cell -> raw cell | |
924 | * :ghissue:`1487`: %notebook fails in qtconsole |
|
924 | * :ghissue:`1487`: %notebook fails in qtconsole | |
925 | * :ghissue:`1545`: trailing newline not preserved in splitline ipynb |
|
925 | * :ghissue:`1545`: trailing newline not preserved in splitline ipynb | |
926 | * :ghissue:`1480`: Fix %notebook magic, etc. nbformat unicode tests and fixes |
|
926 | * :ghissue:`1480`: Fix %notebook magic, etc. nbformat unicode tests and fixes | |
927 | * :ghissue:`1588`: Gtk3 integration with ipython works. |
|
927 | * :ghissue:`1588`: Gtk3 integration with ipython works. | |
928 | * :ghissue:`1595`: Examples syntax (avoid errors installing on Python 3) |
|
928 | * :ghissue:`1595`: Examples syntax (avoid errors installing on Python 3) | |
929 | * :ghissue:`1526`: Find encoding for Python files |
|
929 | * :ghissue:`1526`: Find encoding for Python files | |
930 | * :ghissue:`1594`: Fix writing git commit ID to a file on build with Python 3 |
|
930 | * :ghissue:`1594`: Fix writing git commit ID to a file on build with Python 3 | |
931 | * :ghissue:`1556`: shallow-copy DictDB query results |
|
931 | * :ghissue:`1556`: shallow-copy DictDB query results | |
932 | * :ghissue:`1499`: various pyflakes issues |
|
932 | * :ghissue:`1499`: various pyflakes issues | |
933 | * :ghissue:`1502`: small changes in response to pyflakes pass |
|
933 | * :ghissue:`1502`: small changes in response to pyflakes pass | |
934 | * :ghissue:`1445`: Don't build sphinx docs for sdists |
|
934 | * :ghissue:`1445`: Don't build sphinx docs for sdists | |
935 | * :ghissue:`1484`: unhide .git_commit_info.ini |
|
935 | * :ghissue:`1484`: unhide .git_commit_info.ini | |
936 | * :ghissue:`1538`: store git commit hash in utils._sysinfo instead of hidden data file |
|
936 | * :ghissue:`1538`: store git commit hash in utils._sysinfo instead of hidden data file | |
937 | * :ghissue:`1546`: attempt to suppress exceptions in channel threads at shutdown |
|
937 | * :ghissue:`1546`: attempt to suppress exceptions in channel threads at shutdown | |
938 | * :ghissue:`1524`: unhide git_commit_info.ini |
|
938 | * :ghissue:`1524`: unhide git_commit_info.ini | |
939 | * :ghissue:`1559`: update tools/github_stats.py to use GitHub API v3 |
|
939 | * :ghissue:`1559`: update tools/github_stats.py to use GitHub API v3 | |
940 | * :ghissue:`1563`: clear_output improvements |
|
940 | * :ghissue:`1563`: clear_output improvements | |
941 | * :ghissue:`1558`: Ipython testing documentation still mentions twisted and trial |
|
941 | * :ghissue:`1558`: Ipython testing documentation still mentions twisted and trial | |
942 | * :ghissue:`1560`: remove obsolete discussion of Twisted/trial from testing docs |
|
942 | * :ghissue:`1560`: remove obsolete discussion of Twisted/trial from testing docs | |
943 | * :ghissue:`1561`: Qtconsole - nonstandard \a and \b |
|
943 | * :ghissue:`1561`: Qtconsole - nonstandard \a and \b | |
944 | * :ghissue:`1569`: BUG: qtconsole -- non-standard handling of \a and \b. [Fixes #1561] |
|
944 | * :ghissue:`1569`: BUG: qtconsole -- non-standard handling of \a and \b. [Fixes #1561] | |
945 | * :ghissue:`1574`: BUG: Ctrl+C crashes wx pylab kernel in qtconsole |
|
945 | * :ghissue:`1574`: BUG: Ctrl+C crashes wx pylab kernel in qtconsole | |
946 | * :ghissue:`1573`: BUG: Ctrl+C crashes wx pylab kernel in qtconsole. |
|
946 | * :ghissue:`1573`: BUG: Ctrl+C crashes wx pylab kernel in qtconsole. | |
947 | * :ghissue:`1590`: 'iPython3 qtconsole' doesn't work in Windows 7 |
|
947 | * :ghissue:`1590`: 'iPython3 qtconsole' doesn't work in Windows 7 | |
948 | * :ghissue:`602`: User test the html notebook |
|
948 | * :ghissue:`602`: User test the html notebook | |
949 | * :ghissue:`613`: Implement Namespace panel section |
|
949 | * :ghissue:`613`: Implement Namespace panel section | |
950 | * :ghissue:`879`: How to handle Javascript output in the notebook |
|
950 | * :ghissue:`879`: How to handle Javascript output in the notebook | |
951 | * :ghissue:`1255`: figure.show() raises an error with the inline backend |
|
951 | * :ghissue:`1255`: figure.show() raises an error with the inline backend | |
952 | * :ghissue:`1467`: Document or bundle a git-integrated facility for stripping VCS-unfriendly binary data |
|
952 | * :ghissue:`1467`: Document or bundle a git-integrated facility for stripping VCS-unfriendly binary data | |
953 | * :ghissue:`1237`: Kernel status and logout button overlap |
|
953 | * :ghissue:`1237`: Kernel status and logout button overlap | |
954 | * :ghissue:`1319`: Running a cell with ctrl+Enter selects text in cell |
|
954 | * :ghissue:`1319`: Running a cell with ctrl+Enter selects text in cell | |
955 | * :ghissue:`1571`: module member autocomplete should respect __all__ |
|
955 | * :ghissue:`1571`: module member autocomplete should respect __all__ | |
956 | * :ghissue:`1566`: ipython3 doesn't run in Win7 with Python 3.2 |
|
956 | * :ghissue:`1566`: ipython3 doesn't run in Win7 with Python 3.2 | |
957 | * :ghissue:`1568`: fix PR #1567 |
|
957 | * :ghissue:`1568`: fix PR #1567 | |
958 | * :ghissue:`1567`: Fix: openssh_tunnel did not parse port in `server` |
|
958 | * :ghissue:`1567`: Fix: openssh_tunnel did not parse port in `server` | |
959 | * :ghissue:`1565`: fix AsyncResult.abort |
|
959 | * :ghissue:`1565`: fix AsyncResult.abort | |
960 | * :ghissue:`1550`: Crash when starting notebook in a non-ascii path |
|
960 | * :ghissue:`1550`: Crash when starting notebook in a non-ascii path | |
961 | * :ghissue:`1552`: use os.getcwdu in NotebookManager |
|
961 | * :ghissue:`1552`: use os.getcwdu in NotebookManager | |
962 | * :ghissue:`1554`: wrong behavior of the all function on iterators |
|
962 | * :ghissue:`1554`: wrong behavior of the all function on iterators | |
963 | * :ghissue:`1541`: display_pub flushes stdout/err |
|
963 | * :ghissue:`1541`: display_pub flushes stdout/err | |
964 | * :ghissue:`1539`: Asynchrous issue when using clear_display and print x,y,z |
|
964 | * :ghissue:`1539`: Asynchrous issue when using clear_display and print x,y,z | |
965 | * :ghissue:`1544`: make MultiKernelManager.kernel_manager_class configurable |
|
965 | * :ghissue:`1544`: make MultiKernelManager.kernel_manager_class configurable | |
966 | * :ghissue:`1494`: Untrusted Secure Websocket broken on latest chrome dev |
|
966 | * :ghissue:`1494`: Untrusted Secure Websocket broken on latest chrome dev | |
967 | * :ghissue:`1521`: only install ipython-qtconsole gui script on Windows |
|
967 | * :ghissue:`1521`: only install ipython-qtconsole gui script on Windows | |
968 | * :ghissue:`1528`: Tab completion optionally respects __all__ (+ dir2() cleanup) |
|
968 | * :ghissue:`1528`: Tab completion optionally respects __all__ (+ dir2() cleanup) | |
969 | * :ghissue:`1527`: Making a progress bar work in IPython Notebook |
|
969 | * :ghissue:`1527`: Making a progress bar work in IPython Notebook | |
970 | * :ghissue:`1497`: __all__ functionality added to dir2(obj) |
|
970 | * :ghissue:`1497`: __all__ functionality added to dir2(obj) | |
971 | * :ghissue:`1518`: Pretty printing exceptions is broken |
|
971 | * :ghissue:`1518`: Pretty printing exceptions is broken | |
972 | * :ghissue:`811`: Fixes for ipython unhandeled OSError exception on failure of os.getcwdu() |
|
972 | * :ghissue:`811`: Fixes for ipython unhandeled OSError exception on failure of os.getcwdu() | |
973 | * :ghissue:`1517`: Fix indentation bug in IPython/lib/pretty.py |
|
973 | * :ghissue:`1517`: Fix indentation bug in IPython/lib/pretty.py | |
974 | * :ghissue:`1519`: BUG: Include the name of the exception type in its pretty format. |
|
974 | * :ghissue:`1519`: BUG: Include the name of the exception type in its pretty format. | |
975 | * :ghissue:`1525`: A hack for auto-complete numpy recarray |
|
975 | * :ghissue:`1525`: A hack for auto-complete numpy recarray | |
976 | * :ghissue:`1489`: Fix zero-copy push |
|
976 | * :ghissue:`1489`: Fix zero-copy push | |
977 | * :ghissue:`1401`: numpy arrays cannot be used with View.apply() in Python 3 |
|
977 | * :ghissue:`1401`: numpy arrays cannot be used with View.apply() in Python 3 | |
978 | * :ghissue:`1477`: fix dangling `buffer` in IPython.parallel.util |
|
978 | * :ghissue:`1477`: fix dangling `buffer` in IPython.parallel.util | |
979 | * :ghissue:`1514`: DOC: Fix references to IPython.lib.pretty instead of the old location |
|
979 | * :ghissue:`1514`: DOC: Fix references to IPython.lib.pretty instead of the old location | |
980 | * :ghissue:`1511`: Version comparison error ( '2.1.11' < '2.1.4' ==> True) |
|
980 | * :ghissue:`1511`: Version comparison error ( '2.1.11' < '2.1.4' ==> True) | |
981 | * :ghissue:`1506`: "Fixing" the Notebook scroll to help in visually comparing outputs |
|
981 | * :ghissue:`1506`: "Fixing" the Notebook scroll to help in visually comparing outputs | |
982 | * :ghissue:`1481`: BUG: Improve placement of CallTipWidget |
|
982 | * :ghissue:`1481`: BUG: Improve placement of CallTipWidget | |
983 | * :ghissue:`1241`: When our debugger class is used standalone `_oh` key errors are thrown |
|
983 | * :ghissue:`1241`: When our debugger class is used standalone `_oh` key errors are thrown | |
984 | * :ghissue:`676`: IPython.embed() from ipython crashes twice on exit |
|
984 | * :ghissue:`676`: IPython.embed() from ipython crashes twice on exit | |
985 | * :ghissue:`1496`: BUG: LBYL when clearing the output history on shutdown. |
|
985 | * :ghissue:`1496`: BUG: LBYL when clearing the output history on shutdown. | |
986 | * :ghissue:`1507`: python3 notebook: TypeError: unorderable types |
|
986 | * :ghissue:`1507`: python3 notebook: TypeError: unorderable types | |
987 | * :ghissue:`1508`: fix sorting profiles in clustermanager |
|
987 | * :ghissue:`1508`: fix sorting profiles in clustermanager | |
988 | * :ghissue:`1495`: BUG: Fix pretty-printing for overzealous objects |
|
988 | * :ghissue:`1495`: BUG: Fix pretty-printing for overzealous objects | |
989 | * :ghissue:`1505`: SQLite objects created in a thread can only be used in that same thread |
|
989 | * :ghissue:`1505`: SQLite objects created in a thread can only be used in that same thread | |
990 | * :ghissue:`1482`: %history documentation out of date? |
|
990 | * :ghissue:`1482`: %history documentation out of date? | |
991 | * :ghissue:`1501`: dreload doesn't seem to exclude numpy |
|
991 | * :ghissue:`1501`: dreload doesn't seem to exclude numpy | |
992 | * :ghissue:`1472`: more general fix for #662 |
|
992 | * :ghissue:`1472`: more general fix for #662 | |
993 | * :ghissue:`1486`: save state of qtconsole |
|
993 | * :ghissue:`1486`: save state of qtconsole | |
994 | * :ghissue:`1485`: add history search to qtconsole |
|
994 | * :ghissue:`1485`: add history search to qtconsole | |
995 | * :ghissue:`1483`: updated magic_history docstring |
|
995 | * :ghissue:`1483`: updated magic_history docstring | |
996 | * :ghissue:`1383`: First version of cluster web service. |
|
996 | * :ghissue:`1383`: First version of cluster web service. | |
997 | * :ghissue:`482`: test_run.test_tclass fails on Windows |
|
997 | * :ghissue:`482`: test_run.test_tclass fails on Windows | |
998 | * :ghissue:`1398`: fix %tb after SyntaxError |
|
998 | * :ghissue:`1398`: fix %tb after SyntaxError | |
999 | * :ghissue:`1478`: key function or lambda in sorted function doesn't find global variables |
|
999 | * :ghissue:`1478`: key function or lambda in sorted function doesn't find global variables | |
1000 | * :ghissue:`1415`: handle exit/quit/exit()/quit() variants in zmqconsole |
|
1000 | * :ghissue:`1415`: handle exit/quit/exit()/quit() variants in zmqconsole | |
1001 | * :ghissue:`1440`: Fix for failing testsuite when using --with-xml-coverage on windows. |
|
1001 | * :ghissue:`1440`: Fix for failing testsuite when using --with-xml-coverage on windows. | |
1002 | * :ghissue:`1419`: Add %install_ext magic function. |
|
1002 | * :ghissue:`1419`: Add %install_ext magic function. | |
1003 | * :ghissue:`1424`: Win32 shell interactivity |
|
1003 | * :ghissue:`1424`: Win32 shell interactivity | |
1004 | * :ghissue:`1434`: Controller should schedule tasks of multiple clients at the same time |
|
1004 | * :ghissue:`1434`: Controller should schedule tasks of multiple clients at the same time | |
1005 | * :ghissue:`1268`: notebook %reset magic fails with StdinNotImplementedError |
|
1005 | * :ghissue:`1268`: notebook %reset magic fails with StdinNotImplementedError | |
1006 | * :ghissue:`1438`: from cherrypy import expose fails when running script form parent directory |
|
1006 | * :ghissue:`1438`: from cherrypy import expose fails when running script form parent directory | |
1007 | * :ghissue:`1468`: Simplify structure of a Job in the TaskScheduler |
|
1007 | * :ghissue:`1468`: Simplify structure of a Job in the TaskScheduler | |
1008 | * :ghissue:`875`: never build unicode error messages |
|
1008 | * :ghissue:`875`: never build unicode error messages | |
1009 | * :ghissue:`1107`: Tab autocompletion can suggest invalid syntax |
|
1009 | * :ghissue:`1107`: Tab autocompletion can suggest invalid syntax | |
1010 | * :ghissue:`1447`: 1107 - Tab autocompletion can suggest invalid syntax |
|
1010 | * :ghissue:`1447`: 1107 - Tab autocompletion can suggest invalid syntax | |
1011 | * :ghissue:`1469`: Fix typo in comment (insert space) |
|
1011 | * :ghissue:`1469`: Fix typo in comment (insert space) | |
1012 | * :ghissue:`1463`: Fix completion when importing modules in the cwd. |
|
1012 | * :ghissue:`1463`: Fix completion when importing modules in the cwd. | |
1013 | * :ghissue:`1437`: unfriendly error handling with pythonw and ipython-qtconsole |
|
1013 | * :ghissue:`1437`: unfriendly error handling with pythonw and ipython-qtconsole | |
1014 | * :ghissue:`1466`: Fix for issue #1437, unfriendly windows qtconsole error handling |
|
1014 | * :ghissue:`1466`: Fix for issue #1437, unfriendly windows qtconsole error handling | |
1015 | * :ghissue:`1432`: Fix ipython directive |
|
1015 | * :ghissue:`1432`: Fix ipython directive | |
1016 | * :ghissue:`1465`: allow `ipython help subcommand` syntax |
|
1016 | * :ghissue:`1465`: allow `ipython help subcommand` syntax | |
1017 | * :ghissue:`1394`: Wishlist: Remove hard dependency on ctypes |
|
1017 | * :ghissue:`1394`: Wishlist: Remove hard dependency on ctypes | |
1018 | * :ghissue:`1416`: Conditional import of ctypes in inputhook |
|
1018 | * :ghissue:`1416`: Conditional import of ctypes in inputhook | |
1019 | * :ghissue:`1462`: expedite parallel tests |
|
1019 | * :ghissue:`1462`: expedite parallel tests | |
1020 | * :ghissue:`1418`: Strict mode in javascript |
|
1020 | * :ghissue:`1418`: Strict mode in javascript | |
1021 | * :ghissue:`1410`: Add javascript library and css stylesheet loading to JS class. |
|
1021 | * :ghissue:`1410`: Add javascript library and css stylesheet loading to JS class. | |
1022 | * :ghissue:`1427`: #922 again |
|
1022 | * :ghissue:`1427`: #922 again | |
1023 | * :ghissue:`1448`: Fix for #875 Never build unicode error messages |
|
1023 | * :ghissue:`1448`: Fix for #875 Never build unicode error messages | |
1024 | * :ghissue:`1458`: use eval to uncan References |
|
1024 | * :ghissue:`1458`: use eval to uncan References | |
1025 | * :ghissue:`1455`: Python3 install fails |
|
1025 | * :ghissue:`1455`: Python3 install fails | |
1026 | * :ghissue:`1450`: load mathjax from CDN via https |
|
1026 | * :ghissue:`1450`: load mathjax from CDN via https | |
1027 | * :ghissue:`1182`: Qtconsole, multiwindow |
|
1027 | * :ghissue:`1182`: Qtconsole, multiwindow | |
1028 | * :ghissue:`1439`: Notebook not storing heading celltype information |
|
1028 | * :ghissue:`1439`: Notebook not storing heading celltype information | |
1029 | * :ghissue:`1451`: include heading level in JSON |
|
1029 | * :ghissue:`1451`: include heading level in JSON | |
1030 | * :ghissue:`1444`: Fix pyhton -> python typos |
|
1030 | * :ghissue:`1444`: Fix pyhton -> python typos | |
1031 | * :ghissue:`1412`: Input parsing issue with %prun |
|
1031 | * :ghissue:`1412`: Input parsing issue with %prun | |
1032 | * :ghissue:`1414`: ignore errors in shell.var_expand |
|
1032 | * :ghissue:`1414`: ignore errors in shell.var_expand | |
1033 | * :ghissue:`1441`: (1) Enable IPython.notebook.kernel.execute to publish display_* even it is not called with a code cell and (2) remove empty html element when execute "display_*" |
|
1033 | * :ghissue:`1441`: (1) Enable IPython.notebook.kernel.execute to publish display_* even it is not called with a code cell and (2) remove empty html element when execute "display_*" | |
1034 | * :ghissue:`1431`: Beginner Error: ipython qtconsole |
|
1034 | * :ghissue:`1431`: Beginner Error: ipython qtconsole | |
1035 | * :ghissue:`1436`: "ipython-qtconsole --gui qt" hangs on 64-bit win7 |
|
1035 | * :ghissue:`1436`: "ipython-qtconsole --gui qt" hangs on 64-bit win7 | |
1036 | * :ghissue:`1433`: websocket connection fails on Chrome |
|
1036 | * :ghissue:`1433`: websocket connection fails on Chrome | |
1037 | * :ghissue:`1430`: Fix for tornado check for tornado < 1.1.0 |
|
1037 | * :ghissue:`1430`: Fix for tornado check for tornado < 1.1.0 | |
1038 | * :ghissue:`1408`: test_get_home_dir_3 failed on Mac OS X |
|
1038 | * :ghissue:`1408`: test_get_home_dir_3 failed on Mac OS X | |
1039 | * :ghissue:`1413`: get_home_dir expands symlinks, adjust test accordingly |
|
1039 | * :ghissue:`1413`: get_home_dir expands symlinks, adjust test accordingly | |
1040 | * :ghissue:`1420`: fixes #922 |
|
1040 | * :ghissue:`1420`: fixes #922 | |
1041 | * :ghissue:`823`: KnownFailure tests appearing as errors |
|
1041 | * :ghissue:`823`: KnownFailure tests appearing as errors | |
1042 | * :ghissue:`1385`: updated and prettified magic doc strings |
|
1042 | * :ghissue:`1385`: updated and prettified magic doc strings | |
1043 | * :ghissue:`1406`: Browser selection |
|
1043 | * :ghissue:`1406`: Browser selection | |
1044 | * :ghissue:`1411`: ipcluster starts 8 engines "successfully" but Client only finds two |
|
1044 | * :ghissue:`1411`: ipcluster starts 8 engines "successfully" but Client only finds two | |
1045 | * :ghissue:`1375`: %history -g -f file encoding issue |
|
1045 | * :ghissue:`1375`: %history -g -f file encoding issue | |
1046 | * :ghissue:`1377`: Saving non-ascii history |
|
1046 | * :ghissue:`1377`: Saving non-ascii history | |
1047 | * :ghissue:`797`: Source introspection needs to be smarter in python 3.2 |
|
1047 | * :ghissue:`797`: Source introspection needs to be smarter in python 3.2 | |
1048 | * :ghissue:`846`: Autoreload extension doesn't work with Python 3.2 |
|
1048 | * :ghissue:`846`: Autoreload extension doesn't work with Python 3.2 | |
1049 | * :ghissue:`1360`: IPython notebook not starting on winXP |
|
1049 | * :ghissue:`1360`: IPython notebook not starting on winXP | |
1050 | * :ghissue:`1407`: Qtconsole segfaults on OSX when displaying some pop-up function tooltips |
|
1050 | * :ghissue:`1407`: Qtconsole segfaults on OSX when displaying some pop-up function tooltips | |
1051 | * :ghissue:`1402`: fix symlinked /home issue for FreeBSD |
|
1051 | * :ghissue:`1402`: fix symlinked /home issue for FreeBSD | |
1052 | * :ghissue:`1403`: pyreadline cyclic dependency with pdb++/pdbpp module |
|
1052 | * :ghissue:`1403`: pyreadline cyclic dependency with pdb++/pdbpp module | |
1053 | * :ghissue:`1405`: Only monkeypatch xunit when the tests are run using it. |
|
1053 | * :ghissue:`1405`: Only monkeypatch xunit when the tests are run using it. | |
1054 | * :ghissue:`1404`: Feature Request: List/Dictionary tab completion |
|
1054 | * :ghissue:`1404`: Feature Request: List/Dictionary tab completion | |
1055 | * :ghissue:`1395`: Xunit & KnownFailure |
|
1055 | * :ghissue:`1395`: Xunit & KnownFailure | |
1056 | * :ghissue:`1396`: Fix for %tb magic. |
|
1056 | * :ghissue:`1396`: Fix for %tb magic. | |
1057 | * :ghissue:`1397`: Stay or leave message not working, Safari session lost. |
|
1057 | * :ghissue:`1397`: Stay or leave message not working, Safari session lost. | |
1058 | * :ghissue:`1389`: pylab=inline inoperant through ssh tunnelling? |
|
1058 | * :ghissue:`1389`: pylab=inline inoperant through ssh tunnelling? | |
1059 | * :ghissue:`1386`: Jsd3 |
|
1059 | * :ghissue:`1386`: Jsd3 | |
1060 | * :ghissue:`1388`: Add simple support for running inside a virtualenv |
|
1060 | * :ghissue:`1388`: Add simple support for running inside a virtualenv | |
1061 | * :ghissue:`826`: Add support for creation of parallel task when no engine is running |
|
1061 | * :ghissue:`826`: Add support for creation of parallel task when no engine is running | |
1062 | * :ghissue:`1391`: Improve Hub/Scheduler when no engines are registered |
|
1062 | * :ghissue:`1391`: Improve Hub/Scheduler when no engines are registered | |
1063 | * :ghissue:`1369`: load header with engine id when engine dies in TaskScheduler |
|
1063 | * :ghissue:`1369`: load header with engine id when engine dies in TaskScheduler | |
1064 | * :ghissue:`1345`: notebook can't save unicode as script |
|
1064 | * :ghissue:`1345`: notebook can't save unicode as script | |
1065 | * :ghissue:`1353`: Save notebook as script using unicode file handle. |
|
1065 | * :ghissue:`1353`: Save notebook as script using unicode file handle. | |
1066 | * :ghissue:`1352`: Add '-m mod : run library module as a script' option. |
|
1066 | * :ghissue:`1352`: Add '-m mod : run library module as a script' option. | |
1067 | * :ghissue:`1363`: Fix some minor color/style config issues in the qtconsole |
|
1067 | * :ghissue:`1363`: Fix some minor color/style config issues in the qtconsole | |
1068 | * :ghissue:`1371`: Adds a quiet keyword to sync_imports |
|
1068 | * :ghissue:`1371`: Adds a quiet keyword to sync_imports | |
1069 | * :ghissue:`1390`: Blank screen for notebooks on Safari |
|
1069 | * :ghissue:`1390`: Blank screen for notebooks on Safari | |
1070 | * :ghissue:`1387`: Fixing Cell menu to update cell type select box. |
|
1070 | * :ghissue:`1387`: Fixing Cell menu to update cell type select box. | |
1071 | * :ghissue:`645`: Standalone WX GUI support is broken |
|
1071 | * :ghissue:`645`: Standalone WX GUI support is broken | |
1072 | * :ghissue:`1296`: Wx gui example: fixes the broken example for `%gui wx`. |
|
1072 | * :ghissue:`1296`: Wx gui example: fixes the broken example for `%gui wx`. | |
1073 | * :ghissue:`1254`: typo in notebooklist.js breaks links |
|
1073 | * :ghissue:`1254`: typo in notebooklist.js breaks links | |
1074 | * :ghissue:`781`: Users should be able to clone a notebook |
|
1074 | * :ghissue:`781`: Users should be able to clone a notebook | |
1075 | * :ghissue:`1372`: ipcontroller cleans up connection files unless reuse=True |
|
1075 | * :ghissue:`1372`: ipcontroller cleans up connection files unless reuse=True | |
1076 | * :ghissue:`1374`: remove calls to meaningless ZMQStream.on_err |
|
1076 | * :ghissue:`1374`: remove calls to meaningless ZMQStream.on_err | |
1077 | * :ghissue:`1382`: Update RO for Notebook |
|
1077 | * :ghissue:`1382`: Update RO for Notebook | |
1078 | * :ghissue:`1370`: allow draft76 websockets (Safari) |
|
1078 | * :ghissue:`1370`: allow draft76 websockets (Safari) | |
1079 | * :ghissue:`1368`: Ensure handler patterns are str, not unicode |
|
1079 | * :ghissue:`1368`: Ensure handler patterns are str, not unicode | |
1080 | * :ghissue:`1379`: Sage link on website homepage broken |
|
1080 | * :ghissue:`1379`: Sage link on website homepage broken | |
1081 | * :ghissue:`1376`: FWIW does not work with Chrome 16.0.912.77 Ubuntu 10.10 |
|
1081 | * :ghissue:`1376`: FWIW does not work with Chrome 16.0.912.77 Ubuntu 10.10 | |
1082 | * :ghissue:`1358`: Cannot install ipython on Windows 7 64-bit |
|
1082 | * :ghissue:`1358`: Cannot install ipython on Windows 7 64-bit | |
1083 | * :ghissue:`1367`: Ctrl - m t does not toggle output in chrome |
|
1083 | * :ghissue:`1367`: Ctrl - m t does not toggle output in chrome | |
1084 | * :ghissue:`1359`: [sympyprinting] MathJax can't render \root{m}{n} |
|
1084 | * :ghissue:`1359`: [sympyprinting] MathJax can't render \root{m}{n} | |
1085 | * :ghissue:`1337`: Tab in the notebook after `(` should not indent, only give a tooltip |
|
1085 | * :ghissue:`1337`: Tab in the notebook after `(` should not indent, only give a tooltip | |
1086 | * :ghissue:`1339`: Notebook printing broken |
|
1086 | * :ghissue:`1339`: Notebook printing broken | |
1087 | * :ghissue:`1344`: Ctrl + M + L does not toggle line numbering in htmlnotebook |
|
1087 | * :ghissue:`1344`: Ctrl + M + L does not toggle line numbering in htmlnotebook | |
1088 | * :ghissue:`1348`: Ctrl + M + M does not switch to markdown cell |
|
1088 | * :ghissue:`1348`: Ctrl + M + M does not switch to markdown cell | |
1089 | * :ghissue:`1361`: Notebook bug fix branch |
|
1089 | * :ghissue:`1361`: Notebook bug fix branch | |
1090 | * :ghissue:`1364`: avoid jsonlib returning Decimal |
|
1090 | * :ghissue:`1364`: avoid jsonlib returning Decimal | |
1091 | * :ghissue:`1362`: Don't log complete contents of history replies, even in debug |
|
1091 | * :ghissue:`1362`: Don't log complete contents of history replies, even in debug | |
1092 | * :ghissue:`888`: ReST support in notebooks |
|
1092 | * :ghissue:`888`: ReST support in notebooks | |
1093 | * :ghissue:`1205`: notebook stores HTML escaped text in the file |
|
1093 | * :ghissue:`1205`: notebook stores HTML escaped text in the file | |
1094 | * :ghissue:`1351`: add IPython.embed_kernel() |
|
1094 | * :ghissue:`1351`: add IPython.embed_kernel() | |
1095 | * :ghissue:`1243`: magic commands without % are not completed properly in htmlnotebook |
|
1095 | * :ghissue:`1243`: magic commands without % are not completed properly in htmlnotebook | |
1096 | * :ghissue:`1347`: fix weird magic completion in notebook |
|
1096 | * :ghissue:`1347`: fix weird magic completion in notebook | |
1097 | * :ghissue:`1355`: notebook.html extends layout.html now |
|
1097 | * :ghissue:`1355`: notebook.html extends layout.html now | |
1098 | * :ghissue:`1354`: min and max in the notebook |
|
1098 | * :ghissue:`1354`: min and max in the notebook | |
1099 | * :ghissue:`1346`: fixups for alternate URL prefix stuff |
|
1099 | * :ghissue:`1346`: fixups for alternate URL prefix stuff | |
1100 | * :ghissue:`1336`: crack at making notebook.html use the layout.html template |
|
1100 | * :ghissue:`1336`: crack at making notebook.html use the layout.html template | |
1101 | * :ghissue:`1331`: RST and heading cells |
|
1101 | * :ghissue:`1331`: RST and heading cells | |
1102 | * :ghissue:`1350`: Add '-m mod : run library module as a script' option |
|
1102 | * :ghissue:`1350`: Add '-m mod : run library module as a script' option | |
1103 | * :ghissue:`1247`: fixes a bug causing extra newlines after comments. |
|
1103 | * :ghissue:`1247`: fixes a bug causing extra newlines after comments. | |
1104 | * :ghissue:`1329`: add base_url to notebook configuration options |
|
1104 | * :ghissue:`1329`: add base_url to notebook configuration options | |
1105 | * :ghissue:`1332`: notebook - allow prefixes in URL path. |
|
1105 | * :ghissue:`1332`: notebook - allow prefixes in URL path. | |
1106 | * :ghissue:`1317`: Very slow traceback construction from Cython extension |
|
1106 | * :ghissue:`1317`: Very slow traceback construction from Cython extension | |
1107 | * :ghissue:`1341`: Don't attempt to tokenize binary files for tracebacks |
|
1107 | * :ghissue:`1341`: Don't attempt to tokenize binary files for tracebacks | |
1108 | * :ghissue:`1300`: Cell Input collapse |
|
1108 | * :ghissue:`1300`: Cell Input collapse | |
1109 | * :ghissue:`1334`: added key handler for control-s to notebook, seems to work pretty well |
|
1109 | * :ghissue:`1334`: added key handler for control-s to notebook, seems to work pretty well | |
1110 | * :ghissue:`1338`: Fix see also in docstrings so API docs build |
|
1110 | * :ghissue:`1338`: Fix see also in docstrings so API docs build | |
1111 | * :ghissue:`1335`: Notebook toolbar UI |
|
1111 | * :ghissue:`1335`: Notebook toolbar UI | |
1112 | * :ghissue:`1299`: made notebook.html extend layout.html |
|
1112 | * :ghissue:`1299`: made notebook.html extend layout.html | |
1113 | * :ghissue:`1318`: make Ctrl-D in qtconsole act same as in terminal (ready to merge) |
|
1113 | * :ghissue:`1318`: make Ctrl-D in qtconsole act same as in terminal (ready to merge) | |
1114 | * :ghissue:`873`: ReST support in notebook frontend |
|
1114 | * :ghissue:`873`: ReST support in notebook frontend | |
1115 | * :ghissue:`1139`: Notebook webkit notification |
|
1115 | * :ghissue:`1139`: Notebook webkit notification | |
1116 | * :ghissue:`1314`: Insertcell |
|
1116 | * :ghissue:`1314`: Insertcell | |
1117 | * :ghissue:`1328`: Coverage |
|
1117 | * :ghissue:`1328`: Coverage | |
1118 | * :ghissue:`1206`: don't preserve fixConsole output in json |
|
1118 | * :ghissue:`1206`: don't preserve fixConsole output in json | |
1119 | * :ghissue:`1330`: Add linewrapping to text cells (new feature in CodeMirror). |
|
1119 | * :ghissue:`1330`: Add linewrapping to text cells (new feature in CodeMirror). | |
1120 | * :ghissue:`1309`: Inoculate clearcmd extension into %reset functionality |
|
1120 | * :ghissue:`1309`: Inoculate clearcmd extension into %reset functionality | |
1121 | * :ghissue:`1327`: Updatecm2 |
|
1121 | * :ghissue:`1327`: Updatecm2 | |
1122 | * :ghissue:`1326`: Removing Ace edit capability. |
|
1122 | * :ghissue:`1326`: Removing Ace edit capability. | |
1123 | * :ghissue:`1325`: forgotten selected_cell -> get_selected_cell |
|
1123 | * :ghissue:`1325`: forgotten selected_cell -> get_selected_cell | |
1124 | * :ghissue:`1316`: Pass subprocess test runners a suitable location for xunit output |
|
1124 | * :ghissue:`1316`: Pass subprocess test runners a suitable location for xunit output | |
1125 | * :ghissue:`1315`: Collect results from subprocess runners and spit out Xunit XML output. |
|
1125 | * :ghissue:`1315`: Collect results from subprocess runners and spit out Xunit XML output. | |
1126 | * :ghissue:`1233`: Update CodeMirror to the latest version |
|
1126 | * :ghissue:`1233`: Update CodeMirror to the latest version | |
1127 | * :ghissue:`1234`: Refactor how the notebook focuses cells |
|
1127 | * :ghissue:`1234`: Refactor how the notebook focuses cells | |
1128 | * :ghissue:`1235`: After upgrading CodeMirror check the status of some bugs |
|
1128 | * :ghissue:`1235`: After upgrading CodeMirror check the status of some bugs | |
1129 | * :ghissue:`1236`: Review how select is called when notebook cells are inserted |
|
1129 | * :ghissue:`1236`: Review how select is called when notebook cells are inserted | |
1130 | * :ghissue:`1303`: Updatecm |
|
1130 | * :ghissue:`1303`: Updatecm | |
1131 | * :ghissue:`1311`: Fixing CM related indentation problems. |
|
1131 | * :ghissue:`1311`: Fixing CM related indentation problems. | |
1132 | * :ghissue:`1304`: controller/server load can disrupt heartbeat |
|
1132 | * :ghissue:`1304`: controller/server load can disrupt heartbeat | |
1133 | * :ghissue:`1312`: minor heartbeat tweaks |
|
1133 | * :ghissue:`1312`: minor heartbeat tweaks | |
1134 | * :ghissue:`1302`: Input parsing with %prun clobbers escapes |
|
1134 | * :ghissue:`1302`: Input parsing with %prun clobbers escapes | |
1135 | * :ghissue:`1306`: Fix %prun input parsing for escaped characters (closes #1302) |
|
1135 | * :ghissue:`1306`: Fix %prun input parsing for escaped characters (closes #1302) | |
1136 | * :ghissue:`1251`: IPython-0.12 can't import map module on Python 3.1 |
|
1136 | * :ghissue:`1251`: IPython-0.12 can't import map module on Python 3.1 | |
1137 | * :ghissue:`1202`: Pyreadline install exclusion for 64 bit windows no longer required, version dependency not correctly specified. |
|
1137 | * :ghissue:`1202`: Pyreadline install exclusion for 64 bit windows no longer required, version dependency not correctly specified. | |
1138 | * :ghissue:`1301`: New "Fix for issue #1202" based on current master. |
|
1138 | * :ghissue:`1301`: New "Fix for issue #1202" based on current master. | |
1139 | * :ghissue:`1242`: changed key map name to match changes to python mode |
|
1139 | * :ghissue:`1242`: changed key map name to match changes to python mode | |
1140 | * :ghissue:`1203`: Fix for issue #1202 |
|
1140 | * :ghissue:`1203`: Fix for issue #1202 | |
1141 | * :ghissue:`1289`: Make autoreload extension work on Python 3. |
|
1141 | * :ghissue:`1289`: Make autoreload extension work on Python 3. | |
1142 | * :ghissue:`1263`: Different 'C-x' for shortcut, 'C-m c' not toCodeCell anymore |
|
1142 | * :ghissue:`1263`: Different 'C-x' for shortcut, 'C-m c' not toCodeCell anymore | |
1143 | * :ghissue:`1259`: Replace "from (.|..) import" with absolute imports. |
|
1143 | * :ghissue:`1259`: Replace "from (.|..) import" with absolute imports. | |
1144 | * :ghissue:`1278`: took a crack at making notebook.html extend layout.html |
|
1144 | * :ghissue:`1278`: took a crack at making notebook.html extend layout.html | |
1145 | * :ghissue:`1210`: Add 'quiet' option to suppress screen output during %prun calls, edited dochelp |
|
1145 | * :ghissue:`1210`: Add 'quiet' option to suppress screen output during %prun calls, edited dochelp | |
1146 | * :ghissue:`1288`: Don't ask for confirmation when stdin isn't available |
|
1146 | * :ghissue:`1288`: Don't ask for confirmation when stdin isn't available | |
1147 | * :ghissue:`1290`: Cell-level cut & paste overwrites multiple cells |
|
1147 | * :ghissue:`1290`: Cell-level cut & paste overwrites multiple cells | |
1148 | * :ghissue:`1291`: Minor, but important fixes to cut/copy/paste. |
|
1148 | * :ghissue:`1291`: Minor, but important fixes to cut/copy/paste. | |
1149 | * :ghissue:`1293`: TaskScheduler.hwm default value |
|
1149 | * :ghissue:`1293`: TaskScheduler.hwm default value | |
1150 | * :ghissue:`1294`: TaskScheduler.hwm default to 1 instead of 0 |
|
1150 | * :ghissue:`1294`: TaskScheduler.hwm default to 1 instead of 0 | |
1151 | * :ghissue:`1281`: in Hub: registration_timeout must be an integer, but heartmonitor.period is CFloat |
|
1151 | * :ghissue:`1281`: in Hub: registration_timeout must be an integer, but heartmonitor.period is CFloat | |
1152 | * :ghissue:`1283`: HeartMonitor.period should be an Integer |
|
1152 | * :ghissue:`1283`: HeartMonitor.period should be an Integer | |
1153 | * :ghissue:`1162`: Allow merge/split adjacent cells in notebook |
|
1153 | * :ghissue:`1162`: Allow merge/split adjacent cells in notebook | |
1154 | * :ghissue:`1264`: Aceify |
|
1154 | * :ghissue:`1264`: Aceify | |
1155 | * :ghissue:`1261`: Mergesplit |
|
1155 | * :ghissue:`1261`: Mergesplit | |
1156 | * :ghissue:`1269`: Another strange input handling error |
|
1156 | * :ghissue:`1269`: Another strange input handling error | |
1157 | * :ghissue:`1284`: a fix for GH 1269 |
|
1157 | * :ghissue:`1284`: a fix for GH 1269 | |
1158 | * :ghissue:`1232`: Dead kernel loop |
|
1158 | * :ghissue:`1232`: Dead kernel loop | |
1159 | * :ghissue:`1279`: ImportError: cannot import name S1 (from logging) |
|
1159 | * :ghissue:`1279`: ImportError: cannot import name S1 (from logging) | |
1160 | * :ghissue:`1276`: notebook menu item to send a KeyboardInterrupt to the kernel |
|
1160 | * :ghissue:`1276`: notebook menu item to send a KeyboardInterrupt to the kernel | |
1161 | * :ghissue:`1213`: BUG: Minor typo in history_console_widget.py |
|
1161 | * :ghissue:`1213`: BUG: Minor typo in history_console_widget.py | |
1162 | * :ghissue:`1248`: IPython notebook doesn't work with lastest version of tornado |
|
1162 | * :ghissue:`1248`: IPython notebook doesn't work with lastest version of tornado | |
1163 | * :ghissue:`1267`: add NoDB for non-recording Hub |
|
1163 | * :ghissue:`1267`: add NoDB for non-recording Hub | |
1164 | * :ghissue:`1222`: allow Reference as callable in map/apply |
|
1164 | * :ghissue:`1222`: allow Reference as callable in map/apply | |
1165 | * :ghissue:`1257`: use self.kernel_manager_class in qtconsoleapp |
|
1165 | * :ghissue:`1257`: use self.kernel_manager_class in qtconsoleapp | |
1166 | * :ghissue:`1220`: Open a new notebook while connecting to an existing kernel (opened by qtconsole or terminal or standalone) |
|
1166 | * :ghissue:`1220`: Open a new notebook while connecting to an existing kernel (opened by qtconsole or terminal or standalone) | |
1167 | * :ghissue:`1253`: set auto_create flag for notebook apps |
|
1167 | * :ghissue:`1253`: set auto_create flag for notebook apps | |
1168 | * :ghissue:`1260`: heartbeat failure on long gil-holding operation |
|
1168 | * :ghissue:`1260`: heartbeat failure on long gil-holding operation | |
1169 | * :ghissue:`1262`: Heartbeat no longer shares the app's Context |
|
1169 | * :ghissue:`1262`: Heartbeat no longer shares the app's Context | |
1170 | * :ghissue:`1225`: SyntaxError display broken in Python 3 |
|
1170 | * :ghissue:`1225`: SyntaxError display broken in Python 3 | |
1171 | * :ghissue:`1229`: Fix display of SyntaxError in Python 3 |
|
1171 | * :ghissue:`1229`: Fix display of SyntaxError in Python 3 | |
1172 | * :ghissue:`1256`: Dewijmoize |
|
1172 | * :ghissue:`1256`: Dewijmoize | |
1173 | * :ghissue:`1246`: Skip tests that require X, when importing pylab results in RuntimeError. |
|
1173 | * :ghissue:`1246`: Skip tests that require X, when importing pylab results in RuntimeError. | |
1174 | * :ghissue:`1250`: Wijmoize |
|
1174 | * :ghissue:`1250`: Wijmoize | |
1175 | * :ghissue:`1244`: can not imput chinese word "ι " , exit right now |
|
1175 | * :ghissue:`1244`: can not imput chinese word "ι " , exit right now | |
1176 | * :ghissue:`1194`: Adding Opera 11 as a compatible browser for ipython notebook |
|
1176 | * :ghissue:`1194`: Adding Opera 11 as a compatible browser for ipython notebook | |
1177 | * :ghissue:`1198`: Kernel Has Died error in Notebook |
|
1177 | * :ghissue:`1198`: Kernel Has Died error in Notebook | |
1178 | * :ghissue:`1211`: serve local files in notebook-dir |
|
1178 | * :ghissue:`1211`: serve local files in notebook-dir | |
1179 | * :ghissue:`1224`: edit text cells on double-click instead of single-click |
|
1179 | * :ghissue:`1224`: edit text cells on double-click instead of single-click | |
1180 | * :ghissue:`1187`: misc notebook: connection file cleanup, first heartbeat, startup flush |
|
1180 | * :ghissue:`1187`: misc notebook: connection file cleanup, first heartbeat, startup flush | |
1181 | * :ghissue:`1207`: fix loadpy duplicating newlines |
|
1181 | * :ghissue:`1207`: fix loadpy duplicating newlines | |
1182 | * :ghissue:`1060`: Always save the .py file to disk next to the .ipynb |
|
1182 | * :ghissue:`1060`: Always save the .py file to disk next to the .ipynb | |
1183 | * :ghissue:`1066`: execute cell in place should preserve the current insertion-point in the notebook |
|
1183 | * :ghissue:`1066`: execute cell in place should preserve the current insertion-point in the notebook | |
1184 | * :ghissue:`1141`: "In" numbers are not invalidated when restarting kernel |
|
1184 | * :ghissue:`1141`: "In" numbers are not invalidated when restarting kernel | |
1185 | * :ghissue:`1231`: pip on OSX tries to install files in /System directory. |
|
1185 | * :ghissue:`1231`: pip on OSX tries to install files in /System directory. | |
1186 | * :ghissue:`1129`: Unified setup.py |
|
1186 | * :ghissue:`1129`: Unified setup.py | |
1187 | * :ghissue:`1199`: Reduce IPython.external.* |
|
1187 | * :ghissue:`1199`: Reduce IPython.external.* | |
1188 | * :ghissue:`1219`: Make all the static files path absolute. |
|
1188 | * :ghissue:`1219`: Make all the static files path absolute. | |
1189 | * :ghissue:`1218`: Added -q option to %prun for suppression of the output, along with editing the dochelp string. |
|
1189 | * :ghissue:`1218`: Added -q option to %prun for suppression of the output, along with editing the dochelp string. | |
1190 | * :ghissue:`1217`: Added -q option to %prun for suppression of the output, along with editing the dochelp string |
|
1190 | * :ghissue:`1217`: Added -q option to %prun for suppression of the output, along with editing the dochelp string | |
1191 | * :ghissue:`1216`: Pdb tab completion does not work in QtConsole |
|
1191 | * :ghissue:`1216`: Pdb tab completion does not work in QtConsole | |
1192 | * :ghissue:`1197`: Interactive shell trying to: from ... import history |
|
1192 | * :ghissue:`1197`: Interactive shell trying to: from ... import history | |
1193 | * :ghissue:`1175`: core.completer: Clean up excessive and unused code. |
|
1193 | * :ghissue:`1175`: core.completer: Clean up excessive and unused code. | |
1194 | * :ghissue:`1208`: should dv.sync_import print failed imports ? |
|
1194 | * :ghissue:`1208`: should dv.sync_import print failed imports ? | |
1195 | * :ghissue:`1186`: payloadpage.py not used by qtconsole |
|
1195 | * :ghissue:`1186`: payloadpage.py not used by qtconsole | |
1196 | * :ghissue:`1204`: double newline from %loadpy in python notebook (at least on mac) |
|
1196 | * :ghissue:`1204`: double newline from %loadpy in python notebook (at least on mac) | |
1197 | * :ghissue:`1192`: Invalid JSON data |
|
1197 | * :ghissue:`1192`: Invalid JSON data | |
1198 | * :ghissue:`1196`: docs: looks like a file path might have been accidentally pasted in the middle of a word |
|
1198 | * :ghissue:`1196`: docs: looks like a file path might have been accidentally pasted in the middle of a word | |
1199 | * :ghissue:`1189`: Right justify of 'in' prompt in variable prompt size configurations |
|
1199 | * :ghissue:`1189`: Right justify of 'in' prompt in variable prompt size configurations | |
1200 | * :ghissue:`1185`: ipython console not work proper with stdout... |
|
1200 | * :ghissue:`1185`: ipython console not work proper with stdout... | |
1201 | * :ghissue:`1191`: profile/startup files not executed with "notebook" |
|
1201 | * :ghissue:`1191`: profile/startup files not executed with "notebook" | |
1202 | * :ghissue:`1190`: Fix link to Chris Fonnesbeck blog post about 0.11 highlights. |
|
1202 | * :ghissue:`1190`: Fix link to Chris Fonnesbeck blog post about 0.11 highlights. | |
1203 | * :ghissue:`1174`: Remove %install_default_config and %install_profiles |
|
1203 | * :ghissue:`1174`: Remove %install_default_config and %install_profiles |
@@ -1,178 +1,178 b'' | |||||
1 | .. _issues_list_4: |
|
1 | .. _issues_list_4: | |
2 |
|
2 | |||
3 | Issues closed in the 4.x development cycle |
|
3 | Issues closed in the 4.x development cycle | |
4 | ========================================== |
|
4 | ========================================== | |
5 |
|
5 | |||
6 |
|
6 | |||
7 | Issues closed in 4.2 |
|
7 | Issues closed in 4.2 | |
8 | -------------------- |
|
8 | -------------------- | |
9 |
|
9 | |||
10 | GitHub stats for 2015/02/02 - 2016/04/20 (since 4.1) |
|
10 | GitHub stats for 2015/02/02 - 2016/04/20 (since 4.1) | |
11 |
|
11 | |||
12 | These lists are automatically generated, and may be incomplete or contain duplicates. |
|
12 | These lists are automatically generated, and may be incomplete or contain duplicates. | |
13 |
|
13 | |||
14 | We closed 10 issues and merged 22 pull requests. |
|
14 | We closed 10 issues and merged 22 pull requests. | |
15 | The full list can be seen `on GitHub <https://github.com/ipython/ipython/issues?q=milestone%3A4.2+>`__ |
|
15 | The full list can be seen `on GitHub <https://github.com/ipython/ipython/issues?q=milestone%3A4.2+>`__ | |
16 |
|
16 | |||
17 | The following 10 authors contributed 27 commits. |
|
17 | The following 10 authors contributed 27 commits. | |
18 |
|
18 | |||
19 | * Benjamin Ragan-Kelley |
|
19 | * Benjamin Ragan-Kelley | |
20 | * Carlos Cordoba |
|
20 | * Carlos Cordoba | |
21 | * GΓΆkhan Karabulut |
|
21 | * GΓΆkhan Karabulut | |
22 | * Jonas Rauber |
|
22 | * Jonas Rauber | |
23 | * Matthias Bussonnier |
|
23 | * Matthias Bussonnier | |
24 | * Paul Ivanov |
|
24 | * Paul Ivanov | |
25 | * Sebastian Bank |
|
25 | * Sebastian Bank | |
26 | * Thomas A Caswell |
|
26 | * Thomas A Caswell | |
27 | * Thomas Kluyver |
|
27 | * Thomas Kluyver | |
28 | * Vincent Woo |
|
28 | * Vincent Woo | |
29 |
|
29 | |||
30 |
|
30 | |||
31 | Issues closed in 4.1 |
|
31 | Issues closed in 4.1 | |
32 | -------------------- |
|
32 | -------------------- | |
33 |
|
33 | |||
34 | GitHub stats for 2015/08/12 - 2016/02/02 (since 4.0.0) |
|
34 | GitHub stats for 2015/08/12 - 2016/02/02 (since 4.0.0) | |
35 |
|
35 | |||
36 | These lists are automatically generated, and may be incomplete or contain duplicates. |
|
36 | These lists are automatically generated, and may be incomplete or contain duplicates. | |
37 |
|
37 | |||
38 | We closed 60 issues and merged 148 pull requests. |
|
38 | We closed 60 issues and merged 148 pull requests. | |
39 | The full list can be seen `on GitHub <https://github.com/ipython/ipython/issues?q=milestone%3A4.1+>`__ |
|
39 | The full list can be seen `on GitHub <https://github.com/ipython/ipython/issues?q=milestone%3A4.1+>`__ | |
40 |
|
40 | |||
41 | The following 52 authors contributed 468 commits. |
|
41 | The following 52 authors contributed 468 commits. | |
42 |
|
42 | |||
43 | * Aaron Meurer |
|
43 | * Aaron Meurer | |
44 | * Alexandre Avanian |
|
44 | * Alexandre Avanian | |
45 | * Anthony Sottile |
|
45 | * Anthony Sottile | |
46 | * Antony Lee |
|
46 | * Antony Lee | |
47 | * Arthur Loder |
|
47 | * Arthur Loder | |
48 | * Ben Kasel |
|
48 | * Ben Kasel | |
49 | * Ben Rousch |
|
49 | * Ben Rousch | |
50 | * Benjamin Ragan-Kelley |
|
50 | * Benjamin Ragan-Kelley | |
51 | * bollwyvl |
|
51 | * bollwyvl | |
52 | * Carol Willing |
|
52 | * Carol Willing | |
53 | * Christopher Roach |
|
53 | * Christopher Roach | |
54 | * Douglas La Rocca |
|
54 | * Douglas La Rocca | |
55 | * Fairly |
|
55 | * Fairly | |
56 | * Fernando Perez |
|
56 | * Fernando Perez | |
57 | * Frank Sachsenheim |
|
57 | * Frank Sachsenheim | |
58 | * Guillaume DOUMENC |
|
58 | * Guillaume DOUMENC | |
59 | * GΓ‘bor Luk |
|
59 | * GΓ‘bor Luk | |
60 | * Hoyt Koepke |
|
60 | * Hoyt Koepke | |
61 | * Ivan Timokhin |
|
61 | * Ivan Timokhin | |
62 | * Jacob Niehus |
|
62 | * Jacob Niehus | |
63 | * JamshedVesuna |
|
63 | * JamshedVesuna | |
64 | * Jan Schulz |
|
64 | * Jan Schulz | |
65 | * Jan-Philip Gehrcke |
|
65 | * Jan-Philip Gehrcke | |
66 | * jc |
|
66 | * jc | |
67 | * Jessica B. Hamrick |
|
67 | * Jessica B. Hamrick | |
68 | * jferrara |
|
68 | * jferrara | |
69 | * John Bohannon |
|
69 | * John Bohannon | |
70 | * John Kirkham |
|
70 | * John Kirkham | |
71 | * Jonathan Frederic |
|
71 | * Jonathan Frederic | |
72 | * Kyle Kelley |
|
72 | * Kyle Kelley | |
73 | * Lev Givon |
|
73 | * Lev Givon | |
74 | * Lilian Besson |
|
74 | * Lilian Besson | |
75 | * lingxz |
|
75 | * lingxz | |
76 | * Matthias Bussonnier |
|
76 | * Matthias Bussonnier | |
77 | * memeplex |
|
77 | * memeplex | |
78 | * Michael Droettboom |
|
78 | * Michael Droettboom | |
79 | * naught101 |
|
79 | * naught101 | |
80 | * Peter Waller |
|
80 | * Peter Waller | |
81 | * Pierre Gerold |
|
81 | * Pierre Gerold | |
82 | * RΓ©my LΓ©one |
|
82 | * RΓ©my LΓ©one | |
83 | * Scott Sanderson |
|
83 | * Scott Sanderson | |
84 | * Shanzhuo Zhang |
|
84 | * Shanzhuo Zhang | |
85 | * Sylvain Corlay |
|
85 | * Sylvain Corlay | |
86 | * Tayfun Sen |
|
86 | * Tayfun Sen | |
87 | * Thomas A Caswell |
|
87 | * Thomas A Caswell | |
88 | * Thomas Ballinger |
|
88 | * Thomas Ballinger | |
89 | * Thomas Kluyver |
|
89 | * Thomas Kluyver | |
90 | * Vincent Legoll |
|
90 | * Vincent Legoll | |
91 | * Wouter Bolsterlee |
|
91 | * Wouter Bolsterlee | |
92 | * xconverge |
|
92 | * xconverge | |
93 | * Yuri Numerov |
|
93 | * Yuri Numerov | |
94 | * Zachary Pincus |
|
94 | * Zachary Pincus | |
95 |
|
95 | |||
96 |
|
96 | |||
97 | Issues closed in 4.0 |
|
97 | Issues closed in 4.0 | |
98 | -------------------- |
|
98 | -------------------- | |
99 |
|
99 | |||
100 |
|
100 | |||
101 | GitHub stats for 2015/02/27 - 2015/08/11 (since 3.0) |
|
101 | GitHub stats for 2015/02/27 - 2015/08/11 (since 3.0) | |
102 |
|
102 | |||
103 | These lists are automatically generated, and may be incomplete or contain duplicates. |
|
103 | These lists are automatically generated, and may be incomplete or contain duplicates. | |
104 |
|
104 | |||
105 | We closed 35 issues and merged 125 pull requests. |
|
105 | We closed 35 issues and merged 125 pull requests. | |
106 |
The full list can be seen `on GitHub <https://github.com/ipython/ipython/milestone/ |
|
106 | The full list can be seen `on GitHub <https://github.com/ipython/ipython/milestone/21>`__ | |
107 |
|
107 | |||
108 | The following 69 authors contributed 1186 commits. |
|
108 | The following 69 authors contributed 1186 commits. | |
109 |
|
109 | |||
110 | * Abe Guerra |
|
110 | * Abe Guerra | |
111 | * Adal Chiriliuc |
|
111 | * Adal Chiriliuc | |
112 | * Alexander Belopolsky |
|
112 | * Alexander Belopolsky | |
113 | * Andrew Murray |
|
113 | * Andrew Murray | |
114 | * Antonio Russo |
|
114 | * Antonio Russo | |
115 | * Benjamin Ragan-Kelley |
|
115 | * Benjamin Ragan-Kelley | |
116 | * BjΓΆrn Linse |
|
116 | * BjΓΆrn Linse | |
117 | * Brian Drawert |
|
117 | * Brian Drawert | |
118 | * chebee7i |
|
118 | * chebee7i | |
119 | * Daniel Rocco |
|
119 | * Daniel Rocco | |
120 | * Donny Winston |
|
120 | * Donny Winston | |
121 | * Drekin |
|
121 | * Drekin | |
122 | * Erik Hvatum |
|
122 | * Erik Hvatum | |
123 | * Fernando Perez |
|
123 | * Fernando Perez | |
124 | * Francisco de la PeΓ±a |
|
124 | * Francisco de la PeΓ±a | |
125 | * Frazer McLean |
|
125 | * Frazer McLean | |
126 | * Gareth Elston |
|
126 | * Gareth Elston | |
127 | * Gert-Ludwig Ingold |
|
127 | * Gert-Ludwig Ingold | |
128 | * Giuseppe Venturini |
|
128 | * Giuseppe Venturini | |
129 | * Ian Barfield |
|
129 | * Ian Barfield | |
130 | * Ivan Pozdeev |
|
130 | * Ivan Pozdeev | |
131 | * Jakob Gager |
|
131 | * Jakob Gager | |
132 | * Jan Schulz |
|
132 | * Jan Schulz | |
133 | * Jason Grout |
|
133 | * Jason Grout | |
134 | * Jeff Hussmann |
|
134 | * Jeff Hussmann | |
135 | * Jessica B. Hamrick |
|
135 | * Jessica B. Hamrick | |
136 | * Joe Borg |
|
136 | * Joe Borg | |
137 | * Joel Nothman |
|
137 | * Joel Nothman | |
138 | * Johan Forsberg |
|
138 | * Johan Forsberg | |
139 | * Jonathan Frederic |
|
139 | * Jonathan Frederic | |
140 | * Justin Tyberg |
|
140 | * Justin Tyberg | |
141 | * Koen van Besien |
|
141 | * Koen van Besien | |
142 | * Kyle Kelley |
|
142 | * Kyle Kelley | |
143 | * Lorena Pantano |
|
143 | * Lorena Pantano | |
144 | * Lucretiel |
|
144 | * Lucretiel | |
145 | * Marin Gilles |
|
145 | * Marin Gilles | |
146 | * mashenjun |
|
146 | * mashenjun | |
147 | * Mathieu |
|
147 | * Mathieu | |
148 | * Matthias Bussonnier |
|
148 | * Matthias Bussonnier | |
149 | * Merlijn van Deen |
|
149 | * Merlijn van Deen | |
150 | * Mikhail Korobov |
|
150 | * Mikhail Korobov | |
151 | * Naveen Nathan |
|
151 | * Naveen Nathan | |
152 | * Nicholas Bollweg |
|
152 | * Nicholas Bollweg | |
153 | * nottaanibot |
|
153 | * nottaanibot | |
154 | * Omer Katz |
|
154 | * Omer Katz | |
155 | * onesandzeroes |
|
155 | * onesandzeroes | |
156 | * Patrick Snape |
|
156 | * Patrick Snape | |
157 | * patter001 |
|
157 | * patter001 | |
158 | * Peter Parente |
|
158 | * Peter Parente | |
159 | * Pietro Battiston |
|
159 | * Pietro Battiston | |
160 | * RickWinter |
|
160 | * RickWinter | |
161 | * Robert Smith |
|
161 | * Robert Smith | |
162 | * Ryan Nelson |
|
162 | * Ryan Nelson | |
163 | * Scott Sanderson |
|
163 | * Scott Sanderson | |
164 | * Sebastiaan Mathot |
|
164 | * Sebastiaan Mathot | |
165 | * Sylvain Corlay |
|
165 | * Sylvain Corlay | |
166 | * thethomask |
|
166 | * thethomask | |
167 | * Thomas A Caswell |
|
167 | * Thomas A Caswell | |
168 | * Thomas Adriaan Hellinger |
|
168 | * Thomas Adriaan Hellinger | |
169 | * Thomas Kluyver |
|
169 | * Thomas Kluyver | |
170 | * Tianhui Michael Li |
|
170 | * Tianhui Michael Li | |
171 | * tmtabor |
|
171 | * tmtabor | |
172 | * unknown |
|
172 | * unknown | |
173 | * Victor Ramirez |
|
173 | * Victor Ramirez | |
174 | * Volker Braun |
|
174 | * Volker Braun | |
175 | * Wieland Hoffmann |
|
175 | * Wieland Hoffmann | |
176 | * Yuval Langer |
|
176 | * Yuval Langer | |
177 | * ZoltΓ‘n VΓΆrΓΆs |
|
177 | * ZoltΓ‘n VΓΆrΓΆs | |
178 | * Γlie Michel |
|
178 | * Γlie Michel |
@@ -1,391 +1,391 b'' | |||||
1 | ============ |
|
1 | ============ | |
2 | 3.x Series |
|
2 | 3.x Series | |
3 | ============ |
|
3 | ============ | |
4 |
|
4 | |||
5 | IPython 3.2.3 |
|
5 | IPython 3.2.3 | |
6 | ============= |
|
6 | ============= | |
7 |
|
7 | |||
8 | Fixes compatibility with Python 3.4.4. |
|
8 | Fixes compatibility with Python 3.4.4. | |
9 |
|
9 | |||
10 | IPython 3.2.2 |
|
10 | IPython 3.2.2 | |
11 | ============= |
|
11 | ============= | |
12 |
|
12 | |||
13 | Address vulnerabilities when files have maliciously crafted filenames (CVE-2015-6938), |
|
13 | Address vulnerabilities when files have maliciously crafted filenames (CVE-2015-6938), | |
14 | or vulnerability when opening text files with malicious binary content (CVE pending). |
|
14 | or vulnerability when opening text files with malicious binary content (CVE pending). | |
15 |
|
15 | |||
16 | Users are **strongly** encouraged to upgrade immediately. |
|
16 | Users are **strongly** encouraged to upgrade immediately. | |
17 | There are also a few small unicode and nbconvert-related fixes. |
|
17 | There are also a few small unicode and nbconvert-related fixes. | |
18 |
|
18 | |||
19 |
|
19 | |||
20 | IPython 3.2.1 |
|
20 | IPython 3.2.1 | |
21 | ============= |
|
21 | ============= | |
22 |
|
22 | |||
23 | IPython 3.2.1 is a small bugfix release, primarily for cross-site security fixes in the notebook. |
|
23 | IPython 3.2.1 is a small bugfix release, primarily for cross-site security fixes in the notebook. | |
24 | Users are **strongly** encouraged to upgrade immediately. |
|
24 | Users are **strongly** encouraged to upgrade immediately. | |
25 | There are also a few small unicode and nbconvert-related fixes. |
|
25 | There are also a few small unicode and nbconvert-related fixes. | |
26 |
|
26 | |||
27 | See :ref:`issues_list_3` for details. |
|
27 | See :ref:`issues_list_3` for details. | |
28 |
|
28 | |||
29 |
|
29 | |||
30 | IPython 3.2 |
|
30 | IPython 3.2 | |
31 | =========== |
|
31 | =========== | |
32 |
|
32 | |||
33 | IPython 3.2 contains important security fixes. Users are **strongly** encouraged to upgrade immediately. |
|
33 | IPython 3.2 contains important security fixes. Users are **strongly** encouraged to upgrade immediately. | |
34 |
|
34 | |||
35 | Highlights: |
|
35 | Highlights: | |
36 |
|
36 | |||
37 | - Address cross-site scripting vulnerabilities CVE-2015-4706, CVE-2015-4707 |
|
37 | - Address cross-site scripting vulnerabilities CVE-2015-4706, CVE-2015-4707 | |
38 | - A security improvement that set the secure attribute to login cookie to prevent them to be sent over http |
|
38 | - A security improvement that set the secure attribute to login cookie to prevent them to be sent over http | |
39 | - Revert the face color of matplotlib axes in the inline backend to not be transparent. |
|
39 | - Revert the face color of matplotlib axes in the inline backend to not be transparent. | |
40 | - Enable mathjax safe mode by default |
|
40 | - Enable mathjax safe mode by default | |
41 | - Fix XSS vulnerability in JSON error messages |
|
41 | - Fix XSS vulnerability in JSON error messages | |
42 | - Various widget-related fixes |
|
42 | - Various widget-related fixes | |
43 |
|
43 | |||
44 | See :ref:`issues_list_3` for details. |
|
44 | See :ref:`issues_list_3` for details. | |
45 |
|
45 | |||
46 |
|
46 | |||
47 | IPython 3.1 |
|
47 | IPython 3.1 | |
48 | =========== |
|
48 | =========== | |
49 |
|
49 | |||
50 | Released April 3, 2015 |
|
50 | Released April 3, 2015 | |
51 |
|
51 | |||
52 | The first 3.x bugfix release, with 33 contributors and 344 commits. |
|
52 | The first 3.x bugfix release, with 33 contributors and 344 commits. | |
53 | This primarily includes bugfixes to notebook layout and focus problems. |
|
53 | This primarily includes bugfixes to notebook layout and focus problems. | |
54 |
|
54 | |||
55 |
|
55 | |||
56 | Highlights: |
|
56 | Highlights: | |
57 |
|
57 | |||
58 | - Various focus jumping and scrolling fixes in the notebook. |
|
58 | - Various focus jumping and scrolling fixes in the notebook. | |
59 | - Various message ordering and widget fixes in the notebook. |
|
59 | - Various message ordering and widget fixes in the notebook. | |
60 | - Images in markdown and output are confined to the notebook width. |
|
60 | - Images in markdown and output are confined to the notebook width. | |
61 | An `.unconfined` CSS class is added to disable this behavior per-image. |
|
61 | An `.unconfined` CSS class is added to disable this behavior per-image. | |
62 | The resize handle on output images is removed. |
|
62 | The resize handle on output images is removed. | |
63 | - Improved ordering of tooltip content for Python functions, putting the signature at the top. |
|
63 | - Improved ordering of tooltip content for Python functions, putting the signature at the top. | |
64 | - Fix UnicodeErrors when displaying some objects with unicode reprs on Python 2. |
|
64 | - Fix UnicodeErrors when displaying some objects with unicode reprs on Python 2. | |
65 | - Set the kernel's working directory to the notebook directory when running ``nbconvert --execute``, |
|
65 | - Set the kernel's working directory to the notebook directory when running ``nbconvert --execute``, | |
66 | so that behavior matches the live notebook. |
|
66 | so that behavior matches the live notebook. | |
67 | - Allow setting custom SSL options for the tornado server with ``NotebookApp.ssl_options``, |
|
67 | - Allow setting custom SSL options for the tornado server with ``NotebookApp.ssl_options``, | |
68 | and protect against POODLE with default settings by disabling SSLv3. |
|
68 | and protect against POODLE with default settings by disabling SSLv3. | |
69 | - Fix memory leak in the IPython.parallel Controller on Python 3. |
|
69 | - Fix memory leak in the IPython.parallel Controller on Python 3. | |
70 |
|
70 | |||
71 |
|
71 | |||
72 | See :ref:`issues_list_3` for details. |
|
72 | See :ref:`issues_list_3` for details. | |
73 |
|
73 | |||
74 |
|
74 | |||
75 | Release 3.0 |
|
75 | Release 3.0 | |
76 | =========== |
|
76 | =========== | |
77 |
|
77 | |||
78 | Released February 27, 2015 |
|
78 | Released February 27, 2015 | |
79 |
|
79 | |||
80 | This is a really big release. Over 150 contributors, and almost 6000 commits in a bit under a year. |
|
80 | This is a really big release. Over 150 contributors, and almost 6000 commits in a bit under a year. | |
81 | Support for languages other than Python is greatly improved, |
|
81 | Support for languages other than Python is greatly improved, | |
82 | notebook UI has been significantly redesigned, |
|
82 | notebook UI has been significantly redesigned, | |
83 | and a lot of improvement has happened in the experimental interactive widgets. |
|
83 | and a lot of improvement has happened in the experimental interactive widgets. | |
84 | The message protocol and document format have both been updated, |
|
84 | The message protocol and document format have both been updated, | |
85 | while maintaining better compatibility with previous versions than prior updates. |
|
85 | while maintaining better compatibility with previous versions than prior updates. | |
86 | The notebook webapp now enables editing of any text file, and even |
|
86 | The notebook webapp now enables editing of any text file, and even | |
87 | a web-based terminal (on Unix platforms). |
|
87 | a web-based terminal (on Unix platforms). | |
88 |
|
88 | |||
89 | 3.x will be the last monolithic release of IPython, |
|
89 | 3.x will be the last monolithic release of IPython, | |
90 | as the next release cycle will see the growing project split into its Python-specific and language-agnostic components. |
|
90 | as the next release cycle will see the growing project split into its Python-specific and language-agnostic components. | |
91 | Language-agnostic projects (notebook, qtconsole, etc.) will move under the umbrella of the new Project Jupyter name, |
|
91 | Language-agnostic projects (notebook, qtconsole, etc.) will move under the umbrella of the new Project Jupyter name, | |
92 | while Python-specific projects (interactive Python shell, Python kernel, IPython.parallel) |
|
92 | while Python-specific projects (interactive Python shell, Python kernel, IPython.parallel) | |
93 | will remain under IPython, and be split into a few smaller packages. |
|
93 | will remain under IPython, and be split into a few smaller packages. | |
94 | To reflect this, IPython is in a bit of a transition state. |
|
94 | To reflect this, IPython is in a bit of a transition state. | |
95 | The logo on the notebook is now the Jupyter logo. |
|
95 | The logo on the notebook is now the Jupyter logo. | |
96 | When installing kernels system-wide, they go in a `jupyter` directory. |
|
96 | When installing kernels system-wide, they go in a `jupyter` directory. | |
97 | We are going to do our best to ease this transition for users and developers. |
|
97 | We are going to do our best to ease this transition for users and developers. | |
98 |
|
98 | |||
99 | Big changes are ahead. |
|
99 | Big changes are ahead. | |
100 |
|
100 | |||
101 |
|
101 | |||
102 | Using different kernels |
|
102 | Using different kernels | |
103 | ----------------------- |
|
103 | ----------------------- | |
104 |
|
104 | |||
105 | .. image:: ../_images/kernel_selector_screenshot.png |
|
105 | .. image:: ../_images/kernel_selector_screenshot.png | |
106 | :alt: Screenshot of 'new' dropdown showing different kernels |
|
106 | :alt: Screenshot of 'new' dropdown showing different kernels | |
107 | :align: center |
|
107 | :align: center | |
108 |
|
108 | |||
109 | You can now choose a kernel for a notebook within the user interface, rather |
|
109 | You can now choose a kernel for a notebook within the user interface, rather | |
110 | than starting up a separate notebook server for each kernel you want to use. The |
|
110 | than starting up a separate notebook server for each kernel you want to use. The | |
111 | syntax highlighting adapts to match the language you're working in. |
|
111 | syntax highlighting adapts to match the language you're working in. | |
112 |
|
112 | |||
113 | Information about the kernel is stored in the notebook file, so when you open a |
|
113 | Information about the kernel is stored in the notebook file, so when you open a | |
114 | notebook, it will automatically start the correct kernel. |
|
114 | notebook, it will automatically start the correct kernel. | |
115 |
|
115 | |||
116 | It is also easier to use the Qt console and the terminal console with other |
|
116 | It is also easier to use the Qt console and the terminal console with other | |
117 | kernels, using the --kernel flag:: |
|
117 | kernels, using the --kernel flag:: | |
118 |
|
118 | |||
119 | ipython qtconsole --kernel bash |
|
119 | ipython qtconsole --kernel bash | |
120 | ipython console --kernel bash |
|
120 | ipython console --kernel bash | |
121 |
|
121 | |||
122 | # To list available kernels |
|
122 | # To list available kernels | |
123 | ipython kernelspec list |
|
123 | ipython kernelspec list | |
124 |
|
124 | |||
125 | Kernel authors should see :ref:`kernelspecs` for how to register their kernels |
|
125 | Kernel authors should see :ref:`kernelspecs` for how to register their kernels | |
126 | with IPython so that these mechanisms work. |
|
126 | with IPython so that these mechanisms work. | |
127 |
|
127 | |||
128 | Typing unicode identifiers |
|
128 | Typing unicode identifiers | |
129 | -------------------------- |
|
129 | -------------------------- | |
130 |
|
130 | |||
131 | .. image:: /_images/unicode_completion.png |
|
131 | .. image:: /_images/unicode_completion.png | |
132 |
|
132 | |||
133 | Complex expressions can be much cleaner when written with a wider choice of |
|
133 | Complex expressions can be much cleaner when written with a wider choice of | |
134 | characters. Python 3 allows unicode identifiers, and IPython 3 makes it easier |
|
134 | characters. Python 3 allows unicode identifiers, and IPython 3 makes it easier | |
135 | to type those, using a feature from Julia. Type a backslash followed by a LaTeX |
|
135 | to type those, using a feature from Julia. Type a backslash followed by a LaTeX | |
136 | style short name, such as ``\alpha``. Press tab, and it will turn into Ξ±. |
|
136 | style short name, such as ``\alpha``. Press tab, and it will turn into Ξ±. | |
137 |
|
137 | |||
138 | Widget migration guide |
|
138 | Widget migration guide | |
139 | ---------------------- |
|
139 | ---------------------- | |
140 | The widget framework has a lot of backwards incompatible changes. |
|
140 | The widget framework has a lot of backwards incompatible changes. | |
141 | For information about migrating widget notebooks and custom widgets to 3.0 refer |
|
141 | For information about migrating widget notebooks and custom widgets to 3.0 refer | |
142 | to the :doc:`widget migration guide<version3_widget_migration>`. |
|
142 | to the :doc:`widget migration guide<version3_widget_migration>`. | |
143 |
|
143 | |||
144 | Other new features |
|
144 | Other new features | |
145 | ------------------ |
|
145 | ------------------ | |
146 |
|
146 | |||
147 | * :class:`~.TextWidget` and :class:`~.TextareaWidget` objects now include a |
|
147 | * :class:`~.TextWidget` and :class:`~.TextareaWidget` objects now include a | |
148 | ``placeholder`` attribute, for displaying placeholder text before the |
|
148 | ``placeholder`` attribute, for displaying placeholder text before the | |
149 | user has typed anything. |
|
149 | user has typed anything. | |
150 |
|
150 | |||
151 | * The :magic:`load` magic can now find the source for objects in the user namespace. |
|
151 | * The :magic:`load` magic can now find the source for objects in the user namespace. | |
152 | To enable searching the namespace, use the ``-n`` option. |
|
152 | To enable searching the namespace, use the ``-n`` option. | |
153 |
|
153 | |||
154 | .. sourcecode:: ipython |
|
154 | .. sourcecode:: ipython | |
155 |
|
155 | |||
156 | In [1]: %load -n my_module.some_function |
|
156 | In [1]: %load -n my_module.some_function | |
157 |
|
157 | |||
158 | * :class:`~.DirectView` objects have a new :meth:`~.DirectView.use_cloudpickle` |
|
158 | * :class:`~.DirectView` objects have a new :meth:`~.DirectView.use_cloudpickle` | |
159 | method, which works like ``view.use_dill()``, but causes the ``cloudpickle`` |
|
159 | method, which works like ``view.use_dill()``, but causes the ``cloudpickle`` | |
160 | module from PiCloud's `cloud`__ library to be used rather than dill or the |
|
160 | module from PiCloud's `cloud`__ library to be used rather than dill or the | |
161 | builtin pickle module. |
|
161 | builtin pickle module. | |
162 |
|
162 | |||
163 | __ https://pypi.python.org/pypi/cloud |
|
163 | __ https://pypi.python.org/pypi/cloud | |
164 |
|
164 | |||
165 | * Added a .ipynb exporter to nbconvert. It can be used by passing `--to notebook` |
|
165 | * Added a .ipynb exporter to nbconvert. It can be used by passing `--to notebook` | |
166 | as a commandline argument to nbconvert. |
|
166 | as a commandline argument to nbconvert. | |
167 |
|
167 | |||
168 | * New nbconvert preprocessor called :class:`~.ClearOutputPreprocessor`. This |
|
168 | * New nbconvert preprocessor called :class:`~.ClearOutputPreprocessor`. This | |
169 | clears the output from IPython notebooks. |
|
169 | clears the output from IPython notebooks. | |
170 |
|
170 | |||
171 | * New preprocessor for nbconvert that executes all the code cells in a notebook. |
|
171 | * New preprocessor for nbconvert that executes all the code cells in a notebook. | |
172 | To run a notebook and save its output in a new notebook:: |
|
172 | To run a notebook and save its output in a new notebook:: | |
173 |
|
173 | |||
174 | ipython nbconvert InputNotebook --ExecutePreprocessor.enabled=True --to notebook --output Executed |
|
174 | ipython nbconvert InputNotebook --ExecutePreprocessor.enabled=True --to notebook --output Executed | |
175 |
|
175 | |||
176 | * Consecutive stream (stdout/stderr) output is merged into a single output |
|
176 | * Consecutive stream (stdout/stderr) output is merged into a single output | |
177 | in the notebook document. |
|
177 | in the notebook document. | |
178 | Previously, all output messages were preserved as separate output fields in the JSON. |
|
178 | Previously, all output messages were preserved as separate output fields in the JSON. | |
179 | Now, the same merge is applied to the stored output as the displayed output, |
|
179 | Now, the same merge is applied to the stored output as the displayed output, | |
180 | improving document load time for notebooks with many small outputs. |
|
180 | improving document load time for notebooks with many small outputs. | |
181 |
|
181 | |||
182 | * ``NotebookApp.webapp_settings`` is deprecated and replaced with |
|
182 | * ``NotebookApp.webapp_settings`` is deprecated and replaced with | |
183 | the more informatively named ``NotebookApp.tornado_settings``. |
|
183 | the more informatively named ``NotebookApp.tornado_settings``. | |
184 |
|
184 | |||
185 | * Using :magic:`timeit` prints warnings if there is atleast a 4x difference in timings |
|
185 | * Using :magic:`timeit` prints warnings if there is atleast a 4x difference in timings | |
186 | between the slowest and fastest runs, since this might meant that the multiple |
|
186 | between the slowest and fastest runs, since this might meant that the multiple | |
187 | runs are not independent of one another. |
|
187 | runs are not independent of one another. | |
188 |
|
188 | |||
189 | * It's now possible to provide mechanisms to integrate IPython with other event |
|
189 | * It's now possible to provide mechanisms to integrate IPython with other event | |
190 | loops, in addition to the ones we already support. This lets you run GUI code |
|
190 | loops, in addition to the ones we already support. This lets you run GUI code | |
191 | in IPython with an interactive prompt, and to embed the IPython |
|
191 | in IPython with an interactive prompt, and to embed the IPython | |
192 | kernel in GUI applications. See :doc:`/config/eventloops` for details. As part |
|
192 | kernel in GUI applications. See :doc:`/config/eventloops` for details. As part | |
193 | of this, the direct ``enable_*`` and ``disable_*`` functions for various GUIs |
|
193 | of this, the direct ``enable_*`` and ``disable_*`` functions for various GUIs | |
194 | in :mod:`IPython.lib.inputhook` have been deprecated in favour of |
|
194 | in :mod:`IPython.lib.inputhook` have been deprecated in favour of | |
195 | :meth:`~.InputHookManager.enable_gui` and :meth:`~.InputHookManager.disable_gui`. |
|
195 | :meth:`~.InputHookManager.enable_gui` and :meth:`~.InputHookManager.disable_gui`. | |
196 |
|
196 | |||
197 | * A ``ScrollManager`` was added to the notebook. The ``ScrollManager`` controls how the notebook document is scrolled using keyboard. Users can inherit from the ``ScrollManager`` or ``TargetScrollManager`` to customize how their notebook scrolls. The default ``ScrollManager`` is the ``SlideScrollManager``, which tries to scroll to the nearest slide or sub-slide cell. |
|
197 | * A ``ScrollManager`` was added to the notebook. The ``ScrollManager`` controls how the notebook document is scrolled using keyboard. Users can inherit from the ``ScrollManager`` or ``TargetScrollManager`` to customize how their notebook scrolls. The default ``ScrollManager`` is the ``SlideScrollManager``, which tries to scroll to the nearest slide or sub-slide cell. | |
198 |
|
198 | |||
199 | * The function :func:`~IPython.html.widgets.interaction.interact_manual` has been |
|
199 | * The function :func:`~IPython.html.widgets.interaction.interact_manual` has been | |
200 | added which behaves similarly to :func:`~IPython.html.widgets.interaction.interact`, |
|
200 | added which behaves similarly to :func:`~IPython.html.widgets.interaction.interact`, | |
201 | but adds a button to explicitly run the interacted-with function, rather than |
|
201 | but adds a button to explicitly run the interacted-with function, rather than | |
202 | doing it automatically for every change of the parameter widgets. This should |
|
202 | doing it automatically for every change of the parameter widgets. This should | |
203 | be useful for long-running functions. |
|
203 | be useful for long-running functions. | |
204 |
|
204 | |||
205 | * The ``%cython`` magic is now part of the Cython module. Use `%load_ext Cython` with a version of Cython >= 0.21 to have access to the magic now. |
|
205 | * The ``%cython`` magic is now part of the Cython module. Use `%load_ext Cython` with a version of Cython >= 0.21 to have access to the magic now. | |
206 |
|
206 | |||
207 | * The Notebook application now offers integrated terminals on Unix platforms, |
|
207 | * The Notebook application now offers integrated terminals on Unix platforms, | |
208 | intended for when it is used on a remote server. To enable these, install |
|
208 | intended for when it is used on a remote server. To enable these, install | |
209 | the ``terminado`` Python package. |
|
209 | the ``terminado`` Python package. | |
210 |
|
210 | |||
211 | * The Notebook application can now edit any plain text files, via a full-page CodeMirror instance. |
|
211 | * The Notebook application can now edit any plain text files, via a full-page CodeMirror instance. | |
212 |
|
212 | |||
213 | * Setting the default highlighting language for nbconvert with the config option |
|
213 | * Setting the default highlighting language for nbconvert with the config option | |
214 | ``NbConvertBase.default_language`` is deprecated. Nbconvert now respects |
|
214 | ``NbConvertBase.default_language`` is deprecated. Nbconvert now respects | |
215 | metadata stored in the :ref:`kernel spec <kernelspecs>`. |
|
215 | metadata stored in the :ref:`kernel spec <kernelspecs>`. | |
216 |
|
216 | |||
217 | * IPython can now be configured systemwide, with files in :file:`/etc/ipython` |
|
217 | * IPython can now be configured systemwide, with files in :file:`/etc/ipython` | |
218 | or :file:`/usr/local/etc/ipython` on Unix systems, |
|
218 | or :file:`/usr/local/etc/ipython` on Unix systems, | |
219 | or :file:`{%PROGRAMDATA%}\\ipython` on Windows. |
|
219 | or :file:`{%PROGRAMDATA%}\\ipython` on Windows. | |
220 |
|
220 | |||
221 | * Added support for configurable user-supplied `Jinja |
|
221 | * Added support for configurable user-supplied `Jinja | |
222 | <http://jinja.pocoo.org/>`_ HTML templates for the notebook. Paths to |
|
222 | <http://jinja.pocoo.org/>`_ HTML templates for the notebook. Paths to | |
223 | directories containing template files can be specified via |
|
223 | directories containing template files can be specified via | |
224 | ``NotebookApp.extra_template_paths``. User-supplied template directories |
|
224 | ``NotebookApp.extra_template_paths``. User-supplied template directories | |
225 | searched first by the notebook, making it possible to replace existing |
|
225 | searched first by the notebook, making it possible to replace existing | |
226 | templates with your own files. |
|
226 | templates with your own files. | |
227 |
|
227 | |||
228 | For example, to replace the notebook's built-in ``error.html`` with your own, |
|
228 | For example, to replace the notebook's built-in ``error.html`` with your own, | |
229 | create a directory like ``/home/my_templates`` and put your override template |
|
229 | create a directory like ``/home/my_templates`` and put your override template | |
230 | at ``/home/my_templates/error.html``. To start the notebook with your custom |
|
230 | at ``/home/my_templates/error.html``. To start the notebook with your custom | |
231 | error page enabled, you would run:: |
|
231 | error page enabled, you would run:: | |
232 |
|
232 | |||
233 | ipython notebook '--extra_template_paths=["/home/my_templates/"]' |
|
233 | ipython notebook '--extra_template_paths=["/home/my_templates/"]' | |
234 |
|
234 | |||
235 | It's also possible to override a template while also `inheriting |
|
235 | It's also possible to override a template while also `inheriting | |
236 | <http://jinja.pocoo.org/docs/dev/templates/#template-inheritance>`_ from that |
|
236 | <http://jinja.pocoo.org/docs/dev/templates/#template-inheritance>`_ from that | |
237 | template, by prepending ``templates/`` to the ``{% extends %}`` target of |
|
237 | template, by prepending ``templates/`` to the ``{% extends %}`` target of | |
238 | your child template. This is useful when you only want to override a |
|
238 | your child template. This is useful when you only want to override a | |
239 | specific block of a template. For example, to add additional CSS to the |
|
239 | specific block of a template. For example, to add additional CSS to the | |
240 | built-in ``error.html``, you might create an override that looks like:: |
|
240 | built-in ``error.html``, you might create an override that looks like:: | |
241 |
|
241 | |||
242 | {% extends "templates/error.html" %} |
|
242 | {% extends "templates/error.html" %} | |
243 |
|
243 | |||
244 | {% block stylesheet %} |
|
244 | {% block stylesheet %} | |
245 | {{super()}} |
|
245 | {{super()}} | |
246 | <style type="text/css"> |
|
246 | <style type="text/css"> | |
247 | /* My Awesome CSS */ |
|
247 | /* My Awesome CSS */ | |
248 | </style> |
|
248 | </style> | |
249 | {% endblock %} |
|
249 | {% endblock %} | |
250 |
|
250 | |||
251 | * Added a widget persistence API. This allows you to persist your notebooks interactive widgets. |
|
251 | * Added a widget persistence API. This allows you to persist your notebooks interactive widgets. | |
252 | Two levels of control are provided: |
|
252 | Two levels of control are provided: | |
253 | 1. Higher level- ``WidgetManager.set_state_callbacks`` allows you to register callbacks for loading and saving widget state. The callbacks you register are automatically called when necessary. |
|
253 | 1. Higher level- ``WidgetManager.set_state_callbacks`` allows you to register callbacks for loading and saving widget state. The callbacks you register are automatically called when necessary. | |
254 | 2. Lower level- the ``WidgetManager`` Javascript class now has ``get_state`` and ``set_state`` methods that allow you to get and set the state of the widget runtime. |
|
254 | 2. Lower level- the ``WidgetManager`` Javascript class now has ``get_state`` and ``set_state`` methods that allow you to get and set the state of the widget runtime. | |
255 |
|
255 | |||
256 | Example code for persisting your widget state to session data:: |
|
256 | Example code for persisting your widget state to session data:: | |
257 |
|
257 | |||
258 | %%javascript |
|
258 | %%javascript | |
259 | require(['widgets/js/manager'], function(manager) { |
|
259 | require(['widgets/js/manager'], function(manager) { | |
260 | manager.WidgetManager.set_state_callbacks(function() { // Load |
|
260 | manager.WidgetManager.set_state_callbacks(function() { // Load | |
261 | return JSON.parse(sessionStorage.widgets_state || '{}'); |
|
261 | return JSON.parse(sessionStorage.widgets_state || '{}'); | |
262 | }, function(state) { // Save |
|
262 | }, function(state) { // Save | |
263 | sessionStorage.widgets_state = JSON.stringify(state); |
|
263 | sessionStorage.widgets_state = JSON.stringify(state); | |
264 | }); |
|
264 | }); | |
265 | }); |
|
265 | }); | |
266 |
|
266 | |||
267 | * Enhanced support for :magic:`env` magic. As before, :magic:`env` with no |
|
267 | * Enhanced support for :magic:`env` magic. As before, :magic:`env` with no | |
268 | arguments displays all environment variables and values. Additionally, |
|
268 | arguments displays all environment variables and values. Additionally, | |
269 | :magic:`env` can be used to get or set individual environment variables. To |
|
269 | :magic:`env` can be used to get or set individual environment variables. To | |
270 | display an individual value, use the `%env var` syntax. To set a value, use |
|
270 | display an individual value, use the `%env var` syntax. To set a value, use | |
271 | `env var val` or `env var=val`. Python value expansion using `$` works as usual. |
|
271 | `env var val` or `env var=val`. Python value expansion using `$` works as usual. | |
272 |
|
272 | |||
273 |
|
273 | |||
274 | Backwards incompatible changes |
|
274 | Backwards incompatible changes | |
275 | ------------------------------ |
|
275 | ------------------------------ | |
276 |
|
276 | |||
277 | * The :ref:`message protocol <messaging>` has been updated from version 4 to version 5. |
|
277 | * The :ref:`message protocol <messaging>` has been updated from version 4 to version 5. | |
278 | Adapters are included, so IPython frontends can still talk to kernels that |
|
278 | Adapters are included, so IPython frontends can still talk to kernels that | |
279 | implement protocol version 4. |
|
279 | implement protocol version 4. | |
280 |
|
280 | |||
281 | * The notebook format has been updated from version 3 to version 4. |
|
281 | * The notebook format has been updated from version 3 to version 4. | |
282 | Read-only support for v4 notebooks has been backported to IPython 2.4. |
|
282 | Read-only support for v4 notebooks has been backported to IPython 2.4. | |
283 | Notable changes: |
|
283 | Notable changes: | |
284 |
|
284 | |||
285 | * heading cells are removed in favor or markdown headings |
|
285 | * heading cells are removed in favor or markdown headings | |
286 | * notebook outputs and output messages are more consistent with each other |
|
286 | * notebook outputs and output messages are more consistent with each other | |
287 | * use :func:`IPython.nbformat.read` and :func:`~IPython.nbformat.write` |
|
287 | * use :func:`IPython.nbformat.read` and :func:`~IPython.nbformat.write` | |
288 | to read and write notebook files |
|
288 | to read and write notebook files | |
289 | instead of the deprecated :mod:`IPython.nbformat.current` APIs. |
|
289 | instead of the deprecated :mod:`IPython.nbformat.current` APIs. | |
290 |
|
290 | |||
291 | You can downgrade a notebook to v3 via ``nbconvert``:: |
|
291 | You can downgrade a notebook to v3 via ``nbconvert``:: | |
292 |
|
292 | |||
293 | ipython nbconvert --to notebook --nbformat 3 <notebook> |
|
293 | ipython nbconvert --to notebook --nbformat 3 <notebook> | |
294 |
|
294 | |||
295 | which will create :file:`notebook.v3.ipynb`, a copy of the notebook in v3 format. |
|
295 | which will create :file:`notebook.v3.ipynb`, a copy of the notebook in v3 format. | |
296 |
|
296 | |||
297 | * :func:`IPython.core.oinspect.getsource` call specification has changed: |
|
297 | * :func:`IPython.core.oinspect.getsource` call specification has changed: | |
298 |
|
298 | |||
299 | * `oname` keyword argument has been added for property source formatting |
|
299 | * `oname` keyword argument has been added for property source formatting | |
300 | * `is_binary` keyword argument has been dropped, passing ``True`` had |
|
300 | * `is_binary` keyword argument has been dropped, passing ``True`` had | |
301 | previously short-circuited the function to return ``None`` unconditionally |
|
301 | previously short-circuited the function to return ``None`` unconditionally | |
302 |
|
302 | |||
303 | * Removed the octavemagic extension: it is now available as ``oct2py.ipython``. |
|
303 | * Removed the octavemagic extension: it is now available as ``oct2py.ipython``. | |
304 |
|
304 | |||
305 | * Creating PDFs with LaTeX no longer uses a post processor. |
|
305 | * Creating PDFs with LaTeX no longer uses a post processor. | |
306 | Use `nbconvert --to pdf` instead of `nbconvert --to latex --post pdf`. |
|
306 | Use `nbconvert --to pdf` instead of `nbconvert --to latex --post pdf`. | |
307 |
|
307 | |||
308 | * Used https://github.com/jdfreder/bootstrap2to3 to migrate the Notebook to Bootstrap 3. |
|
308 | * Used https://github.com/jdfreder/bootstrap2to3 to migrate the Notebook to Bootstrap 3. | |
309 |
|
309 | |||
310 | Additional changes: |
|
310 | Additional changes: | |
311 |
|
311 | |||
312 | - Set `.tab-content .row` `0px;` left and right margin (bootstrap default is `-15px;`) |
|
312 | - Set `.tab-content .row` `0px;` left and right margin (bootstrap default is `-15px;`) | |
313 | - Removed `height: @btn_mini_height;` from `.list_header>div, .list_item>div` in `tree.less` |
|
313 | - Removed `height: @btn_mini_height;` from `.list_header>div, .list_item>div` in `tree.less` | |
314 | - Set `#header` div `margin-bottom: 0px;` |
|
314 | - Set `#header` div `margin-bottom: 0px;` | |
315 | - Set `#menus` to `float: left;` |
|
315 | - Set `#menus` to `float: left;` | |
316 | - Set `#maintoolbar .navbar-text` to `float: none;` |
|
316 | - Set `#maintoolbar .navbar-text` to `float: none;` | |
317 | - Added no-padding convenience class. |
|
317 | - Added no-padding convenience class. | |
318 | - Set border of #maintoolbar to 0px |
|
318 | - Set border of #maintoolbar to 0px | |
319 |
|
319 | |||
320 | * Accessing the `container` DOM object when displaying javascript has been |
|
320 | * Accessing the `container` DOM object when displaying javascript has been | |
321 | deprecated in IPython 2.0 in favor of accessing `element`. Starting with |
|
321 | deprecated in IPython 2.0 in favor of accessing `element`. Starting with | |
322 | IPython 3.0 trying to access `container` will raise an error in browser |
|
322 | IPython 3.0 trying to access `container` will raise an error in browser | |
323 | javascript console. |
|
323 | javascript console. | |
324 |
|
324 | |||
325 | * ``IPython.utils.py3compat.open`` was removed: :func:`io.open` provides all |
|
325 | * ``IPython.utils.py3compat.open`` was removed: :func:`io.open` provides all | |
326 | the same functionality. |
|
326 | the same functionality. | |
327 |
|
327 | |||
328 | * The NotebookManager and ``/api/notebooks`` service has been replaced by |
|
328 | * The NotebookManager and ``/api/notebooks`` service has been replaced by | |
329 | a more generic ContentsManager and ``/api/contents`` service, |
|
329 | a more generic ContentsManager and ``/api/contents`` service, | |
330 | which supports all kinds of files. |
|
330 | which supports all kinds of files. | |
331 | * The Dashboard now lists all files, not just notebooks and directories. |
|
331 | * The Dashboard now lists all files, not just notebooks and directories. | |
332 | * The ``--script`` hook for saving notebooks to Python scripts is removed, |
|
332 | * The ``--script`` hook for saving notebooks to Python scripts is removed, | |
333 | use :samp:`ipython nbconvert --to python {notebook}` instead. |
|
333 | use :samp:`ipython nbconvert --to python {notebook}` instead. | |
334 |
|
334 | |||
335 | * The ``rmagic`` extension is deprecated, as it is now part of rpy2. See |
|
335 | * The ``rmagic`` extension is deprecated, as it is now part of rpy2. See | |
336 | :mod:`rpy2.ipython.rmagic`. |
|
336 | :mod:`rpy2.ipython.rmagic`. | |
337 |
|
337 | |||
338 | * :meth:`~.KernelManager.start_kernel` and :meth:`~.KernelManager.format_kernel_cmd` |
|
338 | * :meth:`~.KernelManager.start_kernel` and :meth:`~.KernelManager.format_kernel_cmd` | |
339 | no longer accept a ``executable`` parameter. Use the kernelspec machinery instead. |
|
339 | no longer accept a ``executable`` parameter. Use the kernelspec machinery instead. | |
340 |
|
340 | |||
341 | * The widget classes have been renamed from `*Widget` to `*`. The old names are |
|
341 | * The widget classes have been renamed from `*Widget` to `*`. The old names are | |
342 | still functional, but are deprecated. i.e. `IntSliderWidget` has been renamed |
|
342 | still functional, but are deprecated. i.e. `IntSliderWidget` has been renamed | |
343 | to `IntSlider`. |
|
343 | to `IntSlider`. | |
344 | * The ContainerWidget was renamed to Box and no longer defaults as a flexible |
|
344 | * The ContainerWidget was renamed to Box and no longer defaults as a flexible | |
345 | box in the web browser. A new FlexBox widget was added, which allows you to |
|
345 | box in the web browser. A new FlexBox widget was added, which allows you to | |
346 | use the flexible box model. |
|
346 | use the flexible box model. | |
347 |
|
347 | |||
348 | * The notebook now uses a single websocket at `/kernels/<kernel-id>/channels` instead of separate |
|
348 | * The notebook now uses a single websocket at `/kernels/<kernel-id>/channels` instead of separate | |
349 | `/kernels/<kernel-id>/{shell|iopub|stdin}` channels. Messages on each channel are identified by a |
|
349 | `/kernels/<kernel-id>/{shell|iopub|stdin}` channels. Messages on each channel are identified by a | |
350 | `channel` key in the message dict, for both send and recv. |
|
350 | `channel` key in the message dict, for both send and recv. | |
351 |
|
351 | |||
352 |
|
352 | |||
353 | Content Security Policy |
|
353 | Content Security Policy | |
354 | ``````````````````````` |
|
354 | ``````````````````````` | |
355 |
|
355 | |||
356 | The Content Security Policy is a web standard for adding a layer of security to |
|
356 | The Content Security Policy is a web standard for adding a layer of security to | |
357 | detect and mitigate certain classes of attacks, including Cross Site Scripting |
|
357 | detect and mitigate certain classes of attacks, including Cross Site Scripting | |
358 | (XSS) and data injection attacks. This was introduced into the notebook to |
|
358 | (XSS) and data injection attacks. This was introduced into the notebook to | |
359 | ensure that the IPython Notebook and its APIs (by default) can only be embedded |
|
359 | ensure that the IPython Notebook and its APIs (by default) can only be embedded | |
360 | in an iframe on the same origin. |
|
360 | in an iframe on the same origin. | |
361 |
|
361 | |||
362 | Override ``headers['Content-Security-Policy']`` within your notebook |
|
362 | Override ``headers['Content-Security-Policy']`` within your notebook | |
363 | configuration to extend for alternate domains and security settings.:: |
|
363 | configuration to extend for alternate domains and security settings.:: | |
364 |
|
364 | |||
365 | c.NotebookApp.tornado_settings = { |
|
365 | c.NotebookApp.tornado_settings = { | |
366 | 'headers': { |
|
366 | 'headers': { | |
367 | 'Content-Security-Policy': "frame-ancestors 'self'" |
|
367 | 'Content-Security-Policy': "frame-ancestors 'self'" | |
368 | } |
|
368 | } | |
369 | } |
|
369 | } | |
370 |
|
370 | |||
371 | Example policies:: |
|
371 | Example policies:: | |
372 |
|
372 | |||
373 | Content-Security-Policy: default-src 'self' https://*.jupyter.org |
|
373 | Content-Security-Policy: default-src 'self' https://*.jupyter.org | |
374 |
|
374 | |||
375 | Matches embeddings on any subdomain of jupyter.org, so long as they are served |
|
375 | Matches embeddings on any subdomain of jupyter.org, so long as they are served | |
376 | over SSL. |
|
376 | over SSL. | |
377 |
|
377 | |||
378 |
There is a `report-uri <https://developer.mozilla.org/en-US/docs/Web/Security |
|
378 | There is a `report-uri <https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/report-uri>`_ endpoint available for logging CSP violations, located at | |
379 | ``/api/security/csp-report``. To use it, set ``report-uri`` as part of the CSP:: |
|
379 | ``/api/security/csp-report``. To use it, set ``report-uri`` as part of the CSP:: | |
380 |
|
380 | |||
381 | c.NotebookApp.tornado_settings = { |
|
381 | c.NotebookApp.tornado_settings = { | |
382 | 'headers': { |
|
382 | 'headers': { | |
383 | 'Content-Security-Policy': "frame-ancestors 'self'; report-uri /api/security/csp-report" |
|
383 | 'Content-Security-Policy': "frame-ancestors 'self'; report-uri /api/security/csp-report" | |
384 | } |
|
384 | } | |
385 | } |
|
385 | } | |
386 |
|
386 | |||
387 | It simply provides the CSP report as a warning in IPython's logs. The default |
|
387 | It simply provides the CSP report as a warning in IPython's logs. The default | |
388 | CSP sets this report-uri relative to the ``base_url`` (not shown above). |
|
388 | CSP sets this report-uri relative to the ``base_url`` (not shown above). | |
389 |
|
389 | |||
390 | For a more thorough and accurate guide on Content Security Policies, check out |
|
390 | For a more thorough and accurate guide on Content Security Policies, check out | |
391 | `MDN's Using Content Security Policy <https://developer.mozilla.org/en-US/docs/Web/Security/CSP/Using_Content_Security_Policy>`_ for more examples. |
|
391 | `MDN's Using Content Security Policy <https://developer.mozilla.org/en-US/docs/Web/Security/CSP/Using_Content_Security_Policy>`_ for more examples. |
General Comments 0
You need to be logged in to leave comments.
Login now