brechtm / rinohtype

The Python document processor
http://www.mos6581.org/rinohtype
GNU Affero General Public License v3.0
498 stars 59 forks source link

Rinohtype crashes when processing a heading-only / empty body table #420

Closed th0mr closed 1 month ago

th0mr commented 9 months ago

Is there an existing issue for this?

Sphinx or rinoh output

Exception occurred:
  File "C:\Python38\lib\site-packages\rinoh\frontend_init.py", line 42, in __getattr_
    raise AttributeError('No such element: {} in {}'.format(name, self))
AttributeError: No such element: row in <rinoh.frontend.rst.nodes.TBody object at 0x0000020DFC059610>

Source files

Hi,

I'm having issues whenever rinohtype encounters a header-only table i.e. a table with a header but no rows.

The best way I could find to replicate this is with this csv-table.

RST Input:

.. csv-table::
            :header: "What", "A", "Fun", "Issue"
            :file: ./empty.csv

Where empty.csv is a completely empty file, i.e. no rows.

After experimenting, I found HTML can generate this type of table correctly. Which makes me think this could be a bug for rinoh.

HTML Output: image

I’ve had a look through the issues and cant see anything like this that has been raised before. Is there something I can do to avoid this, or is this a bug?

I've assembled a minimal example document with this table in here. minimal.zip

It was built with python -m sphinx -M rinoh . ./build

Versions

rinohtype 0.5.5 (in development)

Sphinx 5.3.0

Python 3.8.10 (tags/v3.8.10:3d8993a, May  3 2021, 11:48:03) [MSC v.1928 64 bit (AMD64)]

Windows-10-10.0.19045-SP0
brechtm commented 9 months ago

It is likely that this case is not handled. It should be easy to check whether the table body is missing (or empty, rather) and gracefully handle this situation. If you feel up to it, please provide a PR with a test in tests_regression/rst that triggers the issue and the fix.

th0mr commented 8 months ago

I'll have a look into this when I get some time this week 😄