1
0
Fork 0

Adding upstream version 3.0.20.

Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
Daniel Baumann 2025-02-09 18:27:27 +01:00
parent 6e91d72088
commit d9141a2af9
Signed by: daniel
GPG key ID: FBB4F0E80A80222F
16 changed files with 658 additions and 152 deletions

View file

@ -1,39 +0,0 @@
name: test
on:
push: # any branch
pull_request:
branches: [master]
jobs:
test-ubuntu:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: [3.6, 3.7, 3.8, 3.9]
steps:
- uses: actions/checkout@v2
- name: Setup Python ${{ matrix.python-version }}
uses: actions/setup-python@v1
with:
python-version: ${{ matrix.python-version }}
- name: Install Dependencies
run: |
sudo apt remove python3-pip
python -m pip install --upgrade pip
python -m pip install . black isort mypy pytest readme_renderer
python -m pip install . types-dataclasses # Needed for Python 3.6
pip list
- name: Type Checker
run: |
mypy ptpython
isort -c --profile black ptpython examples setup.py
black --check ptpython examples setup.py
- name: Run Tests
run: |
./tests/run_tests.py
- name: Validate README.md
# Ensure that the README renders correctly (required for uploading to PyPI).
run: |
python -m readme_renderer README.rst > /dev/null

View file

@ -1,7 +1,19 @@
CHANGELOG CHANGELOG
========= =========
3.0.19: 2020-07-08 3.0.20: 2021-09-14
------------------
New features:
- For `DictionaryCompleter`: show parentheses after methods.
Fixes:
- Don't crash when trying to complete broken mappings in `DictionaryCompleter`.
- Don't crash when an older version of `black` is installed that is not
compatible.
3.0.19: 2021-07-08
------------------ ------------------
Fixes: Fixes:
@ -10,14 +22,14 @@ Fixes:
- Allow usage of `await` in assignment expressions or for-loops. - Allow usage of `await` in assignment expressions or for-loops.
3.0.18: 2020-06-26 3.0.18: 2021-06-26
------------------ ------------------
Fixes: Fixes:
- Made "black" an optional dependency. - Made "black" an optional dependency.
3.0.17: 2020-03-22 3.0.17: 2021-03-22
------------------ ------------------
Fixes: Fixes:
@ -26,7 +38,7 @@ Fixes:
- Fix race condition during retrieval of signatures. - Fix race condition during retrieval of signatures.
3.0.16: 2020-02-11 3.0.16: 2021-02-11
------------------ ------------------
(Commit 7f619e was missing in previous release.) (Commit 7f619e was missing in previous release.)
@ -38,7 +50,7 @@ Fixes:
completions were missed out if the fuzzy completer doesn't find them. completions were missed out if the fuzzy completer doesn't find them.
3.0.15: 2020-02-11 3.0.15: 2021-02-11
------------------ ------------------
New features: New features:
@ -48,7 +60,7 @@ Fixes:
- Fix `AttributeError` during retrieval of signatures with type annotations. - Fix `AttributeError` during retrieval of signatures with type annotations.
3.0.14: 2020-02-10 3.0.14: 2021-02-10
------------------ ------------------
New features: New features:
@ -67,7 +79,7 @@ Fixes:
- Hide signature when sidebar is visible. - Hide signature when sidebar is visible.
3.0.13: 2020-01-26 3.0.13: 2021-01-26
------------------ ------------------
New features: New features:
@ -82,7 +94,7 @@ Fixes:
- Fix line ending bug in pager. - Fix line ending bug in pager.
3.0.12: 2020-01-24 3.0.12: 2021-01-24
------------------ ------------------
New features: New features:
@ -96,7 +108,7 @@ Fixes:
- Properly handle `SystemExit`. - Properly handle `SystemExit`.
3.0.11: 2020-01-20 3.0.11: 2021-01-20
------------------ ------------------
New features: New features:
@ -119,7 +131,7 @@ Fixes:
- Don't execute PYTHONSTARTUP when -i flag was given. - Don't execute PYTHONSTARTUP when -i flag was given.
3.0.10: 2020-01-13 3.0.10: 2021-01-13
------------------ ------------------
Fixes: Fixes:
@ -128,7 +140,7 @@ Fixes:
default. default.
3.0.9: 2020-01-10 3.0.9: 2021-01-10
----------------- -----------------
New features: New features:
@ -137,7 +149,7 @@ New features:
- Show REPL title in pager. - Show REPL title in pager.
3.0.8: 2020-01-05 3.0.8: 2021-01-05
----------------- -----------------
New features: New features:

