##// END OF EJS Templates
Backport PR #5489: Fix required Python versions...
Thomas Kluyver -
Show More
@@ -1,324 +1,324 b''
1 ============
1 ============
2 2.0 Series
2 2.0 Series
3 ============
3 ============
4
4
5 Release 2.0.0
5 Release 2.0.0
6 =============
6 =============
7
7
8 April, 2014
8 April, 2014
9
9
10 IPython 2.0 requires Python β‰₯ 2.7.2 or β‰₯ 3.2.1.
10 IPython 2.0 requires Python β‰₯ 2.7.2 or β‰₯ 3.3.0.
11 It does not support Python 3.0, 3.1, 2.5, or 2.6.
11 It does not support Python 3.0, 3.1, 3.2, 2.5, or 2.6.
12
12
13 The principal milestones of 2.0 are:
13 The principal milestones of 2.0 are:
14
14
15 - interactive widgets for the notebook
15 - interactive widgets for the notebook
16 - directory navigation in the notebook dashboard
16 - directory navigation in the notebook dashboard
17 - persistent URLs for notebooks
17 - persistent URLs for notebooks
18 - a new modal user interface in the notebook
18 - a new modal user interface in the notebook
19 - a security model for notebooks
19 - a security model for notebooks
20
20
21 Contribution summary since IPython 1.0 in August, 2013:
21 Contribution summary since IPython 1.0 in August, 2013:
22
22
23 - ~8 months of work
23 - ~8 months of work
24 - ~650 pull requests merged
24 - ~650 pull requests merged
25 - ~400 issues closed (non-pull requests)
25 - ~400 issues closed (non-pull requests)
26 - contributions from ~100 authors
26 - contributions from ~100 authors
27 - ~4000 commits
27 - ~4000 commits
28
28
29 The amount of work included in this release is so large that we can only cover
29 The amount of work included in this release is so large that we can only cover
30 here the main highlights; please see our :ref:`detailed release statistics
30 here the main highlights; please see our :ref:`detailed release statistics
31 <issues_list_200>` for links to every issue and pull request closed on GitHub
31 <issues_list_200>` for links to every issue and pull request closed on GitHub
32 as well as a full list of individual contributors.
32 as well as a full list of individual contributors.
33
33
34 New stuff in the IPython notebook
34 New stuff in the IPython notebook
35 ---------------------------------
35 ---------------------------------
36
36
37 Directory navigation
37 Directory navigation
38 ********************
38 ********************
39
39
40 .. image:: /_images/2.0/treeview.png
40 .. image:: /_images/2.0/treeview.png
41 :width: 392px
41 :width: 392px
42 :alt: Directory navigation
42 :alt: Directory navigation
43 :align: center
43 :align: center
44
44
45 The IPython notebook dashboard allows navigation into subdirectories.
45 The IPython notebook dashboard allows navigation into subdirectories.
46 URLs are persistent based on the notebook's path and name,
46 URLs are persistent based on the notebook's path and name,
47 so no more random UUID URLs.
47 so no more random UUID URLs.
48
48
49 Serving local files no longer needs the ``files/`` prefix.
49 Serving local files no longer needs the ``files/`` prefix.
50 Relative links across notebooks and other files should work just as if notebooks were regular HTML files.
50 Relative links across notebooks and other files should work just as if notebooks were regular HTML files.
51
51
52 Interactive widgets
52 Interactive widgets
53 *******************
53 *******************
54
54
55 .. image:: /_images/2.0/widgets.png
55 .. image:: /_images/2.0/widgets.png
56 :width: 392px
56 :width: 392px
57 :alt: Interactive widgets
57 :alt: Interactive widgets
58 :align: center
58 :align: center
59
59
60 IPython 2.0 adds :mod:`IPython.html.widgets`, for manipulating
60 IPython 2.0 adds :mod:`IPython.html.widgets`, for manipulating
61 Python objects in the kernel with GUI controls in the notebook.
61 Python objects in the kernel with GUI controls in the notebook.
62 IPython comes with a few built-in widgets for simple data types,
62 IPython comes with a few built-in widgets for simple data types,
63 and an API designed for developers to build more complex widgets.
63 and an API designed for developers to build more complex widgets.
64 See the `widget docs`_ for more information.
64 See the `widget docs`_ for more information.
65
65
66 .. _widget docs: http://nbviewer.ipython.org/github/ipython/ipython/blob/2.x/examples/Interactive%20Widgets/Index.ipynb
66 .. _widget docs: http://nbviewer.ipython.org/github/ipython/ipython/blob/2.x/examples/Interactive%20Widgets/Index.ipynb
67
67
68
68
69 Modal user interface
69 Modal user interface
70 ********************
70 ********************
71
71
72 The notebook has added separate Edit and Command modes,
72 The notebook has added separate Edit and Command modes,
73 allowing easier keyboard commands and making keyboard shortcut customization possible.
73 allowing easier keyboard commands and making keyboard shortcut customization possible.
74 See the new `User Interface notebook`_ for more information.
74 See the new `User Interface notebook`_ for more information.
75
75
76 .. _User Interface Notebook: http://nbviewer.ipython.org/github/ipython/ipython/blob/2.x/examples/Notebook/User%20Interface.ipynb
76 .. _User Interface Notebook: http://nbviewer.ipython.org/github/ipython/ipython/blob/2.x/examples/Notebook/User%20Interface.ipynb
77
77
78
78
79 You can familiarize yourself with the updated notebook user interface, including an
79 You can familiarize yourself with the updated notebook user interface, including an
80 explanation of Edit and Command modes, by going through the short guided tour
80 explanation of Edit and Command modes, by going through the short guided tour
81 which can be started from the Help menu.
81 which can be started from the Help menu.
82
82
83 .. image:: /_images/2.0/user-interface.png
83 .. image:: /_images/2.0/user-interface.png
84 :width: 392px
84 :width: 392px
85 :alt: Interface tour
85 :alt: Interface tour
86 :align: center
86 :align: center
87
87
88
88
89 Security
89 Security
90 ********
90 ********
91
91
92 2.0 introduces a :ref:`security model <notebook_security>` for notebooks,
92 2.0 introduces a :ref:`security model <notebook_security>` for notebooks,
93 to prevent untrusted code from executing on users' behalf when notebooks open.
93 to prevent untrusted code from executing on users' behalf when notebooks open.
94 A quick summary of the model:
94 A quick summary of the model:
95
95
96 - Trust is determined by :ref:`signing notebooks<signing_notebooks>`.
96 - Trust is determined by :ref:`signing notebooks<signing_notebooks>`.
97 - Untrusted HTML output is sanitized.
97 - Untrusted HTML output is sanitized.
98 - Untrusted Javascript is never executed.
98 - Untrusted Javascript is never executed.
99 - HTML and Javascript in Markdown are never trusted.
99 - HTML and Javascript in Markdown are never trusted.
100
100
101 Dashboard "Running" tab
101 Dashboard "Running" tab
102 ***********************
102 ***********************
103
103
104 .. image:: /_images/2.0/running-crop.png
104 .. image:: /_images/2.0/running-crop.png
105 :width: 392px
105 :width: 392px
106 :alt: Running tab
106 :alt: Running tab
107 :align: center
107 :align: center
108
108
109 The dashboard now has a "Running" tab which shows all of the running notebooks.
109 The dashboard now has a "Running" tab which shows all of the running notebooks.
110
110
111 Single codebase Python 3 support
111 Single codebase Python 3 support
112 --------------------------------
112 --------------------------------
113
113
114 IPython previously supported Python 3 by running 2to3 during setup. We
114 IPython previously supported Python 3 by running 2to3 during setup. We
115 have now switched to a single codebase which runs natively on Python 2.7
115 have now switched to a single codebase which runs natively on Python 2.7
116 and 3.3.
116 and 3.3.
117
117
118 For notes on how to maintain this, see :doc:`/development/pycompat`.
118 For notes on how to maintain this, see :doc:`/development/pycompat`.
119
119
120 Selecting matplotlib figure formats
120 Selecting matplotlib figure formats
121 -----------------------------------
121 -----------------------------------
122
122
123 Deprecate single-format ``InlineBackend.figure_format``
123 Deprecate single-format ``InlineBackend.figure_format``
124 configurable in favor of ``InlineBackend.figure_formats``,
124 configurable in favor of ``InlineBackend.figure_formats``,
125 which is a set, supporting multiple simultaneous figure formats (e.g. png, pdf).
125 which is a set, supporting multiple simultaneous figure formats (e.g. png, pdf).
126
126
127 This is available at runtime with the new API function :func:`IPython.display.set_matplotlib_formats`.
127 This is available at runtime with the new API function :func:`IPython.display.set_matplotlib_formats`.
128
128
129 clear_output changes
129 clear_output changes
130 --------------------
130 --------------------
131
131
132 * There is no longer a 500ms delay when calling ``clear_output``.
132 * There is no longer a 500ms delay when calling ``clear_output``.
133 * The ability to clear stderr and stdout individually was removed.
133 * The ability to clear stderr and stdout individually was removed.
134 * A new ``wait`` flag that prevents ``clear_output`` from being executed until new
134 * A new ``wait`` flag that prevents ``clear_output`` from being executed until new
135 output is available. This eliminates animation flickering by allowing the
135 output is available. This eliminates animation flickering by allowing the
136 user to double buffer the output.
136 user to double buffer the output.
137 * The output div height is remembered when the ``wait=True`` flag is used.
137 * The output div height is remembered when the ``wait=True`` flag is used.
138
138
139 Extending configurable containers
139 Extending configurable containers
140 ---------------------------------
140 ---------------------------------
141
141
142 Some configurable traits are containers (list, dict, set)
142 Some configurable traits are containers (list, dict, set)
143 Config objects now support calling ``extend``, ``update``, ``insert``, etc.
143 Config objects now support calling ``extend``, ``update``, ``insert``, etc.
144 on traits in config files, which will ultimately result in calling
144 on traits in config files, which will ultimately result in calling
145 those methods on the original object.
145 those methods on the original object.
146
146
147 The effect being that you can now add to containers without having to copy/paste
147 The effect being that you can now add to containers without having to copy/paste
148 the initial value::
148 the initial value::
149
149
150 c = get_config()
150 c = get_config()
151 c.InlineBackend.rc.update({ 'figure.figsize' : (6, 4) })
151 c.InlineBackend.rc.update({ 'figure.figsize' : (6, 4) })
152
152
153 Changes to hidden namespace on startup
153 Changes to hidden namespace on startup
154 --------------------------------------
154 --------------------------------------
155
155
156 Previously, all names declared in code run at startup
156 Previously, all names declared in code run at startup
157 (startup files, ``ipython -i script.py``, etc.)
157 (startup files, ``ipython -i script.py``, etc.)
158 were added to the hidden namespace, which hides the names from tools like ``%whos``.
158 were added to the hidden namespace, which hides the names from tools like ``%whos``.
159 There are two changes to this behavior:
159 There are two changes to this behavior:
160
160
161 1. Scripts run on the command-line ``ipython -i script.py``now behave the same as if they were
161 1. Scripts run on the command-line ``ipython -i script.py``now behave the same as if they were
162 passed to ``%run``, so their variables are never hidden.
162 passed to ``%run``, so their variables are never hidden.
163 2. A boolean config flag ``InteractiveShellApp.hide_initial_ns`` has been added to optionally
163 2. A boolean config flag ``InteractiveShellApp.hide_initial_ns`` has been added to optionally
164 disable the hidden behavior altogether. The default behavior is unchanged.
164 disable the hidden behavior altogether. The default behavior is unchanged.
165
165
166 Using dill to expand serialization support
166 Using dill to expand serialization support
167 ------------------------------------------
167 ------------------------------------------
168
168
169 adds :func:`~IPython.utils.pickleutil.use_dill` for allowing
169 adds :func:`~IPython.utils.pickleutil.use_dill` for allowing
170 dill to extend serialization support in :mod:`IPython.parallel` (closures, etc.).
170 dill to extend serialization support in :mod:`IPython.parallel` (closures, etc.).
171 Also adds :meth:`DirectView.use_dill` convenience method for enabling dill
171 Also adds :meth:`DirectView.use_dill` convenience method for enabling dill
172 locally and on all engines with one call.
172 locally and on all engines with one call.
173
173
174 New IPython console lexer
174 New IPython console lexer
175 -------------------------
175 -------------------------
176
176
177 The IPython console lexer has been rewritten and now supports tracebacks
177 The IPython console lexer has been rewritten and now supports tracebacks
178 and customized input/output prompts. See the :ref:`new lexer docs <console_lexer>`
178 and customized input/output prompts. See the :ref:`new lexer docs <console_lexer>`
179 for details.
179 for details.
180
180
181 DisplayFormatter changes
181 DisplayFormatter changes
182 ------------------------
182 ------------------------
183
183
184 There was no official way to query or remove callbacks in the Formatter API.
184 There was no official way to query or remove callbacks in the Formatter API.
185 To remedy this, the following methods are added to :class:`BaseFormatter`:
185 To remedy this, the following methods are added to :class:`BaseFormatter`:
186
186
187 - ``lookup(instance)`` - return appropriate callback or a given object
187 - ``lookup(instance)`` - return appropriate callback or a given object
188 - ``lookup_by_type(type_or_str)`` - return appropriate callback for a given type or ``'mod.name'`` type string
188 - ``lookup_by_type(type_or_str)`` - return appropriate callback for a given type or ``'mod.name'`` type string
189 - ``pop(type_or_str)`` - remove a type (by type or string).
189 - ``pop(type_or_str)`` - remove a type (by type or string).
190 Pass a second argument to avoid KeyError (like dict).
190 Pass a second argument to avoid KeyError (like dict).
191
191
192 All of the above methods raise a KeyError if no match is found.
192 All of the above methods raise a KeyError if no match is found.
193
193
194 And the following methods are changed:
194 And the following methods are changed:
195
195
196 - ``for_type(type_or_str)`` - behaves the same as before, only adding support for ``'mod.name'``
196 - ``for_type(type_or_str)`` - behaves the same as before, only adding support for ``'mod.name'``
197 type strings in addition to plain types. This removes the need for ``for_type_by_name()``,
197 type strings in addition to plain types. This removes the need for ``for_type_by_name()``,
198 but it remains for backward compatibility.
198 but it remains for backward compatibility.
199
199
200 Formatters can now raise NotImplementedError in addition to returning None
200 Formatters can now raise NotImplementedError in addition to returning None
201 to indicate that they cannot format a given object.
201 to indicate that they cannot format a given object.
202
202
203 Exceptions and Warnings
203 Exceptions and Warnings
204 ***********************
204 ***********************
205
205
206 Exceptions are no longer silenced when formatters fail.
206 Exceptions are no longer silenced when formatters fail.
207 Instead, these are turned into FormatterWarnings.
207 Instead, these are turned into FormatterWarnings.
208 A FormatterWarning will also be issued if a formatter returns data of an invalid type
208 A FormatterWarning will also be issued if a formatter returns data of an invalid type
209 (e.g. an integer for 'image/png').
209 (e.g. an integer for 'image/png').
210
210
211
211
212 Other changes
212 Other changes
213 -------------
213 -------------
214
214
215 * `%%capture` cell magic now captures the rich display output, not just
215 * `%%capture` cell magic now captures the rich display output, not just
216 stdout/stderr
216 stdout/stderr
217
217
218 * In notebook, Showing tooltip on tab has been disables to avoid conflict with
218 * In notebook, Showing tooltip on tab has been disables to avoid conflict with
219 completion, Shift-Tab could still be used to invoke tooltip when inside
219 completion, Shift-Tab could still be used to invoke tooltip when inside
220 function signature and/or on selection.
220 function signature and/or on selection.
221
221
222 * ``object_info_request`` as been replaced by ``object_info`` for consistency in the javascript API.
222 * ``object_info_request`` as been replaced by ``object_info`` for consistency in the javascript API.
223 ``object_info`` as a simpler interface to register callback that is incompatible with ``object_info_request``.
223 ``object_info`` as a simpler interface to register callback that is incompatible with ``object_info_request``.
224
224
225 * Previous versions of IPython on Linux would use the XDG config directory,
225 * Previous versions of IPython on Linux would use the XDG config directory,
226 creating :file:`~/.config/ipython` by default. We have decided to go
226 creating :file:`~/.config/ipython` by default. We have decided to go
227 back to :file:`~/.ipython` for consistency among systems. IPython will
227 back to :file:`~/.ipython` for consistency among systems. IPython will
228 issue a warning if it finds the XDG location, and will move it to the new
228 issue a warning if it finds the XDG location, and will move it to the new
229 location if there isn't already a directory there.
229 location if there isn't already a directory there.
230
230
231 * Equations, images and tables are now centered in Markdown cells.
231 * Equations, images and tables are now centered in Markdown cells.
232 * Multiline equations are now centered in output areas; single line equations
232 * Multiline equations are now centered in output areas; single line equations
233 remain left justified.
233 remain left justified.
234
234
235 * IPython config objects can be loaded from and serialized to JSON.
235 * IPython config objects can be loaded from and serialized to JSON.
236 JSON config file have the same base name as their ``.py`` counterpart,
236 JSON config file have the same base name as their ``.py`` counterpart,
237 and will be loaded with higher priority if found.
237 and will be loaded with higher priority if found.
238
238
239 * bash completion updated with support for all ipython subcommands and flags, including nbconvert
239 * bash completion updated with support for all ipython subcommands and flags, including nbconvert
240
240
241 * ``ipython history trim``: added ``--keep=<N>`` as an alias for the more verbose
241 * ``ipython history trim``: added ``--keep=<N>`` as an alias for the more verbose
242 ``--HistoryTrim.keep=<N>``
242 ``--HistoryTrim.keep=<N>``
243 * new ``ipython history clear`` subcommand, which is the same as the newly supported
243 * new ``ipython history clear`` subcommand, which is the same as the newly supported
244 ``ipython history trim --keep=0``
244 ``ipython history trim --keep=0``
245
245
246 * You can now run notebooks in an interactive session via ``%run notebook.ipynb``.
246 * You can now run notebooks in an interactive session via ``%run notebook.ipynb``.
247
247
248 * Print preview is back in the notebook menus, along with options to
248 * Print preview is back in the notebook menus, along with options to
249 download the open notebook in various formats. This is powered by
249 download the open notebook in various formats. This is powered by
250 nbconvert.
250 nbconvert.
251
251
252 * :exc:`~IPython.nbconvert.utils.pandoc.PandocMissing` exceptions will be
252 * :exc:`~IPython.nbconvert.utils.pandoc.PandocMissing` exceptions will be
253 raised if Pandoc is unavailable, and warnings will be printed if the version
253 raised if Pandoc is unavailable, and warnings will be printed if the version
254 found is too old. The recommended Pandoc version for use with nbconvert is
254 found is too old. The recommended Pandoc version for use with nbconvert is
255 1.12.1.
255 1.12.1.
256
256
257 * The InlineBackend.figure_format now supports JPEG output if PIL/Pillow is available.
257 * The InlineBackend.figure_format now supports JPEG output if PIL/Pillow is available.
258
258
259 * Input transformers (see :doc:`/config/inputtransforms`) may now raise
259 * Input transformers (see :doc:`/config/inputtransforms`) may now raise
260 :exc:`SyntaxError` if they determine that input is invalid. The input
260 :exc:`SyntaxError` if they determine that input is invalid. The input
261 transformation machinery in IPython will handle displaying the exception to
261 transformation machinery in IPython will handle displaying the exception to
262 the user and resetting state.
262 the user and resetting state.
263
263
264 * Calling ``container.show()`` on javascript display is deprecated and will
264 * Calling ``container.show()`` on javascript display is deprecated and will
265 trigger errors on future IPython notebook versions. ``container`` now show
265 trigger errors on future IPython notebook versions. ``container`` now show
266 itself as soon as non-empty
266 itself as soon as non-empty
267
267
268 * Added ``InlineBackend.print_figure_kwargs`` to allow passing keyword arguments
268 * Added ``InlineBackend.print_figure_kwargs`` to allow passing keyword arguments
269 to matplotlib's ``Canvas.print_figure``. This can be used to change the value of
269 to matplotlib's ``Canvas.print_figure``. This can be used to change the value of
270 ``bbox_inches``, which is 'tight' by default, or set the quality of JPEG figures.
270 ``bbox_inches``, which is 'tight' by default, or set the quality of JPEG figures.
271
271
272 * A new callback system has been introduced. For details, see :doc:`/config/callbacks`.
272 * A new callback system has been introduced. For details, see :doc:`/config/callbacks`.
273
273
274 * jQuery and require.js are loaded from CDNs in the default HTML template,
274 * jQuery and require.js are loaded from CDNs in the default HTML template,
275 so javascript is available in static HTML export (e.g. nbviewer).
275 so javascript is available in static HTML export (e.g. nbviewer).
276
276
277 Backwards incompatible changes
277 Backwards incompatible changes
278 ------------------------------
278 ------------------------------
279
279
280 * Python 2.6 and 3.2 are no longer supported: the minimum required
280 * Python 2.6 and 3.2 are no longer supported: the minimum required
281 Python versions are now 2.7 and 3.3.
281 Python versions are now 2.7 and 3.3.
282 * The Transformer classes have been renamed to Preprocessor in nbconvert and
282 * The Transformer classes have been renamed to Preprocessor in nbconvert and
283 their `call` methods for them have been renamed to `preprocess`.
283 their `call` methods for them have been renamed to `preprocess`.
284 * The `call` methods of nbconvert post-processsors have been renamed to
284 * The `call` methods of nbconvert post-processsors have been renamed to
285 `postprocess`.
285 `postprocess`.
286
286
287 * The module ``IPython.core.fakemodule`` has been removed.
287 * The module ``IPython.core.fakemodule`` has been removed.
288
288
289 * The alias system has been reimplemented to use magic functions. There should be little
289 * The alias system has been reimplemented to use magic functions. There should be little
290 visible difference while automagics are enabled, as they are by default, but parts of the
290 visible difference while automagics are enabled, as they are by default, but parts of the
291 :class:`~IPython.core.alias.AliasManager` API have been removed.
291 :class:`~IPython.core.alias.AliasManager` API have been removed.
292
292
293 * We fixed an issue with switching between matplotlib inline and GUI backends,
293 * We fixed an issue with switching between matplotlib inline and GUI backends,
294 but the fix requires matplotlib 1.1 or newer. So from now on, we consider
294 but the fix requires matplotlib 1.1 or newer. So from now on, we consider
295 matplotlib 1.1 to be the minimally supported version for IPython. Older
295 matplotlib 1.1 to be the minimally supported version for IPython. Older
296 versions for the most part will work, but we make no guarantees about it.
296 versions for the most part will work, but we make no guarantees about it.
297
297
298 * The :command:`pycolor` command has been removed. We recommend the much more capable
298 * The :command:`pycolor` command has been removed. We recommend the much more capable
299 :command:`pygmentize` command from the `Pygments <http://pygments.org/>`_ project.
299 :command:`pygmentize` command from the `Pygments <http://pygments.org/>`_ project.
300 If you need to keep the exact output of :command:`pycolor`, you can still use
300 If you need to keep the exact output of :command:`pycolor`, you can still use
301 ``python -m IPython.utils.PyColorize foo.py``.
301 ``python -m IPython.utils.PyColorize foo.py``.
302
302
303 * :mod:`IPython.lib.irunner` and its command-line entry point have been removed.
303 * :mod:`IPython.lib.irunner` and its command-line entry point have been removed.
304 It had fallen out of use long ago.
304 It had fallen out of use long ago.
305
305
306 * The ``input_prefilter`` hook has been removed, as it was never
306 * The ``input_prefilter`` hook has been removed, as it was never
307 actually used by the code. The input transformer system offers much
307 actually used by the code. The input transformer system offers much
308 more powerful APIs to work with input code. See
308 more powerful APIs to work with input code. See
309 :doc:`/config/inputtransforms` for details.
309 :doc:`/config/inputtransforms` for details.
310
310
311 * :class:`IPython.core.inputsplitter.IPythonInputSplitter` no longer has a method
311 * :class:`IPython.core.inputsplitter.IPythonInputSplitter` no longer has a method
312 ``source_raw_reset()``, but gains :meth:`~IPython.core.inputsplitter.IPythonInputSplitter.raw_reset`
312 ``source_raw_reset()``, but gains :meth:`~IPython.core.inputsplitter.IPythonInputSplitter.raw_reset`
313 instead. Use of ``source_raw_reset`` can be replaced with::
313 instead. Use of ``source_raw_reset`` can be replaced with::
314
314
315 raw = isp.source_raw
315 raw = isp.source_raw
316 transformed = isp.source_reset()
316 transformed = isp.source_reset()
317
317
318 * The Azure notebook manager was removed as it was no longer compatible with the notebook storage scheme
318 * The Azure notebook manager was removed as it was no longer compatible with the notebook storage scheme
319
319
320 * Simplifying configurable URLs
320 * Simplifying configurable URLs
321
321
322 - base_project_url is renamed to base_url (base_project_url is kept as a deprecated alias, for now)
322 - base_project_url is renamed to base_url (base_project_url is kept as a deprecated alias, for now)
323 - base_kernel_url configurable is removed (use base_url)
323 - base_kernel_url configurable is removed (use base_url)
324 - websocket_url configurable is removed (use base_url)
324 - websocket_url configurable is removed (use base_url)
General Comments 0
You need to be logged in to leave comments. Login now