Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

AttributeError: can't set attribute #224

Open
pcoccoli opened this issue Feb 28, 2024 · 9 comments
Open

AttributeError: can't set attribute #224

pcoccoli opened this issue Feb 28, 2024 · 9 comments
Labels
bug Something isn't working

Comments

@pcoccoli
Copy link

Describe the bug
Unable to use any markdown file with fenced code blocks, like the terminal_ext example

To Reproduce

Steps to reproduce the behavior:

lookatme ~/Downloads/example.md

Expected behavior
Render the slides

Screenshots

Traceback (most recent call last):
  File "/home/pcoccoli/.pyenv/versions/gh392/lib/python3.9/site-packages/lookatme/__main__.py", line 169, in main
    pres.run()
  File "/home/pcoccoli/.pyenv/versions/gh392/lib/python3.9/site-packages/lookatme/pres.py", line 159, in run
    self.tui = lookatme.tui.create_tui(self, start_slide=start_slide)
  File "/home/pcoccoli/.pyenv/versions/gh392/lib/python3.9/site-packages/lookatme/tui.py", line 435, in create_tui
    tui = MarkdownTui(pres, start_slide)
  File "/home/pcoccoli/.pyenv/versions/gh392/lib/python3.9/site-packages/lookatme/tui.py", line 242, in __init__
    self.prep_pres(self.pres, start_idx)
  File "/home/pcoccoli/.pyenv/versions/gh392/lib/python3.9/site-packages/lookatme/tui.py", line 255, in prep_pres
    self.update()
  File "/home/pcoccoli/.pyenv/versions/gh392/lib/python3.9/site-packages/lookatme/tui.py", line 370, in update
    self.update_body()
  File "/home/pcoccoli/.pyenv/versions/gh392/lib/python3.9/site-packages/lookatme/tui.py", line 339, in update_body
    rendered = self.slide_renderer.render_slide(self.curr_slide)
  File "/home/pcoccoli/.pyenv/versions/gh392/lib/python3.9/site-packages/lookatme/tui.py", line 77, in render_slide
    raise res
  File "/home/pcoccoli/.pyenv/versions/gh392/lib/python3.9/site-packages/lookatme/tui.py", line 101, in run
    res = self.do_render(to_render, slide_num)
  File "/home/pcoccoli/.pyenv/versions/gh392/lib/python3.9/site-packages/lookatme/tui.py", line 153, in do_render
    self._render_tokens(tokens)
  File "/home/pcoccoli/.pyenv/versions/gh392/lib/python3.9/site-packages/lookatme/tui.py", line 196, in _render_tokens
    res = render_token(token, stack[-1], stack, self.loop)
  File "/home/pcoccoli/.pyenv/versions/gh392/lib/python3.9/site-packages/lookatme/contrib/__init__.py", line 120, in inner
    return fn(*args, **kwargs)
  File "/home/pcoccoli/.pyenv/versions/gh392/lib/python3.9/site-packages/lookatme/render/markdown_block.py", line 629, in render_code
    res = pygments_render.render_text(text, lang=lang)
  File "/home/pcoccoli/.pyenv/versions/gh392/lib/python3.9/site-packages/lookatme/render/pygments.py", line 72, in render_text
    x[0].background = style_bg