263
PKG-INFO Normal file
View file

@ -0,0 +1,263 @@
Metadata-Version: 2.1
Name: ptpython
Version: 3.0.20
Summary: Python REPL build on top of prompt_toolkit
Home-page: https://github.com/prompt-toolkit/ptpython
Author: Jonathan Slenders
License: UNKNOWN
Description: ptpython
========
|Build Status| |PyPI| |License|
*A better Python REPL*
::
pip install ptpython
.. image :: https://github.com/jonathanslenders/ptpython/raw/master/docs/images/example1.png
Ptpython is an advanced Python REPL. It should work on all
Python versions from 2.6 up to 3.9 and work cross platform (Linux,
BSD, OS X and Windows).
Note: this version of ptpython requires at least Python 3.6. Install ptpython
2.0.5 for older Python versions.
Installation
************
Install it using pip:
::
pip install ptpython
Start it by typing ``ptpython``.
Features
********
- Syntax highlighting.
- Multiline editing (the up arrow works).
- Autocompletion.
- Mouse support. [1]
- Support for color schemes.
- Support for `bracketed paste <https://cirw.in/blog/bracketed-paste>`_ [2].
- Both Vi and Emacs key bindings.
- Support for double width (Chinese) characters.
- ... and many other things.
[1] Disabled by default. (Enable in the menu.)
[2] If the terminal supports it (most terminals do), this allows pasting
without going into paste mode. It will keep the indentation.
__pt_repr__: A nicer repr with colors
*************************************
When classes implement a ``__pt_repr__`` method, this will be used instead of
``__repr__`` for printing. Any `prompt_toolkit "formatted text"
<https://python-prompt-toolkit.readthedocs.io/en/master/pages/printing_text.html>`_
can be returned from here. In order to avoid writing a ``__repr__`` as well,
the ``ptpython.utils.ptrepr_to_repr`` decorator can be applied. For instance:
.. code:: python
from ptpython.utils import ptrepr_to_repr
from prompt_toolkit.formatted_text import HTML
@ptrepr_to_repr
class MyClass:
def __pt_repr__(self):
return HTML('<yellow>Hello world!</yellow>')
More screenshots
****************
The configuration menu:
.. image :: https://github.com/jonathanslenders/ptpython/raw/master/docs/images/ptpython-menu.png
The history page and its help:
.. image :: https://github.com/jonathanslenders/ptpython/raw/master/docs/images/ptpython-history-help.png
Autocompletion:
.. image :: https://github.com/jonathanslenders/ptpython/raw/master/docs/images/file-completion.png
Embedding the REPL
******************
Embedding the REPL in any Python application is easy:
.. code:: python
from ptpython.repl import embed
embed(globals(), locals())
You can make ptpython your default Python REPL by creating a `PYTHONSTARTUP file
<https://docs.python.org/3/tutorial/appendix.html#the-interactive-startup-file>`_ containing code
like this:
.. code:: python
import sys
try:
from ptpython.repl import embed
except ImportError:
print("ptpython is not available: falling back to standard prompt")
else:
sys.exit(embed(globals(), locals()))
Multiline editing
*****************
Multi-line editing mode will automatically turn on when you press enter after a
colon.
To execute the input in multi-line mode, you can either press ``Alt+Enter``, or
``Esc`` followed by ``Enter``. (If you want the first to work in the OS X
terminal, you have to check the "Use option as meta key" checkbox in your
terminal settings. For iTerm2, you have to check "Left option acts as +Esc" in
the options.)
.. image :: https://github.com/jonathanslenders/ptpython/raw/master/docs/images/multiline.png
Syntax validation
*****************
Before execution, ``ptpython`` will see whether the input is syntactically
correct Python code. If not, it will show a warning, and move the cursor to the
error.
.. image :: https://github.com/jonathanslenders/ptpython/raw/master/docs/images/validation.png
Additional features
*******************
Running system commands: Press ``Meta-!`` in Emacs mode or just ``!`` in Vi
navigation mode to see the "Shell command" prompt. There you can enter system
commands without leaving the REPL.
Selecting text: Press ``Control+Space`` in Emacs mode or ``V`` (major V) in Vi
navigation mode.
Configuration
*************
It is possible to create a ``config.py`` file to customize configuration.
ptpython will look in an appropriate platform-specific directory via `appdirs
<https://pypi.org/project/appdirs/>`. See the ``appdirs`` documentation for the
precise location for your platform. A ``PTPYTHON_CONFIG_HOME`` environment
variable, if set, can also be used to explicitly override where configuration
is looked for.
Have a look at this example to see what is possible:
`config.py <https://github.com/jonathanslenders/ptpython/blob/master/examples/ptpython_config/config.py>`_
IPython support
***************
Run ``ptipython`` (prompt_toolkit - IPython), to get a nice interactive shell
with all the power that IPython has to offer, like magic functions and shell
integration. Make sure that IPython has been installed. (``pip install
ipython``)
.. image :: https://github.com/jonathanslenders/ptpython/raw/master/docs/images/ipython.png
This is also available for embedding:
.. code:: python
from ptpython.ipython.repl import embed
embed(globals(), locals())
Django support
**************
`django-extensions <https://github.com/django-extensions/django-extensions>`_
has a ``shell_plus`` management command. When ``ptpython`` has been installed,
it will by default use ``ptpython`` or ``ptipython``.
PDB
***
There is an experimental PDB replacement: `ptpdb
<https://github.com/jonathanslenders/ptpdb>`_.
Windows support
***************
``prompt_toolkit`` and ``ptpython`` works better on Linux and OS X than on
Windows. Some things might not work, but it is usable:
.. image :: https://github.com/jonathanslenders/ptpython/raw/master/docs/images/windows.png
FAQ
***
**Q**: The ``Ctrl-S`` forward search doesn't work and freezes my terminal.
**A**: Try to run ``stty -ixon`` in your terminal to disable flow control.
**Q**: The ``Meta``-key doesn't work.
**A**: For some terminals you have to enable the Alt-key to act as meta key, but you
can also type ``Escape`` before any key instead.
Alternatives
************
- `BPython <http://bpython-interpreter.org/downloads.html>`_
- `IPython <https://ipython.org/>`_
If you find another alternative, you can create an issue and we'll list it
here. If you find a nice feature somewhere that is missing in ``ptpython``,
also create a GitHub issue and maybe we'll implement it.
Special thanks to
*****************
- `Pygments <http://pygments.org/>`_: Syntax highlighter.
- `Jedi <http://jedi.jedidjah.ch/en/latest/>`_: Autocompletion library.
- `wcwidth <https://github.com/jquast/wcwidth>`_: Determine columns needed for a wide characters.
- `prompt_toolkit <http://github.com/jonathanslenders/python-prompt-toolkit>`_ for the interface.
.. |Build Status| image:: https://api.travis-ci.org/prompt-toolkit/ptpython.svg?branch=master
:target: https://travis-ci.org/prompt-toolkit/ptpython#
.. |License| image:: https://img.shields.io/github/license/prompt-toolkit/ptpython.svg
:target: https://github.com/prompt-toolkit/ptpython/blob/master/LICENSE
.. |PyPI| image:: https://pypip.in/version/ptpython/badge.svg
:target: https://pypi.python.org/pypi/ptpython/
:alt: Latest Version
Platform: UNKNOWN
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python
Requires-Python: >=3.6
Provides-Extra: ptipython
Provides-Extra: all

