prompt-toolkit / prompt-toolkit/python-prompt-toolkit

KeyError in cache.py prompt_toolkit 2.09

Open
#945 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Python
Stars
10.6k
Forks
815
PR merge metrics
No merged PRs in 30d

Description

While attempting to create the repl example in this Pycon video,
https://www.youtube.com/watch?v=hJhZhLg3obk&t=776s

The repl example is at 26:19 in the above video
an exception is thrown when I pass a lexer in the prompt() call.

I'm running Python 3.6.6 from the Anaconda distribution on Windows 7 64-bit Professional.
simple_repl.zip

python simple_repl.py
Traceback (most recent call last):
File "C:\Users\MyUserName\AppData\Local\Continuum\miniconda3\envs\py36sci\lib\site-packages\prompt_toolkit\cache.py", line 34, in get
return self._data[key]
KeyError: ('', 47623800)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "simple_repl.py", line 14, in
lexer=SqlLexer,
File "C:\Users\MyUserName\AppData\Local\Continuum\miniconda3\envs\py36sci\lib\site-packages\prompt_toolkit\shortcuts\prompt.py", line 845, in prompt
return session.prompt(*a, **kw)
File "C:\Users\MyUserName\AppData\Local\Continuum\miniconda3\envs\py36sci\lib\site-packages\prompt_toolkit\shortcuts\prompt.py", line 738, in prompt
return run_sync()
File "C:\Users\MyUserName\AppData\Local\Continuum\miniconda3\envs\py36sci\lib\site-packages\prompt_toolkit\shortcuts\prompt.py", line 727, in run_sync
return self.app.run(inputhook=self.inputhook, pre_run=pre_run2)
File "C:\Users\MyUserName\AppData\Local\Continuum\miniconda3\envs\py36sci\lib\site-packages\prompt_toolkit\application\application.py", line 709, in run
return run()
File "C:\Users\MyUserName\AppData\Local\Continuum\miniconda3\envs\py36sci\lib\site-packages\prompt_toolkit\application\application.py", line 683, in run
return f.result()
File "C:\Users\MyUserName\AppData\Local\Continuum\miniconda3\envs\py36sci\lib\site-packages\prompt_toolkit\eventloop\future.py", line 149, in result
raise self._exception
File "C:\Users\MyUserName\AppData\Local\Continuum\miniconda3\envs\py36sci\lib\site-packages\prompt_toolkit\eventloop\coroutine.py", line 90, in step_next
new_f = coroutine.throw(exc)
File "C:\Users\MyUserName\AppData\Local\Continuum\miniconda3\envs\py36sci\lib\site-packages\prompt_toolkit\application\application.py", line 658, in _run_async2
result = yield f
File "C:\Users\MyUserName\AppData\Local\Continuum\miniconda3\envs\py36sci\lib\site-packages\prompt_toolkit\eventloop\coroutine.py", line 86, in step_next
new_f = coroutine.send(None)
File "C:\Users\MyUserName\AppData\Local\Continuum\miniconda3\envs\py36sci\lib\site-packages\prompt_toolkit\application\application.py", line 601, in _run_async
self._redraw()
File "C:\Users\MyUserName\AppData\Local\Continuum\miniconda3\envs\py36sci\lib\site-packages\prompt_toolkit\application\application.py", line 444, in _redraw
self.renderer.render(self, self.layout)
File "C:\Users\MyUserName\AppData\Local\Continuum\miniconda3\envs\py36sci\lib\site-packages\prompt_toolkit\renderer.py", line 546, in render
layout.container.preferred_height(size.columns, size.rows).preferred)
File "C:\Users\MyUserName\AppData\Local\Continuum\miniconda3\envs\py36sci\lib\site-packages\prompt_toolkit\layout\containers.py", line 245, in preferred_height
for c in self._all_children]
File "C:\Users\MyUserName\AppData\Local\Continuum\miniconda3\envs\py36sci\lib\site-packages\prompt_toolkit\layout\containers.py", line 245, in
for c in self._all_children]
File "C:\Users\MyUserName\AppData\Local\Continuum\miniconda3\envs\py36sci\lib\site-packages\prompt_toolkit\layout\containers.py", line 639, in preferred_height
return self.content.preferred_height(width, max_available_height)
File "C:\Users\MyUserName\AppData\Local\Continuum\miniconda3\envs\py36sci\lib\site-packages\prompt_toolkit\layout\containers.py", line 245, in preferred_height
for c in self._all_children]
File "C:\Users\MyUserName\AppData\Local\Continuum\miniconda3\envs\py36sci\lib\site-packages\prompt_toolkit\layout\containers.py", line 245, in
for c in self._all_children]
File "C:\Users\MyUserName\AppData\Local\Continuum\miniconda3\envs\py36sci\lib\site-packages\prompt_toolkit\layout\containers.py", line 2179, in preferred_height
return self.content.preferred_height(width, max_available_height)
File "C:\Users\MyUserName\AppData\Local\Continuum\miniconda3\envs\py36sci\lib\site-packages\prompt_toolkit\layout\containers.py", line 1362, in preferred_height
dont_extend=self.dont_extend_height())
File "C:\Users\MyUserName\AppData\Local\Continuum\miniconda3\envs\py36sci\lib\site-packages\prompt_toolkit\layout\containers.py", line 1380, in _merge_dimensions
preferred = get_preferred()
File "C:\Users\MyUserName\AppData\Local\Continuum\miniconda3\envs\py36sci\lib\site-packages\prompt_toolkit\layout\containers.py", line 1357, in preferred_content_height
self.get_line_prefix)
File "C:\Users\MyUserName\AppData\Local\Continuum\miniconda3\envs\py36sci\lib\site-packages\prompt_toolkit\layout\controls.py", line 548, in preferred_height
content = self.create_content(width, None)
File "C:\Users\MyUserName\AppData\Local\Continuum\miniconda3\envs\py36sci\lib\site-packages\prompt_toolkit\layout\controls.py", line 667, in create_content
document, width, height)
File "C:\Users\MyUserName\AppData\Local\Continuum\miniconda3\envs\py36sci\lib\site-packages\prompt_toolkit\layout\controls.py", line 632, in _create_get_processed_line_func
return create_func()
File "C:\Users\MyUserName\AppData\Local\Continuum\miniconda3\envs\py36sci\lib\site-packages\prompt_toolkit\layout\controls.py", line 620, in create_func
get_line = self._get_formatted_text_for_line_func(document)
File "C:\Users\MyUserName\AppData\Local\Continuum\miniconda3\envs\py36sci\lib\site-packages\prompt_toolkit\layout\controls.py", line 577, in _get_formatted_text_for_line_func
return self._fragment_cache.get(key, get_formatted_text_for_line)
File "C:\Users\MyUserName\AppData\Local\Continuum\miniconda3\envs\py36sci\lib\site-packages\prompt_toolkit\cache.py", line 37, in get
value = getter_func()
File "C:\Users\MyUserName\AppData\Local\Continuum\miniconda3\envs\py36sci\lib\site-packages\prompt_toolkit\layout\controls.py", line 574, in get_formatted_text_for_line
return self.lexer.lex_document(document)
File "C:\Users\MyUserName\AppData\Local\Continuum\miniconda3\envs\py36sci\lib\site-packages\prompt_toolkit\lexers\base.py", line 73, in lex_document
assert isinstance(lexer, Lexer)
AssertionError

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Reproduce the attached simple_repl.py example first, then inspect prompt_toolkit/cache.py at get and lexers/base.py at lex_document, as identified in the traceback. Confirm the behavior when a lexer is passed to prompt(); done means the example no longer ends with the reported AssertionError.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
cli
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.