AttributeError: can't set attribute

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/pcoccoli/.pyenv/versions/gh392/bin/lookatme", line 8, in <module>
    sys.exit(main())
  File "/home/pcoccoli/.pyenv/versions/gh392/lib/python3.9/site-packages/click/core.py", line 1130, in __call__
    return self.main(*args, **kwargs)
  File "/home/pcoccoli/.pyenv/versions/gh392/lib/python3.9/site-packages/click/core.py", line 1055, in main
    rv = self.invoke(ctx)
  File "/home/pcoccoli/.pyenv/versions/gh392/lib/python3.9/site-packages/click/core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/home/pcoccoli/.pyenv/versions/gh392/lib/python3.9/site-packages/click/core.py", line 760, in invoke
    return __callback(*args, **kwargs)
  File "/home/pcoccoli/.pyenv/versions/gh392/lib/python3.9/site-packages/lookatme/__main__.py", line 171, in main
    number = pres.get_tui().curr_slide.number + 1
  File "/home/pcoccoli/.pyenv/versions/gh392/lib/python3.9/site-packages/lookatme/pres.py", line 164, in get_tui
    raise ValueError(
ValueError: Tui has not been set, has the presentation been run yet?

Environment (please complete the following information):

  • OS: RHEL 8.9
  • Lookatme Version [e.g. lookatme --version]: lookatme, version 2.5.5

Additional context
Pygments==2.17.2

@pcoccoli pcoccoli added the bug Something isn't working label Feb 28, 2024
@reinerh
Copy link

reinerh commented Mar 25, 2024

Same error when building the Debian package and running tests:

I: pybuild base:305: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_lookatme/build; python3.11 -m pytest tests
============================= test session starts ==============================
platform linux -- Python 3.11.8, pytest-8.1.1, pluggy-1.4.0
rootdir: /<<PKGBUILDDIR>>
plugins: mock-3.12.0
collected 39 items

tests/test_cli.py .....                                                  [ 12%]
tests/test_contrib.py .                                                  [ 15%]
tests/test_file_loader.py FFFF                                           [ 25%]
tests/test_markdown.py .......FFFF                                       [ 53%]
tests/test_parse.py ......                                               [ 69%]
tests/test_schemas.py ......                                             [ 84%]
tests/test_table.py ...                                                  [ 92%]
tests/test_tutorial.py ...                                               [100%]

=================================== FAILURES ===================================
_______________________________ test_file_loader _______________________________

tmpdir = local('/tmp/pytest-of-reiner/pytest-0/test_file_loader0')
mocker = <pytest_mock.plugin.MockerFixture object at 0x7f486fb31e10>

    def test_file_loader(tmpdir, mocker):
        """Test the built-in file loader extension
        """
        tmppath = tmpdir.join("test.py")
        tmppath.write("print('hello')")

>       rendered = render_markdown(f"""
    ```file
    path: {tmppath}
    relative: false
    ```
        """)

tests/test_file_loader.py:42:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tests/utils.py:44: in render_markdown
    contents = renderer.render_slide(slides[0], force=True)
lookatme/tui.py:77: in render_slide
    raise res
lookatme/tui.py:101: in run
    res = self.do_render(to_render, slide_num)
lookatme/tui.py:153: in do_render
    self._render_tokens(tokens)
lookatme/tui.py:196: in _render_tokens
    res = render_token(token, stack[-1], stack, self.loop)
lookatme/contrib/__init__.py:120: in inner
    return fn(*args, **kwargs)
lookatme/render/markdown_block.py:629: in render_code
    res = pygments_render.render_text(text, lang=lang)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

text = b"print('hello')", lang = 'auto', style_name = 'monokai', plain = False

    def render_text(text, lang="text", style_name=None, plain=False):
        """Render the provided text with the pygments renderer
        """
        if style_name is None:
            style_name = config.get_style()["style"]

        lexer = get_lexer(lang)
        formatter, style_bg = get_formatter(style_name)

        start = time.time()
        code_tokens = lexer.get_tokens(text)
        config.get_log().debug(
            f"Took {time.time()-start}s to render {len(text)} bytes")

        markup = []
        for x in formatter.formatgenerator(code_tokens):
            if style_bg:
>               x[0].background = style_bg
E               AttributeError: property 'background' of 'AttrSpec' object has no setter

lookatme/render/pygments.py:72: AttributeError
_______________________ test_file_loader_with_transform ________________________

tmpdir = local('/tmp/pytest-of-reiner/pytest-0/test_file_loader_with_transfor0')
mocker = <pytest_mock.plugin.MockerFixture object at 0x7f486e7305d0>

    def test_file_loader_with_transform(tmpdir, mocker):
        """Test the built-in file loader extension
        """
        tmppath = tmpdir.join("test.py")
        tmppath.write("""
    Hello
    Apples2
    there
    Apples3
    there
    Apples1
    """)

>       rendered = render_markdown(f"""
    ```file
    path: {tmppath}
    relative: false
    transform: "grep -i apples | sort"
    ```
        """)

tests/test_file_loader.py:72:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tests/utils.py:44: in render_markdown
    contents = renderer.render_slide(slides[0], force=True)
lookatme/tui.py:77: in render_slide
    raise res
lookatme/tui.py:101: in run
    res = self.do_render(to_render, slide_num)
lookatme/tui.py:153: in do_render
    self._render_tokens(tokens)
lookatme/tui.py:196: in _render_tokens
    res = render_token(token, stack[-1], stack, self.loop)
lookatme/contrib/__init__.py:120: in inner
    return fn(*args, **kwargs)
lookatme/render/markdown_block.py:629: in render_code
    res = pygments_render.render_text(text, lang=lang)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

text = b'Apples1\nApples2\nApples3\n', lang = 'auto', style_name = 'monokai'
plain = False

    def render_text(text, lang="text", style_name=None, plain=False):
        """Render the provided text with the pygments renderer
        """
        if style_name is None:
            style_name = config.get_style()["style"]

        lexer = get_lexer(lang)
        formatter, style_bg = get_formatter(style_name)

        start = time.time()
        code_tokens = lexer.get_tokens(text)
        config.get_log().debug(
            f"Took {time.time()-start}s to render {len(text)} bytes")

        markup = []
        for x in formatter.formatgenerator(code_tokens):
            if style_bg:
>               x[0].background = style_bg
E               AttributeError: property 'background' of 'AttrSpec' object has no setter

lookatme/render/pygments.py:72: AttributeError
__________________________ test_file_loader_relative ___________________________

tmpdir = local('/tmp/pytest-of-reiner/pytest-0/test_file_loader_relative0')
mocker = <pytest_mock.plugin.MockerFixture object at 0x7f486dd34350>

    def test_file_loader_relative(tmpdir, mocker):
        """Test the built-in file loader extension
        """
        tmppath = tmpdir.join("test.py")
        tmppath.write("print('hello')")

>       rendered = render_markdown("""
    ```file
    path: test.py
    relative: true
    ```
        """)

tests/test_file_loader.py:98:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tests/utils.py:44: in render_markdown
    contents = renderer.render_slide(slides[0], force=True)
lookatme/tui.py:77: in render_slide
    raise res
lookatme/tui.py:101: in run
    res = self.do_render(to_render, slide_num)
lookatme/tui.py:153: in do_render
    self._render_tokens(tokens)
lookatme/tui.py:196: in _render_tokens
    res = render_token(token, stack[-1], stack, self.loop)
lookatme/contrib/__init__.py:120: in inner
    return fn(*args, **kwargs)
lookatme/render/markdown_block.py:629: in render_code
    res = pygments_render.render_text(text, lang=lang)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

text = b"print('hello')", lang = 'auto', style_name = 'monokai', plain = False

    def render_text(text, lang="text", style_name=None, plain=False):
        """Render the provided text with the pygments renderer
        """
        if style_name is None:
            style_name = config.get_style()["style"]

        lexer = get_lexer(lang)
        formatter, style_bg = get_formatter(style_name)

        start = time.time()
        code_tokens = lexer.get_tokens(text)
        config.get_log().debug(
            f"Took {time.time()-start}s to render {len(text)} bytes")

        markup = []
        for x in formatter.formatgenerator(code_tokens):
            if style_bg:
>               x[0].background = style_bg
E               AttributeError: property 'background' of 'AttrSpec' object has no setter

lookatme/render/pygments.py:72: AttributeError
__________________________ test_file_loader_not_found __________________________

mocker = <pytest_mock.plugin.MockerFixture object at 0x7f486dd60d10>

    def test_file_loader_not_found(mocker):
        """Test the built-in file loader extension
        """
>       rendered = render_markdown("""
    ```file
    path: does_not_exist.py
    ```
        """)

tests/test_file_loader.py:118:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tests/utils.py:44: in render_markdown
    contents = renderer.render_slide(slides[0], force=True)
lookatme/tui.py:77: in render_slide
    raise res
lookatme/tui.py:101: in run
    res = self.do_render(to_render, slide_num)
lookatme/tui.py:153: in do_render
    self._render_tokens(tokens)
lookatme/tui.py:196: in _render_tokens
    res = render_token(token, stack[-1], stack, self.loop)
lookatme/contrib/__init__.py:120: in inner
    return fn(*args, **kwargs)
lookatme/render/markdown_block.py:629: in render_code
    res = pygments_render.render_text(text, lang=lang)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

text = 'File not found', lang = 'text', style_name = 'monokai', plain = False

    def render_text(text, lang="text", style_name=None, plain=False):
        """Render the provided text with the pygments renderer
        """
        if style_name is None:
            style_name = config.get_style()["style"]

        lexer = get_lexer(lang)
        formatter, style_bg = get_formatter(style_name)

        start = time.time()
        code_tokens = lexer.get_tokens(text)
        config.get_log().debug(
            f"Took {time.time()-start}s to render {len(text)} bytes")

        markup = []
        for x in formatter.formatgenerator(code_tokens):
            if style_bg:
>               x[0].background = style_bg
E               AttributeError: property 'background' of 'AttrSpec' object has no setter

lookatme/render/pygments.py:72: AttributeError
__________________________________ test_code ___________________________________

tmpdir = local('/tmp/pytest-of-reiner/pytest-0/test_code0')
mocker = <pytest_mock.plugin.MockerFixture object at 0x7f486f243510>

    def test_code(tmpdir, mocker):
        """Test code block rendering
        """
        setup_lookatme(tmpdir, mocker, style={
            "style": "monokai",
        })

>       rendered = render_markdown("""
    ```python
    def some_fn(*args, **kargs):
        pass```
    """)

tests/test_markdown.py:249:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tests/utils.py:44: in render_markdown
    contents = renderer.render_slide(slides[0], force=True)
lookatme/tui.py:77: in render_slide
    raise res
lookatme/tui.py:101: in run
    res = self.do_render(to_render, slide_num)
lookatme/tui.py:153: in do_render
    self._render_tokens(tokens)
lookatme/tui.py:196: in _render_tokens
    res = render_token(token, stack[-1], stack, self.loop)
lookatme/contrib/__init__.py:120: in inner
    return fn(*args, **kwargs)
lookatme/render/markdown_block.py:629: in render_code
    res = pygments_render.render_text(text, lang=lang)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

text = 'def some_fn(*args, **kargs):\n    pass', lang = 'python'
style_name = 'monokai', plain = False

    def render_text(text, lang="text", style_name=None, plain=False):
        """Render the provided text with the pygments renderer
        """
        if style_name is None:
            style_name = config.get_style()["style"]

        lexer = get_lexer(lang)
        formatter, style_bg = get_formatter(style_name)

        start = time.time()
        code_tokens = lexer.get_tokens(text)
        config.get_log().debug(
            f"Took {time.time()-start}s to render {len(text)} bytes")

        markup = []
        for x in formatter.formatgenerator(code_tokens):
            if style_bg:
>               x[0].background = style_bg
E               AttributeError: property 'background' of 'AttrSpec' object has no setter

lookatme/render/pygments.py:72: AttributeError
_____________________________ test_empty_codeblock _____________________________

tmpdir = local('/tmp/pytest-of-reiner/pytest-0/test_empty_codeblock0')
mocker = <pytest_mock.plugin.MockerFixture object at 0x7f486dd5d350>

    def test_empty_codeblock(tmpdir, mocker):
        """Test that empty code blocks render correctly
        """
        setup_lookatme(tmpdir, mocker, style={
            "style": "monokai",
        })

>       render_markdown("""
    ```python

    ```""")

tests/test_markdown.py:271:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tests/utils.py:44: in render_markdown
    contents = renderer.render_slide(slides[0], force=True)
lookatme/tui.py:77: in render_slide
    raise res
lookatme/tui.py:101: in run
    res = self.do_render(to_render, slide_num)
lookatme/tui.py:153: in do_render
    self._render_tokens(tokens)
lookatme/tui.py:196: in _render_tokens
    res = render_token(token, stack[-1], stack, self.loop)
lookatme/contrib/__init__.py:120: in inner
    return fn(*args, **kwargs)
lookatme/render/markdown_block.py:629: in render_code
    res = pygments_render.render_text(text, lang=lang)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

text = '\n', lang = 'python', style_name = 'monokai', plain = False

    def render_text(text, lang="text", style_name=None, plain=False):
        """Render the provided text with the pygments renderer
        """
        if style_name is None:
            style_name = config.get_style()["style"]

        lexer = get_lexer(lang)
        formatter, style_bg = get_formatter(style_name)

        start = time.time()
        code_tokens = lexer.get_tokens(text)
        config.get_log().debug(
            f"Took {time.time()-start}s to render {len(text)} bytes")

        markup = []
        for x in formatter.formatgenerator(code_tokens):
            if style_bg:
>               x[0].background = style_bg
E               AttributeError: property 'background' of 'AttrSpec' object has no setter

lookatme/render/pygments.py:72: AttributeError
________________________________ test_code_yaml ________________________________

tmpdir = local('/tmp/pytest-of-reiner/pytest-0/test_code_yaml0')
mocker = <pytest_mock.plugin.MockerFixture object at 0x7f486dda4ed0>

    def test_code_yaml(tmpdir, mocker):
        """Test code block rendering with yaml language
        """
        setup_lookatme(tmpdir, mocker, style={
            "style": "monokai",
        })

>       rendered = render_markdown("""
    ```yaml
    test: a value
    test2: "another value"
    array:
      - item1
      - item2
      - item3
    ```""")

tests/test_markdown.py:284:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tests/utils.py:44: in render_markdown
    contents = renderer.render_slide(slides[0], force=True)
lookatme/tui.py:77: in render_slide
    raise res
lookatme/tui.py:101: in run
    res = self.do_render(to_render, slide_num)
lookatme/tui.py:153: in do_render
    self._render_tokens(tokens)
lookatme/tui.py:196: in _render_tokens
    res = render_token(token, stack[-1], stack, self.loop)
lookatme/contrib/__init__.py:120: in inner
    return fn(*args, **kwargs)
lookatme/render/markdown_block.py:629: in render_code
    res = pygments_render.render_text(text, lang=lang)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

text = 'test: a value\ntest2: "another value"\narray:\n  - item1\n  - item2\n  - item3'
lang = 'yaml', style_name = 'monokai', plain = False

    def render_text(text, lang="text", style_name=None, plain=False):
        """Render the provided text with the pygments renderer
        """
        if style_name is None:
            style_name = config.get_style()["style"]

        lexer = get_lexer(lang)
        formatter, style_bg = get_formatter(style_name)

        start = time.time()
        code_tokens = lexer.get_tokens(text)
        config.get_log().debug(
            f"Took {time.time()-start}s to render {len(text)} bytes")

        markup = []
        for x in formatter.formatgenerator(code_tokens):
            if style_bg:
>               x[0].background = style_bg
E               AttributeError: property 'background' of 'AttrSpec' object has no setter

lookatme/render/pygments.py:72: AttributeError
_________________________________ test_inline __________________________________

tmpdir = local('/tmp/pytest-of-reiner/pytest-0/test_inline0')
mocker = <pytest_mock.plugin.MockerFixture object at 0x7f486dd09750>

    def test_inline(tmpdir, mocker):
        """Test inline markdown
        """
        setup_lookatme(tmpdir, mocker, style={
            "style": "monokai",
            "link": {
                "fg": "underline",
                "bg": "default",
            },
        })

        rendered = render_markdown("*emphasis*")
        assert rendered[1][0][0].foreground == "default,italics"
        assert row_text(rendered[1]).strip() == b"emphasis"

        rendered = render_markdown("**emphasis**")
        assert rendered[1][0][0].foreground == "default,underline"
        assert row_text(rendered[1]).strip() == b"emphasis"

        rendered = render_markdown("_emphasis_")
        assert rendered[1][0][0].foreground == "default,italics"
        assert row_text(rendered[1]).strip() == b"emphasis"

        rendered = render_markdown("__emphasis__")
        assert rendered[1][0][0].foreground == "default,underline"
        assert row_text(rendered[1]).strip() == b"emphasis"

>       rendered = render_markdown("`inline code`")

tests/test_markdown.py:334:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tests/utils.py:44: in render_markdown
    contents = renderer.render_slide(slides[0], force=True)
lookatme/tui.py:77: in render_slide
    raise res
lookatme/tui.py:101: in run
    res = self.do_render(to_render, slide_num)
lookatme/tui.py:153: in do_render
    self._render_tokens(tokens)
lookatme/tui.py:196: in _render_tokens
    res = render_token(token, stack[-1], stack, self.loop)
lookatme/contrib/__init__.py:120: in inner
    return fn(*args, **kwargs)
lookatme/render/markdown_block.py:493: in render_paragraph
    res = render_text(token, body, stack, loop)
lookatme/contrib/__init__.py:120: in inner
    return fn(*args, **kwargs)
lookatme/render/markdown_block.py:448: in render_text
    res = inline_lexer.output(text)
/usr/lib/python3/dist-packages/mistune0.py:585: in output
    ret = manipulate(text)
/usr/lib/python3/dist-packages/mistune0.py:579: in manipulate
    out = getattr(self, 'output_%s' % key)(m)
/usr/lib/python3/dist-packages/mistune0.py:680: in output_code
    return self.renderer.codespan(text)
lookatme/render/markdown_inline.py:24: in inner
    return fn(text, styles)
lookatme/contrib/__init__.py:120: in inner
    return fn(*args, **kwargs)
lookatme/render/markdown_inline.py:238: in codespan
    res = pygments_render.render_text(" " + text + " ", plain=True)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

text = ' inline code ', lang = 'text', style_name = 'monokai', plain = True

    def render_text(text, lang="text", style_name=None, plain=False):
        """Render the provided text with the pygments renderer
        """
        if style_name is None:
            style_name = config.get_style()["style"]

        lexer = get_lexer(lang)
        formatter, style_bg = get_formatter(style_name)

        start = time.time()
        code_tokens = lexer.get_tokens(text)
        config.get_log().debug(
            f"Took {time.time()-start}s to render {len(text)} bytes")

        markup = []
        for x in formatter.formatgenerator(code_tokens):
            if style_bg:
>               x[0].background = style_bg
E               AttributeError: property 'background' of 'AttrSpec' object has no setter

lookatme/render/pygments.py:72: AttributeError
=============================== warnings summary ===============================
.pybuild/cpython3_3.11_lookatme/build/tests/test_file_loader.py::test_file_loader
  /usr/lib/python3.11/inspect.py:992: DeprecationWarning: urwid.lcd_display is moved to urwid.display.lcd
    if ismodule(module) and hasattr(module, '__file__'):

.pybuild/cpython3_3.11_lookatme/build/tests/test_file_loader.py::test_file_loader
  /usr/lib/python3.11/inspect.py:993: DeprecationWarning: urwid.lcd_display is moved to urwid.display.lcd
    f = module.__file__

.pybuild/cpython3_3.11_lookatme/build/tests/test_file_loader.py::test_file_loader
  /usr/lib/python3.11/inspect.py:899: DeprecationWarning: urwid.lcd_display is moved to urwid.display.lcd
    if getattr(object, '__file__', None):

.pybuild/cpython3_3.11_lookatme/build/tests/test_file_loader.py::test_file_loader
  /usr/lib/python3.11/inspect.py:900: DeprecationWarning: urwid.lcd_display is moved to urwid.display.lcd
    return object.__file__

.pybuild/cpython3_3.11_lookatme/build/tests/test_file_loader.py::test_file_loader
  /usr/lib/python3.11/inspect.py:992: DeprecationWarning: urwid.html_fragment is moved to urwid.display.html_fragment
    if ismodule(module) and hasattr(module, '__file__'):

.pybuild/cpython3_3.11_lookatme/build/tests/test_file_loader.py::test_file_loader
  /usr/lib/python3.11/inspect.py:993: DeprecationWarning: urwid.html_fragment is moved to urwid.display.html_fragment
    f = module.__file__

.pybuild/cpython3_3.11_lookatme/build/tests/test_file_loader.py::test_file_loader
  /usr/lib/python3.11/inspect.py:899: DeprecationWarning: urwid.html_fragment is moved to urwid.display.html_fragment
    if getattr(object, '__file__', None):

.pybuild/cpython3_3.11_lookatme/build/tests/test_file_loader.py::test_file_loader
  /usr/lib/python3.11/inspect.py:900: DeprecationWarning: urwid.html_fragment is moved to urwid.display.html_fragment
    return object.__file__

.pybuild/cpython3_3.11_lookatme/build/tests/test_file_loader.py::test_file_loader
  /usr/lib/python3.11/inspect.py:992: DeprecationWarning: urwid.web_display is moved to urwid.display.web
    if ismodule(module) and hasattr(module, '__file__'):

.pybuild/cpython3_3.11_lookatme/build/tests/test_file_loader.py::test_file_loader
  /usr/lib/python3.11/inspect.py:993: DeprecationWarning: urwid.web_display is moved to urwid.display.web
    f = module.__file__

.pybuild/cpython3_3.11_lookatme/build/tests/test_file_loader.py::test_file_loader
  /usr/lib/python3.11/inspect.py:899: DeprecationWarning: urwid.web_display is moved to urwid.display.web
    if getattr(object, '__file__', None):

.pybuild/cpython3_3.11_lookatme/build/tests/test_file_loader.py::test_file_loader
  /usr/lib/python3.11/inspect.py:900: DeprecationWarning: urwid.web_display is moved to urwid.display.web
    return object.__file__

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
=========================== short test summary info ============================
FAILED tests/test_file_loader.py::test_file_loader - AttributeError: property...
FAILED tests/test_file_loader.py::test_file_loader_with_transform - Attribute...
FAILED tests/test_file_loader.py::test_file_loader_relative - AttributeError:...
FAILED tests/test_file_loader.py::test_file_loader_not_found - AttributeError...
FAILED tests/test_markdown.py::test_code - AttributeError: property 'backgrou...
FAILED tests/test_markdown.py::test_empty_codeblock - AttributeError: propert...
FAILED tests/test_markdown.py::test_code_yaml - AttributeError: property 'bac...
FAILED tests/test_markdown.py::test_inline - AttributeError: property 'backgr...
================== 8 failed, 31 passed, 12 warnings in 0.41s ===================

@carbon-steel
Copy link

I'm also encountering this same problem on my Fedora machine when calling lookatme --tutorial

@sarojregmi200
Copy link

Same Here in my machine (Arch) I found the issue that solves the installation errors caused due to pyyaml but am facing this issue when i use lookatme --tutorial.

I installed it using the virtual environment.

@abz89
Copy link

abz89 commented Jun 11, 2024

I'm also encountering the same problem on my MacBook Pro M1 when running lookatme --tutorial

Traceback (most recent call last):
  File "/opt/homebrew/lib/python3.11/site-packages/lookatme/__main__.py", line 169, in main
    pres.run()
  File "/opt/homebrew/lib/python3.11/site-packages/lookatme/pres.py", line 159, in run
    self.tui = lookatme.tui.create_tui(self, start_slide=start_slide)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.11/site-packages/lookatme/tui.py", line 435, in create_tui
    tui = MarkdownTui(pres, start_slide)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.11/site-packages/lookatme/tui.py", line 242, in __init__
    self.prep_pres(self.pres, start_idx)
  File "/opt/homebrew/lib/python3.11/site-packages/lookatme/tui.py", line 255, in prep_pres
    self.update()
  File "/opt/homebrew/lib/python3.11/site-packages/lookatme/tui.py", line 370, in update
    self.update_body()
  File "/opt/homebrew/lib/python3.11/site-packages/lookatme/tui.py", line 339, in update_body
    rendered = self.slide_renderer.render_slide(self.curr_slide)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.11/site-packages/lookatme/tui.py", line 77, in render_slide
    raise res
  File "/opt/homebrew/lib/python3.11/site-packages/lookatme/tui.py", line 101, in run
    res = self.do_render(to_render, slide_num)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.11/site-packages/lookatme/tui.py", line 153, in do_render
    self._render_tokens(tokens)
  File "/opt/homebrew/lib/python3.11/site-packages/lookatme/tui.py", line 196, in _render_tokens
    res = render_token(token, stack[-1], stack, self.loop)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.11/site-packages/lookatme/contrib/__init__.py", line 120, in inner
    return fn(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.11/site-packages/lookatme/render/markdown_block.py", line 493, in render_paragraph
    res = render_text(token, body, stack, loop)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.11/site-packages/lookatme/contrib/__init__.py", line 120, in inner
    return fn(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.11/site-packages/lookatme/render/markdown_block.py", line 448, in render_text
    res = inline_lexer.output(text)
          ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.11/site-packages/mistune.py", line 585, in output
    ret = manipulate(text)
          ^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.11/site-packages/mistune.py", line 579, in manipulate
    out = getattr(self, 'output_%s' % key)(m)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.11/site-packages/mistune.py", line 680, in output_code
    return self.renderer.codespan(text)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.11/site-packages/lookatme/render/markdown_inline.py", line 24, in inner
    return fn(text, styles)
           ^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.11/site-packages/lookatme/contrib/__init__.py", line 120, in inner
    return fn(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.11/site-packages/lookatme/render/markdown_inline.py", line 238, in codespan
    res = pygments_render.render_text(" " + text + " ", plain=True)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.11/site-packages/lookatme/render/pygments.py", line 72, in render_text
    x[0].background = style_bg
    ^^^^^^^^^^^^^^^
AttributeError: property 'background' of 'AttrSpec' object has no setter

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/opt/homebrew/bin/lookatme", line 8, in <module>
    sys.exit(main())
             ^^^^^^
  File "/opt/homebrew/lib/python3.11/site-packages/click/core.py", line 1130, in __call__
    return self.main(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.11/site-packages/click/core.py", line 1055, in main
    rv = self.invoke(ctx)
         ^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.11/site-packages/click/core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.11/site-packages/click/core.py", line 760, in invoke
    return __callback(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.11/site-packages/lookatme/__main__.py", line 171, in main
    number = pres.get_tui().curr_slide.number + 1
             ^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.11/site-packages/lookatme/pres.py", line 164, in get_tui
    raise ValueError(
ValueError: Tui has not been set, has the presentation been run yet?  

Tried the simple presentation with a simple code block too with the following command lookatme test.md --debug

Error rendering slide 3: property 'background' of 'AttrSpec' object has no setter
See /var/folders/sk/7ym9q08j4lxc75gtyl0yyqjc0000gn/T/lookatme.log for traceback
Aborted! 

(The full log file is here)

@txemaotero
Copy link

In case it helps... I found a similar issue and I ended up uninstalling the packages (pip uninstall lookatme). Then I cloned the repo cd into it and checkout the last release candidate:
git checkout v3.0.0-rc5
Finally install that versions: pip install .
That worked and I was able to run lookatme --tutorial

@avegancafe
Copy link

avegancafe commented Jul 23, 2024

This might not help anyone, but I found I could "fix" this issue locally by,
In /Users/<user>/.local/share/virtualenvs/talks-x72ke6s9/lib/python3.11/site-packages/lookatme/render/pygments.py (or wherever your error is pointing you to pygments.py), whatever line has the following (looks like line 72 here in lookatme==v2.5.5)

x[0].background = style_bg

And change it t:

x[0]._AttrSpec__set_background(style_bg)

I'm not 100% sure this is how you're supposed to modify the background, but at least it gets around the error...?

@abz89
Copy link

abz89 commented Jul 25, 2024

I ended up installing newer lookatme by running the command pip install lookatme==3.0.0-rc5. So far, I haven't encountered any problems.
I haven't tried @avegancafe 's solution since my lookatme has already upgraded

@avegancafe
Copy link

I unfortunately don’t like the styling of the new version as much, I could also probably figure out how to style it the same but it's definitely different ahah

@Powerchu
Copy link

Powerchu commented Aug 25, 2024

hi @avegancafe @pcoccoli

Not sure how late am I to this but I have found a fix to this. I couldn't use @avegancafe solution of changing to _AttrSpec__set_background as my python complains that it is a read-only attribute

My solution:

go to venv\lib\python3.10\site-packages\urwid\display\common.py

line 798 has a property called background but no setter

I added the following:

@background.setter
    def background(self, background: str): 
        self.__set_background(background)

and it worked. Not sure if this can be resolved by getting a latest update to urwid

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

8 participants