View file

@ -1,91 +0,0 @@
Concurrency-related challenges regarding embedding of ptpython in asyncio code
==============================================================================
Things we want to be possible
-----------------------------
- Embed blocking ptpython in non-asyncio code (the normal use case).
- Embed blocking ptpython in asyncio code (the event loop will block).
- Embed awaitable ptpython in asyncio code (the loop will continue).
- React to resize events (SIGWINCH).
- Support top-level await.
- Be able to patch_stdout, so that logging messages from another thread will be
printed above the prompt.
- It should be possible to handle `KeyboardInterrupt` during evaluation of an
expression.
- The "eval" should happen in the same thread from where embed() was called.
Limitations of asyncio/python
-----------------------------
- We can only listen to SIGWINCH signal (resize) events in the main thread.
- Usage of Control-C for triggering a `KeyboardInterrupt` only works for code
running in the main thread. (And only if the terminal was not set in raw
input mode).
- Spawning a new event loop from within a coroutine, that's being executed in
an existing event loop is not allowed in asyncio. We can however spawn any
event loop in a separate thread, and wait for that thread to finish.
- For patch_stdout to work correctly, we have to know what prompt_toolkit
application is running on the terminal, then tell that application to print
the output and redraw itself.
Additional challenges for IPython
---------------------------------
IPython supports integration of 3rd party event loops (for various GUI
toolkits). These event loops are supposed to continue running while we are
prompting for input. In an asyncio environment, it means that there are
situations where we have to juggle three event loops:
- The asyncio loop in which the code was embedded.
- The asyncio loop from the prompt.
- The 3rd party GUI loop.
Approach taken in ptpython 3.0.11
---------------------------------
For ptpython, the most reliable solution is to to run the prompt_toolkit input
prompt in a separate background thread. This way it can use its own asyncio
event loop without ever having to interfere with whatever runs in the main
thread.
Then, depending on how we embed, we do the following:
When a normal blocking embed is used:
* We start the UI thread for the input, and do a blocking wait on
`thread.join()` here.
* The "eval" happens in the main thread.
* The "print" happens also in the main thread. Unless a pager is shown,
which is also a prompt_toolkit application, then the pager itself is runs
also in another thread, similar to the way we do the input.
When an awaitable embed is used, for embedding in a coroutine, but having the
event loop continue:
* We run the input method from the blocking embed in an asyncio executor
and do an `await loop.run_in_excecutor(...)`.
* The "eval" happens again in the main thread.
* "print" is also similar, except that the pager code (if used) runs in an
executor too.
This means that the prompt_toolkit application code will always run in a
different thread. It means it won't be able to respond to SIGWINCH (window
resize events), but prompt_toolkit's 3.0.11 has now terminal size polling which
solves this.
Control-C key presses won't interrupt the main thread while we wait for input,
because the prompt_toolkit application turns the terminal in raw mode, while
it's reading, which means that it will receive control-c key presses as raw
data in its own thread.
Top-level await works in most situations as expected.
- If a blocking embed is used. We execute ``loop.run_until_complete(code)``.
This assumes that the blocking embed is not used in a coroutine of a running
event loop, otherwise, this will attempt to start a nested event loop, which
asyncio does not support. In that case we will get an exception.
- If an awaitable embed is used. We literally execute ``await code``. This will
integrate nicely in the current event loop.

