diff -Nru jupyter-console-6.1.0/.bumpversion.cfg jupyter-console-6.2.0/.bumpversion.cfg --- jupyter-console-6.1.0/.bumpversion.cfg 1970-01-01 00:00:00.000000000 +0000 +++ jupyter-console-6.2.0/.bumpversion.cfg 2020-08-28 19:43:06.000000000 +0000 @@ -0,0 +1,19 @@ +[bumpversion] +current_version = 6.2.0 +parse = (?P\d+)\.(?P\d+)\.(?P\d+)(.(?P.+))? +serialize = + {major}.{minor}.{patch}.{suffix} + {major}.{minor}.{patch} + +[bumpversion:part:suffix] +optional_value = final +values = + dev + final + +[bumpversion:file:jupyter_console/_version.py] +parse = (?P\d+),\s*(?P\d+),\s*(?P\d+)(,\s*['"](?P\w+)['"])? +serialize = + {major}, {minor}, {patch}, '{suffix}' + {major}, {minor}, {patch} + diff -Nru jupyter-console-6.1.0/debian/changelog jupyter-console-6.2.0/debian/changelog --- jupyter-console-6.1.0/debian/changelog 2020-05-15 18:03:46.000000000 +0000 +++ jupyter-console-6.2.0/debian/changelog 2020-08-31 15:09:54.000000000 +0000 @@ -1,3 +1,9 @@ +jupyter-console (6.2.0-1) unstable; urgency=medium + + * New upstream version 6.2.0 + + -- Gordon Ball Mon, 31 Aug 2020 15:09:54 +0000 + jupyter-console (6.1.0-1) unstable; urgency=medium [ Debian Janitor ] diff -Nru jupyter-console-6.1.0/docs/index.rst jupyter-console-6.2.0/docs/index.rst --- jupyter-console-6.1.0/docs/index.rst 2020-01-15 23:32:32.000000000 +0000 +++ jupyter-console-6.2.0/docs/index.rst 2020-08-26 23:59:39.000000000 +0000 @@ -4,11 +4,11 @@ The Jupyter console is a terminal frontend for kernels using the Jupyter protocol. The console can be installed with:: - pip install jupyter-console + pip install jupyter_console If you want to use conda instead to perform your installation:: - conda install -c conda-forge jupyter-console + conda install -c conda-forge jupyter_console And started with:: @@ -20,7 +20,7 @@ To start the console with a particular kernel, ask for it by name:: - jupyter console --kernel=julia-0.4 + jupyter console --kernel=julia-1.4 A list of available kernels can be seen with:: diff -Nru jupyter-console-6.1.0/.github/workflows/python-package.yml jupyter-console-6.2.0/.github/workflows/python-package.yml --- jupyter-console-6.1.0/.github/workflows/python-package.yml 1970-01-01 00:00:00.000000000 +0000 +++ jupyter-console-6.2.0/.github/workflows/python-package.yml 2020-08-26 23:59:39.000000000 +0000 @@ -0,0 +1,34 @@ +# This workflow will install Python dependencies, run tests and lint with a variety of Python versions +# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions + +name: Python package + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +jobs: + build: + + runs-on: ubuntu-latest + strategy: + matrix: + python-version: [3.6, 3.7, 3.8] + + steps: + - uses: actions/checkout@v2 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install pytest nose + pip install . + python -m ipykernel.kernelspec --user + - name: Test with pytest + run: | + pytest diff -Nru jupyter-console-6.1.0/.gitignore jupyter-console-6.2.0/.gitignore --- jupyter-console-6.1.0/.gitignore 1970-01-01 00:00:00.000000000 +0000 +++ jupyter-console-6.2.0/.gitignore 2018-10-01 03:20:43.000000000 +0000 @@ -0,0 +1,19 @@ +MANIFEST +build +dist +_build +docs/gh-pages +docs/config_options.rst +*.py[co] +__pycache__ +*.egg-info +*~ +*.bak +.ipynb_checkpoints +.tox +.DS_Store +\#*# +.#* +.coverage +# PyCharm project cache +.idea \ No newline at end of file diff -Nru jupyter-console-6.1.0/jupyter_console/app.py jupyter-console-6.2.0/jupyter_console/app.py --- jupyter-console-6.1.0/jupyter_console/app.py 2020-01-15 23:32:32.000000000 +0000 +++ jupyter-console-6.2.0/jupyter_console/app.py 2020-08-27 16:01:34.000000000 +0000 @@ -42,9 +42,8 @@ # copy flags from mixin: flags = dict(base_flags) # start with mixin frontend flags: -frontend_flags = dict(app_flags) # update full dict with frontend flags: -flags.update(frontend_flags) +flags.update(app_flags) flags.update(boolean_flag( 'simple-prompt', 'ZMQTerminalInteractiveShell.simple_prompt', "Force simple minimal prompt using `raw_input`", @@ -53,15 +52,11 @@ # copy flags from mixin aliases = dict(base_aliases) -# start with mixin frontend flags -frontend_aliases = dict(app_aliases) -# load updated frontend flags into full dict -aliases.update(frontend_aliases) -# get flags&aliases into sets, and remove a couple that -# shouldn't be scrubbed from backend flags: -frontend_aliases = set(frontend_aliases.keys()) -frontend_flags = set(frontend_flags.keys()) +aliases.update(app_aliases) + +frontend_aliases = set(app_aliases.keys()) +frontend_flags = set(app_flags.keys()) #----------------------------------------------------------------------------- diff -Nru jupyter-console-6.1.0/jupyter_console/completer.py jupyter-console-6.2.0/jupyter_console/completer.py --- jupyter-console-6.1.0/jupyter_console/completer.py 2020-01-15 23:32:32.000000000 +0000 +++ jupyter-console-6.2.0/jupyter_console/completer.py 2020-08-26 23:59:39.000000000 +0000 @@ -4,11 +4,6 @@ # Copyright (c) IPython Development Team. # Distributed under the terms of the Modified BSD License. -try: - from queue import Empty # Py 3 -except ImportError: - from Queue import Empty # Py 2 - from traitlets.config import Configurable from traitlets import Float diff -Nru jupyter-console-6.1.0/jupyter_console/ptshell.py jupyter-console-6.2.0/jupyter_console/ptshell.py --- jupyter-console-6.1.0/jupyter_console/ptshell.py 2020-01-15 23:32:32.000000000 +0000 +++ jupyter-console-6.2.0/jupyter_console/ptshell.py 2020-08-27 23:32:20.000000000 +0000 @@ -1,6 +1,7 @@ """IPython terminal interface using prompt_toolkit in place of readline""" from __future__ import print_function +import asyncio import base64 import errno from getpass import getpass @@ -13,34 +14,61 @@ import time from warnings import warn +from typing import Dict as DictType, Any as AnyType + from zmq import ZMQError from IPython.core import page from ipython_genutils.tempdir import NamedFileInTemporaryDirectory -from traitlets import (Bool, Integer, Float, Unicode, List, Dict, Enum, - Instance, Any) +from traitlets import ( + Bool, + Integer, + Float, + Unicode, + List, + Dict, + Enum, + Instance, + Any, +) from traitlets.config import SingletonConfigurable from .completer import ZMQCompleter from .zmqhistory import ZMQHistoryManager from . import __version__ +# Discriminate version3 for asyncio +from prompt_toolkit import __version__ as ptk_version +PTK3 = ptk_version.startswith('3.') + +if not PTK3: + # use_ayncio_event_loop obsolete in PKT3 + from prompt_toolkit.eventloop.defaults import use_asyncio_event_loop + from prompt_toolkit.completion import Completer, Completion from prompt_toolkit.document import Document from prompt_toolkit.enums import DEFAULT_BUFFER, EditingMode -from prompt_toolkit.filters import (Condition, has_focus, has_selection, - vi_insert_mode, emacs_insert_mode, is_done) +from prompt_toolkit.filters import ( + Condition, + has_focus, + has_selection, + vi_insert_mode, + emacs_insert_mode, + is_done, +) from prompt_toolkit.history import InMemoryHistory from prompt_toolkit.patch_stdout import patch_stdout from prompt_toolkit.shortcuts.prompt import PromptSession -from prompt_toolkit.shortcuts import print_formatted_text +from prompt_toolkit.shortcuts import print_formatted_text, CompleteStyle from prompt_toolkit.key_binding import KeyBindings from prompt_toolkit.lexers import PygmentsLexer -from prompt_toolkit.layout.processors import (ConditionalProcessor, - HighlightMatchingBracketProcessor) +from prompt_toolkit.layout.processors import ( + ConditionalProcessor, + HighlightMatchingBracketProcessor, +) from prompt_toolkit.styles import merge_styles from prompt_toolkit.styles.pygments import (style_from_pygments_cls, style_from_pygments_dict) -from prompt_toolkit.formatted_text import PygmentsTokens +from prompt_toolkit.formatted_text import PygmentsTokens, FormattedText from prompt_toolkit.output import ColorDepth from prompt_toolkit.utils import suspend_to_background_supported @@ -83,6 +111,15 @@ return answers[ans] +async def async_input(prompt, loop=None): + """Simple async version of input using a the default executor""" + if loop is None: + loop = asyncio.get_event_loop() + + raw = await loop.run_in_executor(None, input, prompt) + return raw + + def get_pygments_lexer(name): name = name.lower() if name == 'ipython2': @@ -113,9 +150,26 @@ code=document.text, cursor_pos=document.cursor_position ) - start_pos = content['cursor_start'] - document.cursor_position - for m in content['matches']: - yield Completion(m, start_position=start_pos) + meta = content["metadata"] + + if "_jupyter_types_experimental" in meta: + try: + new_meta = {} + for c, m in zip( + content["matches"], meta["_jupyter_types_experimental"] + ): + new_meta[c] = m["type"] + meta = new_meta + except: + pass + + start_pos = content["cursor_start"] - document.cursor_position + for m in content["matches"]: + yield Completion( + m, + start_position=start_pos, + display_meta=meta.get(m, "?"), + ) class ZMQTerminalInteractiveShell(SingletonConfigurable): @@ -206,8 +260,9 @@ """ ) - callable_image_handler = Any(config=True, help= - """ + callable_image_handler = Any( + config=True, + help=""" Callable object called via 'callable' image handler with one argument, `data`, which is `msg["content"]["data"]` where `msg` is the message from iopub channel. For example, you can @@ -248,15 +303,29 @@ help="""Set to display confirmation dialog on exit. You can always use 'exit' or 'quit', to force a direct exit without any confirmation. - """ + """, ) - highlight_matching_brackets = Bool(True, - help="Highlight matching brackets.", + display_completions = Enum( + ("column", "multicolumn", "readlinelike"), + help=( + "Options for displaying tab completions, 'column', 'multicolumn', and " + "'readlinelike'. These options are for `prompt_toolkit`, see " + "`prompt_toolkit` documentation for more information." + ), + default_value="multicolumn", + ).tag(config=True) + + prompt_includes_vi_mode = Bool(True, + help="Display the current vi mode (when using vi editing mode)." ).tag(config=True) - manager = Instance('jupyter_client.KernelManager', allow_none=True) - client = Instance('jupyter_client.KernelClient', allow_none=True) + highlight_matching_brackets = Bool(True, help="Highlight matching brackets.",).tag( + config=True + ) + + manager = Instance("jupyter_client.KernelManager", allow_none=True) + client = Instance("jupyter_client.KernelClient", allow_none=True) def _client_changed(self, name, old, new): self.session_id = new.session.session @@ -299,16 +368,25 @@ self.history_manager = ZMQHistoryManager(client=self.client) self.configurables.append(self.history_manager) - def get_prompt_tokens(self): + def vi_mode(self): + if (getattr(self, 'editing_mode', None) == 'vi' + and self.prompt_includes_vi_mode): + return '['+str(self.pt_cli.app.vi_state.input_mode)[3:6]+'] ' + return '' + + def get_prompt_tokens(self, ec=None): + if ec is None: + ec = self.execution_count return [ + (Token.Prompt, self.vi_mode()), (Token.Prompt, 'In ['), - (Token.PromptNum, str(self.execution_count)), + (Token.PromptNum, str(ec)), (Token.Prompt, ']: '), ] def get_continuation_tokens(self, width): return [ - (Token.Prompt, (' ' * (width - 2)) + ': '), + (Token.Prompt, (" " * (width - 5)) + "...: "), ] def get_out_prompt_tokens(self): @@ -323,7 +401,26 @@ print_formatted_text(PygmentsTokens(tokens), end='', style = self.pt_cli.app.style) - kernel_info = {} + def get_remote_prompt_tokens(self): + return [ + (Token.RemotePrompt, self.other_output_prefix), + ] + + def print_remote_prompt(self, ec=None): + tokens = self.get_remote_prompt_tokens() + self.get_prompt_tokens(ec=ec) + print_formatted_text( + PygmentsTokens(tokens), end="", style=self.pt_cli.app.style + ) + + @property + def pt_complete_style(self): + return { + "multicolumn": CompleteStyle.MULTI_COLUMN, + "column": CompleteStyle.COLUMN, + "readlinelike": CompleteStyle.READLINE_LIKE, + }[self.display_completions] + + kernel_info: DictType[str, AnyType] = {} def init_kernel_info(self): """Wait for a kernel to be ready, and store kernel info""" @@ -334,9 +431,9 @@ while True: try: reply = self.client.get_shell_msg(timeout=1) - except Empty: + except Empty as e: if (time.time() - tic) > timeout: - raise RuntimeError("Kernel didn't respond to kernel_info_request") + raise RuntimeError("Kernel didn't respond to kernel_info_request") from e else: if reply['parent_header'].get('msg_id') == msg_id: self.kernel_info = reply['content'] @@ -350,8 +447,10 @@ if self.simple_prompt or ('JUPYTER_CONSOLE_TEST' in os.environ): # Simple restricted interface for tests so we can find prompts with # pexpect. Multi-line input not supported. - def prompt(): - return input('In [%d]: ' % self.execution_count) + async def prompt(): + prompt = 'In [%d]: ' % self.execution_count + raw = await async_input(prompt) + return raw self.prompt_for_code = prompt self.print_out_prompt = \ lambda: print('Out[%d]: ' % self.execution_count, end='') @@ -395,6 +494,10 @@ def _(event): event.cli.suspend_to_background() + @kb.add("c-o", filter=(has_focus(DEFAULT_BUFFER) & emacs_insert_mode)) + def _(event): + event.current_buffer.insert_text("\n") + # Pre-populate history from IPython's history database history = InMemoryHistory() last_cell = u"" @@ -410,6 +513,7 @@ Token.PromptNum: '#00ff00 bold', Token.OutPrompt: '#ff2200', Token.OutPromptNum: '#ff0000 bold', + Token.RemotePrompt: '#999900', } if self.highlighting_style: style_cls = get_style_by_name(self.highlighting_style) @@ -444,14 +548,21 @@ Condition(lambda: self.highlight_matching_brackets)) ] + # Tell prompt_toolkit to use the asyncio event loop. + # Obsolete in prompt_toolkit.v3 + if not PTK3: + use_asyncio_event_loop() + self.pt_cli = PromptSession( message=(lambda: PygmentsTokens(self.get_prompt_tokens())), multiline=True, + complete_style=self.pt_complete_style, editing_mode=editing_mode, lexer=PygmentsLexer(get_pygments_lexer(lexer)), prompt_continuation=( - lambda width, lineno, is_soft_wrap: - PygmentsTokens(self.get_continuation_tokens(width)) + lambda width, lineno, is_soft_wrap: PygmentsTokens( + self.get_continuation_tokens(width) + ) ), key_bindings=kb, history=history, @@ -460,21 +571,20 @@ style=style, input_processors=input_processors, color_depth=(ColorDepth.TRUE_COLOR if self.true_color else None), - ) - def prompt_for_code(self): + async def prompt_for_code(self): if self.next_input: default = self.next_input self.next_input = None else: default = '' - with patch_stdout(raw=True): - text = self.pt_cli.prompt( - default=default, -# pre_run=self.pre_prompt,# reset_current_buffer=True, - ) + if PTK3: + text = await self.pt_cli.prompt_async(default=default) + else: + text = await self.pt_cli.prompt(default=default, async_=True) + return text def init_io(self): @@ -523,12 +633,12 @@ set_doc() self.next_input = None - def interact(self, display_banner=None): + async def interact(self, loop=None, display_banner=None): while self.keep_running: print('\n', end='') try: - code = self.prompt_for_code() + code = await self.prompt_for_code() except EOFError: if (not self.confirm_exit) or \ ask_yes_no('Do you really want to exit ([y]/n)?', 'y', 'n'): @@ -540,11 +650,29 @@ def mainloop(self): self.keepkernel = not self.own_kernel + loop = asyncio.get_event_loop() # An extra layer of protection in case someone mashing Ctrl-C breaks # out of our internal code. while True: try: - self.interact() + tasks = [self.interact(loop=loop)] + + if self.include_other_output: + # only poll the iopub channel asynchronously if we + # wish to include external content + tasks.append(self.handle_external_iopub(loop=loop)) + + main_task = asyncio.wait(tasks, loop=loop, return_when=asyncio.FIRST_COMPLETED) + _, pending = loop.run_until_complete(main_task) + + for task in pending: + task.cancel() + try: + loop.run_until_complete(asyncio.gather(*pending)) + except asyncio.CancelledError: + pass + loop.stop() + loop.close() break except KeyboardInterrupt: print("\nKeyboardInterrupt escaped interact()\n") @@ -680,11 +808,9 @@ include_other_output = Bool(False, config=True, help="""Whether to include output from clients other than this one sharing the same kernel. - - Outputs are not displayed until enter is pressed. """ ) - other_output_prefix = Unicode("[remote] ", config=True, + other_output_prefix = Unicode("Remote ", config=True, help="""Prefix to add to outputs coming from clients other than this one. Only relevant if include_other_output is True. @@ -707,6 +833,15 @@ else: return from_here + async def handle_external_iopub(self, loop=None): + while self.keep_running: + # we need to check for keep_running from time to time as + # we are blocking in an executor block which cannot be cancelled. + poll_result = await loop.run_in_executor( + None, self.client.iopub_channel.socket.poll, 500) + if(poll_result): + self.handle_iopub() + def handle_iopub(self, msg_id=''): """Process messages on the IOPub channel @@ -727,6 +862,7 @@ if self.include_output(sub_msg): if msg_type == 'status': self._execution_state = sub_msg["content"]["execution_state"] + elif msg_type == 'stream': if sub_msg["content"]["name"] == "stdout": if self._pending_clearoutput: @@ -765,6 +901,12 @@ print() print(text_repr) + # Remote: add new prompt + if not self.from_here(sub_msg): + sys.stdout.write('\n') + sys.stdout.flush() + self.print_remote_prompt() + elif msg_type == 'display_data': data = sub_msg["content"]["data"] handled = self.handle_rich_data(data) @@ -775,11 +917,19 @@ if 'text/plain' in data: print(data['text/plain']) + # If execute input: print it elif msg_type == 'execute_input': content = sub_msg['content'] - if not self.from_here(sub_msg): - sys.stdout.write(self.other_output_prefix) - sys.stdout.write('In [{}]: '.format(content['execution_count'])) + ec = content.get('execution_count', self.execution_count - 1) + + # New line + sys.stdout.write('\n') + sys.stdout.flush() + + # With `Remote In [3]: ` + self.print_remote_prompt(ec=ec) + + # And the code sys.stdout.write(content['code'] + '\n') elif msg_type == 'clear_output': @@ -818,12 +968,12 @@ from PIL import Image, ImageShow except ImportError: return False - raw = base64.decodestring(data[mime].encode('ascii')) + raw = base64.decodebytes(data[mime].encode('ascii')) img = Image.open(BytesIO(raw)) return ImageShow.show(img) def handle_image_stream(self, data, mime): - raw = base64.decodestring(data[mime].encode('ascii')) + raw = base64.decodebytes(data[mime].encode('ascii')) imageformat = self._imagemime[mime] fmt = dict(format=imageformat) args = [s.format(**fmt) for s in self.stream_image_handler] @@ -835,7 +985,7 @@ return (proc.returncode == 0) def handle_image_tempfile(self, data, mime): - raw = base64.decodestring(data[mime].encode('ascii')) + raw = base64.decodebytes(data[mime].encode('ascii')) imageformat = self._imagemime[mime] filename = 'tmp.{0}'.format(imageformat) with NamedFileInTemporaryDirectory(filename) as f, \ diff -Nru jupyter-console-6.1.0/jupyter_console/tests/conftest.py jupyter-console-6.2.0/jupyter_console/tests/conftest.py --- jupyter-console-6.1.0/jupyter_console/tests/conftest.py 1970-01-01 00:00:00.000000000 +0000 +++ jupyter-console-6.2.0/jupyter_console/tests/conftest.py 2020-08-26 23:59:39.000000000 +0000 @@ -0,0 +1,6 @@ +import pytest + + +@pytest.fixture(autouse=True) +def env_setup(monkeypatch): + monkeypatch.setenv("JUPYTER_CONSOLE_TEST", "1") diff -Nru jupyter-console-6.1.0/jupyter_console/tests/test_console.py jupyter-console-6.2.0/jupyter_console/tests/test_console.py --- jupyter-console-6.1.0/jupyter_console/tests/test_console.py 2020-01-15 23:32:32.000000000 +0000 +++ jupyter-console-6.2.0/jupyter_console/tests/test_console.py 2020-08-26 23:59:39.000000000 +0000 @@ -58,7 +58,8 @@ args = ['-m', 'jupyter_console', '--colors=NoColor'] cmd = sys.executable env = os.environ.copy() - env['JUPYTER_CONSOLE_TEST'] = '1' + env["JUPYTER_CONSOLE_TEST"] = "1" + env["PROMPT_TOOLKIT_NO_CPR"] = "1" try: p = pexpect.spawn(cmd, args=args, env=env) diff -Nru jupyter-console-6.1.0/jupyter_console/tests/test_image_handler.py jupyter-console-6.2.0/jupyter_console/tests/test_image_handler.py --- jupyter-console-6.1.0/jupyter_console/tests/test_image_handler.py 2020-01-15 23:32:32.000000000 +0000 +++ jupyter-console-6.2.0/jupyter_console/tests/test_image_handler.py 2020-08-26 23:59:39.000000000 +0000 @@ -6,10 +6,7 @@ import unittest import base64 -try: - from unittest.mock import patch -except ImportError: - from mock import patch +from unittest.mock import patch from jupyter_console.ptshell import ZMQTerminalInteractiveShell from ipython_genutils.tempdir import TemporaryDirectory @@ -32,7 +29,7 @@ self.shell = NonCommunicatingShell() self.raw = b'dummy data' self.mime = 'image/png' - self.data = {self.mime: base64.encodestring(self.raw).decode('ascii')} + self.data = {self.mime: base64.encodebytes(self.raw).decode('ascii')} def test_call_pil_by_default(self): pil_called_with = [] diff -Nru jupyter-console-6.1.0/jupyter_console/_version.py jupyter-console-6.2.0/jupyter_console/_version.py --- jupyter-console-6.1.0/jupyter_console/_version.py 2020-01-16 22:09:54.000000000 +0000 +++ jupyter-console-6.2.0/jupyter_console/_version.py 2020-08-28 19:43:15.000000000 +0000 @@ -5,6 +5,6 @@ See PEP 440 https://www.python.org/dev/peps/pep-0440/ """ -version_info = (6, 1, 0) +version_info = (6, 2, 0) __version__ = '.'.join(map(str, version_info[:3])) + ''.join(version_info[3:]) diff -Nru jupyter-console-6.1.0/jupyter_console/zmqhistory.py jupyter-console-6.2.0/jupyter_console/zmqhistory.py --- jupyter-console-6.1.0/jupyter_console/zmqhistory.py 2020-01-15 23:32:32.000000000 +0000 +++ jupyter-console-6.2.0/jupyter_console/zmqhistory.py 2020-08-26 23:59:39.000000000 +0000 @@ -14,10 +14,7 @@ from IPython.core.history import HistoryAccessorBase from traitlets import Dict, List -try: - from queue import Empty # Py 3 -except ImportError: - from Queue import Empty # Py 2 +from queue import Empty # Py 3 class ZMQHistoryManager(HistoryAccessorBase): """History accessor and manager for ZMQ-based kernels""" diff -Nru jupyter-console-6.1.0/jupyter_console.egg-info/PKG-INFO jupyter-console-6.2.0/jupyter_console.egg-info/PKG-INFO --- jupyter-console-6.1.0/jupyter_console.egg-info/PKG-INFO 2020-01-16 22:11:15.000000000 +0000 +++ jupyter-console-6.2.0/jupyter_console.egg-info/PKG-INFO 2020-08-28 19:46:25.000000000 +0000 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: jupyter-console -Version: 6.1.0 +Version: 6.2.0 Summary: Jupyter terminal console Home-page: https://jupyter.org Author: Jupyter Development Team @@ -17,5 +17,5 @@ Classifier: License :: OSI Approved :: BSD License Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 3 -Requires-Python: >=3.5 +Requires-Python: >=3.6 Provides-Extra: test diff -Nru jupyter-console-6.1.0/jupyter_console.egg-info/SOURCES.txt jupyter-console-6.2.0/jupyter_console.egg-info/SOURCES.txt --- jupyter-console-6.1.0/jupyter_console.egg-info/SOURCES.txt 2020-01-16 22:11:15.000000000 +0000 +++ jupyter-console-6.2.0/jupyter_console.egg-info/SOURCES.txt 2020-08-28 19:46:25.000000000 +0000 @@ -1,9 +1,19 @@ +.bumpversion.cfg +.gitignore +.mailmap +.travis.yml CONTRIBUTING.md COPYING.md MANIFEST.in README.md +RELEASING.md +mypy.ini +pyproject.toml +pytest.ini +readthedocs.yml setup.cfg setup.py +.github/workflows/python-package.yml docs/Makefile docs/autogen_config.py docs/changelog.rst @@ -27,6 +37,8 @@ jupyter_console.egg-info/requires.txt jupyter_console.egg-info/top_level.txt jupyter_console/tests/__init__.py +jupyter_console/tests/conftest.py jupyter_console/tests/test_console.py jupyter_console/tests/test_image_handler.py -jupyter_console/tests/writetofile.py \ No newline at end of file +jupyter_console/tests/writetofile.py +scripts/jupyter-console \ No newline at end of file diff -Nru jupyter-console-6.1.0/.mailmap jupyter-console-6.2.0/.mailmap --- jupyter-console-6.1.0/.mailmap 1970-01-01 00:00:00.000000000 +0000 +++ jupyter-console-6.2.0/.mailmap 2015-05-24 19:45:12.000000000 +0000 @@ -0,0 +1,149 @@ +A. J. Holyoake ajholyoake +Aaron Culich Aaron Culich +Aron Ahmadia ahmadia +Benjamin Ragan-Kelley +Benjamin Ragan-Kelley Min RK +Benjamin Ragan-Kelley MinRK +Barry Wark Barry Wark +Ben Edwards Ben Edwards +Bradley M. Froehle Bradley M. Froehle +Bradley M. Froehle Bradley Froehle +Brandon Parsons Brandon Parsons +Brian E. Granger Brian Granger +Brian E. Granger Brian Granger <> +Brian E. Granger bgranger <> +Brian E. Granger bgranger +Christoph Gohlke cgohlke +Cyrille Rossant rossant +Damián Avila damianavila +Damián Avila damianavila +Damon Allen damontallen +Darren Dale darren.dale <> +Darren Dale Darren Dale <> +Dav Clark Dav Clark <> +Dav Clark Dav Clark +David Hirschfeld dhirschfeld +David P. Sanders David P. Sanders +David Warde-Farley David Warde-Farley <> +Doug Blank Doug Blank +Eugene Van den Bulke Eugene Van den Bulke +Evan Patterson +Evan Patterson +Evan Patterson +Evan Patterson +Evan Patterson epatters +Evan Patterson epatters +Ernie French Ernie French +Ernie French ernie french +Ernie French ernop +Fernando Perez +Fernando Perez Fernando Perez +Fernando Perez fperez <> +Fernando Perez fptest <> +Fernando Perez fptest1 <> +Fernando Perez Fernando Perez +Fernando Perez Fernando Perez <> +Fernando Perez Fernando Perez +Frank Murphy Frank Murphy +Gabriel Becker gmbecker +Gael Varoquaux gael.varoquaux <> +Gael Varoquaux gvaroquaux +Gael Varoquaux Gael Varoquaux <> +Ingolf Becker watercrossing +Jake Vanderplas Jake Vanderplas +Jakob Gager jakobgager +Jakob Gager jakobgager +Jakob Gager jakobgager +Jason Grout +Jason Grout +Jason Gors jason gors +Jason Gors jgors +Jens Hedegaard Nielsen Jens Hedegaard Nielsen +Jens Hedegaard Nielsen Jens H Nielsen +Jens Hedegaard Nielsen Jens H. Nielsen +Jez Ng Jez Ng +Jonathan Frederic Jonathan Frederic +Jonathan Frederic Jonathan Frederic +Jonathan Frederic Jonathan Frederic +Jonathan Frederic jon +Jonathan Frederic U-Jon-PC\Jon +Jonathan March Jonathan March +Jonathan March jdmarch +Jörgen Stenarson Jörgen Stenarson +Jörgen Stenarson Jorgen Stenarson +Jörgen Stenarson Jorgen Stenarson <> +Jörgen Stenarson jstenar +Jörgen Stenarson jstenar <> +Jörgen Stenarson Jörgen Stenarson +Juergen Hasch juhasch +Juergen Hasch juhasch +Julia Evans Julia Evans +Kester Tong KesterTong +Kyle Kelley Kyle Kelley +Kyle Kelley rgbkrk +Laurent Dufréchou +Laurent Dufréchou +Laurent Dufréchou laurent dufrechou <> +Laurent Dufréchou laurent.dufrechou <> +Laurent Dufréchou Laurent Dufrechou <> +Laurent Dufréchou laurent.dufrechou@gmail.com <> +Laurent Dufréchou ldufrechou +Lorena Pantano Lorena +Luis Pedro Coelho Luis Pedro Coelho +Marc Molla marcmolla +Martín Gaitán Martín Gaitán +Matthias Bussonnier Matthias BUSSONNIER +Matthias Bussonnier Bussonnier Matthias +Matthias Bussonnier Matthias BUSSONNIER +Matthias Bussonnier Matthias Bussonnier +Michael Droettboom Michael Droettboom +Nicholas Bollweg Nicholas Bollweg (Nick) +Nicolas Rougier +Nikolay Koldunov Nikolay Koldunov +Omar Andrés Zapata Mesa Omar Andres Zapata Mesa +Omar Andrés Zapata Mesa Omar Andres Zapata Mesa +Pankaj Pandey Pankaj Pandey +Pascal Schetelat pascal-schetelat +Paul Ivanov Paul Ivanov +Pauli Virtanen Pauli Virtanen <> +Pauli Virtanen Pauli Virtanen +Pierre Gerold Pierre Gerold +Pietro Berkes Pietro Berkes +Piti Ongmongkolkul piti118 +Prabhu Ramachandran Prabhu Ramachandran <> +Puneeth Chaganti Puneeth Chaganti +Robert Kern rkern <> +Robert Kern Robert Kern +Robert Kern Robert Kern +Robert Kern Robert Kern <> +Robert Marchman Robert Marchman +Satrajit Ghosh Satrajit Ghosh +Satrajit Ghosh Satrajit Ghosh +Scott Sanderson Scott Sanderson +smithj1 smithj1 +smithj1 smithj1 +Steven Johnson stevenJohnson +Steven Silvester blink1073 +S. Weber s8weber +Stefan van der Walt Stefan van der Walt +Silvia Vinyes Silvia +Silvia Vinyes silviav12 +Sylvain Corlay +Sylvain Corlay sylvain.corlay +Ted Drain TD22057 +Théophile Studer Théophile Studer +Thomas Kluyver Thomas +Thomas Spura Thomas Spura +Timo Paulssen timo +vds vds2212 +vds vds +Ville M. Vainio +Ville M. Vainio ville +Ville M. Vainio ville +Ville M. Vainio vivainio <> +Ville M. Vainio Ville M. Vainio +Ville M. Vainio Ville M. Vainio +Walter Doerwald walter.doerwald <> +Walter Doerwald Walter Doerwald <> +W. Trevor King W. Trevor King +Yoval P. y-p diff -Nru jupyter-console-6.1.0/MANIFEST.in jupyter-console-6.2.0/MANIFEST.in --- jupyter-console-6.1.0/MANIFEST.in 2020-01-15 23:32:32.000000000 +0000 +++ jupyter-console-6.2.0/MANIFEST.in 2020-08-27 23:13:10.000000000 +0000 @@ -4,6 +4,7 @@ # Documentation graft docs +graft scripts exclude docs/\#* # Examples @@ -20,3 +21,10 @@ global-exclude *.pyo global-exclude .git global-exclude .ipynb_checkpoints + +include *.md +include *.yml +include .bumpversion.cfg +include mypy.ini +include pytest.ini +include .mailmap diff -Nru jupyter-console-6.1.0/mypy.ini jupyter-console-6.2.0/mypy.ini --- jupyter-console-6.1.0/mypy.ini 1970-01-01 00:00:00.000000000 +0000 +++ jupyter-console-6.2.0/mypy.ini 2020-08-26 23:59:39.000000000 +0000 @@ -0,0 +1,4 @@ +[mypy] +python_version = 3.6 +ignore_missing_imports = True +follow_imports = silent diff -Nru jupyter-console-6.1.0/PKG-INFO jupyter-console-6.2.0/PKG-INFO --- jupyter-console-6.1.0/PKG-INFO 2020-01-16 22:11:15.000000000 +0000 +++ jupyter-console-6.2.0/PKG-INFO 2020-08-28 19:46:25.000000000 +0000 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: jupyter_console -Version: 6.1.0 +Version: 6.2.0 Summary: Jupyter terminal console Home-page: https://jupyter.org Author: Jupyter Development Team @@ -17,5 +17,5 @@ Classifier: License :: OSI Approved :: BSD License Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 3 -Requires-Python: >=3.5 +Requires-Python: >=3.6 Provides-Extra: test diff -Nru jupyter-console-6.1.0/pyproject.toml jupyter-console-6.2.0/pyproject.toml --- jupyter-console-6.1.0/pyproject.toml 1970-01-01 00:00:00.000000000 +0000 +++ jupyter-console-6.2.0/pyproject.toml 2020-08-27 23:13:10.000000000 +0000 @@ -0,0 +1,3 @@ +[build-system] +requires = ["setuptools>=40.8.0", "wheel"] +build-backend = "setuptools.build_meta" diff -Nru jupyter-console-6.1.0/pytest.ini jupyter-console-6.2.0/pytest.ini --- jupyter-console-6.1.0/pytest.ini 1970-01-01 00:00:00.000000000 +0000 +++ jupyter-console-6.2.0/pytest.ini 2020-08-26 23:59:39.000000000 +0000 @@ -0,0 +1,2 @@ +[pytest] +addopts = --durations=10 diff -Nru jupyter-console-6.1.0/README.md jupyter-console-6.2.0/README.md --- jupyter-console-6.1.0/README.md 2020-01-15 23:32:32.000000000 +0000 +++ jupyter-console-6.2.0/README.md 2020-08-27 23:13:10.000000000 +0000 @@ -33,6 +33,14 @@ jupyter kernelspec list +### Release build: + +```bash +$ pip install pep517 +$ python -m pep517.build . +``` + + ## Resources - [Project Jupyter website](https://jupyter.org) - [Documentation for Jupyter Console](https://jupyter-console.readthedocs.io/en/latest/) [[PDF](https://media.readthedocs.org/pdf/jupyter-console/latest/jupyter-notebook.pdf)] diff -Nru jupyter-console-6.1.0/readthedocs.yml jupyter-console-6.2.0/readthedocs.yml --- jupyter-console-6.1.0/readthedocs.yml 1970-01-01 00:00:00.000000000 +0000 +++ jupyter-console-6.2.0/readthedocs.yml 2017-01-19 23:59:35.000000000 +0000 @@ -0,0 +1,9 @@ +conda: + file: docs/environment.yml +python: + version: 3 + setup_py_install: true + pip install: true +formats: + - epub + - pdf diff -Nru jupyter-console-6.1.0/RELEASING.md jupyter-console-6.2.0/RELEASING.md --- jupyter-console-6.1.0/RELEASING.md 1970-01-01 00:00:00.000000000 +0000 +++ jupyter-console-6.2.0/RELEASING.md 2020-08-26 23:59:39.000000000 +0000 @@ -0,0 +1,36 @@ +# Releasing + +## Prerequisites + +- Install `bump2version` +- Install `twine` + +## Push to GitHub + +Change from patch to minor or major for appropriate version updates. + +```bash +# Commit, test, publish, tag release +bump2version minor # CHECK FIRST: If the patch version currently set is not sufficient +git commit -am "Prepared " +bump2version suffix # Remove the .dev +git commit -am "Generated release " +git tag +git push && git push --tags +``` + +## Push to PyPI + +```bash +rm -rf dist/* +rm -rf build/* +python setup.py sdist bdist_wheel +# Double check the dist/* files have the right verison (no `.dev`) and install the wheel to ensure it's good +pip install dist/* +twine upload dist/* +``` + +## Prep repo for development + +- `bumpversion patch # Resets the patch and dev versions` +- `git commit -am "Resumed patch dev"; git push` diff -Nru jupyter-console-6.1.0/scripts/jupyter-console jupyter-console-6.2.0/scripts/jupyter-console --- jupyter-console-6.1.0/scripts/jupyter-console 1970-01-01 00:00:00.000000000 +0000 +++ jupyter-console-6.2.0/scripts/jupyter-console 2016-03-10 18:38:25.000000000 +0000 @@ -0,0 +1,5 @@ +#!/usr/bin/env python +from jupyter_console import app + +if __name__ == '__main__': + app.main() diff -Nru jupyter-console-6.1.0/setup.cfg jupyter-console-6.2.0/setup.cfg --- jupyter-console-6.1.0/setup.cfg 2020-01-16 22:11:15.000000000 +0000 +++ jupyter-console-6.2.0/setup.cfg 2020-08-28 19:46:25.000000000 +0000 @@ -1,6 +1,3 @@ -[bdist_wheel] -universal = 1 - [flake8] max-line-length = 99 diff -Nru jupyter-console-6.1.0/setup.py jupyter-console-6.2.0/setup.py --- jupyter-console-6.1.0/setup.py 2020-01-15 23:32:32.000000000 +0000 +++ jupyter-console-6.2.0/setup.py 2020-08-27 23:13:10.000000000 +0000 @@ -16,7 +16,7 @@ import sys -if sys.version_info < (3, 5): +if sys.version_info < (3, 6): pip_message = 'This may be due to an out of date pip. Make sure you have pip >= 9.0.1.' try: import pip @@ -51,7 +51,7 @@ import os from glob import glob -from distutils.core import setup +from setuptools import setup pjoin = os.path.join here = os.path.abspath(os.path.dirname(__file__)) @@ -108,7 +108,7 @@ } -setuptools_args['python_requires'] = '>=3.5' +setuptools_args['python_requires'] = '>=3.6' setuptools_args['entry_points'] = { diff -Nru jupyter-console-6.1.0/.travis.yml jupyter-console-6.2.0/.travis.yml --- jupyter-console-6.1.0/.travis.yml 1970-01-01 00:00:00.000000000 +0000 +++ jupyter-console-6.2.0/.travis.yml 2020-08-27 23:13:10.000000000 +0000 @@ -0,0 +1,20 @@ +language: python +python: + - 3.7 + - 3.8 +before_install: + - git clone --quiet --depth 1 https://github.com/minrk/travis-wheels travis-wheels +install: + - pip install --upgrade pip + - pip install --upgrade setuptools + - pip install mypy darker pep517 check-manifest + - pip install -f travis-wheels/wheelhouse --pre -e . coveralls + - python -m ipykernel.kernelspec --user +script: + - python -m pep517.build . + - check-manifest + - nosetests --with-coverage --cover-package=jupyter_console jupyter_console + - darker -r ac4cf65598ea417f6b69a80c162904bbce7547b3 jupyter_console + - mypy jupyter_console +after_success: + - coveralls