View file

@ -1,6 +0,0 @@
[mypy]
ignore_missing_imports = True
no_implicit_optional = True
platform = win32
strict_equality = True
strict_optional = True

263
ptpython.egg-info/PKG-INFO Normal file
View file

@ -0,0 +1,263 @@
Metadata-Version: 2.1
Name: ptpython
Version: 3.0.20
Summary: Python REPL build on top of prompt_toolkit
Home-page: https://github.com/prompt-toolkit/ptpython
Author: Jonathan Slenders
License: UNKNOWN
Description: ptpython
========
|Build Status| |PyPI| |License|
*A better Python REPL*
::
pip install ptpython
.. image :: https://github.com/jonathanslenders/ptpython/raw/master/docs/images/example1.png
Ptpython is an advanced Python REPL. It should work on all
Python versions from 2.6 up to 3.9 and work cross platform (Linux,
BSD, OS X and Windows).
Note: this version of ptpython requires at least Python 3.6. Install ptpython
2.0.5 for older Python versions.
Installation
************
Install it using pip:
::
pip install ptpython
Start it by typing ``ptpython``.
Features
********
- Syntax highlighting.
- Multiline editing (the up arrow works).
- Autocompletion.
- Mouse support. [1]
- Support for color schemes.
- Support for `bracketed paste <https://cirw.in/blog/bracketed-paste>`_ [2].
- Both Vi and Emacs key bindings.
- Support for double width (Chinese) characters.
- ... and many other things.
[1] Disabled by default. (Enable in the menu.)
[2] If the terminal supports it (most terminals do), this allows pasting
without going into paste mode. It will keep the indentation.
__pt_repr__: A nicer repr with colors
*************************************
When classes implement a ``__pt_repr__`` method, this will be used instead of
``__repr__`` for printing. Any `prompt_toolkit "formatted text"
<https://python-prompt-toolkit.readthedocs.io/en/master/pages/printing_text.html>`_
can be returned from here. In order to avoid writing a ``__repr__`` as well,
the ``ptpython.utils.ptrepr_to_repr`` decorator can be applied. For instance:
.. code:: python
from ptpython.utils import ptrepr_to_repr
from prompt_toolkit.formatted_text import HTML
@ptrepr_to_repr
class MyClass:
def __pt_repr__(self):
return HTML('<yellow>Hello world!</yellow>')
More screenshots
****************
The configuration menu:
.. image :: https://github.com/jonathanslenders/ptpython/raw/master/docs/images/ptpython-menu.png
The history page and its help:
.. image :: https://github.com/jonathanslenders/ptpython/raw/master/docs/images/ptpython-history-help.png
Autocompletion:
.. image :: https://github.com/jonathanslenders/ptpython/raw/master/docs/images/file-completion.png
Embedding the REPL
******************
Embedding the REPL in any Python application is easy:
.. code:: python
from ptpython.repl import embed
embed(globals(), locals())
You can make ptpython your default Python REPL by creating a `PYTHONSTARTUP file
<https://docs.python.org/3/tutorial/appendix.html#the-interactive-startup-file>`_ containing code
like this:
.. code:: python
import sys
try:
from ptpython.repl import embed
except ImportError:
print("ptpython is not available: falling back to standard prompt")
else:
sys.exit(embed(globals(), locals()))
Multiline editing
*****************
Multi-line editing mode will automatically turn on when you press enter after a
colon.
To execute the input in multi-line mode, you can either press ``Alt+Enter``, or
``Esc`` followed by ``Enter``. (If you want the first to work in the OS X
terminal, you have to check the "Use option as meta key" checkbox in your
terminal settings. For iTerm2, you have to check "Left option acts as +Esc" in
the options.)
.. image :: https://github.com/jonathanslenders/ptpython/raw/master/docs/images/multiline.png
Syntax validation
*****************
Before execution, ``ptpython`` will see whether the input is syntactically
correct Python code. If not, it will show a warning, and move the cursor to the
error.
.. image :: https://github.com/jonathanslenders/ptpython/raw/master/docs/images/validation.png
Additional features
*******************
Running system commands: Press ``Meta-!`` in Emacs mode or just ``!`` in Vi
navigation mode to see the "Shell command" prompt. There you can enter system
commands without leaving the REPL.
Selecting text: Press ``Control+Space`` in Emacs mode or ``V`` (major V) in Vi
navigation mode.
Configuration
*************
It is possible to create a ``config.py`` file to customize configuration.
ptpython will look in an appropriate platform-specific directory via `appdirs
<https://pypi.org/project/appdirs/>`. See the ``appdirs`` documentation for the
precise location for your platform. A ``PTPYTHON_CONFIG_HOME`` environment
variable, if set, can also be used to explicitly override where configuration
is looked for.
Have a look at this example to see what is possible:
`config.py <https://github.com/jonathanslenders/ptpython/blob/master/examples/ptpython_config/config.py>`_
IPython support
***************
Run ``ptipython`` (prompt_toolkit - IPython), to get a nice interactive shell
with all the power that IPython has to offer, like magic functions and shell
integration. Make sure that IPython has been installed. (``pip install
ipython``)
.. image :: https://github.com/jonathanslenders/ptpython/raw/master/docs/images/ipython.png
This is also available for embedding:
.. code:: python
from ptpython.ipython.repl import embed
embed(globals(), locals())
Django support
**************
`django-extensions <https://github.com/django-extensions/django-extensions>`_
has a ``shell_plus`` management command. When ``ptpython`` has been installed,
it will by default use ``ptpython`` or ``ptipython``.
PDB
***
There is an experimental PDB replacement: `ptpdb
<https://github.com/jonathanslenders/ptpdb>`_.
Windows support
***************
``prompt_toolkit`` and ``ptpython`` works better on Linux and OS X than on
Windows. Some things might not work, but it is usable:
.. image :: https://github.com/jonathanslenders/ptpython/raw/master/docs/images/windows.png
FAQ
***
**Q**: The ``Ctrl-S`` forward search doesn't work and freezes my terminal.
**A**: Try to run ``stty -ixon`` in your terminal to disable flow control.
**Q**: The ``Meta``-key doesn't work.
**A**: For some terminals you have to enable the Alt-key to act as meta key, but you
can also type ``Escape`` before any key instead.
Alternatives
************
- `BPython <http://bpython-interpreter.org/downloads.html>`_
- `IPython <https://ipython.org/>`_
If you find another alternative, you can create an issue and we'll list it
here. If you find a nice feature somewhere that is missing in ``ptpython``,
also create a GitHub issue and maybe we'll implement it.
Special thanks to
*****************
- `Pygments <http://pygments.org/>`_: Syntax highlighter.
- `Jedi <http://jedi.jedidjah.ch/en/latest/>`_: Autocompletion library.
- `wcwidth <https://github.com/jquast/wcwidth>`_: Determine columns needed for a wide characters.
- `prompt_toolkit <http://github.com/jonathanslenders/python-prompt-toolkit>`_ for the interface.
.. |Build Status| image:: https://api.travis-ci.org/prompt-toolkit/ptpython.svg?branch=master
:target: https://travis-ci.org/prompt-toolkit/ptpython#
.. |License| image:: https://img.shields.io/github/license/prompt-toolkit/ptpython.svg
:target: https://github.com/prompt-toolkit/ptpython/blob/master/LICENSE
.. |PyPI| image:: https://pypip.in/version/ptpython/badge.svg
:target: https://pypi.python.org/pypi/ptpython/
:alt: Latest Version
Platform: UNKNOWN
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python
Requires-Python: >=3.6
Provides-Extra: ptipython
Provides-Extra: all

View file

@ -0,0 +1,54 @@
.gitignore
CHANGELOG
LICENSE
MANIFEST.in
README.rst
pyproject.toml
setup.cfg
setup.py
docs/images/example1.png
docs/images/file-completion.png
docs/images/ipython.png
docs/images/multiline.png
docs/images/ptpython-history-help.png
docs/images/ptpython-menu.png
docs/images/ptpython.png
docs/images/validation.png
docs/images/windows.png
examples/asyncio-python-embed.py
examples/asyncio-ssh-python-embed.py
examples/python-embed-with-custom-prompt.py
examples/python-embed.py
examples/python-input.py
examples/ssh-and-telnet-embed.py
examples/ptpython_config/config.py
examples/test-cases/ptpython-in-other-thread.py
ptpython/__init__.py
ptpython/__main__.py
ptpython/completer.py
ptpython/eventloop.py
ptpython/filters.py
ptpython/history_browser.py
ptpython/ipython.py
ptpython/key_bindings.py
ptpython/layout.py
ptpython/lexer.py
ptpython/prompt_style.py
ptpython/python_input.py
ptpython/repl.py
ptpython/signatures.py
ptpython/style.py
ptpython/utils.py
ptpython/validator.py
ptpython.egg-info/PKG-INFO
ptpython.egg-info/SOURCES.txt
ptpython.egg-info/dependency_links.txt
ptpython.egg-info/entry_points.txt
ptpython.egg-info/requires.txt
ptpython.egg-info/top_level.txt
ptpython/contrib/__init__.py
ptpython/contrib/asyncssh_repl.py
ptpython/entry_points/__init__.py
ptpython/entry_points/run_ptipython.py
ptpython/entry_points/run_ptpython.py
tests/run_tests.py

View file

@ -0,0 +1 @@

View file

@ -0,0 +1,8 @@
[console_scripts]
ptipython = ptpython.entry_points.run_ptipython:run
ptipython3 = ptpython.entry_points.run_ptipython:run
ptipython3.9 = ptpython.entry_points.run_ptipython:run
ptpython = ptpython.entry_points.run_ptpython:run
ptpython3 = ptpython.entry_points.run_ptpython:run
ptpython3.9 = ptpython.entry_points.run_ptpython:run

View file

@ -0,0 +1,13 @@
appdirs
jedi>=0.16.0
prompt_toolkit<3.1.0,>=3.0.18
pygments
[:python_version < "3.8"]
importlib_metadata
[all]
black
[ptipython]
ipython

View file

@ -0,0 +1 @@
ptpython

View file

@ -505,6 +505,10 @@ class DictionaryCompleter(Completer):
display=f"[{k_repr}]", display=f"[{k_repr}]",
display_meta=abbr_meta(self._do_repr(result[k])), display_meta=abbr_meta(self._do_repr(result[k])),
) )
except KeyError:
# `result[k]` lookup failed. Trying to complete
# broken object.
pass
except ReprFailedError: except ReprFailedError:
pass pass
@ -521,6 +525,10 @@ class DictionaryCompleter(Completer):
display=f"[{k_repr}]", display=f"[{k_repr}]",
display_meta=abbr_meta(self._do_repr(result[k])), display_meta=abbr_meta(self._do_repr(result[k])),
) )
except KeyError:
# `result[k]` lookup failed. Trying to complete
# broken object.
pass
except ReprFailedError: except ReprFailedError:
pass pass
@ -545,9 +553,8 @@ class DictionaryCompleter(Completer):
def get_suffix(name: str) -> str: def get_suffix(name: str) -> str:
try: try:
obj = getattr(result, name, None) obj = getattr(result, name, None)
if inspect.isfunction(obj): if inspect.isfunction(obj) or inspect.ismethod(obj):
return "()" return "()"
if isinstance(obj, dict): if isinstance(obj, dict):
return "{}" return "{}"
if isinstance(obj, (list, tuple)): if isinstance(obj, (list, tuple)):

View file

View file

@ -135,6 +135,12 @@ class PythonRepl(PythonInput):
text = self.read() text = self.read()
except EOFError: except EOFError:
return return
except BaseException as e:
# Something went wrong while reading input.
# (E.g., a bug in the completer that propagates. Don't
# crash the REPL.)
traceback.print_exc()
continue
# Run it; display the result (or errors if applicable). # Run it; display the result (or errors if applicable).
self.run_and_show_expression(text) self.run_and_show_expression(text)
@ -192,6 +198,12 @@ class PythonRepl(PythonInput):
text = await loop.run_in_executor(None, self.read) text = await loop.run_in_executor(None, self.read)
except EOFError: except EOFError:
return return
except BaseException:
# Something went wrong while reading input.
# (E.g., a bug in the completer that propagates. Don't
# crash the REPL.)
traceback.print_exc()
continue
# Eval. # Eval.
await self.run_and_show_expression_async(text) await self.run_and_show_expression_async(text)
@ -333,6 +345,9 @@ class PythonRepl(PythonInput):
# not used. # not used.
try: try:
import black import black
if not hasattr(black, "Mode"):
raise ImportError
except ImportError: except ImportError:
pass # no Black package in your installation pass # no Black package in your installation
else: else:

View file

@ -1,2 +1,7 @@
[bdist_wheel] [bdist_wheel]
universal=1 universal = 1
[egg_info]
tag_build =
tag_date = 0

View file

@ -11,7 +11,7 @@ with open(os.path.join(os.path.dirname(__file__), "README.rst")) as f:
setup( setup(
name="ptpython", name="ptpython",
author="Jonathan Slenders", author="Jonathan Slenders",
version="3.0.19", version="3.0.20",
url="https://github.com/prompt-toolkit/ptpython", url="https://github.com/prompt-toolkit/ptpython",
description="Python REPL build on top of prompt_toolkit", description="Python REPL build on top of prompt_toolkit",
long_description=long_description, long_description=long_description,